SDC4 structural validator — thin wrapper over xmlschema with error classification
Project description
sdcvalidator
SDC4 structural validator — a thin wrapper over xmlschema with two-tier error classification.
What it does
- Validates XML instances against SDC4 XSD schemas
- Classifies errors into structural (Tier 1: reject) vs semantic (Tier 2: report)
- Checks SDC4 schema compliance (no
xsd:extension— onlyxsd:restriction) - Strict validation by default — catches invalid restriction derivations (wrong element names, type mismatches) at schema load time
- Converts between XML and JSON using schema-aware conversion
Install
pip install sdcvalidator
Or from source:
git clone https://github.com/SemanticDataCharter/sdcvalidator.git
cd sdcvalidator
pip install -e .
Python API
from sdcvalidator import SDC4Validator, ErrorTier
# Validate an XML instance (strict mode by default)
validator = SDC4Validator("my_schema.xsd")
result = validator.validate("my_instance.xml")
if result.is_valid:
print("Valid!")
else:
for err in result.structural_errors:
print(f"STRUCTURAL: {err.reason}")
for err in result.semantic_errors:
print(f"SEMANTIC: {err.reason}")
Validation modes
The validation parameter controls how strictly the XSD schema itself is checked when loaded:
'strict'(default) — RaisesXMLSchemaParseErrorif the schema contains invalid restriction derivations (e.g., element names that don't match the base type). This is the recommended mode.'lax'— Silently collects schema derivation errors without raising. Use only for pre-existing schemas known to have issues.'skip'— Skips schema-level validation entirely.
# Explicit lax mode for legacy schemas
validator = SDC4Validator("legacy_schema.xsd", validation='lax')
Schema compliance checking
from sdcvalidator import validate_sdc4_schema_compliance, assert_sdc4_schema_compliance
# Check if a schema uses xsd:extension (not allowed in SDC4)
is_valid, errors = validate_sdc4_schema_compliance("schema.xsd")
# Or raise an exception
assert_sdc4_schema_compliance("schema.xsd")
Error classification
from sdcvalidator import ErrorClassifier, ErrorTier
classifier = ErrorClassifier()
tier = classifier.classify(some_xmlschema_error)
# ErrorTier.STRUCTURAL or ErrorTier.SEMANTIC
XML/JSON conversion
from sdcvalidator.converters import xml_to_json, json_to_xml
# XML -> JSON (schema-aware)
data = xml_to_json("instance.xml", schema_path="schema.xsd")
# JSON -> XML
json_to_xml(data, "schema.xsd", "output.xml")
CLI
sdcvalidate — Validate XML against schema
# Basic validation
sdcvalidate schema.xsd instance.xml
# JSON output
sdcvalidate schema.xsd instance.xml --json
# Skip SDC4 compliance check
sdcvalidate --no-compliance-check schema.xsd instance.xml
Exit codes: 0 valid, 1 semantic errors only, 2 structural errors.
sdcvalidator-xml2json — Convert XML to JSON
sdcvalidator-xml2json instance.xml --schema schema.xsd
sdcvalidator-xml2json instance.xml -o output.json
sdcvalidator-json2xml — Convert JSON to XML
sdcvalidator-json2xml data.json schema.xsd -o output.xml
Two-Tier Error Classification
| Tier | Type | Examples | Action |
|---|---|---|---|
| 1 | Structural | Unknown elements, cardinality violations, wrong nesting | Reject |
| 2 | Semantic | Type errors, pattern violations, enumeration mismatches | Report |
SDC4 Schema Compliance
SDC4 data models must use xsd:restriction only — never xsd:extension. This enforces separation of structure (reference model) and semantics (data models), guaranteeing global interoperability.
The validator checks this by default and rejects schemas that violate this principle.
License
Apache License 2.0 — see LICENSE.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sdcvalidator-4.2.0.tar.gz.
File metadata
- Download URL: sdcvalidator-4.2.0.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50b6ac33e9c639015fe8b8412351042835a32a801f48200fca4d968e08315b02
|
|
| MD5 |
0d2ba5a1eb91d76d4f48dfa7d1e09ebe
|
|
| BLAKE2b-256 |
f17bdfe5dd6d72572ebcabb146b500bc369819da52b91d4db7465e7aa20010c4
|
Provenance
The following attestation bundles were made for sdcvalidator-4.2.0.tar.gz:
Publisher:
release.yml on SemanticDataCharter/sdcvalidator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sdcvalidator-4.2.0.tar.gz -
Subject digest:
50b6ac33e9c639015fe8b8412351042835a32a801f48200fca4d968e08315b02 - Sigstore transparency entry: 1046148980
- Sigstore integration time:
-
Permalink:
SemanticDataCharter/sdcvalidator@2d554d6a203ec9b6fafa63c24520adcd1e794d5a -
Branch / Tag:
refs/tags/v4.2.0 - Owner: https://github.com/SemanticDataCharter
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2d554d6a203ec9b6fafa63c24520adcd1e794d5a -
Trigger Event:
push
-
Statement type:
File details
Details for the file sdcvalidator-4.2.0-py3-none-any.whl.
File metadata
- Download URL: sdcvalidator-4.2.0-py3-none-any.whl
- Upload date:
- Size: 17.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55443c3ec8a873b9bd7e12c6edc631d3f1a0d0f750e3077307ee8bc3f85f161d
|
|
| MD5 |
e5392e66b710ebf8d69e8d455f504f86
|
|
| BLAKE2b-256 |
0e99f9fabc1028d40c846779296d64e93697cf0a3be3c0415e1728e5b9c765ff
|
Provenance
The following attestation bundles were made for sdcvalidator-4.2.0-py3-none-any.whl:
Publisher:
release.yml on SemanticDataCharter/sdcvalidator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sdcvalidator-4.2.0-py3-none-any.whl -
Subject digest:
55443c3ec8a873b9bd7e12c6edc631d3f1a0d0f750e3077307ee8bc3f85f161d - Sigstore transparency entry: 1046149057
- Sigstore integration time:
-
Permalink:
SemanticDataCharter/sdcvalidator@2d554d6a203ec9b6fafa63c24520adcd1e794d5a -
Branch / Tag:
refs/tags/v4.2.0 - Owner: https://github.com/SemanticDataCharter
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2d554d6a203ec9b6fafa63c24520adcd1e794d5a -
Trigger Event:
push
-
Statement type: