Sdcvalidator

io.github.SemanticDataCharter由 GitHub 账号 SemanticDataCharter 发布v4.6.3更新于 Nov 1, 2026

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

已验证STDIO仅桌面开发者工具数据与分析

概览

AI 生成的概览

本地 MCP 服务器,按 SDC4 XSD 架构校验 XML 实例,并将错误分为结构性错误与语义性错误。

可以做什么
  • 按 SDC4 XSD 架构校验 XML 实例,返回通过或失败及错误数量
  • 生成详细校验报告,按结构性错误与语义性错误两级分类
  • 检查 XSD 架构是否符合 SDC4 原则,即仅允许 restriction、不允许 extension
  • 校验实例时可选择跳过架构合规检查
适用场景
适用于助手处理 SDC4 或 Semantic Data Charter 的 XML 数据时,需要按架构检查记录,或在数据交换前确认架构本身符合 SDC4 规则。
运行要求
作为本地 stdio 进程在用户机器上运行,通过 uvx 从 PyPI 包 sdcvalidator 启动;客户端配置只需 uvx 命令和包名。未声明认证、环境变量或请求头。架构与实例文件需能以路径访问。
安装前请注意
工具以文件路径接收架构和实例,因此服务器会读取本机文件,请只指向愿意让助手看到的数据。校验本身是只读的,但底层库还提供恢复与格式转换功能,可能写出文件。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Sdcvalidator,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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

来源:README.md,提交 68923c1

工具

3

validate_instance

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

输入参数schema_path必填instance_path必填check_compliance

validate_and_report

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

输入参数schema_path必填instance_path必填check_compliance

check_schema_compliance

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

输入参数schema_path必填

版本历史

7
  1. v4.6.3最新Oct 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

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分