mcpField
S
sdcdcatap

sdcdcatap

ローカル
github.com/SemanticDataCharter開発ツール04 日前に更新

sdcdcatap について

sdcdcatapは、公開済みのSemantic Data CharterモデルパッケージをDCAT-AP 3.0.1のカタログに変換する読み取り専用のコマンドラインツール兼MCPサーバーです。TurtleまたはJSON-LDで出力し、SEMICのSHACLシェイプで検証できます。

主な機能

  1. 01DCAT-AP 3.0.1カタログの生成
  2. 02TurtleまたはJSON-LDでのシリアライズ
  3. 03URLとSHA-256によるモデルスキーマの記述
  4. 04SEMICのSHACLシェイプによる検証

活用シーン

  1. 01データポータルのカタログでSDCモデルを公開
  2. 02モデルパッケージからカタログを作成
  3. 03MCPクライアント経由でDCAT-AP記述を取得

MCP 対応

stdioで`write_catalog`ツールを公開し、CLIと同じ関数で公開済みモデルのDCAT-AP 3.0.1カタログを返します。`sdcreader`経由でモデルを読み取り、変更は行いません。

設定

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

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

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

パッケージ
pypisdcdcatap4.1.1

ツール

1

掲載時のツール一覧 · 4 日前に更新

パラメーター型必須説明
datestringいいえカタログの日付(YYYY-MM-DD)。省略した場合は今日の日付を使用します。
ct_idsarrayいいえ公開カタログ内のモデル識別子(CUID2)。このサーバーの起動時に指定されたホストから取得します。
formatenumいいえカタログのシリアル化形式。turtle | json-ld
directoriesarrayいいえディスク上のパッケージディレクトリ。ct_ids、directories、または両方を指定してください。モデルを少なくとも 1 つ指定する必要があります。
contact_namestringいいえ発行者の連絡先名です。省略した場合は、パッケージで宣言された既定値が適用されます。
contact_emailstringいいえ公開者の連絡先メールアドレスです。省略した場合は、パッケージで宣言されたデフォルト値が適用されます。

詳細

sdc_dcat3_ap

DCAT-AP 3.0.1 で記述された、1 つの Semantic Data Charter モデルです。

sdcdcatap は、公開済みの SDC モデルのパッケージを読み込み、DCAT-AP(欧州のデータポータル向け DCAT アプリケーションプロファイル)がポータルに交換を求める dcat:Catalog を生成します。モデルごとに 1 つの Dataset を作成し、モデルのスキーマを、そのレコードが準拠する標準(dct:conformsTo)として、またその変数を定義する文書(foaf:page)として、URL と SHA-256 を用いて記載します。1 つの rdflib グラフを、Turtle と JSON-LD でシリアライズします。出力は、固定したコミットの SEMIC 独自の SHACL シェイプと、Interoperability Test Bed の SEMIC バリデーターで検証されます。

1. これは何か、どこから来たのか

サンプルの samples/nhanes-participant/catalog.ttl(および同じグラフを表す catalog.jsonld)は、FAIR Data Demo の NHANES Participant(dm-xy8upneajsb8vdcmnve01g6g)の記録を含む、1 つの Dataset を持つ Catalog です。これは、米国国立衛生統計センター(CDC)の国民健康栄養調査(National Health and Nutrition Examination Survey)に関する、人口統計、検査、臨床検査の記録です。このモデルは公開されています。

pip install -e ".[fetch]"
sdcdcatap write --package samples/nhanes-participant --out catalog.ttl --jsonld catalog.jsonld
sdcdcatap write --ct-id xy8upneajsb8vdcmnve01g6g --ct-id <another> --save-package pkg/ --out catalog.ttl   # a catalog of models, from the public catalog
sdcdcatap write --package DIR --catalog my-catalog.yaml --out catalog.ttl                                  # a publisher's own declared input

分けて扱う 2 種類の入力。 モデルのパッケージ(JSON-LD、スキーマ、公開カタログレコード、公開済みスキーマバージョン。アカウントは不要。パッケージがないモデルは受け付けません)から取得するのは、タイトル、説明、識別子、作成者、日付、ライセンス、スキーマの URL と SHA-256、変数の数、さらにモデル作成者が記述した場合はモデル独自の Dublin Core(発行者、主題キーワード、寄稿者、対象範囲)です。カタログの発行者から取得するのは、プロファイルの統制語彙と値域ルールが、パッケージでは知り得ない値を必要とするため、catalog.yaml で宣言された連絡先、EU データテーマ、アクセス権、言語、発行者の ADMS タイプ、カタログ独自のタイトル、説明、ホームページです。パッケージにはサンプル用の既定ファイル(src/sdcdcatap/data/catalog.yaml)が含まれています。発行者は独自のファイルを用意します。

参照されるノードはすべて、型と名前がインラインで指定されます。 値域のシェイプでは、すべてのオブジェクト値がそのクラスのインスタンスであることが求められ、必須シェイプでは、グラフ内のどこにあっても、すべてのエージェントに名前が、すべての概念にラベルが求められます。そのため、発行者は foaf:Agent で foaf:name を持ち、テーマはスキーム内で skos:prefLabel を持つ skos:Concept、ライセンスは dct:LicenseDocument、言語は dct:LinguisticSystem などとなります。ハーベスティングポータルは完全なグラフを取得できます。

Dataset に含まれるもの:

dct:title, dct:descriptionモデルのタイトルと説明(英語タグ付き)に、ガバナンス対象のデータレコードとは何か、スキーマが不変であることを説明する 1 文を加えたもの
dct:identifier, adms:identifierdm-xy8upneajsb8vdcmnve01g6g。リテラルとして、また skos:notation を持つ adms:Identifier として記載
dct:conformsTodct:Standard。固定された URL(?sha256=)にあるスキーマで、SHA-256 は dct:identifier として記載
foaf:pagefoaf:Document。安定した URL にあるスキーマで、データディクショナリー(153 個の変数)として説明され、File Type NAL の XML を dct:format とし、それ自体が SDC4 参照モデルに dct:conformsTo で準拠
dct:publisher, dct:creator名前を持つ foaf:Agent。発行者には ADMS タイプとホームページも記載
dcat:contactPoint宣言された入力に基づく、vcard:fn と vcard:hasEmail を持つ vcard:Kind
dcat:theme, dct:language, dct:accessRights宣言された入力に基づく、EU Data Theme 語彙の HEAL、Languages NAL の ENG、Access Rights NAL の PUBLIC
dct:licenseモデルのライセンス URL を dct:LicenseDocument として記載
dcat:keyword, dcat:landingPage, dct:issued, dct:modifiedパッケージから取得
dct:provenance, dcat:versiondct:ProvenanceStatement。公開済みモデルは変更されず、改訂版は改訂対象のモデルを示す新しいモデルとなります。バージョンには SHA-256 を使用

Catalog には、タイトル、説明、発行者、ホームページ、言語、日付、dcat:themeTaxonomy としての Data Theme 語彙、および Dataset が含まれます。

2. 検証方法

テストでは、ピン留めされたコミットでコピーした data/dcat-ap-3.0.1-4470b8e/ の SEMIC シェイプを、pySHACL で実行します(最初に build/snapshot_dcat_ap.py でピン留めを検証します)。

pip install -e ".[dev]"
python -m pytest tests -q                   # the Interoperability Test Bed test runs too, over the network
python -m pytest tests -q -m "not network"  # offline, as CI runs it

オフラインでは、必須プロパティのシェイプ(dcat-ap-SHACL.ttl)と範囲のシェイプ(ranges.ttl)の両方が、Turtle と JSON-LD で conforms になります。コミット済みのサンプルが、新たに実行した結果と同型であることをアサートします。

