Sdcvalidator

io.github.SemanticDataCharterPublished by GitHub account SemanticDataCharterv4.6.3Updated Nov 1, 2026

SDC4 structural validator with ExceptionalValue recovery; thin wrapper over xmlschema.

VerifiedSTDIODesktop onlyDeveloper ToolsData & Analytics

Overview

AI-generated overview

Local MCP server that validates XML instances against SDC4 XSD schemas and classifies errors as structural or semantic.

What you can do
  • Validate an XML instance against an SDC4 XSD schema and get pass/fail with an error count
  • Produce a detailed validation report with two-tier classification of structural versus semantic errors
  • Check whether an XSD schema follows SDC4 principles, allowing restriction only and no extension
  • Optionally skip the schema compliance check when validating instances
When to use it
Useful when an assistant works with SDC4 or Semantic Data Charter XML data and needs to check records against their schemas, or to confirm a schema itself follows SDC4 rules before data is exchanged.
Requirements
Runs as a local stdio process on the user's machine, launched with uvx from the sdcvalidator PyPI package; a client configuration needs only the uvx command and the package name. No authentication, environment variables or headers are declared. Schema and instance files must be reachable by path.
Before you install
Tools take file paths for schemas and instances, so the server reads files from the local machine; point it only at data you are willing to expose to the assistant. Validation itself is read-only, but the underlying library also offers recovery and conversion features that can write output files.

Installation

In SourceWeft

  1. Open Sdcvalidator in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

sdcvalidator

SDC4 structural validator — a thin wrapper over xmlschema with two-tier error classification.

[License] [Python]

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 — only xsd: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

bash
pip install sdcvalidator

Or from source:

bash
git clone https://github.com/SemanticDataCharter/sdcvalidator.gitcd sdcvalidatorpip install -e .

Python API

python
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) — 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.
python
# Explicit lax mode for legacy schemasvalidator = SDC4Validator("legacy_schema.xsd", validation='lax')

Schema compliance checking

python
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")

Error classification

python
from sdcvalidator import ErrorClassifier, ErrorTier
classifier = ErrorClassifier()tier = classifier.classify(some_xmlschema_error)# ErrorTier.STRUCTURAL or ErrorTier.SEMANTIC

Exceptional Value recovery

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.

python
from 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 instead
  • An ExceptionalValue the record already carries (a refusal, a masked field, written where the record was made) is kept, and covers its value; recovery never inserts a second one. remove_existing_ev=True removes them first.
  • An error recovery cannot cover is returned in unrecoverable by recover(), and raised as SDC4UnrecoverableError by validate_with_recovery(); it is never skipped.
  • Structural (Tier 1) errors raise SDC4StructuralValidationError.
  • Pass an XMLResource when the record carries prefixed QNames in content (xsi:type="sdc4:...").

XML/JSON conversion

python
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 -> XMLjson_to_xml(data, "schema.xsd", "output.xml")

CLI

sdcvalidate — Validate XML against schema

bash
# Basic validationsdcvalidate schema.xsd instance.xml
# JSON outputsdcvalidate schema.xsd instance.xml --json
# Skip SDC4 compliance checksdcvalidate --no-compliance-check schema.xsd instance.xml

Exit codes: 0 valid, 1 semantic errors only, 2 structural errors.

sdcvalidator-xml2json — Convert XML to JSON

bash
sdcvalidator-xml2json instance.xml --schema schema.xsdsdcvalidator-xml2json instance.xml -o output.json

sdcvalidator-json2xml — Convert JSON to XML

bash
sdcvalidator-json2xml data.json schema.xsd -o output.xml

MCP Server

sdcvalidator 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.

bash
sdcvalidator            # 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

A client configuration needs only "command": "uvx", "args": ["sdcvalidator"].

Tools

ToolPurpose
validate_instanceValidate an XML instance against its SDC4 XSD schema. Returns pass/fail with error count and classified errors.
validate_and_reportValidate an instance and return a detailed report with two-tier (structural vs semantic) error classification.
check_schema_complianceCheck whether an XSD schema follows SDC4 principles (restriction only, no xsd:extension). Does not validate instances.

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.

Two-Tier Error Classification

TierTypeExamplesAction
1StructuralUnknown elements, cardinality violations, wrong nestingReject
2SemanticType errors, pattern violations, enumeration mismatchesReport, or recover with an ExceptionalValue

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.

Status

Production-ready. Available on PyPI under Apache 2.0.

License

Apache License 2.0 — see LICENSE.

Links

Source: README.md at commit 68923c1

Tools

3

validate_instance

Validate an XML instance against its SDC4 XSD schema. Returns pass/fail with error count and classified errors.

Parametersschema_pathrequiredinstance_pathrequiredcheck_compliance

validate_and_report

Validate an XML instance and return a detailed report with two-tier error classification (structural vs semantic).

Parametersschema_pathrequiredinstance_pathrequiredcheck_compliance

check_schema_compliance

Check if an XSD schema follows SDC4 principles (no xsd:extension, restriction only). Does not validate instances.

Parametersschema_pathrequired

Version history

7
  1. v4.6.3LatestOct 31, 2026
  2. v4.6.1Oct 26, 2026
  3. v4.6.0Oct 25, 2026
  4. v4.5.3Oct 18, 2026
  5. v4.5.2Sep 17, 2026
  6. v4.5.1Sep 16, 2026
  7. v4.5.0Sep 16, 2026

Score

90% 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.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts