mcpField
S
sdcvalidator

sdcvalidator

ローカル
github.com/SemanticDataCharter開発ツール1今日更新

sdcvalidator について

sdcvalidatorは、SDC4のXSDスキーマに基づいてXMLを検証するPythonライブラリとコマンドラインツールです。構造エラーと意味エラーを分け、ExceptionalValueによる復旧やXML/JSON変換に対応し、MCPサーバーから検証機能を利用できます。

主な機能

  1. 01SDC4 XMLインスタンスの検証
  2. 02構造エラーと意味エラーの分類
  3. 03ExceptionalValueによる復旧
  4. 04SDC4スキーマ準拠の確認
  5. 05スキーマ対応のXML/JSON変換
  6. 06Python APIとコマンドライン

活用シーン

  1. 01構造が無効なSDC4レコードの拒否
  2. 02意味上の値エラーの報告や復旧
  3. 03禁止されたxsd:extensionの確認
  4. 04スキーマに基づくXMLとJSONの変換

MCP 対応

stdioのMCPサーバーが、インスタンス検証、エラー分類付きレポート、SDC4スキーマ準拠確認のツールを公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"semanticdatacharter-sdcvalidator": {
"command": "uvx",
"args": [
"sdcvalidator"
]
}
}
}
起動コマンドuvx sdcvalidator

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypisdcvalidator4.6.3

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

sdcvalidator

SDC4 構造バリデーター — 2 段階のエラー分類機能を備えた xmlschema の薄いラッパーです。

License Python

機能

  • XML インスタンスを SDC4 XSD スキーマに照らして検証します
  • エラーを構造エラー(Tier 1:拒否)と意味エラー(Tier 2:報告)に分類します
  • SDC4 スキーマへの準拠をチェックします(xsd:extension は不可。xsd:restriction のみ)
  • デフォルトで厳密に検証します — 無効な制限派生(誤った要素名、型の不一致)をスキーマの読み込み時に検出します
  • スキーマを考慮した変換により、XML と JSON を相互変換します

インストール

pip install sdcvalidator

または、ソースからインストールします。

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 パラメーターは、XSD スキーマの読み込み時にスキーマ自体をどの程度厳密にチェックするかを制御します。

  • 'strict'(デフォルト)— スキーマに無効な制限派生(例:ベース型と一致しない要素名)が含まれている場合、XMLSchemaParseError を発生させます。推奨モードです。
  • 'lax' — 例外を発生させずに、スキーマ派生エラーを収集します。問題があることがわかっている既存のスキーマに限って使用してください。
  • 'skip' — スキーマレベルの検証を完全にスキップします。
# Explicit lax mode for legacy schemas
validator = 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 exception
assert_sdc4_schema_compliance("schema.xsd")
エラー分類
from sdcvalidator import ErrorClassifier, ErrorTier

classifier = ErrorClassifier()
tier = classifier.classify(some_xmlschema_error)
# ErrorTier.STRUCTURAL or ErrorTier.SEMANTIC
Exceptional Value の回復

意味エラー(Tier 2)があっても、レコードを必ずしも拒否する必要はありません。回復では値を保持し、その隣に ISO 21090 の ExceptionalValue(型、パターン、範囲、列挙値に適合しない値には Invalid)を挿入します。これにより、レコード内で使用できない値とその理由が示され、残りの部分は引き続き利用できます。

from sdcvalidator import SDC4Validator, SDC4UnrecoverableError

v = SDC4Validator("dm-xxxx.xsd", validation="lax")
result = v.recover("record.xml")         # RecoveryResult; the source is never mutated
for 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
  • レコードにすでに含まれている ExceptionalValue(レコード作成時に記録された拒否やマスク済みフィールド)は保持され、その値をカバーします。回復処理で 2 つ目が挿入されることはありません。remove_existing_ev=True を指定すると、最初に既存のものを削除します。
  • 回復でカバーできないエラーは recover() の unrecoverable に返され、validate_with_recovery() では SDC4UnrecoverableError として発生します。スキップされることはありません。
  • 構造エラー(Tier 1)は SDC4StructuralValidationError を発生させます。
  • レコードの内容にプレフィックス付き QName(xsi:type="sdc4:...")が含まれる場合は、XMLResource を渡してください。
XML/JSON 変換
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 — XML をスキーマに照らして検証
# 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

終了コード:0 は有効、1 は意味エラーのみ、2 は構造エラーです。

sdcvalidator-xml2json — XML を JSON に変換
sdcvalidator-xml2json instance.xml --schema schema.xsd
sdcvalidator-xml2json instance.xml -o output.json
sdcvalidator-json2xml — JSON を XML に変換
sdcvalidator-json2xml data.json schema.xsd -o output.xml

MCP サーバー

sdcvalidator には stdio MCP(Model Context Protocol)サーバーが付属しているため、MCP 対応のエージェントであれば Python ライブラリをインポートせずに SDC4 データを検証できます。JSON-RPC 2.0 を stdio 経由で直接実装しており、外部 MCP SDK への依存はありません。

sdcvalidator            # what an MCP registry client runs (uvx sdcvalidator)
sdcvalidator mcp        # the same, spelled like the other Semantic Data Charter servers
sdcvalidator-mcp serve --mcp   # still works for existing client configurations

クライアントの設定に必要なのは "command": "uvx", "args": ["sdcvalidator"] だけです。

ツール
ツール説明
validate_instanceXML インスタンスを対応する SDC4 XSD スキーマに照らして検証します。エラー数と分類済みエラーを含む合否を返します。
validate_and_reportインスタンスを検証し、構造エラーと意味エラーの 2 段階分類を含む詳細なレポートを返します。
check_schema_complianceXSD スキーマが SDC4 の原則(xsd:restriction のみ、xsd:extension は不可)に準拠しているかチェックします。インスタンスは検証しません。

validate_instance と validate_and_report は schema_path と instance_path に加え、省略可能な check_compliance ブール値(デフォルトは true)を受け取ります。check_schema_compliance が受け取るのは schema_path のみです。

2 段階のエラー分類

段階種類例アクション
1構造未知の要素、出現回数制約違反、誤った入れ子拒否
2セマンティック型エラー、パターン違反、列挙値の不一致報告、または例外値で回復

SDC4 スキーマへの準拠

SDC4 データモデルでは、xsd:restriction のみを使用する必要があります。xsd:extension は使用しないでください。これにより、構造(参照モデル)とセマンティクス(データモデル)が分離され、グローバルな相互運用性が保証されます。

バリデーターはデフォルトでこれをチェックし、この原則に違反するスキーマを拒否します。

ステータス

本番環境で使用可能です。Apache 2.0 の下で PyPI から入手できます。

ライセンス

Apache License 2.0 — LICENSE を参照してください。

リンク

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。