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 分