2つ目の判定には、Interoperability Test Bed の SEMIC SHACL バリデーター(https://www.itb.ec.europa.eu/shacl/dcat-ap/、2026年10月9日時点の v1.14.0-SNAPSHOT、REST API 経由)を使い、サンプルを検証します。

検証タイプ結果
dcatap.3_0_1_base0(必須、背景知識なし)conforms
dcatap.3_0_1_range0(範囲、背景知識なし)conforms
dcatap.3_0_1_codelists(管理語彙)conforms、警告3件:publisher は EU Corporate Bodies NAL に含まれていません(EU 機関ではなく企業です)
dcatap.3_0_1_rec(推奨事項)conforms、警告19件。第4部に一部を記載しています
dcatap.3_0_1_full(すべて、背景知識あり)文書には該当しない違反が11件あります。第4部を参照してください

ネットワークテストでは、最初の4項目をアサートします。

3. この投影で表現できなかったこと

情報を補うのではなく、次の項目は含めていません。

  • レコードの dcat:distribution はありません。 FAIR Data Demo のレコードは公開されておらず、公開されているのはモデルです。このプロファイルではディストリビューションを推奨していますが、必須ではありません。publisher がアクセス URL を宣言すると、writer はディストリビューションを出力します。
  • 時間的範囲、ジオメトリー、頻度、データセットシリーズ、データサービスはありません。 パッケージにこれらの情報は含まれていません。空間的範囲、主題キーワード、contributor、モデル自身の publisher は、モデル作成者が記入している場合、モデルの Dublin Core から取得します。SDCStudio のフィールドのデフォルト値(範囲の「Universal」、関連の「None」、空欄)は未設定として扱われます。そのため NHANES カタログにはこれらが含まれていません。
  • publisher が判断する必要のある情報は含まれていません。 データテーマ、アクセス権、言語、publisher の種類、連絡先は入力として宣言されることをここで明記し、サンプルに限ってデフォルト値を設定しています。

逆に、レコードには含まれているものの、カタログ項目には記載欄がない情報については、どちらか一方の欠点としてではなく、読者が確認先を把握できるように説明します。

  • ガバナンス情報一式は、すべてのレコードに含まれるデータです。 各 Governed Data Record は、監査イベント、PROV アクティビティ、PROV エージェントをそれぞれ検証済みのリーフとして保持します。DCAT-AP の dct:provenance と prov:wasGeneratedBy はデータセットについて記述します。レコードごとの情報はレコード内にあり、カタログが参照するスキーマで定義されています。
  • スキーマは各レコードに関連付けられています。 すべてのレコードには、検証に使用したスキーマが記されています。カタログには、SHA-256 とともに dct:conformsTo で一度だけ記載します。
  • 値が欠落している理由は、レコード内で型付きで示されます。 リーフでは、値の代わりに16種類の例外値のうち1つを保持できます。それらはスキーマで定義され、どの例外値がどこに適用されるかはレコードに記載されています。
  • データ辞書用の欄はありません。 DCAT-US 3.0 には「すべての変数の名前と定義」を記載する describedBy があります。DCAT-AP には dct:conformsTo と foaf:page があり、ここではスキーマをその欄に記載します。

4. DCAT-AP 3.0.1 とそのバリデーターについて分かったこと

4470b8e の SEMICeu/DCAT-AP と、2026 年 10 月 9 日の Interoperability Test Bed を使って実装した際のメモです。成果物の動作について記しています。これにより、次の実装者が自分のカタログに取り組む時間を確保できます。

  • 参照するものにはすべて型と名前を付けてください。 ranges ファイルはすべてのオブジェクトプロパティに対して sh:class をチェックし、base ファイルはグラフ内のすべての foaf:Agent に foaf:name を、すべての skos:Concept に skos:prefLabel を要求します。参照先の語彙用語だけの場合も同様です(ADMS の発行者タイプ、データテーマなど)。発行者を裸の URI とした SEMIC 自身の最小限の例は、必須シェイプには合格しますが、まさにこの理由で ranges のチェックに失敗します。
  • full と base のタイプは、ドキュメントにない違反を報告します。 タイトル、説明、名前付き発行者を含む空の最小限のカタログを dcatap.3_0_1_base に送信すると、サンプルと同じく、空白ノードのエージェントについて foaf:name の違反が 5 件返されます。また full では、ADMS 概念体系(http://purl.org/adms/publishertype/1.0 など)の dct:title 違反が 6 件追加されます。これらはコンテンツではなく、各タイプが読み込むバックグラウンド知識に由来します。4 つのグループ(base0、range0、codelists、rec)を個別に確認してください。それぞれドキュメントのみを対象に報告します。パート 2 の表もこの方法で作成しています。
  • recommendations タイプは Catalog を Dataset として扱います。 DCAT をバックグラウンド知識として読み込むと(dcat:Catalog は dcat:Dataset のサブクラスです)、Dataset に関する推奨事項も Catalog に適用されます。連絡先、配布、キーワード、テーマ、空間および時間の対象範囲、ライセンスが該当します。サンプルの警告 19 件のうち 9 件がこれらです。残りは、Dataset に不足している配布、空間および時間の対象範囲、作成者エージェントとライセンス文書(ADMS ライセンスタイプ)の dct:type、および Corporate Bodies NAL に含まれない発行者に関するものです。
  • ranges.ttl は、定義されていないプロパティシェイプを参照しています。 206 個の sh:property トリプルが、それ自体にはトリプルがないノードを指しています。Jena ベースのバリデーターはこれらを無視しますが、pySHACL は実行を拒否します(「整形式の SHACL PropertyShape ではありません」)。テストでは、実行前に未定義の参照を削除しています。チェック対象となるのは、定義済みの 91 個のプロパティシェイプです。
  • REST API はシンプルです。 contentToValidate(文字列としてのドキュメント)、embeddingMethod: STRING、contentSyntax、validationType、reportSyntax を含む JSON ボディを使って、POST https://www.itb.ec.europa.eu/shacl/dcat-ap/api/validate を呼び出します。応答は SHACL 検証レポートです。/api/info には検証タイプとバリデーターのバージョンが記載されています。JSON-LD と Turtle では同じ結果が得られました。
  • dcat:version は DCAT 3 のプロパティですが、rdflib の閉じた DCAT 名前空間にはありません。 IRI を手動で構築してください。
  • 言語は NAL の概念であり、タグではありません。 dct:language には http://publications.europa.eu/resource/authority/language/ENG を指定します。これは dct:LinguisticSystem です。BCP 47 文字列を指定すると ranges に失敗します。

MCP サーバー

sdcdcatap も MCP サーバーであり、io.github.SemanticDataCharter/sdcdcatap として登録されています。そのため、sdcreader で公開済みモデルを読み取れるアシスタントは、そのモデルの DCAT-AP 3.0.1 の説明を取得できます。ツールは 1 つで、CLI が呼び出す関数と同じものを実行する write_catalog です。stdio を使用し、返すドキュメント以外は読み取り専用です。アカウントは不要です。ツールは URL を受け取りません(カタログのホストは --host で起動時に固定します)。プロトコルの基盤には、すべての SDC プロジェクションサーバーで共有される sdcreader.mcp を使用しています。

uvx sdcdcatap mcp            # or: sdcdcatap-mcp, or sdcdcatap mcp

構成

  • モデルのパッケージは sdcreader(load_package、 fetch_package、read_model)で読み込みます。レコードツリーとそのリーフ、コード付きの列挙値、モデルの Dublin Core(未設定の項目には SDCStudio のデフォルト値を使用)が含まれます。パッケージ形式はそこで一度だけ文書化されています。
  • src/sdcdcatap/:dcatap.py(グラフ)、cli.py、data/catalog.yaml(サンプルの宣言済み入力)。
  • data/dcat-ap-3.0.1-4470b8e/:ピン留めされたコミット時点の SEMIC のシェイプ、コンテキスト、例、変更履歴。
  • samples/nhanes-participant/:取得したモデルのパッケージと、それをもとに作成したカタログ(Turtle と JSON-LD)。
  • build/snapshot_dcat_ap.py:ピン留めされたコミット時点の SEMICeu/DCAT-AP の読み取り専用クローンから data/ を再作成します。

ライセンス

Apache-2.0(LICENSE、NOTICE を参照)。data/ 内の DCAT-AP 成果物は © European Union、CC BY 4.0 であり、ここでもその ライセンスを適用しています。

コメント

MCP は初めてですか?

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

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