| シャクル | |
|---|---|
| 形状制約言語 | |
| 略語 | シャクル |
| 状態 | 公開済み、W3C勧告 [1] |
| 年が始まった | 2015年[2] (2015) |
| 初版 | 2015年10月8日[2] (2015-10-08) |
| 組織 | W3C |
| 委員会 | RDFデータシェイプワーキンググループ |
| 編集者 |
|
| 基本基準 | |
| 関連規格 | |
| ドメイン | セマンティックウェブ |
| Webサイト | www.w3.org/TR/shacl/ |
形状制約言語[1] ( SHACL ) は、リソース記述フレームワーク(RDF) グラフを記述するためのワールドワイドウェブコンソーシアム(W3C) 標準言語です。SHACL は、RDF グラフとして表現されるオントロジーの意味的および技術的な相互運用性層を強化するために設計されています。[3]
SHACLモデルは、グラフの内容、構造、意味に対する制約に基づいて定義されます。SHACLは非常に表現力の高い言語です。特に、プロパティが持つことができる値の数、値の型、数値の範囲、文字列の一致パターン、そしてそれらの制約の論理的な組み合わせを制約する条件を表現する機能が含まれています。また、SHACLには、SPARQLやJavaScriptなどの言語でより複雑な条件を表現するための拡張メカニズムも含まれています。SHACLルールはSHACLに推論機能を追加し、ユーザーは既存の(アサートされた)ステートメントから推論できる新しいステートメントを定義できます。
用語
SHACL を使用すると、ユーザーは特定の形状が適用される場所をターゲットにして、データの形状を記述できます。
プロパティシェイプ
プロパティシェイプは、特定のパスを経由して到達可能なグラフノードの特性を記述します。パスは、単一の述語(プロパティ)または述語の連鎖です。プロパティシェイプは常にパスを指定する必要があります。これは述語を使用することで実現されます。単純なパスを使用するプロパティシェイプは、特定のプロパティの値(例えば、 ageプロパティの値やworks forプロパティの値など)sh:pathを記述するものと考えることができます。複雑なパスは、逆方向、代替述語、推移的連鎖など、連鎖内の異なる述語の組み合わせを指定できます。
プロパティシェイプはノードシェイプの一部として定義できます。この場合、ノードシェイプはsh:property述語を使用してプロパティシェイプを指します。プロパティシェイプは「スタンドアロン」、つまりどのノードシェイプからも完全に独立して定義することもできます。
ノードの形状
ノードシェイプは、特定のグラフノードの特性を表します。そのノードへのアクセス方法に関わらず、その特性を記述します。例えば、特定のグラフノードはリテラルまたはURIでなければならない、などといった指定が可能です。ノードシェイプにはプロパティシェイプを含めることが一般的で、これによりノードの様々なプロパティの値を効果的に定義できます。
たとえば、従業員のノード シェイプには、年齢のプロパティ シェイプやプロパティの作業が組み込まれている場合があります。
制約
制約は、値の様々な特性を記述する方法です。シェイプには、1つ以上の制約宣言が含まれます。SHACLは、多くの組み込み制約タイプを提供します。例えば、sh:datatypeはリテラル値の種類(文字列、整数、日付など)を記述するために使用されます。は、sh:minCount必要な値の最小数を記述するために使用されます。sh:lengthは、値の文字数を記述するために使用されます。
ターゲット
ターゲットは、シェイプとそれが記述するデータを結び付けます。ターゲットを指定する最も簡単な方法は、ノードシェイプもクラスであると宣言することです。これは、その定義がクラスのすべてのメンバー(インスタンス)に適用可能であることを意味します。シェイプのターゲットを定義する他の方法は、以下のとおりです。
- シェイプが特定のクラスのメンバーを対象としていることを明示的に示す。これは、ノードシェイプをクラスにする代わりに行うことができます。
- URI を指定して、シェイプが特定のリソースを対象としていることを示します。
- ある図形が、特定の述語を持つ三つ組のすべての主語またはすべての目的語を対象としていることを示します。
- SPARQL クエリを使用して、対象となるリソースのセットを選択します。
ターゲット宣言はノードシェイプまたはプロパティシェイプに含めることができます。ただし、プロパティシェイプがノードシェイプの一部である場合、そのプロパティシェイプ自体のターゲットは無視されます。
SHACLはrdfs:subClassOfステートメントを用いてターゲットを識別します。あるクラスのメンバーをターゲットとするシェイプは、そのすべてのサブクラスのメンバーもターゲットとします。つまり、あるクラスのすべてのSHACL定義はサブクラスに継承されます。
検証
SHACLはグラフの検証を可能にします。SHACL検証エンジンは、検証対象のグラフ(データグラフ)とSHACLシェイプ宣言を含むグラフ(シェイプグラフ)を入力として受け取り、グラフとして表現される検証レポートを生成します。これらのグラフはすべて、JSON-LDやTurtleを含む任意のリソース記述フレームワーク(RDF)シリアル化形式で表現できます。
SHACL は、検証結果の重大度レベルを指定する機能だけでなく、検証結果が発生した場合にデータを修正する方法についての提案を返す機能も組み込んでいる点で、そのアプローチが非常にユニークです。 組み込まれているレベルは、違反、警告、および情報で、sh:severity図形に が指定されていない場合は、デフォルトで違反になります。 SHACL のユーザーは、他のカスタムの重大度レベルを追加できます。 仕様で説明されているように、検証結果には、他のプロパティの値がある場合もあります。たとえば、プロパティは、検証結果に対処するためにデータを修正する方法に関する推奨事項など、追加のテキスト詳細をユーザーに伝えるように設計されています。 制約に図形グラフのsh:resultMessageの値がない場合、 SHACL プロセッサは の他の値を自動的に生成することがあります。一部の SHACL プロセッサ (TopQuadrant によって実装されたものなど) は、これらの提案をソフトウェアで実行可能にし、ユーザーの要求に応じてアプリケーションを自動化しました。
sh:messagesh:resultMessage
仕様
World Wide Web Consortium は次の SHACL 仕様を公開しました。
- SHACL [1] (W3C技術勧告) は、SHACL Coreとその拡張メカニズムであるSHACL-SPARQLの機能を定義する主要な文書です。SHACL Coreは、シェイプの基本構文と構造、制約、組み込み制約の種類、そしてシェイプをデータノードにリンクする方法を定義します。SHACL-SPARQLは、組み込み制約の種類でカバーされていない制約の表現方法を定義します。
- SHACLの高度な機能[4](W3Cワーキンググループノート)は、SHACLコミュニティグループによって最新版がメンテナンスされており、データ形状に基づくデータ変換、推論、マッピングのための強力な機能(SPINルールに着想を得た)であるSHACLルールのサポートを定義しています。また、ユーザー定義関数などのSHACL-SPARQLの拡張機能も含まれています。
- SHACL JavaScript拡張[5](W3Cワーキンググループノート)は、JavaScriptを用いて制約、ルール、関数、その他の機能を表現する方法を定義しています。これはSHACL-SPARQLと同様の範囲をカバーしていますが、実行言語としてJavaScriptを使用しています。
- SHACLコンパクト構文[6](SHACLコミュニティグループレポート)。
オープンソースツール
SHACL W3C仕様からリンクされているSHACLテストスイートおよび実装レポート[7]には、2019年6月時点でSHACL検証に使用できるオープンソースツールがいくつかリストされています。2019年末までに、多くの商用RDFデータベースおよびフレームワークベンダーが、少なくともSHACL Coreのサポートを発表しました。
レポートに記載されているオープンソース ツールの一部は次のとおりです。
- dotNetRDF SHACL - .NET Frameworkで書かれたオンラインSHACL検証サービス[8] [9]
- pySHACL - Pythonで書かれたコマンドライン用のオープンソースSHACL検証ライブラリ[10]
- SHaclEX - SHACLとShExのScala実装[11]
- TopBraid SHACL API - TopQuadrantによるApache JenaベースのSHACLのオープンソース実装。SHACL Core、SHACL-SPARQL検証に加え、SHACL Advanced Features、SHACL Javascript Extension、SHACL Compact Syntaxをカバーしています。TopBraidの商用製品でも同じコードが使用されています。[12]
SHACL PlaygroundはJavaScriptで実装された無料のSHACL検証サービスです。[13]
Eclipse RDF4Jは、 Eclipse FoundationによるRDFデータ処理用のオープンソースJavaフレームワークであり、SHACL検証をサポートしています。[14]
商用ツール
SHACLは、Cambridge Semantics (Anzo) [15] 、 Franz ( AllegroGraph )、[16]、Metaphacts、[17] 、 Ontotext ( GraphDB )、[18 ] 、TopQuadrantなど、ほとんどのRDFグラフ技術ベンダーによってサポートされています。Neo4J [19]など、プロパティグラフデータモデルを使用する商用製品でもサポートされています。
実装レベルはベンダーによって異なります。ベンダーは最低限、SHACL Coreをサポートしています。より高い表現力を実現するためにSHACL SPARQLをサポートするベンダーもあれば、ルールや関数を含むSHACL Advanced Featuresをサポートするベンダーもあります。
参照
参考文献
- ^ abcd Knublauch, Holger; Kontokostas, Dimitris 編 (2017-07-20). 「Shapes Constraint Language (SHACL)」. W3C . RDF Data Shapes Working Group . 2021-04-06閲覧。
- ^ ab 「Shapes Constraint Language (SHACL) Publication History - W3C」。W3C . 2017年7月20日. 2021年4月6日閲覧。
- ^ 「欧州委員会によるSHACLのCAMSS評価」。
- ^ Knublauch, Holger; Allemang, Dean; Steyskal, Simon 編 (2017-06-08). 「SHACL の高度な機能」. W3C . RDF データシェイプワーキンググループ. 2021-04-06閲覧.
- ^ Knublauch, Holger; Maria, Pano 編 (2018-01-09). 「SHACL JavaScript 拡張」. W3C . SHACL コミュニティグループ.
- ^ Knublauch, Holger; Maria, Pano 編 (2018-01-09). 「SHACLコンパクト構文」. W3C . SHACLコミュニティグループ.
- ^ Labra Gayo, Jose Emilio; Knublauch, Holger; Kontokostas, Dimitris 編 (2021-01-22). 「SHACLテストスイートおよび実装レポート」W3C .
- ^ ラング、サム(nd)。 「dotNetRDF SHACL」。langsamu.net 。2021年4月6日閲覧。
- ^ Lang, Samu (2019-06-01). 「dotNetRDF SHACL バリデータサービス」. GitHub . 2021年4月7日閲覧。
- ^ Sommer, Ashley; Car, Nicholas (2018-08-15). 「RDFLib/pySHACL: SHACL用のPythonバリデータ」. GitHub . 2021年4月6日閲覧。
- ^ Labra Gayo, Jose Emilio; et al. (Web Semantics Oviedo, オビエド大学). 「weso/shaclex: SHACL/ShEx実装」. GitHub . 2021年4月6日閲覧。
- ^ ホルガー、クヌブラウフ (2015-05-24)。 「TopQuadrant/shacl: Apache Jena に基づく Java の SHACL API」。GitHub 。2021年4月6日閲覧。
- ^ Knublauch, Holger (2017年5月1日). 「SHACL Playground」. SHACL Playground . 2021年4月7日閲覧。
- ^ 「RDF4Jを使ったプログラミング:SHACLを使った検証」 。 2024年8月29日閲覧。
- ^ 「AnzoGraph DB 3.1: SHACLによるデータ検証(プレビュー)」 。 2024年8月29日閲覧。
- ^ 「metaphactory: Data Quality Service」 . 2024年8月29日閲覧。
- ^ 「GraphDB 10.7: SHACL検証」 。 2024年8月29日閲覧。
- ^ 「Stardog: データ品質制約: SHACL制約」 。 2024年8月29日閲覧。
- ^ 「SHACLに対するNeo4jグラフの検証」 。 2024年8月29日閲覧。