sdchealthdcatap について
sdchealthdcatapは、公開済みのSemantic Data CharterモデルからHealthDCAT-AP記述を生成します。データ保有者向けに、モデルパッケージの情報と保有者が宣言するデータを組み合わせ、プロファイルのシェイプで出力を検証します。
主な機能
- 01DCAT Dataset記述の生成
- 02レコードの葉から変数を生成
- 03バインディングからコード体系を抽出
- 04TurtleとJSON-LDへのシリアライズ
- 05アクセスレベル別シェイプで検証
活用シーン
- 01健康データカタログ向けモデル項目の作成
- 02TurtleとJSON-LDのカタログ記述の公開
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| date | string | いいえ | カタログの日付(YYYY-MM-DD)。省略した場合は今日の日付を使用します。 |
| ct_ids | array | いいえ | 公開カタログ内のモデル識別子(CUID2)。このサーバーの起動時に指定されたホストから取得します。 |
| format | enum | いいえ | カタログのシリアル化形式。turtle | json-ld |
| directories | array | いいえ | ディスク上のパッケージディレクトリ。ct_ids、directories、または両方を指定してください。モデルを少なくとも 1 つ指定する必要があります。 |
| contact_name | string | いいえ | 発行者の連絡先名です。省略した場合は、パッケージで宣言された既定値が適用されます。 |
| contact_email | string | いいえ | 公開者の連絡先メールアドレスです。省略した場合は、パッケージで宣言されたデフォルト値が適用されます。 |
詳細
sdc_healthdcat_ap
HealthDCAT-AP で記述される、1 つの Semantic Data Charter モデルです。
sdchealthdcatap は公開済み SDC モデルのパッケージを読み込み、HealthDCAT-AP が HealthData@EU カタログに公開するようデータ保持者に求めている dcat:Dataset の記述を書き出します。HealthDCAT-AP は、欧州ヘルスデータスペースにおける健康データの二次利用を目的とした DCAT-AP の拡張です。記述には、宣言されたアクセスレベルでのモデルごとの Dataset、レコードのリーフから構築された CSVW テーブルグループとしての変数、モデルのバインディングに基づくコード体系、宣言された入力から得られるデータ保持者の情報が含まれます。1 つの rdflib グラフを Turtle と JSON-LD としてシリアライズします。出力は、仕様リポジトリの固定コミット時点における、HealthData@EU バリデーター独自のアクセスレベル別シェイプセットで検証されます。
1. これは何か、どこから来たのか
サンプル samples/nhanes-participant/catalog.ttl(および同じグラフを記述した catalog.jsonld)は、カタログラッパーのない NON_PUBLIC アクセスレベルの Dataset です。リリース独自のサンプルも同じ形式です(その理由はパート 4 で説明します)。対象は FAIR Data Demo の NHANES Participant(dm-xy8upneajsb8vdcmnve01g6g)のレコードです。米国国立健康統計センター(CDC)の国民健康栄養調査に基づく人口統計、検査、検査室の記録で、参加者ごとに 1 件、合計 9,254 件あります。このモデルは公開されています。
- カタログレコード:https://sdcstudio.axius-sdc.com/api/v1/catalog/dm/xy8upneajsb8vdcmnve01g6g/
- レコードが準拠するスキーマ:https://sdcstudio.axius-sdc.com/dmlib/dm-xy8upneajsb8vdcmnve01g6g.xsd
- Semantic Data Charter:https://semanticdatacharter.com
pip install -e ".[fetch]"
sdchealthdcatap write --package samples/nhanes-participant --out catalog.ttl --jsonld catalog.jsonld
sdchealthdcatap write --ct-id xy8upneajsb8vdcmnve01g6g --save-package pkg/ --out catalog.ttl # any published model, from the public catalog
sdchealthdcatap write --package DIR --catalog my-catalog.yaml --out catalog.ttl # a data holder's own declared input
2 種類の入力は分けて扱います。 モデルのパッケージ(JSON-LD、スキーマ、公開カタログレコード、公開済みのスキーマバージョン)からは、アカウント不要で次の情報を取得します。パッケージのないモデルは受け付けません。タイトル、説明、識別子、作成者、日付、ライセンス、スキーマの URL と SHA-256、変数としてのレコードのすべてのリーフ、コード体系としてのモデルがバインドするすべての概念体系、およびモデラーが記述した場合はモデル自身の Dublin Core です。データ保持者からは、プロファイルがデータ保持者のみが持つ情報と、DG SANTE および EU の語彙からの値を求めるため、catalog.yaml で次の情報を宣言します。アクセスレベル、健康データアクセス機関、適用法令、健康カテゴリとテーマ、データセットタイプ、アクセス経路となる配布物、レコード数と個人の数、典型的な年齢、対象人口、個人データのカテゴリ、法的根拠、目的、発行者のタイプ、連絡先。パッケージにはサンプルのファイル(src/sdchealthdcatap/data/catalog.yaml)が含まれています。データ保持者は独自のファイルを用意します。
データ辞書はここではスロットです。 healthdcatap:hasVariables は csvw:TableGroup を受け取り、ライターはレコードの各リーフにつき 1 つの csvw:Column を持つテーブルを 1 つ構築します。NHANES Participant では 153 個です。csvw:name はレコード内のリーフのパス、csvw:title はそのラベル、csvw:datatype は XSD 型、dct:description は定義、csvw:propertyUrl はライブラリスロット(変数の意味を再利用時にも示す識別子)、dct:identifier は要素名です。healthdcatap:hasStructuredData は true です。healthdcatap:hasCodingSystem には、Coding System NAL から取得した SNOMED CT、LOINC、NCIT が含まれます。これらはモデルの skos:exactMatch バインディングから、IRI のプレフィックスに基づいて導出されます。
Dataset に含まれるその他の情報:
dct:title, dct:description, dct:identifier, adms:identifier, dcat:keyword, dcat:landingPage, dct:issued, dct:modified, dct:language, dct:license, dct:provenance, dcat:version | DCAT-AP ライターと同様に、パッケージから取得します |
dct:accessRights | Access Rights NAL の NON_PUBLIC(宣言済み。バリデーターのシェイプセットを選択します) |
dcatap:applicableLegislation | EHDS 規則の ELI、http://data.europa.eu/eli/reg/2025/327/oj をカタログ、データセット、ディストリビューションに設定します(宣言済み) |
healthdcatap:hdab, geodcatap:custodian | パブリッシャー。cv:ContactPoint と Health Publisher Types NAL の型を持つ foaf:Agent です(宣言済み。パート 3 を参照) |
healthdcatap:healthCategory, healthdcatap:healthTheme, dct:type, dcat:theme | RQSH(研究コホート、アンケート、調査)、非感染性疾患、STATISTICAL、HEAL(宣言済み) |
dcat:distribution | アクセス経路:タイトル、説明、dcat:accessURL、可用性、法令、ライセンス、および固定 URL によるスキーマへの dct:conformsTo(dct:Standard として) |
foaf:page | 安定した URL にあるスキーマ。データ辞書として記述されています |
healthdcatap:numberOfRecords, numberOfUniqueIndividuals, minTypicalAge, maxTypicalAge, populationCoverage | 9,254、9,254、0、80、NHANES の母集団(宣言済み) |
dpv:hasPersonalData, dpv:hasLegalBasis, dpv:hasPurpose | DPV の個人データ分類体系における年齢、性別、健康記録。法的根拠と目的はテキストで記述します(宣言済み) |
dqv:hasQualityAnnotation | 本体がスキーマである dqv:QualityCertificate。すべてのレコードは、存在する前にこのスキーマに照らして検証されます |
グラフで使用されるすべての NAL 概念は、そのスキーム(skos:inScheme)を示します。また、すべてのスキームには型とタイトルが設定されています。これは、バリデーターのコードリスト用シェイプがこの方法で所属をチェックするためです。すべてのエージェントには型と名前が設定され、連絡先も含まれます。
2. 検証方法
テストでは、HealthData@EU バリデーター独自の設定を data/healthdcat-ap-r8-cd7841f/validator/ から実行します(build/snapshot_healthdcat_ap.py が最初にピン留めを検証します)。config.properties にはアクセスレベルごとのシェイプファイルが記載されており、テストでは宣言されたレベルのファイルを正確に読み込みます。さらに、リリースに含まれる SEMIC の DCAT-AP 3.0.1 シェイプと、コードリスト用シェイプが参照する 13 個の語彙も読み込みます。これらはバリデーターがバックグラウンドとして事前読み込みするものです。
pip install -e ".[dev]"
python -m pytest tests -q
ピン留めされたバージョンで NON_PUBLIC の場合、Turtle と JSON-LD のどちらでも結果は 違反 0 件、警告 10 件 です。警告は、パッケージに含まれていない推奨プロパティ(分析、保持期間、頻度、データセットの dct:conformsTo、参照、関連、ソース、時間的範囲と解像度、サンプル)に関するものです。コミット済みのサンプルは、新たに実行した結果と同型であることが検証されています。リリース独自の ARCA の例も同じ方法で PUBLIC として実行すると、こちらで保持しているバックグラウンドが及ばない箇所を除き合格します(パート 4)。
2 つ目の検証手段は Interoperability Test Bed です。仕様の検証セクションでは、シェイプファイルとインポートファイルを「読み込み可能」な場所としてここを挙げています。汎用 SHACL バリデーター(https://www.itb.ec.europa.eu/shacl/any/upload、REST API /shacl/any/api/validate)に、リリースの非公開用シェイプファイルを外部ルールとして指定し、2026 年 10 月 9 日に実行した結果は、ドキュメント内のどのノードにも違反なし、警告 14 件 でした(上記の 10 件に加え、ディストリビューションの dct:format、dct:spatial、作成者エージェントとライセンス文書の dct:type)。報告される違反 22 件は、Test Bed 自体が持ち込むノードに対するものです。タイトルのない ADMS 概念スキーム 6 件と、名前のない空白エージェント 5 件がそれぞれ 2 回ずつ報告されます。空のカタログが DCAT-AP ドメインで受けるものと同じです。ネットワークを使用するこのテストでは最初の部分を検証しますが、CI ではスキップされます。HealthData@EU プラットフォーム独自のバリデーターページにはアクセスできませんでした。本番環境と受け入れ環境の両プラットフォームで、バリデーターのパスが 404 を返し、プラットフォームの公開ページにもリンクがありません。
3. プロジェクションでは表現できなかったこと
パッケージから読み取ったのではなく、ここで明示した内容です。
- 医療データへのアクセスを許可する主体は公開者です。 この項目はすべての階層で必須であり、EU の機関はこのデータセットを保有していません。サンプルでは、連絡先とともに Axius SDC, Inc. をアクセスを許可する主体として示しています。これは FAIR Data Demo については正しく、EHDS 内のデータセットでは実際の主体に置き換わります。
- 適用される法律は EHDS 規則です。 プロファイルの使用上の注記が推奨するもので、この規則が適用されないデータセットに対して使用します。これは「EHDS フレームワーク向けに記述されている」と伝える、プロファイルで必須とされる方法です。
- 件数、年齢、母集団、個人データのカテゴリー、法的根拠、目的は、FAIR Data Demo の生成時の実行と NHANES のソースについて、保有者が述べた内容であり、パッケージに含まれる事実ではありません。
- 配布はファイルではなく、アクセス経路です。 レコードは公開されておらず、アクセス経路は連絡先ページです。ダウンロードまたはデータサービスを提供する保有者であれば、それに置き換えます。
含めなかったもの:保持期間、分析の配布、サンプルの配布、頻度、時間的範囲、関連。パッケージには含まれておらず、プロファイルでも必須ではなく推奨にとどまります。
逆に、カタログ項目が参照先を示すだけで、レコードに含まれている内容は次のとおりです。
- ガバナンス情報一式は、各レコードに含まれるデータです。 監査イベント、PROV アクティビティ、PROV エージェントで構成され、ほかの項目とともに検証されます。表グループにはそれらの列が含まれているため、読者は項目の存在を確認できます。値はレコードに含まれています。
- スキーマは各レコードに紐付けられており、 配布項目とページで URL と SHA-256 を使って参照されています。
- 値が欠落している理由は、レコード内で型として示されます。 表グループの説明には、各列が例外値を 16 種類まで保持できると記載されています。どの値がどこに適用されるかは、レコードに含まれています。
4. HealthDCAT-AP Release 8 とそのバリデーターについて学んだこと
2026 年 10 月 9 日に cd7841f の healthdataeu/healthdcat-ap を基に構築した際の実装者向けメモです。成果物の挙動を説明しているため、次の実装者はこれらの作業に時間を費やすのではなく、自分のカタログに取り組めます。
- このドキュメントはカタログではなく、データセットです。 リリースの例はデータセットのみを対象としており、その理由は検証時に明らかになります。DCATをバックグラウンドとして読み込むと(
dcat:Catalogはdcat:Datasetのサブクラスです)、バリデーターはdcat:Catalogノードをデータセットとして読み取り、データセットの必須項目リストに照らして検証します。その結果、ラッパーだけで11件の違反(連絡先、配布、キーワード、テーマ、アクセス権、識別子、来歴、タイプ、健康カテゴリ、アクセス主体、構造化データフラグ)が発生します。作成ツールはカタログを出力しません。HealthData@EUカタログがカタログにあたります。 - バリデーターは設定済みの状態でリリースに同梱されています。
html/shacl/HealthDCAT-AP_validator/config/rdf-validator/ehds/には、アクセスレベルごとのシェイプファイルを指定するconfig.propertiesと、バリデーターが事前読み込みする語彙およびオントロジーが格納されています。このファイル一式をpySHACLで実行することは、バリデーターのロジックを実行することと同じです。ホスト型インスタンスでは、バックグラウンド知識とウェブインターフェースが追加されます。 - 語彙への所属は
skos:inSchemeを通じて検証されます。 すべてのコードリスト制約では、概念に対してskos:inScheme <the scheme>を要求します。また、複数の制約では、スキームがskos:ConceptScheme型であることも要求します。さらに、SEMICの基本シェイプは、グラフ内のすべてのスキームにdct:titleがあることを要求します。ホスト型バリデーターは語彙を事前読み込みし、それによってinSchemeが補われます。オフラインでは、語彙を読み込むか、明示的に記述してください。作成ツールは使用するすべての概念についてこれを記述します。また、テストではいずれにしても13個の語彙を読み込むため、リリースのARCAの例は、言語(Languages NALは14 MBあるため読み込み対象外です)とライセンスタイプ(ADMSスキームは事前読み込み対象に含まれていません)を除けば、オフラインでも検証に合格します。 - データセットの
dct:conformsToは、Technical Standard NAL(FHIR、OMOP-CDM、openEHR、DICOM、CDISC SDTMなど約20種類)に限定されています(違反レベル)。独自のスキーマをここに指定することはできません。作成ツールは、そうした制限のない配布とfoaf:pageにスキーマを記載します。 - 健康データの公開者は、Health Publisher Types NALのタイプを持つエージェントであり、
cv:ContactPointはちょうど1つです(vCardではなく、Core Public Service語彙を使用)。データセットの連絡先は、メールアドレスまたはURLを持つvcard:Kindです。1つのドキュメントに2種類の連絡先語彙があり、それぞれのシェイプが要求する箇所で使われます。 - コーディングシステムは、概念であるだけでなく
dct:Standardである必要があります。 範囲シェイプではhealthdcatap:hasCodingSystemにdct:Standardを要求し、コードリストシェイプではCoding System NALのskos:inSchemeを要求します。どちらも同時に満たす必要があります。 - パスのないプロパティシェイプが3つあります(
vcard:Kindの「メールアドレスまたはURL」と、cv:ContactPointの「メールアドレスまたはページ」。いずれもsh:pathなしでsh:orとして記述されています)。これらはpySHACLを停止させるため、テストでは取り除き、両方を手動で検証します。範囲ファイルは、DCAT-APの範囲ファイルと同様、定義されていないプロパティシェイプを参照しています。 - pySHACLはネストされた結果を報告します。
sh:nodeが失敗すると、プロパティの深刻度で外側の結果が返され、sh:detailの下に内側の結果がそれぞれの深刻度で返されます。Jenaベースのバリデーターでは、外側の結果が報告されます。テストではネストされた結果を親にまとめるため、カタログの公開者に関する警告は警告のままになります。 - カタログの公開者は、2種類の語彙に照らして二重に検証されます。 DCAT-APのコードリストシェイプでは、カタログの公開者タイプにADMS publisher-typeスキームの値を求めます(警告)。HealthDCAT-APでは、データセットの公開者タイプにHealth Publisher Types NALの値を求めます(違反)。1つのエージェントを両方の役割に使うと、後者の要件を満たし、前者では警告になります。
- リリースの例とシェイプでは、
csvw:columnを単純な反復プロパティとして使用しています。 CSVW仕様で定義されているrdf:Listとしては使用していません。テーブル内の列名は一意である必要があるため、3回構成されるコンポーネント(血圧測定値)は、パスを列名とする3つの列になります。 - リリース8の
CHANGELOG.mdとルートのshacl/はDCAT-AP 3.0.1のもので、変更されていません。 HealthDCAT-APのシェイプは、バリデーターの設定パスの下にのみ格納されています。
MCP サーバー
sdchealthdcatap は、io.github.SemanticDataCharter/sdchealthdcatap として登録された MCP サーバーでもあります。そのため、sdcreader で公開済みモデルを読み取れるアシスタントは、そのモデルの HealthDCAT-AP の説明を取得できます。ツールは 1 つで、CLI が呼び出すものと同じ関数を使う write_catalog です。stdio を使用し、返すドキュメント以外は読み取り専用です。アカウントは不要です。ツールが URL を受け取ることはありません(カタログホストは起動時に --host で固定されます)。プロトコルの基盤となる sdcreader.mcp は、すべての SDC 投影サーバーで共有されています。
uvx sdchealthdcatap mcp # or: sdchealthdcatap-mcp, or sdchealthdcatap mcp
構成
- モデルのパッケージは
sdcreader(load_package、fetch_package、read_model)で読み取ります。これにはレコードツリーとそのリーフ、コード付きの列挙値、SDCStudio のデフォルト値が未設定の状態で保持されたモデルの Dublin Core が含まれます。パッケージ形式については、そちらで一度説明されています。 src/sdchealthdcatap/:dcatap.py(sdc_dcat3_apから再利用した DCAT-AP グラフビルダー)、healthdcatap.py(ヘルスレイヤーとテーブルグループ)、validate.py(pySHACL を使用したバリデーターのシェイプセット)、cli.py、data/catalog.yaml(サンプルの宣言済み入力)。data/healthdcat-ap-r8-cd7841f/:固定したコミット時点のリリースのシェイプ、コンテキスト、バリデーター設定、シェイプで指定されている語彙、サンプル。samples/nhanes-participant/:取得したモデルのパッケージと、そこから作成したカタログ(Turtle および JSON-LD)。build/snapshot_healthdcat_ap.py:固定したコミットの読み取り専用クローンからdata/を再作成します。
ライセンス
Apache-2.0(LICENSE、NOTICE を参照)。data/ 内の HealthDCAT-AP アーティファクトは CC BY 4.0 で、ここでもそのライセンスを維持しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。