validate_instance
Validate an XML instance against its SDC4 XSD schema. Returns pass/fail with error count and classified errors.
schema_pathrequiredinstance_pathrequiredcheck_compliance
io.github.SemanticDataCharterPublished by GitHub account SemanticDataCharterv4.6.3Updated Nov 1, 2026
SDC4 structural validator with ExceptionalValue recovery; thin wrapper over xmlschema.
Local MCP server that validates XML instances against SDC4 XSD schemas and classifies errors as structural or semantic.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
SDC4 structural validator — a thin wrapper over xmlschema with two-tier error classification.
xsd:extension — only xsd:restriction)Or from source:
The validation parameter controls how strictly the XSD schema itself is checked when loaded:
'strict' (default) — Raises XMLSchemaParseError if 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.A semantic (Tier 2) error does not have to reject a record. Recovery keeps the value and inserts an ISO 21090 ExceptionalValue beside it (Invalid, for a value that fails its type, pattern, range or enumeration), so the record says which value is unusable and why, and the rest of it stays usable.
remove_existing_ev=True removes them first.unrecoverable by recover(), and raised as
SDC4UnrecoverableError by validate_with_recovery(); it is never skipped.SDC4StructuralValidationError.XMLResource when the record carries prefixed QNames in content (xsi:type="sdc4:...").sdcvalidate — Validate XML against schemaExit codes: 0 valid, 1 semantic errors only, 2 structural errors.
sdcvalidator-xml2json — Convert XML to JSONsdcvalidator-json2xml — Convert JSON to XMLsdcvalidator ships a stdio MCP (Model Context Protocol) server so any MCP-capable agent can validate SDC4 data without importing the Python library. It implements JSON-RPC 2.0 directly over stdio — no external MCP SDK dependency.
A client configuration needs only "command": "uvx", "args": ["sdcvalidator"].
validate_instance and validate_and_report take schema_path and instance_path, plus an optional check_compliance boolean (default true). check_schema_compliance takes schema_path only.
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.
Production-ready. Available on PyPI under Apache 2.0.
Apache License 2.0 — see LICENSE.
Source: README.md at commit 68923c1
Validate an XML instance against its SDC4 XSD schema. Returns pass/fail with error count and classified errors.
schema_pathrequiredinstance_pathrequiredcheck_complianceValidate an XML instance and return a detailed report with two-tier error classification (structural vs semantic).
schema_pathrequiredinstance_pathrequiredcheck_complianceCheck if an XSD schema follows SDC4 principles (no xsd:extension, restriction only). Does not validate instances.
schema_pathrequired90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
pip install sdcvalidatorgit clone https://github.com/SemanticDataCharter/sdcvalidator.gitcd sdcvalidatorpip install -e .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}")# Explicit lax mode for legacy schemasvalidator = SDC4Validator("legacy_schema.xsd", validation='lax')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 exceptionassert_sdc4_schema_compliance("schema.xsd")from sdcvalidator import ErrorClassifier, ErrorTier
classifier = ErrorClassifier()tier = classifier.classify(some_xmlschema_error)# ErrorTier.STRUCTURAL or ErrorTier.SEMANTICfrom sdcvalidator import SDC4Validator, SDC4UnrecoverableError
v = SDC4Validator("dm-xxxx.xsd", validation="lax")result = v.recover("record.xml") # RecoveryResult; the source is never mutatedfor r in result.recoveries: # Recovery: path, code ("INV"), name, reason, inserted print(r.code, r.reason, r.path)if not result.ok: # an error no ExceptionalValue covers print(result.unrecoverable)
tree = v.validate_with_recovery("record.xml", save=False) # raises SDC4UnrecoverableError insteadfrom sdcvalidator.converters import xml_to_json, json_to_xml
# XML -> JSON (schema-aware)data = xml_to_json("instance.xml", schema_path="schema.xsd")
# JSON -> XMLjson_to_xml(data, "schema.xsd", "output.xml")# Basic validationsdcvalidate schema.xsd instance.xml
# JSON outputsdcvalidate schema.xsd instance.xml --json
# Skip SDC4 compliance checksdcvalidate --no-compliance-check schema.xsd instance.xmlsdcvalidator-xml2json instance.xml --schema schema.xsdsdcvalidator-xml2json instance.xml -o output.jsonsdcvalidator-json2xml data.json schema.xsd -o output.xmlsdcvalidator # what an MCP registry client runs (uvx sdcvalidator)sdcvalidator mcp # the same, spelled like the other Semantic Data Charter serverssdcvalidator-mcp serve --mcp # still works for existing client configurations