SHACL 1.2 コア

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-shacl12-core-20261014/
最新公開バージョン:
https://www.w3.org/TR/shacl12-core/
最新エディター草案:
https://w3c.github.io/data-shapes/shacl12-core/
履歴:
https://www.w3.org/standards/history/shacl12-core/
コミット履歴
テストスイート:
https://github.com/w3c/data-shapes/tree/gh-pages/shacl12-test-suite
最新勧告:
https://www.w3.org/TR/2017/REC-shacl-20170720/
編集者:
(TopQuadrant, Inc.)
(TopQuadrant, Inc.)
(Inria)
(オックスフォード大学)
元編集者:
Dimitris Kontokostas
フィードバック:
GitHub w3c/data-shapes (プルリクエスト, 新しい課題, 未解決の課題)
public-shacl@w3.org 宛て、件名 行は [shacl12-core] (アーカイブ)

要約

この文書は、SHACL のコアを定義する。

SHACL、すなわち Shapes Constraint Language は、RDF グラフの構造を記述するための言語である。 SHACL は、クラスおよびそれらのクラスのインスタンスが持つことができるプロパティを定義するために使用できる。 クラスおよびインスタンスよりも一般的に、SHACL は形状という概念を導入し、 RDF ノードおよびエッジの構造に対する制約を形式的に指定できるようにする。 SHACL 形状は、それ自体が形状グラフと呼ばれる RDF グラフで表される。 形状グラフによって記述される RDF グラフは、データグラフと呼ばれる。

SHACL は、 検証、推論、ドメインのモデリング、他のエージェントに情報を与えるためのオントロジー生成、 ユーザーインターフェイスの構築、コード生成、およびデータ統合など、さまざまな目的に使用できる。

この文書のステータス

この節は、この文書の公開時点におけるステータスを説明する。現在の W3C 公開文書およびこの技術報告書の最新リビジョンの一覧は、 W3C 標準および草案 索引にある。

この文書は、Data Shapes Working Group により、 勧告 トラックを用いる 作業草案として公開された。

作業草案としての公開は、 W3C およびその会員による承認を意味しない。

これは草案文書であり、いつでも他の文書により更新、置換、または廃止される可能性がある。 この文書を進行中の作業以外のものとして引用することは適切ではない。

この文書は、 W3C 特許 ポリシーの下で運営される グループにより作成された。 W3C は、 そのグループの成果物に関連して行われた すべての特許開示の公開リスト を管理している。このページには、 特許を開示するための手順も含まれている。ある特許が 必須クレーム を含むと実際に知っている個人は、その情報を W3C 特許ポリシー第6節 に従って開示しなければならない。

この文書は、 2025年8月18日版 W3C プロセス文書 によって管理される。

SHACL 仕様

この仕様は SHACL 1.2 仕様群の一部です。次の文書を参照してください: SHACL 1.2 概要 には、より詳細な これらの仕様の紹介があります。

仕様は次のとおりです:

作業草案:

SHACL 1.2 コア
SHACL のコアを定義する
SHACL 1.2 ノード式
SHACL でフォーカスノードと値ノードを導出するために使用される式を定義する
SHACL 1.2 SPARQL 関連機能
SHACL の SPARQL 関連の拡張を定義する
SHACL 1.2 推論規則
SHACL の規則に基づく推論のフレームワークを定義する
SHACL 1.2 プロファイリング
SHACL データを含むデータのプロファイリングにおける SHACL の使用を定義する
SHACL 1.2 ユーザー インターフェイス
ユーザーインターフェイスの生成における SHACL の使用を定義する
SPARQL 1.2 RL
SHACL 1.2 推論規則とともに使用できる RDF 用の Datalog 形式の規則言語を定義する

編集者草案:

SHACL 1.2 概要
SHACL 仕様群を概説する
SHACL 1.2 コンパクト構文
SHACL の概念を表現するための RDF 構文を定義する
注記

実装者は、上記の仕様への適合度を部分的に確認できます。そのためにはテストを 自ら 各仕様が提供し、それぞれのメタデータからリンクされているテストケースを用いて行います。 ただし、テストスイート内のすべてのテストに合格しても、完全な適合を意味するわけではない点に注意してください。その 仕様に関して、 合格が意味するのは、実装がテストスイートでテストされた側面に適合していることだけです。

文書の概略

序論には用語の節が含まれる。

2. SHACL コア入門 では、例を用いて SHACL コアを非形式的に紹介する。

3. シェイプと制約および4. SHACL プロパティパスでは、SHACL の シェイプと制約、およびプロパティパスを扱う。

5. ノード式ではノード 式を紹介し、6. 検証と グラフでは SHACL における検証を定義する。

7. コア制約コンポーネント では、SHACL コアに組み込まれた制約コンポーネントを定義し、8. 検証を行わないシェイプの特性では、検証を行わないプロパティについて説明する。

SHACL の構文は RDF である。 この文書の例では、Turtle [rdf12-turtle] および JSON-LD [json-ld] を使用する。 実際には、RDF/XML などの他の RDF 直列化形式も使用できる。 読者は、トリプルなどの基本的な RDF の概念 [rdf12-concepts] に精通していることが望ましい。

1. はじめに

この文書は、RDF グラフを記述し検証するための言語である SHACL(Shapes Constraint Language)のコアを規定する。 この節では、主要な用語の概要と基本概念を説明する例を用いて SHACL を導入する。

1.1 用語

この文書全体を通じて、次の用語を使用する。

RDF 1.2 Concepts and Abstract Syntax の各部分にリンクされている用語は、そこで定義されているとおりに SHACL で使用される。SPARQL 1.2 Query Language の 各部分にリンクされている用語は、そこで定義されているとおりに SHACL で使用される。1 つの リンクがあれば、この文書内における特定の用語のすべての出現箇所に対する 定義を提供するのに十分である。

定義はこの文書内で完全である。すなわち、この文書において ある状況を真にする規則が存在しない場合、その状況は偽である。

基本 RDF 用語
この文書では、 RDF グラフ、 RDF トリプル、 IRI、 リテラル、 データ型、 基底方向、 空白ノード、 トリプル項、 具象化子、 RDF グラフの ノード、 RDF 項、 主語、 述語、および RDF トリプルの 目的語 という用語を、RDF 1.2 Concepts and Abstract Syntax [rdf12-concepts] で定義されているとおりに使用する。 言語タグは、[BCP47] と同様に定義される。
プロパティ値とパス
プロパティは IRI である。 RDF 項 n は、 RDF グラフ内のプロパティ p について 値 v を持つ。 これは、そのグラフ内に、主語 n、 述語 p、および 目的語 v を持つ RDF トリプルが存在する場合である。 「グラフ G における P のすべての値 ...」という句は、「述語 P を持つ G 内のトリプルのすべての目的語 ...」を意味する。 (この文書では、RDF 項があるグラフ内の所与の述語について値を持つという事実を表すために、 動詞 specify または declare が使用されることがある。)
SPARQL プロパティパスは、SPARQL 1.2 と同様に定義される。 RDF 項 n が、RDF グラフ G において SPARQL プロパティ パス式 p について値 v を持つとは、G に対する SPARQL クエリー SELECT ?s ?o WHERE { ?s p' ?o } の結果に、 ?s を n に、?o を v に束縛する 解マッピングが存在する場合であり、 ここで p' は p の SPARQL 表層構文である。
SHACL リスト
RDF グラフ G における SHACL リスト は、IRI または 空白ノードであり、 rdf:nil(ただし rdf:nil が rdf:first または rdf:rest のいずれについても 値を持たない場合)、または G においてプロパティ rdf:first についてちょうど1つの 値を持ち、かつ G においてプロパティ rdf:rest について、G における SHACL リストでもあるちょうど1つの 値 を持ち、さらにそのリストが G においてプロパティパス rdf:rest+ の値として 自分自身を持たないもののいずれかである。
RDF グラフ G における rdf:nil 以外の任意の SHACL リストの メンバーは、G における rdf:first の値と、それに続く、G における rdf:rest の値の G におけるメンバーから成る。 SHACL リスト rdf:nil は、いかなる RDF グラフにおいてもメンバーを持たない。
SHACL サブクラス、SHACL スーパークラス
ノードSubがRDFグラフ内で、あるSHACL サブクラス関係にあり、その上位側が別のノードSuper であるという関係がグラフ内で成り立つのは、トリプルの列がグラフ内に存在し、その各トリプルの述語がrdfs:subClassOf であり、最初の主語については、最初のトリプルのものがSub、 目的語については、最後のトリプルのものがSuperであり、 さらに、目的語については、最後を除く各トリプルのものが、次のトリプルの主語である場合である。 SubがSHACLサブクラス関係にあり、その上位側がSuperであるという関係がRDFグラフ内で成り立つ場合、Super はSHACL スーパークラス関係にあり、その下位側はSubである。この関係はグラフ内で成り立つ。
SHACL 型
RDF 項の、RDF グラフ内における SHACL 型は、 そのグラフ内における rdf:type についての 値の集合、 およびそのグラフ内におけるそれらの 値の SHACL スーパークラスである。 いくつかの SHACL 実装は、SHACL サブクラスを決定する rdfs:subClassOf トリプルが、 データグラフに加えて 形状グラフからも照会されるようにパラメーター化できることに注意されたい。 6.4 rdfs:subClassOf トリプルのためのグラフを参照。
SHACL クラス
ノードのうち、RDFグラフ内にあり、別のノードのサブクラス、スーパークラス、または型である ものについて、そのノードも同じグラフ内にある場合、それらをSHACLクラスと呼ぶ。
SHACL クラスインスタンス
ノード n は、RDF グラフ G における SHACL クラス C の SHACL インスタンスである。 これは、G における n の SHACL 型の1つが C である場合である。
ディープコピー
ノードn(グラフsourceGraph内)について、 そのディープコピー(nをグラフtargetGraphへコピーしたもの)は、 nをtargetGraphに含み、さらに、nが空白ノードである場合、 sourceGraphから到達できるすべてのトリプルを含む。それらには、 推移的にたどることで到達できるものを含み、 たどる対象となる空白ノードは、到達可能なトリプルの目的語位置に現れるものである。 開始時にはnを主語とする。これは、 簡潔な有界記述に似ているが、 具体化は行わない。

1.2 文書の表記規則

この文書内では、次の名前空間接頭辞定義が使用される:

接頭辞 名前空間
owl: http://www.w3.org/2002/07/owl#
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs: http://www.w3.org/2000/01/rdf-schema#
sh: http://www.w3.org/ns/shacl#
xsd: http://www.w3.org/2001/XMLSchema#
ex: http://example.com/ns#

この文書内では、次の JSON-LD コンテキストが使用される:

{
  "@context": {
    "owl": "http://www.w3.org/2002/07/owl#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "sh": "http://www.w3.org/ns/shacl#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "ex": "http://example.com/ns#"
  }
}

SHACL 語彙自体を定義するグラフの URI は上記の名前空間と等価であり、 すなわち # を含むことに注意されたい。 たとえば owl:imports を介した SHACL 語彙への参照には、 # を含めるべきである。

文書全体を通じて、Turtle、JSON-LD、および SHACL-C の RDF グラフを含む色分けされたボックスが 表示される。 Turtle 文書のこれらの断片は、上記の接頭辞束縛を使用する。 JSON-LD 文書断片は、上記のコンテキストを使用する。 特定の部分を強調表示できるのは Turtle 文書のみである。 SHACL-C 仕様は不安定であり、この文書内の SHACL-C 文書断片は参考情報である

このような灰色のボックスには、形状グラフに適用される構文規則が含まれる。

true は RDF 項 "true"^^xsd:boolean を表す。 false は RDF 項 "false"^^xsd:boolean を表す。

1.3 適合性

非規範的として示された節と同様に、この仕様におけるすべての作成ガイドライン、図、例、および注は 非規範的である。それ以外のすべてはこの仕様において規範的である。

この文書におけるキーワード MAY、MUST、MUST NOT、SHOULD、および SHOULD NOT は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているとおりに解釈される。

この文書は、単に SHACL とも呼ばれる SHACL Core 言語を定義する。 この仕様は、次に対する適合基準を記述する:

この文書には、シェイプやその他のノードがシェイプグラフ内で満たす必要がある構文規則が含まれる (また、sh:shapesGraph などの一部のプロパティについては、データグラフ内でも適用される)。 これらの規則は通常、シェイプは...を持たなければならない、X の値は リテラルである、または述語が P であるトリプルのすべてのオブジェクトは IRI でなければならないという形式を取る。 これらの規則の完全な一覧は付録に記載されている。 これらの規則のいずれかに違反するノードは、不正形式と呼ばれる。 これらの規則のいずれにも違反しないノードは、整形式と呼ばれる。

形状グラフは、次の条件がすべて成り立つ場合に 正形式である:

  1. それは 不正形式のノードを含まない(すなわち、すべてのノードが上記の構文規則を 満たす)。
  2. そのインポート閉包( owl:imports 文を推移的にたどることにより決定される) は、OWL 2 構文仕様 [owl2-syntax] の 第3.4節で定義される制約を満たす。 すなわち、次のような2つの形状グラフを含まない:
    • それらが同一系列の異なるバージョンである (すなわち、同じ形状グラフ IRI を共有するが、異なる owl:versionIRI 値を持つ)場合、または
    • 一方が owl:incompatibleWith 注釈を含み、その値が他方の形状グラフ IRI または owl:versionIRI のいずれかに等しい場合。

正形式ではない 形状グラフは 不正形式である。

1.4 SHACL と RDFS 推論の関係

SHACLはRDFおよびRDFSの語彙を使用するが、完全なRDFS推論は必要とされない。

ただし、SHACLプロセッサーは次のことをしてもよい: 含意を含むRDFグラフ上で動作する [sparql12-entailment]。 含意は、SHACLプロセッサーへ渡される前に事前計算されたものでも、 SHACL処理の一部としてオンザフライで実行されたものでもよい(データグラフとシェイプグラフのいずれも変更しない)。 含意の処理をサポートするため、SHACLにはプロパティ sh:entailmentが含まれる。これは、指定されたシェイプグラフが必要とする推論を示す。

プロパティ sh:entailmentの値 はIRIである。 このプロパティの一般的な値は、[sparql12-entailment]で扱われている。

SHACL実装による含意レジームのサポートは任意である(必須ではない)。 シェイプグラフが、トリプルを含み、その述語がsh:entailment、目的語がEであり、 SHACLプロセッサーが、指定されたデータ グラフに対する含意レジームとしてEをサポートしない場合、 プロセッサーは次を通知しなければならない: 失敗。 それ以外の場合、SHACLプロセッサーは次を提供しなければならない: sh:entailmentのすべての値(シェイプグラフ内のもの)に対する含意。 また、推論されたすべてのトリプルは返されなければならない(データ グラフに対するすべてのクエリにより、検証処理中に)。

2. SHACL Core 入門

この節は非規範的である。

この節では、SHACL Core の基本を紹介する簡単な例を順に説明する。 データがどのように見えるべきかを記述する方法と、SHACL プロセッサーがデータが その記述を満たしているかどうかをどのように確認するかを学ぶ。

2.1 ユースケース

エンティティの集合(Alice、Bob、Calvin)があり、それについてコンピューターまたは別の 人間に次のことを説明したいとする。

  1. これらのエンティティの型である ex:Person というクラスが存在する
  2. ex:Person の各インスタンスは最大1つの社会保障番号(SSN)を持ち、その SSN は 適切に整形されたテキスト(123-45-6789 など)である必要がある
  3. ex:Person の各インスタンスは1つ以上の会社で働くことができるが、それらの会社は データ内で ex:Company として型付けされていなければならない
  4. SSN (ex:ssn)、勤務先関係(ex:worksFor)、および必須の型付け (rdf:type)以外のプロパティは、ex:Person に対して許可されない

2.2 サンプルデータ(データグラフ)

記述し検証したいデータは次のとおりである:

2.3 形状と クラスを書く(形状グラフ)

ここに、関心のあるドメインを表現する方法の自己完結した例を示す。 SHACL の用語では、これは 形状グラフと呼ばれるが、 ドメインモデルまたはオントロジーと考えることもできる。

2.4 検証の 実行(検証レポート)

形状グラフを用いて データグラフに対して SHACL 検証を実行すると、 検証器は、記述した制約に照らして各 Person をチェックする。

平易な英語で言えば、それが見つけるものは次のとおりである:

この例の SHACL 検証レポートは次のようになる可能性がある(読みやすさのために簡略化):

レポートの読み方:

2.5 形状とクラスの 構文上のバリエーション

SHACL は主に形状を表現するために設計されているが、 rdfs:Class や rdfs:subClassOf などの用語や概念も RDF Schema 名前空間から借用する。 元の例で ex:Person と ex:PersonShape に別々のエンティティがあったように、 それらの概念を分けておくことを好む人もいる。 しかし、それらをより密接に結び付け、sh:ShapeClass を使って クラスと形状の両方を同時に宣言することも可能である。

さらに、プロパティ形状が 空白ノードとして宣言されているのを見かけることがある。 IRIの代わりに そうするものである。 これはよりコンパクトな表記だが、たとえば他のグラフがノード形状を再利用しつつ プロパティ形状を無効化したい場合などに、そのプロパティ形状を外部から容易に参照できないことを意味する。

次の Turtle 例は、これら2つの構文上のバリエーションが実際に使われる様子を示している。

2.6 いくつかの SHACL 用語の導入

上記の形状宣言を用いて、SHACL で使用される形式的な用語のいくつかを導入できる。 これは、この仕様の残りの部分を読む助けになるかもしれない。

ex:PersonShape という 形状の ターゲットは、 ex:Person という クラスの すべての SHACL インスタンスの集合である。 これはプロパティ sh:targetClass を用いて指定される。 検証中、これらのターゲットノードは、その形状の フォーカスノードになる。 ex:PersonShape という 形状は ノード形状であり、これはフォーカスノードに適用されることを意味する。 それは、たとえば sh:closed および sh:ignoredProperties という パラメーターを用いて、 フォーカスノードに対する 制約を宣言する。 また、この ノード形状は、プロパティ sh:property により、他に2つの制約も宣言しており、 それぞれが プロパティ形状に裏付けられている。 これらの プロパティ形状は、sh:datatype や sh:maxCount などの パラメーターを用いて、追加の 制約を宣言する。

一部の プロパティ形状は、 プロパティ値の複数の側面を制限するために、複数の 制約コンポーネントからのパラメーターを指定する。 たとえば、ex:ssn に対する プロパティ形状では、3つの 制約コンポーネントからのパラメーターが使用されている。 これらの 制約 コンポーネントの パラメーターは、 sh:datatype、sh:pattern、および sh:maxCount である。 各 フォーカスノードについて、ex:ssn の プロパティ値は、 3つのコンポーネントすべてに対して検証される。

3. 形状と制約

次の導入は非規範的である。

次の非形式的な図は、SHACL 語彙における主要なクラスの一部の概要を示す。 各ボックスはクラスを表す。 クラス名の下にあるボックスは、これらのクラスのインスタンスが持つ可能性のある よく使われるプロパティの小さな部分集合を、その値型とともに列挙している。 矢印は rdfs:subClassOf トリプルを示す。

sh:targetClass : rdfs:Class
sh:targetObjectsOf : rdf:Property
sh:targetSubjectsOf : rdf:Property
sh:name : xsd:string or rdf:dirLangString or rdf:langString
sh:deactivated : xsd:boolean
sh:message : text
sh:severity : sh:Severity
クラス図の矢印
sh:closed : xsd:boolean または sh:ByTypes
sh:or, sh:and, sh:xone : rdf:List
sh:not : sh:Shape
sh:property : sh:PropertyShape
sh:minCount, sh:maxCount : xsd:integer
sh:minLength, sh:maxLength : xsd:integer
sh:class, sh:datatype : rdfs:Resource または rdfs:Resources の rdf:List
sh:node : sh:NodeShape
sh:values : any
sh:group : sh:PropertyGroup
sh:path : rdfs:Resource

SHACL 語彙の Turtle シリアライズには、 完全な SHACL 語彙が含まれている。

3.1 形状

シェイプは、IRIまたは空白ノード sであり、 シェイプグラフ内で次の条件の少なくとも1つを満たすものをいう。

上記の定義には、正形式の形状に関する すべての構文規則が含まれているわけではないことに注意されたい。 それらは文書全体に見られ、付録 A. SHACL 構文規則の要約にまとめられている。 たとえば、sh:targetClass の値として リテラルを持つ形状は 不正形式である。

非形式的には、形状は、プロパティの値および フォーカスノードの他の特性に基づいて、フォーカスノードを どのように検証するかを決定する。 たとえば、形状は、フォーカスノードが IRI であること、またはフォーカスノードが あるプロパティについて特定の値を持ち、さらにそのプロパティについて最小数の値を持つことを 条件として宣言できる。

SHACL Core 言語は、2種類の形状を定義する:

sh:Shape は、SHACL 語彙におけるこれら2種類の形状型の SHACL スーパークラスである。 そのサブクラスである sh:NodeShape および sh:PropertyShape は、 それぞれノード形状およびプロパティ形状の SHACL 型として使用できる。

3.1.1 制約、パラメーター、および制約コンポーネント

形状は、制約コンポーネントの パラメーターを用いて 制約を宣言できる。

制約 コンポーネントは IRIである。 各制約コンポーネントは、1つ以上の 必須 パラメーターを持ち、それぞれはプロパティである。 各制約コンポーネントは、0個以上の 任意 パラメーターを持ち、それぞれはプロパティである。 制約コンポーネントの パラメーターは、その必須パラメーターと任意パラメーターを合わせたものである。

たとえば、コンポーネント sh:MinCountConstraintComponent は、 パラメーター sh:minCount を宣言し、ノードが特定のプロパティについて 少なくとも最小数の値を持つという 制限を表す。

必須パラメーター p1, ... pn を持つ 制約コンポーネント C について、 形状 s が、形状グラフ SG 内で pi について vi を 値として持つとき、 s は、SG 内で 必須パラメーターの 値 <p1,v1>, ... <pn,vn> を持つ C という 種別の 制約を宣言する。 任意パラメーターを持つ 制約コンポーネントでは、その制約宣言は、その形状がそのコンポーネントのすべての必須および 任意パラメーターについて持つ 値から成る。

一部の制約コンポーネントは、単一のパラメーターのみを宣言する。 たとえば sh:ClassConstraintComponent は 単一のパラメーター sh:class を持つ。 これらのパラメーターは同じ形状内で複数回使用でき、 そのようなパラメーターの各値は個別の 制約を宣言する。 そのような宣言の解釈は連言、すなわちすべての制約が適用されるということである。 次の例は、ex:customer の値が ex:Customer と ex:Person の両方の SHACL インスタンスでなければならないことを指定する。

sh:PatternConstraintComponent などの一部の 制約コンポーネントは、複数のパラメーターを宣言する。 そのようなコンポーネントのいずれかのパラメーターについて複数の値を持つ形状は 不正形式である。

この構文規則を回避する1つの方法は、次の例に示すように、制約を複数の(プロパティ)形状に分散させることである。

制約コンポーネントは、パラメーターがデータの検証にどのように使用されるかについての 指示(たとえば SPARQL クエリーで表現される)を提供する 検証器と関連付けられる。 RDF 項を 形状に対して検証することは、 その形状が制約の コンポーネントの すべての必須 パラメーターについて 値を持つ各 制約に対して、その項を検証することを含み、 それぞれのコンポーネントに関連付けられた検証器を使用する。

SHACL コアに含まれる制約コンポーネントの一覧は、7. コア制約コンポーネントで説明する。 SHACL-SPARQL を使用して、追加のSPARQL に基づく制約 コンポーネントを宣言できる。

3.1.2 フォーカスノード

データグラフからのトリプルを用いて 形状に 対して検証される RDF 項は、 フォーカスノード と呼ばれる。

この節の残りは非規範的である。

形状に対する フォーカスノードの集合は、次のように識別できる:

3.1.3 ターゲット

シェイプグラフ内のシェイプのターゲット宣言とは、 トリプルであり、シェイプを主語とし、この文書で説明する特定のプロパティ (例:sh:targetClass)を述語とするものをいう。 さらに、sh:shape トリプルによって、データグラフ内でターゲットを宣言できる。 ターゲット宣言を使用して、シェイプのフォーカスノードを生成できる。 ターゲット宣言のターゲットとは、 この節の残りの部分で説明する規則をデータグラフに適用することで 生成される RDF 用語の集合である。 シェイプのターゲットとは、 そのシェイプに対して宣言された個々の ターゲット によって生成されるすべての RDF 用語の和集合であるシェイプのターゲットをいう。

SHACL コアには、次の種類のターゲットが含まれる。

この序論の残りの部分は非規範的である。

ターゲットによって生成される RDF 用語は、データグラフ内にノードとして存在する必要はない。 フォーカスノードがシェイプの検証プロセスへの入力として直接提供される場合、 そのシェイプのターゲットは無視される。 これには、シェイプがシェイプを要求する制約パラメーター( sh:nodeなど)のいずれかの値であり、 対応する制約コンポーネント( sh:NodeConstraintComponentなど)の検証中にフォーカスノードが決定される場合が含まれる。 このような場合、提供されたフォーカスノードはシェイプの ターゲットに含まれる必要はない。

3.1.3.1 ノードターゲット (sh:targetNode)

ノード ターゲットは、sh:targetNode 述語を用いて指定される。 形状内の sh:targetNode の各値は、正形式の ノード式である。

テキスト定義
s が形状であり、 形状グラフ SG 内で s が sh:targetNode について 値 expr を持つ場合、 evalExpr(expr, data graph, s, {}) の 出力ノードは、 フォーカスグラフとしての データグラフ DG に対する ターゲットである。

この節の残りは非規範的である。

下の例のデータでは、提供された形状のターゲットは ex:Alice のみである:

3.1.3.2 クラスベースのターゲット(sh:targetClass)

クラス ターゲットは、sh:targetClass 述語を用いて指定される。 形状内の sh:targetClass の各値は IRIである。

テキスト定義
s が形状グラフ SG 内の形状であり、 s が SG 内で sh:targetClass について 値 c を持つ場合、 データグラフ DG 内における c の SHACL インスタンスの集合は、SG 内の s に対する DG からの ターゲットである。

この節の残りは非規範的である。

この例では、ex:Alice と ex:Bob のみがフォーカスノードである。 SHACL インスタンスの定義によれば、 クラス階層をたどるために必要なすべての rdfs:subClassOf 宣言は データグラフ内に存在する必要があることに注意されたい。 ただし、ex:Person a rdfs:Class トリプルは、どちらのグラフにも存在する必要はない。

次の例では、選択されるフォーカスノードは ex:Who のみである。

rdfs:subClassOf トリプルは、 形状グラフから照会される場合がある (6.4 rdfs:subClassOf トリプルのためのグラフを参照)。この場合、上の例の rdfs:subClassOf トリプルは データグラフ内に ある必要はない。

3.1.3.3 暗黙のクラスターゲットと sh:ShapeClass

非形式的には、形状が 形状グラフ内で クラスでもあると宣言されている場合、 このクラスのすべての SHACL インスタンスは、その形状のターゲットである。

s が RDF グラフ G 内で sh:NodeShape または sh:PropertyShape の SHACL インスタンスであり、 s が G 内で rdfs:Class の SHACL インスタンスでもあり、かつ s が IRI でない場合、s は G 内の 不正形式の形状である。

テキスト定義
s が 形状グラフ SG 内で sh:NodeShape または sh:PropertyShape の SHACL インスタンスであり、かつ s が SG 内で rdfs:Class の SHACL インスタンスでもある場合、 データグラフ DG 内における s の SHACL インスタンスの集合は、 SG 内の s に対する DG からの ターゲットである。

SHACL 名前空間には、暗黙のクラスターゲットのパターンの構文上の近道として機能できる 専用クラス sh:ShapeClass が含まれる。

テキスト定義
クラス sh:ShapeClass は、 sh:NodeShape と rdfs:Class の両方の rdfs:subClassOf である。 s が形状グラフ SG 内で sh:ShapeClass の SHACL インスタンスである場合、 データグラフ DG 内における s の SHACL インスタンスの集合は、 SG 内の s に対する DG からの ターゲットである。

sh:ShapeClass は、SHACL を認識しない一部の実装では rdfs:Class のサブクラスであると理解されない可能性があることに留意されたい。 したがって、sh:ShapeClass を使用するグラフには owl:imports sh: 文を含めることが推奨される(ただし要求はされない)。

この節の残りは非規範的である。

次の例では、ex:Alice はフォーカスノードである。なぜなら、それは SHACL インスタンスであり、 その対象である ex:Person は 形状グラフ内で クラスでも形状でもあるからである。

上の例の次のバリエーションでは、ex:Person は sh:ShapeClass のインスタンスとして宣言されており、同じ解釈を持つ。

3.1.3.4 subjects-of ターゲット(sh:targetSubjectsOf)

subjects-of ターゲットは、 述語 sh:targetSubjectsOf を用いて指定される。 形状内の sh:targetSubjectsOf の 値は IRIである。

テキスト定義
s が形状グラフ SG 内の形状であり、 s が SG 内で sh:targetSubjectsOf について 値 p を持つ場合、データグラフ DG 内で p を 述語として持つトリプルの 主語であるノードの集合は、 SG 内の s に対する DG からの ターゲットである。

この節の残りは非規範的である。

上の例では、与えられた形状に対して検証されるのは ex:Alice のみである。 なぜなら、それは ex:knows を 述語として持つ トリプルの 主語だからである。

3.1.3.5 objects-of ターゲット(sh:targetObjectsOf)

objects-of ターゲットは、 述語 sh:targetObjectsOf を用いて指定される。 形状内の sh:targetObjectsOf の 値は IRIである。

テキスト定義
s が形状グラフ SG 内の形状であり、 s が SG 内で sh:targetObjectsOf について 値 p を持つ場合、データグラフ DG 内で p を 述語として持つトリプルの 目的語であるノードの集合は、 SG 内の s に対する DG からの ターゲットである。

この節の残りは非規範的である。

上の例では、与えられた形状に対して検証されるのは ex:Bob のみである。 なぜなら、それは ex:knows を 述語として持つ トリプルの 目的語だからである。

3.1.3.6 Where ターゲット (sh:targetWhere)

where ターゲットは、sh:targetWhere 述語を用いて指定される。 形状内の sh:targetWhere の各値は、 正形式の 形状である。

テキスト定義
s が形状グラフ SG 内の形状であり、 s が SG 内で sh:targetWhere について 値 w を持つ場合、 データグラフ DG 内で w に 適合する ノードの集合は、 SG 内の s に対する DG からの ターゲットである。

この節の残りは非規範的である。

この例では、ex:Bob のみが ex:AdultPerson のフォーカスノードである。 なぜなら、彼は sh:targetWhere 形状によって定義された2つの制約に適合するからである。 sh:class 制約に基づき、彼は ex:Person の SHACL インスタンスであり、 彼の ex:age は18以上である。 しかし、ex:AdultPerson 形状はすべての成人が ex:votedFor について1つの値を持たなければならないと述べているため、 ex:Bob は ex:AdultPerson に適合しない。

注

sh:targetWhere は、形状に対する必要十分条件を提供する「定義」として解釈できることに注意されたい。 したがって、たとえば所与の条件集合を満たすすべてのノードを収集するなどの 「分類」タスクに使用できる可能性がある。

注

注意点として、where ターゲットの計算性能は実装間で異なる可能性がある。 最悪の場合、エンジンはデータグラフ内のすべてのノードを反復処理し、 それらを1つずつフィルターする必要がある。

3.1.3.7 明示的な 形状ターゲット(sh:shape)

明示的なシェイプターゲットは、sh:shape 述語を使用して指定される。 sh:shapeの各値は、IRIである。

テキストによる定義
sがシェイプであり、シェイプグラフ内に存在し、 nがノードであり、データグラフ内に存在するとする。 nが値 sを、データグラフ内でsh:shapeに対して持つ場合、 nはsのターゲットである。

この節の残りの部分は非規範的である。

注記

sh:shapeはsh:targetNodeとは異なるが、どちらも 個々のノードを シェイプに関連付けるために使用できる。 sh:shapeは、特定の主語ノードから目的語であるシェイプを指す。 さらに、sh:targetNodeトリプルはシェイプグラフから照会されるのに対し、 sh:shapeトリプルはデータグラフ内に存在することが期待される。

以下のデータ例では、ex:Aliceのみが、指定されたシェイプのターゲットである。

3.1.4 形状または制約の重大度の宣言

シェイプは、値を、シェイプグラフ内のプロパティsh:severityに対して最大1つ持つことができる。 各値は sh:severityのIRIである。

形状ごとに重大度を宣言することに加えて、プロパティ sh:severity は、 形状を 主語とし、制約の パラメーターの1つを 述語とするトリプルの 具象化子上でも使用できる。

T を、形状内の 制約を表す トリプルの集合とする。 形状グラフは、T 内の トリプルの 具象化子内で、プロパティ sh:severity について 最大1つの 値を指定できる。

sh:severity の値は 重大度と呼ばれる。 SHACL には、重大度を表すための、 下の表に列挙される IRI が含まれる。 これらは SHACL 語彙内で sh:Severity の SHACL インスタンスとして宣言されている。

重大度 説明
sh:Trace 制約違反ではないトレースメッセージ。
sh:Debug 制約違反ではないデバッグメッセージ。
sh:Info 情報メッセージを示す非重大な制約違反。
sh:Warning 警告を示す非重大な制約違反。
sh:Violation 制約違反。

この節の残りは非規範的である。

検証プロセスは、適合性チェックに従って sh:severity の値を扱う。 さらに、ユーザーインターフェイスツールは、その値を用いて検証結果を分類できる。 sh:severity の値は、検証結果の sh:resultSeverity フィールドを設定するために SHACL プロセッサーによって使用される。 検証結果における重大度に関する節を参照。 任意の IRI を重大度として使用できる。

各形状および制約について、sh:severity が指定されていない場合、 sh:Violation が既定値である。 次の例はこれを示している。

次の例は、上の形状グラフのバリエーションであり、具象化を用いて個々の制約の重大度を指定している:

3.1.5 形状または制約のメッセージの宣言

シェイプは、プロパティsh:messageの値を持つことができる。 sh:messageの値は、 リテラルであり、データ型として xsd:string、rdf:dirLangString、rdf:langString、または rdf:HTMLを持つ。 主語は、sh:messageについて同じ言語タグを持つ複数の値を持つべきではなく、 また、 データ型がxsd:stringである複数の値も持つべきではない。

形状が形状グラフ内で sh:message について少なくとも1つの値を持つ場合、 その形状の結果として生成されるすべての 検証結果は、 sh:resultMessage の値として正確にこれらのメッセージを持つ。 すなわち、値は形状グラフから結果グラフへコピーされる。

形状ごとにメッセージを宣言することに加えて、プロパティ sh:message は、 形状を 主語とし、制約の パラメーターの1つを 述語とするトリプルの 具象化子上でも使用できる。

T を、形状内の 制約を表す トリプルの集合とする。 形状グラフは、T 内の トリプルの 具象化子内で、プロパティ sh:message について 最大1つの 値を指定できる。

この節の残りは非規範的である。

sh:resultMessage の値がどのように設定されるかの詳細については、 検証結果における sh:resultMessage に関する節を参照。

前節の例は、この仕組みを用いて2番目の検証結果に2つのメッセージを提供している。 次の例は、メッセージが具象化を用いて宣言されるバリエーションである。

3.1.6 形状と制約の 無効化

シェイプは、 プロパティsh:deactivatedに対して最大1つの値を持つことができる。 sh:deactivatedの値は、ノード式であり、 trueまたはfalseのいずれかを唯一の出力ノードとして持たなければならない。

exprを、シェイプ内のsh:deactivatedの値とする。 もし evalExpr(expr, データグラフ, フォーカスノード, {}) がtrueを唯一の 出力ノードとして生成する場合、そのシェイプは非アクティブ化されていると呼ばれる。 非アクティブ化されたシェイプは、検証中に無視される。

シェイプのすべての制約を非アクティブ化するだけでなく、 個々の制約を非アクティブ化することもできる。 これは具体化を使用して行われる。

シェイプを主語とし、 パラメーター(sh:minCountなど)を述語とするトリプルは、最大1つの 具体化子を持つことができ、その具体化子は プロパティsh:deactivatedの値を持つ。

exprを、具体化子内のsh:deactivatedの値とする。この具体化子はトリプルに付随し、 そのトリプルはシェイプを主語とし、パラメーターを述語とする。 もし evalExpr(expr, データグラフ, フォーカスノード, {}) がtrueを唯一の 出力ノードとして生成する場合、そのトリプルを使用する制約は、非アクティブ化された制約と呼ばれる。 非アクティブ化された制約は、検証中に無視される。

この節の残りの部分は非規範的である。

SHACL コアでは、sh:deactivatedの有効な値は、 定数リテラルノード式である trueとfalseのみである。

この機能のユースケースには、シェイプの再利用やデバッグが含まれる。 他のグラフやファイルからシェイプを特定のシェイプグラフにインポートする場合、 ローカルのシェイプグラフ内で、インポートされた シェイプのsh:deactivatedをtrueに設定することで、 現在のアプリケーションのコンテキストに適用されないシェイプを除外できる。 これにより、元の作成者が置いた特定の前提に同意しない場合でも、 他者が開発した SHACL グラフを再利用できる。 シェイプの作成者が、他者によってシェイプを無効化または変更する必要が生じることを予想する場合、 実際のシェイプにはIRIを使用し、空白ノードを使用しないことが 推奨される。例えば、シェイプex:PersonShapeにおける プロパティex:nameのプロパティシェイプには、IRI ex:PersonShape-nameを指定できる。 sh:deactivatedのもう1つの典型的なユースケースは、シェイプの開発およびテスト中に、 特定のシェイプを(一時的に)無効化することである。

次の例は、sh:deactivatedを使用してシェイプを非アクティブ化する方法を示す。 シェイプが他のグラフからインポートされる場合、sh:deactivated trueトリプルは インポート先のグラフ内に存在することになる。

次のバリエーションは、具象化を用いて、同じプロパティ形状上の他の制約に影響を与えずに sh:minCount 制約だけを無効化する。

3.2 ノード形状

ノード形状は、 形状グラフ内の 形状であり、 sh:path を 述語として持つ トリプルの 主語ではないものである。 ノード形状は、 sh:NodeShape の SHACL インスタンスとして宣言されることが推奨されるが、要求はされない。 sh:NodeShape の SHACL インスタンスは、プロパティ sh:path について 値を 持つことができない。

非形式的には、ノード形状は フォーカス ノードに関して満たされる必要がある制約を指定する。 プロパティ形状とは対照的に、ノード形状は主として プロパティ値ではなくフォーカスノード自体に適用される。

3.3 プロパティ形状

プロパティ形状は、 形状グラフ内の 形状であり、 sh:path を 述語として持つ トリプルの 主語である。 形状は sh:path について最大1つの 値を 持つ。 プロパティ形状内の sh:path の 値は、 正形式の SHACL プロパティパスである。

プロパティ形状は、 sh:PropertyShape の SHACL インスタンスとして宣言されることが推奨されるが、要求はされない。 sh:PropertyShape の SHACL インスタンスは、プロパティ sh:path について 1つの 値を 持つ。

プロパティ形状は、 プロパティ sh:values について最大1つの 値を持ち、この 値は 正形式の ノード 式である。 プロパティ形状は、プロパティ sh:defaultValue について最大1つの 値を持ち、この 値は 正形式の ノード式である。 プロパティ形状は、sh:path についての 値が 述語パスである場合にのみ、 sh:values および/または sh:defaultValue について 値を持つことができる。

非形式的に言えば、プロパティシェイプは、ノードに関して満たす必要がある制約を指定する。これらのノードには、 フォーカス ノードから、sh:pathを使用して指定されたプロパティまたは他のSHACL プロパティパスをたどることで到達できるノードと、 sh:valuesを使用して指定されたノード式を評価することで 生成されるノードが含まれる。 そのようなノードが存在しない場合は、代わりにsh:defaultValueを使用して指定されたノード式が 評価される。 正確な定義については、6.9.2 プロパティ シェイプの値ノードを参照。

SHACL コアでは、定数のノード式(IRIおよびリテラル)のみが定義されることに注意。 したがって、SHACL コアでは、sh:valuesとsh:defaultValueは定数 値のみを生成できる。 [shacl12-node-expr]や[shacl12-sparql]などの拡張では、さらに多くの種類の ノード式が定義される。

正形式の プロパティ形状および ノード 形状の定義は、これら2つのノード集合を互いに素にすることに注意されたい。

次の例は、プロパティ形状のいくつかの構文上のバリエーションを示している。

4. SHACL プロパティパス

プロパティパスは、プロパティ形状の値 ノードを導出するために、sh:pathで使用できる。

SHACL には、次の SPARQL プロパティ パスの部分集合を表す RDF 項が含まれる: PredicatePath, InversePath, SequencePath, AlternativePath, ZeroOrMorePath, OneOrMorePath および ZeroOrOnePath。

以下の小節では、整形式の SHACL プロパティパス の構文規則と、SPARQL 1.2 プロパティパス への対応付け規則を示す。 これらの規則は、パス写像 path(p,G) を、RDF グラフ G 内の RDF 項 p(G 内で SHACL プロパティパスであるもの)について定義する。 2 つの SHACL プロパティパスは、等価なパス とみなされるのは、まったく同じ SPARQL プロパティパスに写像される場合である。 複合パス とは、IRI ではない SHACL プロパティパス、すなわち 述語パス 以外の SHACL プロパティパスである。

RDF グラフ内のノードは、次の小節の構文規則の ちょうど1つを満たす場合、正形式の SHACL プロパティ パス p である。 ノード p が空白 ノードであり、p の任意のパス写像が直接または推移的に p を参照する場合、 ノード p は正形式の SHACL プロパティパスではない。

次の例は、いくつかの有効な SHACL プロパティパスと、それに対応する SPARQL 1.2 の同等表現を示している。

4.1 述語パス

述語パスは、IRIである。

p が述語パスである場合、path(p,G) は p を iri とする SPARQL PredicatePath である。

4.2 シーケンスパス

シーケンス パスは、少なくとも2つのメンバーを持ち、各メンバーが正形式の SHACL プロパティパスである 空白ノードの SHACL リストである。

p が G 内のシーケンスパスであり、リストの メンバー が v1, v2, ..., vn である場合、 path(p,G) は、path(v1,G) を elt1 とし、 v2 のリストノードのパス写像の結果を elt2 とする SPARQL SequencePath である。

非形式的な注: このような ノードは、SHACL リスト内で、 rdf:first および rdf:rest 以外のプロパティについて 値を 持つべきではない。

4.3 代替パス

代替 パスは、G 内でちょうど1つのトリプルの主語である 空白ノードである。 このトリプルは sh:alternativePath を述語、L を目的語とし、 L は、少なくとも2つのメンバーを持ち、 L の各メンバーが正形式の SHACL プロパティパスである SHACL リストである。

p が G 内の代替パスである場合、 その SHACL リスト L のメンバー v1, v2, ..., vn について、 path(p,G) は、path(v1,G) を elt1 とし、 v2 についての AlternativePath を elt2 とし、 ..., path(vn,G) までを順に持つ SPARQL AlternativePath である。

4.4 逆パス

逆パスは、 G 内でちょうど1つの トリプルの 主語である 空白ノードである。 このトリプルは sh:inversePath を述語とし、 目的語 v は 正形式の SHACL プロパティパスである。

p が G 内の逆パスである場合、path(p,G) は path(v,G) をその elt とする SPARQL InversePath である。

4.5 ゼロ回以上のパス

ゼロ回以上の パスは、G 内でちょうど1つの トリプルの 主語である 空白ノードである。 このトリプルは sh:zeroOrMorePath を 述語とし、 目的語 v は 正形式の SHACL プロパティパスである。

p が G 内のゼロ回以上のパスである場合、 path(p,G) は path(v,G) をその elt とする SPARQL ZeroOrMorePath である。

4.6 1回以上のパス

1回以上の パスは、G 内でちょうど1つの トリプルの 主語である 空白ノードである。 このトリプルは sh:oneOrMorePath を 述語とし、 目的語 v は 正形式の SHACL プロパティパスである。

p が G 内の1回以上のパスである場合、 path(p,G) は path(v,G) をその elt とする SPARQL OneOrMorePath である。

4.7 ゼロ回または1回のパス

ゼロ回または1回の パスは、G 内でちょうど1つの トリプルの 主語である 空白ノードである。 このトリプルは sh:zeroOrOnePath を 述語とし、 目的語 v は 正形式の SHACL プロパティパスである。

p が G 内のゼロ回または1回のパスである場合、 path(p,G) は path(v,G) をその elt とする SPARQL ZeroOrOnePath である。

5. ノード式

この節では、ノード式の概念を紹介する。 SHACL コアは、次の機能でノード式をサポートする。

SHACL コアのみに関心がある読者は、通常、この節を読み飛ばしてもよい。 コアでは定数の IRI とリテラルのみがノード式としてサポートされるため、ノード 式のユースケースは、 従来の SHACL コアの使用法と同じである。

テキストによる定義
ノード式とは、ちょうど1つのノード 式関数の構文規則に従うノードである。 各ノード式関数は、IRIを関数名として持つ。
ノード式の評価
ノード式の評価は、 次の関数として定義される。 evalExpr(expr, focusGraph, focusNode, scope) -> outputNodes ここで、 ノード式の評価結果は、ノードのリストであり、 (空の場合や重複を含む場合もある)、出力ノードと呼ばれる。 評価によって評価失敗が生じる場合もある。

SHACL コア仕様では、次の2つの小節で説明するノード式関数のみを 定義する。 [shacl12-node-expr]では、ノード式の一般的な 設計に関するさらに詳しい背景情報を提供し、 ノード式関数の包括的なライブラリを含む。 [shacl12-sparql]などの他の仕様では、 空白ノードを使用して追加の関数を導入する。 したがって、ノード式は SHACL の拡張ポイントとして機能する。

5.1 IRI 式

IRIであるノード式は、IRI 式と呼ばれ、その関数名は sh:IRIExpressionである。

RDF グラフ内のノードは、IRIである場合、整形式のIRI 式である。

IRI 式の評価

IRI 式の出力ノードは、 ノード式自体のみからなるリストである。

evalExpr(expr, focusGraph, focusNode, scope) -> [expr]

5.2 リテラル式

リテラルであるノード式は、リテラル式と呼ばれ、その関数名は sh:LiteralExpressionである。

RDF グラフ内のノードは、整形式のリテラル 式であるためには、リテラルでなければならない。

リテラル式の評価

リテラル 式の出力ノードは、ノード式 自体のみからなるリストである。

evalExpr(expr, focusGraph, focusNode, scope) -> [expr]

6. 検証とグラフ

検証は、データグラフとシェイプグラフを入力として受け取り、 生成するのは、 検証レポートであり、これには検証の結果が含まれる。 適合性の確認は検証を簡略化したものであり、 ブール値の結果を生成する。 検証を実行できるシステムをプロセッサーと呼び、 動詞の処理するは、検証プロセスを指すために使われることがある。

SHACL は RDF の検証レポート語彙を定義しており、これは 検証レポートを RDF の結果グラフとして生成するプロセッサーで使用できる。 この仕様では、SHACL の結果語彙を、バリデーターの規範的な定義に使用する。 これらは、制約コンポーネントに関連付けられている。 検証レポート語彙の必須プロパティをすべて生成できる SHACL 実装だけが 標準に準拠する。

6.1 シェイプグラフ

シェイプグラフとは、RDF グラフであり、シェイプと関連情報を提供する役割を担う。 その提供先は SHACL の検証プロセスであり、これによりデータグラフを シェイプに照らして検証できる。

sh:ShapesGraph クラスは、使用してもよい、rdf:type として、 次のIRIに対して。これは通常、シェイプグラフの役割を果たすグラフの IRI である。 グラフ型のクラス(sh:DataGraph や sh:ShapesGraph など)は、 相互排他的ではない役割を表す。単一のグラフを型付けしてもよい、 これらのクラスの複数を用いて。

シェイプグラフは、ある検証において、 複数のシェイプグラフを組み合わせた結果である場合がある。 例えば、owl:imports または sh:shapesGraph を通じて組み合わせられる。 構築方法にかかわらず、シェイプグラフを検証に使用する場合、必ず 固定されたままにしなければならない。これは検証プロセスの間を通じて適用される。 6.6 検証を参照のこと。 そこに詳細を示す。

この節の残りの部分は非規範的である。

シェイプグラフは、次の述語で相互参照できる再利用可能な検証モジュールになり得る。owl:imports。 検証前のステップとして、SHACL プロセッサーは、最初に提供されたシェイプグラフを、参照先を推移的にたどり、すべてインポートすることで拡張することが望ましい。 参照されるシェイプグラフは、 owl:imports 述語を通じて参照される。 インポートされた IRI を解決する際、取得したグラフに、そのインポートされた IRI を 目的語とする owl:versionIRI のトリプルが含まれている場合、 プロセッサーは、そのトリプルの主語をインポートされたグラフのシェイプグラフ IRI として扱うことが望ましい。 これは、さらに owl:imports 文をたどるためである。 形式的には、プロセッサーはプロパティパス ^owl:versionIRI?/owl:imports を反復的に使用して インポートを解決し、バージョン IRI によりバージョン付きシェイプグラフをインポートできるようにすることが望ましい。

次の例では、シェイプグラフがインポートするのは <http://example.com/shapes/company/v2> である。 プロセッサーがその IRI のグラフを取得すると、 その IRI が次のものの owl:versionIRI として宣言されていることが分かる。 <http://example.com/shapes/company>。 その後、プロセッサーは <http://example.com/shapes/company> を使用してそのグラフを識別する。 これは、さらに owl:imports 文をたどる際に行われ、この場合は次をインポートする。 <http://example.com/shapes/base>。

結果として得られるグラフは、不変のシェイプグラフを検証用に構成する。

注

owl:versionIRI を使用してバージョン付きシェイプグラフをインポートする際は、 互換性のないバージョンをインポートしないよう注意することが望ましい。特に、シェイプグラフのインポート閉包は、 含むべきではない、同じ系列の異なるバージョンである 2 つのグラフを、 または一方が 他方に対して owl:incompatibleWith を宣言する 2 つのグラフを。そのようなシェイプグラフは、 整形式でないと見なされる。整形式のシェイプ グラフの定義に詳細を示す。

シェイプの宣言に加えて、シェイプグラフには SHACL プロセッサー向けの追加情報を含めることができる。 例えば、sh:entailment 文などである。

6.2 データグラフ

どの RDF グラフも、データグラフになり得る。

sh:DataGraph クラスは、使用してもよい、rdf:type として、 次のIRIに対して。 これは通常、データグラフとして使用されるグラフの IRI である。 グラフ型のクラス(sh:DataGraph や sh:ShapesGraph など)は、 相互排他的ではない役割を表す。単一のグラフを型付けしてもよい、 これらのクラスの複数を用いて。 例えば、シェイプグラフは、果たしてもよい、次の役割も。 データ グラフの役割を、 シェイプ自体を検証する場合に。

この節の残りの部分は非規範的である。

データグラフは、SHACL プロセッサーへの入力の 1 つであり、検証に用いられる。 SHACL プロセッサーは、これを一般的な RDF グラフとして扱い、その性質について何も仮定しない。 例えば、メモリ内のグラフ、RDF データセット内の名前付きグラフ、または SPARQL エンドポイントのグラフなどがある。

SHACL は、任意の方法で取得した RDF グラフに使用できる。例えば、ファイルシステム、HTTP リクエスト、またはRDF データセットから取得できる。 SHACL は、ある RDF 含意レジームの下でグラフから含意されるトリプルが、そのグラフに含まれるかどうかについて 何も仮定しない。

データグラフには、データに関連するすべてのオントロジー公理、特にすべての rdfs:subClassOf トリプルを含めることが期待される。これは、SHACL がクラスターゲットを正しく識別し、 SHACL Core の制約を検証できるようにするためである。

注

データグラフ内の owl:imports は実行されない。これは、検証作業が制御不能に増加することを 避けるためである。検証したい場合、 複数の関連するオントロジーを、すべて SHACL プロセッサーに渡すこと(一緒に、または 1 つずつ)。 owl:imports リンクに依存しないこと。

注

SHACL はデータグラフ内の owl:imports を実行しないが、データグラフの管理者は、 依存するアプリケーションが存在することに留意することが望ましい。 それらは owl:imports の動作をインポート指示として利用する。特に、一部のアプリケーションは、 構文上、直接的な X a owl:Ontology . の存在に依存し、X owl:imports Y . が owl:imports 文を Y を読み込む指示として処理する場合がある。OWL 2 Web オントロジー言語の RDF グラフへのマッピング、節 3.1.1に詳細を示す。したがって、次の形式の文を使用する場合、 X a sh:DataGraph .、X a owl:Ontology . も含めることが望ましい。

6.3 結果グラフ

結果 グラフは、RDF グラフであり、検証の出力である。

結果グラフは、必ず次を含まなければならない。検証レポート。また、含んでもよい、 次で定義されるその他の要素を。 SHACL 1.2 プロファイリングの語彙。

注

SHACL 1.2 プロファイリングの語彙の全要素は、 SHACL 名前空間内に含まれるため、追加の RDF リソースは、SHACL 1.2 Core ですでに必要なものを超えて、これらの要素に必要とはならない。

6.4 グラフの対象となる rdfs:subClassOf トリプル

SHACL の一部の機能(例えば、 7.1.1 sh:class、 3.1.3.2 クラスに基づくターゲット (sh:targetClass)、および 3.1.3.3 暗黙的なクラスターゲット と sh:ShapeClass)は、次の概念に依存する。 SHACL 型。これは、ノードが SHACL インスタンスであるかどうかを、あるクラスについて判定するためである。 デフォルトでは、これは rdfs:subClassOf および rdf:type のトリプルを検索することで判定される。 検索先はデータグラフである。 ただし、これでは不十分な場合がある。rdfs:subClassOf トリプルはしばしば 一部として クラスやシェイプの定義に格納され、インスタンスデータには格納されないためである。

SHACL プロセッサーは、提供するべきである、パラメーター subClassOfInShapesGraph を。 これが true に設定された場合、 次の定義を変更することが望ましい。SHACL 型。これにより、rdfs:subClassOf トリプルが 照会されるようにする。 シェイプグラフからも、データグラフに加えて。 rdf:type トリプルは、常にデータグラフにあることが期待される。

6.5 リンクの設定: データグラフからシェイプグラフへ (sh:shapesGraph)

データ グラフには、SHACL プロセッサーに 1 つ以上のグラフを提案するためのトリプルを含めることができる。 その述語には sh:shapesGraph を使用する。 各値は、 sh:shapesGraph の場合、IRIである。これは、次に含めるべきであるグラフを表す。シェイプグラフであり、その検証対象はデータ グラフである。 sh:shapesGraph の値は、次の値である場合がある。owl:versionIRI。 したがって、バージョン IRI からシェイプグラフ IRI を解決する同じ方法が、シェイプグラフで説明されているとおり、ここにも適用される。

次の例では、SHACL プロセッサーは、使用するべきである、和集合を、 ex:graph-shapes1 と ex:graph-shapes2 のグラフ(およびそれらの owl:imports)の和集合を、シェイプグラフとして、与えられたグラフを検証する際に。

6.6 検証

検証は、ある 入力から 検証結果へのマッピングであり、以下の段落で定義する。

シェイプグラフに照らしたデータグラフの検証: データグラフとシェイプグラフが与えられた場合、 検証結果は、次の結果の和集合である。検証の対象となるデータグラフについて、すべての シェイプに照らした結果である。 そのシェイプは、シェイプグラフ内にある。

シェイプに照らしたデータグラフの検証: データグラフとシェイプが、シェイプグラフ内で与えられた場合、 検証結果は、次の結果の和集合である。検証の対象となるすべての フォーカス ノードのうち、ターゲットに含まれるものの結果であり、そのシェイプのターゲットは、データグラフ内にある。

シェイプに照らしたフォーカスノードの検証: フォーカスノードがデータグラフ内で、またシェイプがシェイプグラフ内で与えられた場合、 検証結果は、次の結果の和集合である。検証の対象であるフォーカスノードについて、すべての 制約に照らした結果であり、それらはシェイプで宣言される。ただし、そのシェイプが 無効化されている場合を除く。 その場合、検証結果は空になる。

制約に照らしたフォーカスノードの検証: フォーカスノードがデータグラフ内で、また制約が、その種類を C として、シェイプグラフ内で与えられた場合、 検証結果は、次のバリデーターによって定義される。制約 コンポーネント C のものである。 これらのバリデーターは通常、入力としてフォーカスノードと、具体的な 値を受け取る。 その値は、パラメーター、すなわち C のものに対応し、 制約はシェイプグラフ内にある。さらに、値 ノードを受け取り、それはシェイプ、すなわちその制約を宣言するものの値ノードである。

検証中、データグラフおよびシェイプグラフは、必ず不変のままでなければならない。つまり、検証終了時の両グラフは、必ず検証開始時のグラフと同一でなければならない。 SHACL プロセッサーは、変更してはならない、構築に使用するグラフを、 シェイプグラフまたはデータグラフの構築に使用するものを、 それらのグラフが、格納されたグラフの変更を許可する RDF ストアの一部である場合でも。 SHACL プロセッサーは、格納してもよい、自身が作成するグラフを、例えば 検証結果を含むグラフを。 また、この操作は、変更してもよい、RDF ストア内の既存のグラフを。ただし、 シェイプグラフまたはデータグラフの構築に使用されたグラフを変更してはならない。 したがって、SHACL の処理は冪等である。

6.6.1 失敗

検証および適合性の 確認は、失敗に終わることがある。 例えば、ある SHACL プロセッサーは再帰的なシェイプを許可していても、失敗を報告する場合がある。 これは、データ内にループを検出した場合である。 リソースの枯渇によって失敗が報告されることもある。 失敗は、実装固有の経路を通じて通知される。

6.6.2 扱いの対象となる 整形式でないシェイプグラフ

シェイプグラフに整形式でないノードが含まれる場合、 検証プロセスの結果は未定義である。 SHACL プロセッサーは、生成するべきである、失敗を、この場合。 6.8.1.4 構文 確認の対象となるシェイプグラフ (sh:shapesGraphWellFormed)も参照のこと。

6.6.3 扱いの対象となる再帰的な シェイプ

以下のプロパティは、いわゆるシェイプを要求する制約 パラメーターであり、SHACL Core に含まれる:

以下のプロパティは、いわゆるリストを受け取る制約パラメーターであり、SHACL Core に含まれる:

さらに、sh:class、sh:datatype、sh:nodeKind、 sh:rootClass および sh:uniqueValuesFor は、リストを受け取る制約パラメーターとなる。その値が SHACL リストである場合である。

RDF グラフ G 内のシェイプ s1 が、参照するのは、シェイプ s2、 すなわち G 内のものであり、s2 を値として持つ場合である。それは、リストを受け取らず、 シェイプを要求する制約コンポーネントのパラメーターである。または、s2 をメンバーとして持つ場合であり、 その値は、リストを受け取り、シェイプを要求するパラメーターに対応し、 ある制約コンポーネントのものである。 または、s2 を値として sh:targetWhere に持つ場合である。 RDF グラフ G 内のシェイプが、再帰的な シェイプであるのは、G 内で それ自身に、参照する関係の推移閉包によって関連付けられる場合である。

検証のうち、再帰的なシェイプを用いるものは、 SHACL では定義されず、SHACL プロセッサーの実装に委ねられる。 例えば、SHACL プロセッサーは再帰のシナリオをサポートしてもよく、検出時に失敗を生成してもよい。 その検出対象は再帰である。

この節の残りの部分は非規範的である。

上記の再帰に関する方針は、多様な実装の 戦略をサポートするために選択された。 再帰を未定義のままにすることで、実装は再帰をサポートしないことを選択できる。 これにより、(SPARQL エンドポイントに対して)静的な SPARQL クエリの集合を発行でき、 循環をサポートする必要がなくなる。 ワーキンググループは、他の実装では再帰をサポートし、一部のシェイプ グラフが こうした特定の特性に依存する可能性があることを認識している。 今後の作業、例えば W3C のコミュニティグループでの作業により、定義が進むことが期待される。 その対象は、再帰が明確に定義された SHACL の特定の方言である。

6.7 適合性の確認

フォーカスノードが適合する対象のシェイプについて、その条件は 必要十分条件として、 次の結果の集合である。検証の対象はフォーカスノードであり、照合先のシェイプに対し、その集合に検証結果が一切含まれないこと。その重大度レベルが、 許可されないレベルの集合に含まれる結果であり、かつ失敗が 報告されていないことである。

許可されない重大度レベルの集合は、検証プロセスによって決まる。適合性の 確認は、そのプロセスの一部である。 6.8.1.2 適合性を認めない集合 (sh:conformanceDisallows)を参照のこと。 同じ集合が、検証自体、およびその間に実行されるすべての適合性の確認に適用される。 これには、入れ子になったものも含まれる。

注

デフォルトでは、許可されない重大度レベルの集合には sh:Warning と sh:Info が含まれる。 例えば、値ノードは、次のシェイプに適合しない。 sh:node のシェイプであり、そのシェイプに照らした検証が 重大度 sh:Warning の検証結果を生成する場合である。

適合性の確認が生成するのは、 true である。その必要十分条件は、与えられたフォーカスノードが 適合することである。 その対象は、与えられたシェイプであり、それ以外の場合は false を生成する。

すべてのシェイプを要求する制約パラメーターは、 SHACL Core において、 適合性の確認に依存することに注意すること。 これらの場合、検証結果のうち、結果の判定に使用されるもの、 すなわち適合性の確認に使用されるものは、 それを包含する検証プロセスの結果とは分離され、通常、同じ 検証レポートには含まれない (ただし、sh:detail の値として含まれる場合はある)。

6.7.1 シェイプグラフへの適合 (sh:conformsToShapesGraph)

データグラフは、使用してもよい、プロパティ sh:conformsToShapesGraph を。これは、それが適合することを示す。その対象は、与えられたシェイプグラフである。 値は、IRIであり、次のシェイプグラフを識別する。 このプロパティには rdfs:domain sh:DataGraph と rdfs:range sh:ShapesGraph がある。

注

シェイプグラフへの適合の節を参照のこと。 SHACL 1.2 プロファイリングに、このプロパティの使用に関する詳細を示す。

6.8 検証レポート

検証レポートは、検証プロセスの結果であり、適合性と、すべての 検証結果の集合を報告する。 検証レポートは、SHACL の検証レポート語彙を用いて記述される。 この語彙は、本節で定義される。 この語彙は、構造的な情報を表現する RDF プロパティを定義する。その情報は指針を提供し得る。 これは、データグラフ内の違反を識別または修正する方法についての指針である。

SHACL に準拠するプロセッサーは、必ず次を返せなければならない。結果グラフであり、その検証レポートは、必要なすべての 検証結果を含み、 それらはこの仕様に記述されている。 SHACL に準拠するプロセッサーは、サポートしてもよい、任意の引数を。これにより、 返される結果の数を制限できる。 この柔軟性は、例えば、一部の大規模なデータセット検証のユースケースで必要となる。

次のグラフは、データグラフの検証に関する検証レポートの例を表す。そのデータグラフは、 シェイプグラフに適合している。

次のグラフは、データグラフの検証に関する検証レポートの例を表す。そのデータグラフは、 シェイプグラフに適合していない。 sh:resultMessage の具体的な値は、SHACL によって指定されていないことに注意すること。 これは実装固有と見なされる。

SHACL に準拠するプロセッサーは、返せてもよい、結果グラフを。その中には検証レポートが含まれ、 追加の項目にリンクされる。その項目はSHACL 1.2 プロファイリングの語彙に記述される。

6.8.1 検証 レポート (sh:ValidationReport)

検証プロセスの結果は、RDF グラフであり、ちょうど 1 つのSHACL インスタンスを sh:ValidationReport に対して持つ。

注

検証レポートの節を参照のこと。SHACL 1.2 プロファイリングに、拡張された検証の結果の詳細を示す。その結果には、 sh:ValidationReport のインスタンス、検証への入力の詳細、および検証システムの 詳細が含まれる。

6.8.1.1 適合 (sh:conforms)

結果グラフ内の sh:ValidationReport の各 SHACL インスタンスは、ちょうど 1 つの 値をプロパティ sh:conforms に持ち、その値のデータ型は xsd:boolean である。 これは、適合性の確認の結果を表す。

6.8.1.2 適合性を認めない集合 (sh:conformanceDisallows)

各検証プロセスは、許可されない重大度 レベルの集合、すなわち適合性を認めない集合を使用する。 デフォルトの集合は、sh:Violation、sh:Warning、および sh:Info から構成される。 検証エンジンは、提供してもよい、この集合をカスタマイズする仕組みを。

結果グラフ内の sh:ValidationReport の各 SHACL インスタンスは、持ってもよい、1 つ以上の値を、 プロパティ sh:conformanceDisallows に対して。すべての値、 すなわち sh:conformanceDisallows の値は、必ず IRI でなければならない。 検証プロセスがデフォルトの集合以外を使用した場合、その値、 すなわち sh:conformanceDisallows の値は、 必ずその集合のメンバーと正確に一致しなければならない。 sh:conformanceDisallows の値がない場合、デフォルトの集合が 使用されたことになる。

sh:ValidationResult の重大度レベルが、許可されない 重大度レベルの集合に含まれるものが存在すれば、必ず sh:conforms の 値が false にならなければならない。これは、関連する sh:ValidationReport インスタンス上の値である。

6.8.1.3 結果 (sh:result)

各検証結果について、それを生成するのが検証プロセスである場合、 (ただし、適合性の 確認の文脈で言及するものを除く)、 結果グラフ内の sh:ValidationReport の SHACL インスタンスは、値を持つ。 そのプロパティは sh:result である。 sh:result の各値は、SHACL インスタンスであり、そのクラスは sh:ValidationResult である。

6.8.1.4 シェイプグラフの構文確認 (sh:shapesGraphWellFormed)

SHACL 検証エンジンには、次の確認は厳密には要求されない。シェイプグラフが整形式かどうかの確認である。 そのような確認を実行する実装(例えば、シェイプグラフをインストールする際、 システムに、 または検証の前や途中)は、使用するべきである、プロパティ sh:shapesGraphWellFormed を。これは、 検証レポートの利用者に、この事実を知らせるためである。 結果グラフ内の sh:ValidationReport の SHACL インスタンスが、 true を値として sh:shapesGraphWellFormed に持つ場合、プロセッサーは、次のことを確信していたことになる。シェイプグラフ、すなわち 検証プロセスで使用されたものが、整形式であるということである。

6.8.1.5 使用されたデータ グラフ (sh:usedDataGraph)

結果グラフ内の sh:ValidationReport の SHACL インスタンスは、持ってもよい、プロパティ sh:usedDataGraph の値を。 その値は、IRIであり、データグラフを識別する。 それを検証したのはプロセッサーであり、そのレポートを生成するためである。 データグラフのバージョン IRI も、使用してもよい、この プロパティの値として。

6.8.1.6 使用された シェイプグラフ (sh:usedShapesGraph)

結果グラフ内の sh:ValidationReport の SHACL インスタンスは、持ってもよい、プロパティ sh:usedShapesGraph の値を。 その値は、IRIであり、シェイプグラフを識別する。 それを使用したのはプロセッサーであり、その間に行われたのは検証 プロセスである。 シェイプグラフのバージョン IRI も、使用してもよい、この プロパティの値として。

6.8.1.7 使用された 設定 (sh:usedConfiguration)

結果グラフ内の sh:ValidationReport の SHACL インスタンスは、持ってもよい、プロパティ sh:usedConfiguration の値を。 その値は、sh:ProcessorConfiguration のインスタンスであり、状態と 設定を記述する。 プロセッサー、すなわちレポートを生成したものの状態と設定である。 SHACL プロセッサーは、変更してはならない、検証の動作を、次に基づいて。 sh:ProcessorConfiguration インスタンスの内容に基づいて。

6.8.1.8 プロセッサーの設定 (sh:ProcessorConfiguration)

sh:ProcessorConfiguration は、プロセッサーの設定のクラスである。 このクラスのインスタンスは、SHACL のプロセッサーの状態と設定を、 検証レポートを生成した時点について記述する。 sh:ProcessorConfiguration インスタンスのプロパティは、この 仕様では定義しない。

注

実装は、このクラスのインスタンスに必要な任意のプロパティを自由に定義できる。 例えば、プロセッサー名、プロセッサーのバージョン、 最大再帰深度、その他の実行時パラメーターなどである。

6.8.2 検証 結果 (sh:ValidationResult)

SHACL は、sh:ValidationResult を sh:AbstractResult のサブクラスとして定義し、 個々の SHACL の検証結果を報告する。 SHACL 実装は、他のSHACL サブクラスを使用してもよい。 sh:AbstractResult のものであり、例えば、 正常に完了した制約の確認や集積された結果を報告するためである。

この節の残りの小節で記述するすべてのプロパティは、指定できる。 sh:ValidationResult 内に。 プロパティ sh:focusNode、sh:resultSeverity および sh:sourceConstraintComponent だけが、すべての検証結果で必須となるプロパティである。

6.8.2.1 フォーカスノード (sh:focusNode)

各検証結果は、プロパティ sh:focusNode に対してちょうど 1 つの値を持つ。 その値は、フォーカスノード、すなわち結果の原因となったものと等しい。 これは、フォーカスノードであり、検証結果が 生成されたときに検証されていたものである。

6.8.2.2 パス (sh:resultPath)

検証結果は、プロパティ sh:resultPath に値を持つことができ、それは整形式のSHACL プロパティパスを指す。 プロパティシェイプによって生成された結果では、このSHACL プロパティパスは、次の値と等価である。シェイプの sh:path の値であり、 別段の記載がある場合を除く。 sh:path p が空白ノードの場合、sh:resultPath は、 ディープコピーであり、結果グラフ内の p のコピーである。

6.8.2.3 値 (sh:value)

検証結果には、値として、プロパティ sh:value に、 結果の原因となった RDF 用語を最大 1 つ含めることができる。 SHACL Core コンポーネントのバリデーターの文章による定義では、この 値の構築方法を指定する。多くの場合、それらは値ノードであり、 制約に違反したものである。

6.8.2.4 発生元 (sh:sourceShape)

検証結果には、唯一の値として、プロパティ sh:sourceShape に、 シェイプを含めることができる。与えられた sh:focusNode の検証で、 照合先となったものである。

6.8.2.5 制約コンポーネント (sh:sourceConstraintComponent)

検証結果は、プロパティに対してちょうど 1 つの値を持つ。 sh:sourceConstraintComponent に対してであり、 その値は、IRIである。 これは、制約コンポーネント、すなわち結果の原因となったものの IRI である。 例えば、ある値に基づく制約への違反によって生成された結果では、 sh:minCount の値に基づく場合、 発生元の制約コンポーネントは sh:MinCountConstraintComponent となる。

6.8.2.6 詳細 (sh:detail)

プロパティ sh:detail は、(親の)結果を 1 つ以上の SHACL インスタンスにリンクできる。 その対象は、 sh:AbstractResult のインスタンスであり、(親の)結果の原因についてさらに詳細を 提供できるものである。 SHACL プロセッサーの機能によっては、これには例えば違反が含まれる。 sh:node を通じた適合性の確認の一部として評価された制約の違反である。

6.8.2.7 メッセージ (sh:resultMessage)

検証結果は、プロパティ sh:resultMessage の値を持つことができる。 例えば、人に追加の詳細をテキストで伝えるためである。 sh:resultMessage は複数の値を持つことができるが、2 つの値を持たないことが望ましい。 同じ言語タグを持つ値を。 これらの値は、検証エンジンにより、sh:message の値に基づいて生成される。 それは、制約の値であり、 シェイプグラフ内にある。シェイプのメッセージの宣言を参照のこと。 具象化を使用して宣言されたメッセージは、包含する シェイプで宣言されたものより優先される。 制約が sh:message の値を持たない場合、そのシェイプ グラフ内で、 SHACL プロセッサーは、自動生成してもよい、他の値を、 sh:resultMessage に対して。

6.8.2.8 重大度 (sh:resultSeverity)

各検証結果は、ちょうど 1 つの値を、プロパティ sh:resultSeverity に持ち、この値はIRIである。 値は、以下の規則によって(この順序で)決定される:

  1. 値、すなわちsh:severity の値、 その場所は具象化子であり、次のいずれかのトリプルのものである。そのトリプルにはパラメーターが含まれ、その制約は、 結果の原因となったものである
  2. 値、すなわちsh:severity の値、 そのシェイプは、シェイプ グラフ内にあり、結果の原因となったものである
  3. デフォルトは sh:Violation となる。sh:severity が指定されていない場合、 シェイプにも制約にも指定されていない場合である。

6.8.3 不完全なデータ

データグラフは、意図的に一部だけを含む場合がある。 それは、一部のノードに関する情報の一部であり、 例えば、関心領域外にある「外部」のリソースにリンクする場合や、 次のようなノードにリンクする場合である。残りのトリプルがまだ入力されていないが、後で 入力されることが期待されるノードである。 SHACL は、データグラフで使用できる 2 つのプロパティを定義し、そのようなノードを 不完全として宣言できる:

  • sh:incomplete は、主語が不完全(true)か、完全 (false)かを示す。 値は、sh:incomplete の場合、リテラルであり、そのデータ型は xsd:boolean である。
  • sh:incompleteURIStart は、値が true の場合、すべてのノードについて宣言する。 そのIRIが、主語の IRI で始まる ノードは不完全であると(ただし主語自体は除く)。ただし、別の指定がある場合を除く。 sh:incomplete false による指定である。 値は、 sh:incompleteURIStart の場合、リテラルであり、そのデータ型は xsd:boolean である。 主語は、トリプルの述語が sh:incompleteURIStart である場合、IRIである。

不完全性の値は、あるノード n について、次の値である。 sh:incomplete の値であり、 n に対して、データグラフ内にあるものと、次の値ノードを合わせたものである。 n をフォーカスノードとする各プロパティシェイプ p の値ノードであり、 その場所はシェイプグラフ内であり、sh:incomplete を値として持つ。 sh:path に対してであり、 ここで n は、シェイプのターゲットに含まれ、 そのシェイプは p であるか、またはシェイプのターゲットに含まれ、そのシェイプが持つのは、 p を値とする sh:property である。 これにより、ノードを不完全として宣言できる。その場所はシェイプグラフ内であり、 sh:values または sh:defaultValue を使用する (6.9.2 値 ノード:プロパティシェイプの場合を参照)。

ノード n が不完全であるのは、false が含まれない場合である。 その対象は、 不完全性の値、すなわち n のものであり、かつ少なくとも 以下の条件の 1 つが満たされる場合である:

  1. true が、不完全性の値に含まれる。 n のものに。
  2. n は、IRIであり、 次のもので始まるが、それと等しくはない。IRIであり、 いずれかの主語のもので、その主語は true を唯一の値として持つ。 その対象は、 sh:incompleteURIStart であり、データグラフ内にある。

特に、ノードが true と false の両方を その不完全性の値に持つ場合、該当しない、不完全には。

リテラルが不完全になることはない。

不完全なノードの存在は、検証を変更しない。 その結果を、 sh:conforms の値も含めて、検証 レポート内の値も含めて。

この節の残りの部分は非規範的である。

SHACL に基づくツールは、使用してもよい、不完全なデータのトリプルを変更のために。 その表示を、 不完全なデータによって生じる検証結果の表示を変更するためである。 特に、ツールは次のことを行ってもよい:

上記のリストは網羅的ではない。 他の例として、sh:node および sh:qualifiedMinCount が挙げられる。

次の例では、ex:Bob は不完全として宣言される。使用するのは sh:incomplete であり、 彼のメールアドレスがまだ入力されていないためである。 ex:Bob と ex:Carla は、どちらも sh:minCount 制約に違反するが、 ツールは ex:Bob の違反を非表示にすることを選択してもよく、 一方で ex:Carla の違反は通常どおり表示される。

次の例では、データグラフが、別の場所で記述される企業にリンクする。 その場所は別のグラフである。 sh:incompleteURIStart を使用して、すべてのIRIを、 これらの企業について、不完全として宣言する。 これにより、欠落している rdf:type のトリプルが、必ずしも表示されなくなる。 sh:class の違反として、 エンドユーザーに。 したがって、ex:Alice の違反は非表示にしてもよい。 ex:Bob の違反は通常どおり表示される。彼の雇用主が宣言されているためである。 完全であると、sh:incomplete false を使用して。 ex:Carla は適合する。彼女の雇用主は ex:Company であると述べられているためである。

注

sh:incompleteURIStart の主語自体は、集合に含まれない。 不完全な IRI の集合には。

注

IRI は文字列として比較されるため、例えば主語 <http://example.org/comp> は、次にも適用される。 <http://example.org/company/X>。 したがって、区切り文字で終わる主語を使用することが推奨される。例えば / または # で終わる、名前空間のようなものである。

次の例では、シェイプグラフが、次の状態を持つすべての人物を宣言する。 ex:WorkInProgress の人物を、不完全として。 プロパティシェイプは、sh:path sh:incomplete を持つが、 制約は持たない。ただし、その sh:values は値ノードを生成する。 true を、 各フォーカスノード、すなわち ex:WorkInProgressShape のものに対して生成し、 これにより true が、その不完全性の値の 1 つになる。 ex:Dave と ex:Erin は、どちらも sh:minCount 制約に違反するが、 ツールは ex:Dave の違反を非表示にすることを選択してもよい。

注

sh:values を使用しても、明示的な sh:incomplete false がデータグラフ内にある場合、引き続きそれが優先される。 なぜなら、false もその場合、不完全性の値に含まれるためである。 代わりに sh:defaultValue true を使用すると、true が追加されるのは、フォーカスノードのうち、値を持たないものだけとなる。 sh:incomplete の値を、 データグラフ内に持たないものだけである。 不完全性をシェイプグラフ内で宣言するには、 SHACL プロセッサーが sh:values と sh:defaultValue をサポートする必要がある。

6.9 値ノード

バリデーターのうち、大部分の制約コンポーネントのものは、次の概念を使用する。値ノードであり、以下の 2 つの小節で定義する。

6.9.1 ノードシェイプの値ノード

ノードシェイプの場合、値ノードは、個々のフォーカスノードであり、ちょうど 1 つのメンバーを持つ集合を形成する。

6.9.2 値ノード: プロパティシェイプの場合

プロパティシェイプが、値として、 sh:path に p を持つ場合、 値ノードの集合は、以下のステップによって生成される:

  1. すべてのノードを追加する。その場所はデータグラフ内であり、 到達可能なものを、フォーカスノードから、パスマッピングによって、 p のものによって。
  2. e が値であり、sh:values の、次のプロパティシェイプでの値である場合、 出力ノードを追加する。その対象は、 evalExpr(e, データグラフ, フォーカスノード, {})。
  3. 集合がまだ空であり、d が値である場合、sh:defaultValue の値であり、 そのプロパティシェイプでの値である場合、 出力ノードを追加する。その対象は、 evalExpr(d, データグラフ, フォーカスノード, {})。

7. コア制約コンポーネント

このセクションでは、すべてのSHACL Coreプロセッサーがサポートしなければならない(MUST)組み込みのSHACL Core制約コンポーネントを定義する。 各制約コンポーネントの定義には、そのIRIとパラメーターの表が含まれる。 特に明記されない限り、これらのパラメーターはすべて必須パラメーターである。 これらのパラメーター表に列挙された構文規則のいずれかに違反するシェイプは、不正形式である。

各制約コンポーネントには、そのコンポーネントに関連付けられたバリデーターを説明する テキスト定義も含まれる。 これらのテキスト定義では、制約内のパラメーターの値を、paramNameがパラメーターのIRIの sh:名前空間以降の部分である$paramName形式の変数で参照する。 例えば、sh:ClassConstraintComponentのテキスト定義では、 sh:classの値を変数$classを使用して参照する。 SHACL Coreでは、パラメーター値という用語は、 パラメーターの値、 すなわち、目的語が、トリプルのものであり、シェイプグラフ内で主語が シェイプであり、 述語が(sh:classなどの)パラメーターであることを意味する。

課題1

執筆時点で、WGはSHACL Coreの外部にSHACLの方言を定義する意図を持っており、 そこでは パラメーター値という用語にノード式も許容される。 すべての制約コンポーネントがパラメーター値という用語を使用するわけではなく、 代わりに値という 用語を参照するものもあることに注意する。 例えば、sh:nodeの値をノード式にすることは 決してできない。これは 空白ノードの処理が複雑になるためである。 SHACL Coreの定数IRIおよびリテラルを超えるノード式は、[shacl12-node-expr]で定義される。

これらのバリデーターは、コンポーネントが生成する検証結果のすべてを定義することに 注意すること。 さらに、バリデーターは常に新しい結果ノードを生成する。すなわち、文章による定義で 次のように述べられている場合、 「…検証結果が存在する…」とは、結果グラフ内の個別の新しいノードを指す。

このセクションの残りは非規範的である。

SHACL Coreに含める制約コンポーネントの選択は、 [shacl-ucr]文書によって収集された要件に基づいて行われた。 可能な限り多くの一般的なユースケースを網羅することと、 コア言語の規模を管理可能な範囲に保つことのバランスに特に注意が払われた。 すべてのユースケースをコア言語だけで表現できるわけではない。 代わりに、SHACL-SPARQL [shacl12-sparql]が拡張 メカニズムを提供する。 再利用可能な制約コンポーネントの追加ライブラリーは、 サードパーティーによって維持されることが期待される。

特に明記されない限り、コア制約コンポーネントはプロパティシェイプとノード シェイプの両方で使用できる。 一部の制約パラメーターには、それらを使用するノードシェイプを 不正形式にする構文規則が付随している。 その例として、プロパティシェイプでのみ サポートされるsh:minCountが挙げられる。

7.1 値型制約 コンポーネント

このセクションの制約コンポーネントには、いずれも 値ノードの型を制限するために使用できるという共通点がある。 sh:orを使用して複数の値型の選択肢を表現できることに 注意する。

7.1.1 sh:class

sh:classによって指定される条件は、各値ノードが、指定された型のSHACLインスタンスであることである。

制約コンポーネントIRI: sh:ClassConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:class すべての値ノードの型。 シェイプ内の sh:classの値は、IRI、 またはすべての空白ノードが整形式のSHACL リストであり、すべてのメンバーがIRIであるものとする。
テキスト定義
$classをsh:classのパラメーター値と する。 classesをIRIの集合と し、 $classがIRIである 場合、集合はそのIRIのみから構成され、 $classが空白ノードのSHACLリストである場合、 集合は そのリストのメンバーのみから構成されるものとする。

値ノードのうち、 リテラルであるか、またはリテラルではなく、SHACLインスタンスでもないものについて、 classes内のいずれのクラスについても データグラフで、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

sh:classの複数の値は論理積として解釈されることに注意する。 つまり、値はそれらすべてのSHACLインスタンスである必要がある。 和集合の意味論にはリストを使用する。

次の例は、sh:classのリストに基づく構文を示しており、 プロパティex:petの値が猫または犬のいずれかでなければならないことを意味する。

7.1.2 sh:datatype

sh:datatypeは、各値ノードのデータ型に関して満たすべき条件を 指定する。

制約コンポーネントIRI: sh:DatatypeConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:datatype すべての値ノードに許可されるデータ型(例えば、xsd:integer)。 シェイプには、 sh:datatypeの値を最大1つ指定できる。 シェイプ内の sh:datatypeの値は、IRI、 または空白ノードであり、整形式のSHACL リストで、すべてのメンバーがIRIであるものとする。
テキスト定義
$datatypeをsh:datatypeのパラメーター値と する。 datatypesをIRIの集合と し、 $datatypeがIRIである 場合、集合はそのIRIのみから構成され、 $datatypeが空白ノードのSHACLリストである場合、 集合は そのリストのメンバーのみから構成されるものとする。

値ノードのうち、 リテラルでないもの、またはリテラルであって、そのデータ型が datatypesのいずれとも一致しないものについては、 検証結果が存在し、値ノードをsh:valueとする。

リテラルのデータ型は、SPARQL 1.2のdatatype関数に従って決定される。 リテラルは、リテラルのデータ型が同じIRIを持ち、 SPARQL 1.2でサポートされるデータ型については、不正な型付けのリテラルでない場合に、そのデータ型と一致する。

このセクションの残りは非規範的である。

sh:datatypeの値は通常、xsd:stringなどのデータ型である。

次の例はリストに基づく構文を示しており、すべての rdfs:labelの値がxsd:stringまたはrdf:langStringのいずれかでなければならないことを意味する。

7.1.3 sh:nodeKind

sh:nodeKindは、各値ノードのRDFノード種別が満たすべき条件を指定する。

制約コンポーネントIRI: sh:NodeKindConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:nodeKind すべての値ノードのノード種別(IRI、空白ノード、リテラル、トリプル項、またはこれらの組み合わせ)。 シェイプには、 sh:nodeKindの値を最大1つ指定できる。 シェイプ内の sh:nodeKindの値は、IRI、または空白ノードであり、整形式のSHACL リストで、すべてのメンバーがIRIであるものとする。

sh:nodeKindの値がIRIである場合、その値は シェイプ内でクラスsh:NodeKindの次の7つのインスタンスのいずれかである: sh:BlankNode、sh:IRI、sh:Literal、 sh:BlankNodeOrIRI、sh:BlankNodeOrLiteral、 sh:IRIOrLiteral、およびsh:TripleTerm。

sh:nodeKindの値が整形式のSHACLリストである場合、それらのリストのメンバーは シェイプ内でクラスsh:NodeKindの次の4つのインスタンスのいずれかである: sh:BlankNode、sh:IRI、sh:Literal、および sh:TripleTerm。
テキスト定義
$nodeKindをsh:nodeKindのパラメーター値と する。 nodeKindsをIRIの集合と し、 $nodeKindがIRIである 場合、集合はそのIRIのみから構成され、 $nodeKindが空白ノードのSHACLリストである場合、 集合は そのリストのメンバーのみから構成されるものとする。

値ノードのうち、 nodeKindsのいずれとも一致しないものについては、 検証結果が存在し、値ノードをsh:valueとする。 すべてのIRIは、sh:IRI、 sh:BlankNodeOrIRIおよびsh:IRIOrLiteralとのみ一致する。 すべての空白ノードは、sh:BlankNode、 sh:BlankNodeOrIRIおよびsh:BlankNodeOrLiteralとのみ一致する。 すべてのリテラルは、sh:Literal、 sh:BlankNodeOrLiteralおよびsh:IRIOrLiteralとのみ一致する。 すべてのトリプル項は、 sh:TripleTermとのみ一致する。

このセクションの残りは非規範的である。

次の例は、どの主語についてもex:knowsのすべての値がIRIである必要があることを示している。

次の例はリストに基づく構文を示しており、すべての ex:knowsの値が どの主語についてもIRIまたは空白ノードでなければならないことを意味する。

7.2 カーディナリティ制約 コンポーネント

次の制約コンポーネントは、指定された フォーカスノードに対する 値ノードの数に関する制限を表す。

7.2.1 sh:minCount

sh:minCountは、条件を満たす値ノードの 最小数を指定する。 最小カーディナリティの値が0の場合、この制約は常に満たされるため、 省略できる。

制約コンポーネントIRI: sh:MinCountConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:minCount 最小カーディナリティ。 ノードシェイプには sh:minCountの値を指定できない。 プロパティシェイプには、 sh:minCountの値を最大1つ指定できる。 プロパティシェイプ内の sh:minCountの値は、データ型が xsd:integerのリテラルである。
テキスト定義
$minCountをsh:minCountのパラメーター値と する。 値ノードの数が$minCount未満の場合、 検証結果が存在する。

このセクションの残りは非規範的である。

7.2.2 sh:maxCount

sh:maxCountは、条件を満たす値ノードの 最大数を指定する。

制約コンポーネントIRI: sh:MaxCountConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:maxCount 最大カーディナリティ。 ノードシェイプには sh:maxCountの値を指定できない。 プロパティシェイプには、 sh:maxCountの値を最大1つ指定できる。 プロパティシェイプ内の sh:maxCountの値は、データ型が xsd:integerのリテラルである。
テキスト定義
$maxCountをsh:maxCountのパラメーター値と する。 値ノードの数が$maxCountを超える場合、 検証結果が存在する。

このセクションの残りは非規範的である。

7.3 値範囲制約 コンポーネント

次の制約コンポーネントは、値ノードが満たすべき値範囲条件を指定する。これらの値ノードは、 比較可能であり、 <、<=、>、>=などの演算子によって比較される。 次の例は、これらの制約コンポーネントの典型的なユースケースを示す。

7.3.1 sh:minExclusive

sh:minExclusiveは、各値ノードが超えなければならない排他的な最小値を指定する。

制約コンポーネントIRI: sh:MinExclusiveConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:minExclusive 排他的な最小値。 シェイプ内のsh:minExclusiveの値は、 リテラルである。 シェイプには、 sh:minExclusiveの値を最大1つ指定できる。
テキスト定義
$minExclusiveをsh:minExclusiveのパラメーター値と する。 各値ノードvについて、 SPARQL式$minExclusive < vがtrueを返さない場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

値ノードを指定された範囲と比較できない場合、検証結果が存在する。 例えば、文字列と整数を比較した場合などである。

7.3.2 sh:minInclusive

sh:minInclusiveは、各値ノードがそれ以上でなければならない包含的な最小値を指定する。

制約コンポーネントIRI: sh:MinInclusiveConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:minInclusive 包含的な最小値。 シェイプ内のsh:minInclusiveの値は、 リテラルである。 シェイプには、 sh:minInclusiveの値を最大1つ指定できる。
テキスト定義
$minInclusiveをsh:minInclusiveのパラメーター値と する。 各値ノードvについて、 SPARQL式$minInclusive <= vが trueを返さない場合、 検証結果が存在し、vを sh:valueとする。

7.3.3 sh:maxExclusive

sh:maxExclusiveは、各値ノードがそれ未満でなければならない排他的な最大値を指定する。

制約コンポーネントIRI: sh:MaxExclusiveConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:maxExclusive 排他的な最大値。 シェイプ内のsh:maxExclusiveの値は、 リテラルである。 シェイプには、 sh:maxExclusiveの値を最大1つ指定できる。
テキスト定義
$maxExclusiveをsh:maxExclusiveのパラメーター値と する。 各値ノードvについて、 SPARQL式$maxExclusive > vがtrueを返さない場合、 検証結果が存在し、vを sh:valueとする。

7.3.4 sh:maxInclusive

sh:maxInclusiveは、各値ノードがそれ以下でなければならない包含的な最大値を指定する。

制約コンポーネントIRI: sh:MaxInclusiveConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:maxInclusive 包含的な最大値。 シェイプ内のsh:maxInclusiveの値は、 リテラルである。 シェイプには、 sh:maxInclusiveの値を最大1つ指定できる。
テキスト定義
$maxInclusiveをsh:maxInclusiveのパラメーター値と する。 各値ノードvについて、 SPARQL式$maxInclusive >= vが trueを返さない場合、 検証結果が存在し、vを sh:valueとする。

7.4 文字列ベースの制約 コンポーネント

このセクションの制約コンポーネントには、いずれも 値ノードの文字列表現に関する条件を指定するという共通点がある。

7.4.1 sh:minLength

sh:minLengthは、条件を満たす各値ノードの 最小文字列長を指定する。 これは、すべてのリテラルおよびIRIに 適用できるが、空白ノードには適用できない。

制約コンポーネントIRI: sh:MinLengthConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:minLength 最小長。 シェイプ内の sh:minLengthの値は、データ型が xsd:integerのリテラルである。 シェイプには、 sh:minLengthの値を最大1つ指定できる。
テキスト定義
$minLengthをsh:minLengthのパラメーター値と する。 各値ノードvについて、 vの文字列表現の長さ(SPARQL STRLEN関数によって定義される) (文字列表現はSPARQL str関数によって定義される) が$minLength未満である場合、またはvが空白ノードである場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

sh:minLengthの値が0の場合、文字列長には制限がないが、 値ノードが空白ノードである場合は、依然として制約に違反することに注意する。

7.4.2 sh:maxLength

sh:maxLengthは、条件を満たす各値ノードの 最大文字列長を指定する。 これは、すべてのリテラルおよびIRIに 適用できるが、空白ノードには適用できない。

制約コンポーネントIRI: sh:MaxLengthConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:maxLength 最大長。 シェイプ内の sh:maxLengthの値は、データ型が xsd:integerのリテラルである。 シェイプには、 sh:maxLengthの値を最大1つ指定できる。
テキスト定義
$maxLengthをsh:maxLengthのパラメーター値と する。 各値ノードvについて、 vの文字列表現の長さ(SPARQL STRLEN関数によって定義される) (文字列表現はSPARQL str関数によって定義される) が$maxLengthを超える場合、またはvが空白ノードである場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

7.4.3 sh:pattern

sh:patternは、各値ノードが条件を満たすために 一致する必要がある正規表現を指定する。

制約コンポーネントIRI: sh:PatternConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:pattern すべての値ノードが一致する必要がある正規表現。 シェイプ内の sh:patternの値は、データ型が xsd:stringのリテラルである。 シェイプ内の sh:patternの値は、SPARQL REGEX 関数の有効なパターン引数である。
sh:flags SPARQL 1.2 REGEXと同様に解釈される、省略可能なフラグ文字列。 シェイプ内の sh:flagsの値は、データ型が xsd:stringのリテラルである。
テキスト定義
$patternをsh:patternのパラメーター値と する。 $flagsをsh:flagsのパラメーター値と する。 各値ノードのうち、 空白ノードであるもの、または 文字列表現(SPARQL str関数によって定義される)が 正規表現$pattern(SPARQL REGEX関数によって定義される)に一致しないものについて、 検証結果が存在し、値ノードをsh:valueとする。 $flagsに値がある場合、照合は$flagsを 第3引数として使用するSPARQL REGEX関数の3引数形式の定義に 従わなければならない(MUST)。

このセクションの残りは非規範的である。

7.4.4 sh:singleLine

課題2

この機能は、この機能(および類似の利便性機能)に関するWGの決議が下されるまで「リスクのある」状態にある。 WGは、コアに含めるべき機能と 他の文書に含めるべき機能の境界をどこに設けるか、まだ確定していない。 当初は課題177として議論された。

trueに設定すると、sh:singleLineは、 値ノードに改行が含まれてはならないことを指定する。 制約の検証に加えて、ユーザーインターフェイスの構築者はこの情報を利用して、 (単一行の)テキストフィールドと(複数行の)テキストエリアを選択できる。

制約コンポーネントIRI: sh:SingleLineConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:singleLine この制約を有効にするにはtrueを指定する。 シェイプ内の sh:singleLineの値は、データ型が xsd:booleanのリテラルである。 シェイプには、 sh:singleLineの値を最大1つ指定できる。
テキスト定義
$singleLineをsh:singleLineのパラメーター値と する。 $singleLineがtrueの場合、各値ノードのうち、 字句形式に次の文字のいずれかを含むリテラルについて、 U+000A(改行)、U+000B(垂直タブ)、U+000C(フォームフィード)、またはU+000D (キャリッジリターン)、 検証結果が存在する。

このセクションの残りは非規範的である。

7.4.5 sh:languageIn

sh:languageInによって指定される条件は、各値ノードに許可される言語タグが、指定された言語タグのリストによって制限されることである。

制約コンポーネントIRI: sh:LanguageInConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:languageIn [BCP47]に従った基本言語範囲のリスト。 シェイプ内の sh:languageInの各値は、SHACL リストである。 そのようなリストの各メンバーは、 データ型がxsd:stringのリテラルである。 シェイプには、 sh:languageInの値を最大1つ指定できる。
テキスト定義
$languageInをsh:languageInの値とする。 各値ノードのうち、 リテラルではないもの、または $languageInのメンバーである 基本言語範囲のいずれにも一致する言語タグを持たないものについて、 $languageInの SPARQL langMatches関数によって定義されるフィルタリング方式に従って、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

次のシェイプの例は、ex:prefLabelのすべての値が 英語またはマオリ語のいずれかであることを示している。

7.4.6 sh:uniqueLang

プロパティsh:uniqueLangをtrueに設定すると、どの2つの値ノードも同じ言語タグを使用できないことを指定する。 テキスト方向が存在する場合は、それも考慮される。

制約コンポーネントIRI: sh:UniqueLangConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:uniqueLang この制約を有効にするにはtrueを指定する。 シェイプ内の sh:uniqueLangの値は、データ型が xsd:booleanのリテラルである。 プロパティシェイプには、 sh:uniqueLangの値を最大1つ指定できる。 ノードシェイプには sh:uniqueLangの値を指定できない。
テキスト定義
$uniqueLangをsh:uniqueLangのパラメーター値と する。 $uniqueLangがtrueの場合、 少なくとも2つの値ノードで使用される空でない各言語タグについて、 検証結果が存在する。 値ノードのデータ型がrdf:dirLangStringである場合、 基本方向も一意性の 条件に含まれる。 例えば、"1"@ar--rtlと"1"@ar--ltrは異なり、 "1"@ar--rtlと"1"@arの組も異なる。

このセクションの残りは非規範的である。

7.5 リスト制約コンポーネント

このセクションの制約コンポーネントは、値ノードのうち、SHACLリストであるものに適用される。 これらは、SHACLリストの構造、長さ、メンバーに関する条件を指定する。

7.5.1 sh:memberShape

sh:memberShapeは、SHACL リストである値ノードのすべてのメンバーが、指定されたノードシェイプに適合しなければならないことを指定する。

制約コンポーネントIRI: sh:MemberShapeConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:memberShape SHACLリストのすべてのメンバーが 適合しなければならないシェイプ。 sh:memberShapeの値は、整形式のノード シェイプでなければならない。
テキスト定義
$memberShapeをsh:memberShapeのパラメーター値と する。 各値ノードvはSHACLリストでなければならない。vがSHACLリストでない場合、 検証結果が存在し、vを sh:valueとする。 SHACLリストのいずれかのメンバーmについて、 vが$memberShapeに適合しない場合、検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

値ノードvのメンバーmのうち、 $memberShapeに適合しないものは、vの検証結果において、それぞれ個別のsh:detailとして報告すべきである。 vが有効なSHACLリストでない場合、これは 最上位の検証結果として報告すべきであり、個々のメンバーの検証は 試みるべきではない。

検証結果でsh:detailを生成する方法の例は、SHACLテストスイートの sh:memberShapeのテストケースにある:memberShape-001.ttl。

次の例では、プロパティex:speakerOrderのすべての値は、 メンバーがIRIであるSHACLリストでなければならない。

7.5.2 sh:minListLength

sh:minListLengthは、SHACLリストである値ノードが持つべきメンバーの最小数を指定する。

制約コンポーネントIRI: sh:MinListLengthConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:minListLength SHACLリスト内のメンバーの最小数。 シェイプ内のsh:minListLengthの値は、 データ型がxsd:integerのリテラルである。 シェイプ内の sh:minListLengthの値は、0以上の 整数である。 シェイプには、 sh:minListLengthの値を最大1つ指定できる。
テキスト定義
$minListLengthをsh:minListLengthのパラメーター値と する。 各値ノードvはSHACLリストでなければならない。vがSHACLリストでない場合、 検証結果が存在し、vを sh:valueとする。 リストvのメンバー数が$minListLength未満の場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

次の例では、プロパティex:skillsのすべての値は、 少なくとも1つのメンバーを持つSHACLリストでなければならない。 sh:minListLengthの追加テストケースは、SHACLテストスイートにある:minListLength-001.ttl。

7.5.3 sh:maxListLength

sh:maxListLengthは、SHACLリストである値ノードが持つべきメンバーの最大数を指定する。

制約コンポーネントIRI: sh:MaxListLengthConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:maxListLength SHACLリスト内のメンバーの最大数。 シェイプ内のsh:maxListLengthの値は、 データ型がxsd:integerのリテラルである。 シェイプ内の sh:maxListLengthの値は、0以上の 整数である。 シェイプには、 sh:maxListLengthの値を最大1つ指定できる。
テキスト定義
$maxListLengthをsh:maxListLengthのパラメーター値と する。 各値ノードvはSHACLリストでなければならない。vがSHACLリストでない場合、 検証結果が存在し、vを sh:valueとする。 リストvのメンバー数が$maxListLengthを超える場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

次の例では、プロパティex:hobbiesのすべての値は、 最大2つのメンバーを持つSHACLリストでなければならない。 sh:maxListLengthの追加テストケースは、SHACLテストスイートにある:maxListLength-001.ttl。

7.5.4 sh:uniqueMembers

sh:uniqueMembersは、SHACLリストである値ノードが一意のメンバーを持たなければならないかどうかを指定する。

制約コンポーネントIRI: sh:UniqueMembersConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:uniqueMembers SHACLリストのメンバーが一意でなければならないかどうかを指定する真偽値。 シェイプ内のsh:uniqueMembersの値は、 データ型がxsd:booleanのリテラルである。 シェイプには、 sh:uniqueMembersの値を最大1つ指定できる。
テキスト定義
$uniqueMembersをsh:uniqueMembersのパラメーター値と する。 各値ノードvはSHACLリストでなければならない。vがSHACLリストでない場合、 検証結果が存在し、vを sh:valueとする。 $uniqueMembersがtrueであり、リストvに重複する メンバーがある場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

リストvの重複する各メンバーmは、 vの検証結果において、個別の sh:detailとして報告すべきである。 リストvが有効なSHACLリストでない場合、これは 最上位の検証結果として報告すべきであり、一意性の 検証を試みるべきではない。

検証結果でsh:detailを生成する方法の例は、SHACLテストスイートの sh:uniqueMembersのテストケースにある:uniqueMembers-001.ttl。

次の例では、プロパティex:preferencesのすべての値は、 各SHACLリスト内で一意の値を持つメンバーからなるSHACLリストでなければならない。

7.6 プロパティペア制約 コンポーネント

このセクションの制約コンポーネントは、他のプロパティやプロパティパスとの関係において、 値ノードの集合に関する 条件を指定する。 sh:lessThanとsh:lessThanOrEqualsは、プロパティシェイプでのみ使用できる。

7.6.1 sh:equals

sh:equalsは、すべての値ノードの集合が、 ノードの集合と等しいという条件を指定する。 その集合は、フォーカスノードから、sh:equalsを使用して指定されたSHACLプロパティ パスを介して到達可能なノードからなる。

制約コンポーネントIRI: sh:EqualsConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:equals 比較対象となるプロパティパス。 シェイプ内の sh:equalsの値は、整形式のSHACLプロパティパスである。
テキスト定義
$equalsをsh:equalsの値とし、$pathを SHACLプロパティパスとする。このパスは、 シェイプグラフ内で$equalsによって表される。 $otherNodesを、ノードの集合とする。このノードは、 フォーカスノードから$pathを介して到達可能である。 各値ノードのうち、 $otherNodesに存在しないものについて、 検証結果が存在し、値ノードをsh:valueとする。 $otherNodes内の各ノードのうち、 値ノードのいずれでもないものについて、 検証結果が存在し、そのノードをsh:valueとする。

このセクションの残りは非規範的である。

次の例は、シェイプ内でsh:equalsを使用して、 特定のフォーカスノードがex:firstNameと ex:givenNameについて同じ値の集合を持つ必要があることを指定する方法を示す。

次の例は、SHACLプロパティパスが 両方の値として使用できることを示している。 すなわち、sh:pathとsh:equalsの値として使用できる。

7.6.2 sh:disjoint

sh:disjointは、値ノードの集合が、 ノードの集合と互いに素であるという条件を指定する。その集合は、 フォーカスノードから、 sh:disjointの値であるSHACLプロパティパスを介して 到達可能なノードからなる。

制約コンポーネントIRI: sh:DisjointConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:disjoint 値の比較対象となるプロパティパス。 シェイプ内の sh:disjointの値は、整形式のSHACLプロパティパスである。
テキスト定義
$disjointをsh:disjointのパラメーター値とし、 $pathを、 SHACLプロパティパスとする。このパスは、 シェイプグラフ内で$disjointによって表される。 $otherNodesを、ノードの集合とする。このノードは、 フォーカスノードから$pathを介して到達可能である。 値ノードのうち、$otherNodesにも含まれるものそれぞれについて、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

次の例は、シェイプ内でsh:disjointを使用して、 特定のフォーカスノードがex:prefLabelと ex:altLabelで値を共有できないことを指定する方法を示す。

7.6.3 sh:subsetOf

sh:subsetOfは、すべての値ノードが、 さらに到達可能でなければならないという条件を指定する。 すなわち、フォーカスノードから、sh:subsetOfを使用して指定されたSHACLプロパティ パスを介して到達可能でなければならない。

制約コンポーネントIRI: sh:SubsetOfConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:subsetOf 比較対象となるプロパティパス。 シェイプ内の sh:subsetOfの値は、整形式のSHACLプロパティパスである。
テキスト定義
$subsetOfをsh:subsetOfの値とし、$pathを SHACLプロパティパスとする。このパスは、 シェイプグラフ内で$subsetOfによって表される。 $otherNodesを、ノードの集合とする。このノードは、 フォーカスノードから$pathを介して到達可能である。 各値ノードのうち、 $otherNodesに存在しないものについて、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

次の例は、シェイプ内でsh:subsetOfを使用して、 ある人のお気に入りの子供が、実際の子供の中に含まれなければならないことを指定する方法を示す。

7.6.4 sh:lessThan

sh:lessThanは、各値ノードが すべての ノードより小さくなければならないという条件を指定する。これらはフォーカスノードから SHACLプロパティパスを介して到達可能であり、 そのパスはsh:lessThanの値である。

制約コンポーネントIRI: sh:LessThanConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:lessThan 値の比較対象となるプロパティパス。 シェイプ内の sh:lessThanの値は、整形式のSHACLプロパティパスである。 ノードシェイプには sh:lessThanの値を指定できない。
テキスト定義
$lessThanをsh:lessThanの値とし、$pathを SHACLプロパティパスとする。このパスは、 シェイプグラフ内で$lessThanによって表される。 $otherNodesを、ノードの集合とする。このノードは、 フォーカスノードから$pathを介して到達可能である。 値ノードと$otherNodesのメンバーの各組について、 最初の値が2番目の値より小さくない場合( SPARQLの<演算子に基づく)、 または2つの値を比較できない場合、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

次の例は、シェイプ内でsh:lessThanを使用して、 ex:startDateのすべての値がex:endDateの値より「前」であることを指定する方法を示す。

7.6.5 sh:lessThanOrEquals

sh:lessThanOrEqualsは、各値ノードが、 以下のすべてのノード以下であるという条件を指定する。 すなわち、ノードのうち、フォーカスノードから SHACLプロパティパスを介して到達可能なものであり、 そのパスはsh:lessThanOrEqualsの値である。

制約コンポーネントIRI: sh:LessThanOrEqualsConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:lessThanOrEquals 値の比較対象となるプロパティパス。 シェイプ内の sh:lessThanOrEqualsの値は、整形式のSHACLプロパティパスである。 ノード シェイプにはsh:lessThanOrEqualsの値を指定できない。
テキスト定義
$lessThanOrEqualsをsh:lessThanOrEqualsの値とし、 $pathを SHACLプロパティパスとする。このパスは、 シェイプグラフ内で$lessThanOrEqualsによって表される。 $otherNodesを、ノードの集合とする。このノードは、 フォーカスノードから$pathを介して到達可能である。 値ノードと$otherNodesのメンバーの各組について、 最初の値が2番目の値以下でない場合(SPARQLの<=演算子に基づく)、 または2つの値を比較できない場合、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

次の例は、シェイプ内でsh:lessThanOrEqualsを使用して、 ex:startDateの値がex:endDateの値より後でないことを指定する方法を示す。 sh:lessThanとは異なり、プロジェクトは開始日と同じ日に終了してもよい。

7.7 論理制約コンポーネント

このセクションの制約コンポーネントは、一般的な論理演算子である 論理積、論理和、否定、および排他的論理和の変種を実装する。

7.7.1 sh:not

sh:notは、各値ノードが、指定された適合の対象となるシェイプに適合してはならないという条件を指定する。 これは否定および論理「not」演算子に相当する。

制約コンポーネントIRI: sh:NotConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:not 否定するシェイプ。 シェイプ内の sh:notの値は、整形式のシェイプでなければならない。
テキスト定義
$notをsh:notの値とする。 各値ノードvについて: vに対する失敗は、次の適合性チェックによって生成される場合、MUSTに従い生成しなければならない。 シェイプ$notに対するチェックが失敗を生成する場合である。 それ以外の場合、vがシェイプ$notに適合するなら、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

次の例は、シェイプ内でsh:notを使用して、 特定のフォーカスノードがex:propertyの値を一切持てないことを指定する方法を示す。

7.7.2 sh:and

sh:andは、各値ノードが指定されたすべての シェイプに適合するという条件を指定する。 これは論理積および論理「and」演算子に相当する。

制約コンポーネントIRI: sh:AndConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:and 値ノードを検証する対象となるシェイプのSHACLリスト。 シェイプ内の sh:andの各値は、SHACLリストである。 そのようなリストの各メンバーは、整形式のシェイプでなければならない。
テキスト定義
$andをsh:andの値とする。 各値ノードvについて: 失敗は、vに対する適合性チェックが、 $andのいずれかのメンバーに対して失敗を生成した場合、生成しなければならない(MUST)。 それ以外の場合、vが$andのすべてのメンバーに適合するわけではない場合、 すなわち少なくとも1つのメンバーに適合しない場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

sh:andはシェイプのSHACLリストを値として持つが、 それらのシェイプの順序は検証結果に影響しないことに注意する。 短絡評価の意味論を使用する実装では、その順序が 検証の効率に影響する場合がある。 評価が容易な制約、または 失敗する可能性が高い制約をリストの前方に配置することが推奨される。

次の例は、シェイプ内でsh:andを使用して、 特定のフォーカスノードがex:propertyの値をちょうど1つ持つという条件を指定する方法を示す。 これは、最小数を指定する別個の名前付きシェイプ(ex:SuperShape)と、 それに加えて 最大数を指定するプロパティシェイプの論理積によって実現される。 ここに示すように、sh:andを使用して、シェイプ間の 特殊化メカニズムを実装できる。

7.7.3 sh:or

sh:orは、各値ノードが、指定されたシェイプの少なくとも1つに 適合するという条件を指定する。 これは論理和および論理「or」演算子に相当する。

制約コンポーネントIRI: sh:OrConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:or 値ノードを検証する対象となるシェイプのSHACLリスト。 シェイプ内の sh:orの各値は、SHACLリストである。 そのようなリストの各メンバーは、整形式のシェイプでなければならない。
テキスト定義
$orをsh:orの値とする。 各値ノードvについて: 失敗は、vに対する適合性チェックが、 $orのいずれかのメンバーに対して失敗を生成した場合、生成しなければならない(MUST)。 それ以外の場合、vが$orのどの適合対象であるメンバーにも $orに関して適合しない場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

sh:orはシェイプのSHACLリストを値として持つが、 それらのシェイプの順序は検証結果に影響しないことに注意する。 短絡評価の意味論を使用する実装では、その順序が 検証の効率に影響する場合がある。 評価が容易な制約、または 成功する可能性が高い制約をリストの前方に配置することが推奨される。

次の例は、シェイプ内でsh:orを使用して、 特定のフォーカスノードがex:firstNameの値を少なくとも1つ、 またはex:givenNameの値を少なくとも1つ持つという条件を指定する方法を示す。

次の例は、sh:orをプロパティシェイプで使用して、 指定されたプロパティの値が ex:addressについてデータ型が xsd:stringのリテラル、 またはクラスex:AddressのSHACLインスタンスのいずれかでよいことを示す。

SHACLのすべての制約は、実行時に論理積で結合されることに注意する。次の例を考える:

正しい解釈は(shapeA OR shapeB)AND(shapeC OR shapeD)である。 ターゲットノードはshapeAまたはshapeBに適合し、さらに shapeCまたはshapeDにも適合する必要がある。

7.7.4 sh:xone

sh:xoneは、各値ノードが、指定されたシェイプのちょうど 1つに適合するという条件を指定する。

制約コンポーネントIRI: sh:XoneConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:xone 値ノードを検証する対象となるシェイプのSHACLリスト。 シェイプ内の sh:xoneの各値は、SHACLリストである。 そのようなリストの各メンバーは、整形式のシェイプでなければならない。 そのような リストには少なくとも1つのSHOULDに従って メンバーを含めるべきである。
テキスト定義
$xoneをsh:xoneの値とする。 各値ノードvについて、 Nを、$xoneのシェイプのうち、メンバーであるものの数とする。 $xoneの中で、 vがそのシェイプに適合するものを数える。 失敗は、vに対する適合性チェックが、 いずれかのメンバーに対して失敗を生成した場合、生成しなければならない(MUST)。 それ以外の場合、Nがちょうど1でなければ、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

sh:xoneはシェイプのSHACLリストを値として持つが、 それらのシェイプの順序は検証結果に影響しないことに注意する。

次の例は、シェイプ内でsh:xoneを使用して、 次の条件を 指定する方法を示す。特定のフォーカスノードは、ex:fullNameの値、または ex:firstNameとex:lastNameの値のいずれかを持たなければならず、両方を持ってはならない。

7.8 シェイプに基づく制約 コンポーネント

このセクションの制約コンポーネントは、値ノードを特定のシェイプに対して検証することで、 複雑な条件を指定するために使用できる。

7.8.1 sh:node

sh:nodeは、各値ノードが、指定されたノードシェイプに適合するという条件を指定する。

制約コンポーネントIRI: sh:NodeConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:node すべての値ノードが適合する必要があるノードシェイプ。 シェイプ内の sh:nodeの値は、整形式のノード シェイプでなければならない。
テキスト定義
$nodeをsh:nodeの値とする。 各値ノードvについて: 失敗は、次の適合性チェックが、vを $nodeに対して検査した結果、失敗を生成する場合、生成しなければならない(MUST)。 それ以外の場合、vが$nodeに適合しないなら、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

次の例は、プロパティシェイプでsh:nodeを使用する方法を示す。 プロパティex:addressのすべての値は、 シェイプex:AddressShapeによって表される制約を満たさなければならない。

次の例は、ノードシェイプでsh:nodeを使用する方法を示す。

SHACLにおける再帰的なシェイプの処理については、6.6.3 再帰的な シェイプの処理を参照する。

7.8.2 sh:property

sh:propertyは、各値ノードが、 指定されたプロパティシェイプを持つことを指定するために使用できる。

制約コンポーネントIRI: sh:PropertyConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:property すべての値ノードが持つ必要があるプロパティシェイプ。 シェイプ内の sh:propertyの各値は、整形式のプロパティシェイプでなければならない。
テキスト定義
$propertyをsh:propertyの値とする。 各値ノードvについて: 失敗は、次の場合に生成しなければならない(MUST)。 vをフォーカスノードとしてプロパティ シェイプ$propertyに対して検証した結果、失敗が生成される場合である。 それ以外の場合、検証結果は、vを検証した 結果であり、vをフォーカスノードとしてプロパティシェイプ $propertyに対して検証したものである。

このセクションの残りは非規範的である。

sh:propertyと sh:nodeには重要な違いがあることに注意する: 値ノードが制約に違反する場合、その値ノードに対する sh:nodeの検証結果は1つだけであり、 sh:sourceConstraintComponentにはsh:NodeConstraintComponentが設定される。 一方、sh:propertyでは任意の数の検証結果が存在する場合があり、 それらの 制約に対応する個々の制約コンポーネントが、プロパティシェイプ内の制約に基づいて sh:sourceConstraintComponentの値となる。

他のすべての検証結果と同様に、プロパティシェイプに sh:propertyを介して到達するたびに、 検証エンジンは新しい検証結果ノードを生成しなければならない(MUST)。 これには、同じフォーカスノードが同じ プロパティシェイプに対して検証される場合も含まれる。 たとえシェイプグラフ内の異なるパスを介して到達した場合でも同様である。

7.8.3 sh:someValue

sh:someValueは、少なくとも1つの値ノードが、 指定されたシェイプに適合するという条件を指定する。

制約コンポーネントIRI: sh:SomeValueConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:someValue 少なくとも1つのシェイプに適合する必要がある値ノードのための指定シェイプ。 シェイプ内の sh:someValueの値は、整形式のシェイプでなければならない。
テキスト定義
$someValueをsh:someValueの値とする。 失敗は、次の場合に生成しなければならない(MUST)。 いずれかの適合性チェックが、値ノードを $someValueに対して検査して失敗を生成した場合である。ただし、少なくとも1つの値ノードが$someValueに適合する場合を除く。 それ以外の場合、どの値ノードも$someValueに適合しないなら、 検証結果が存在する。

このセクションの残りは非規範的である。

値ノードの1つが適合した時点で、実装は値ノードの処理を停止できることに注意する。 値ノードの集合内のノードの順序は未定義であるため、 失敗を引き起こすノードに 到達する保証はない。 したがって、処理を予測可能にするため、すべての値ノードを 成功せずに訪問し終えるまでは、失敗は通知せずに無視される。

次の例では、ex:DuckFarmerShapeに適合するノードは、 少なくとも1つの値を ex:tendsAnimalに持つ必要があり、その値はSHACLインスタンスである。 ex:Duckのインスタンスでなければならない。

sh:someValueは、 sh:qualifiedValueShapeとsh:qualifiedMinCount 1の組み合わせに対する構文糖衣とみなせる。

また、sh:someValueは主にプロパティシェイプで使用する場合に意味を持つことに注意する。 ノードシェイプでは、sh:someValueは sh:nodeまたはsh:propertyを使用することと同等である。

7.8.4 sh:qualifiedValueShape, sh:qualifiedMinCount, sh:qualifiedMaxCount

sh:qualifiedValueShapeは、指定された数の値ノードが、指定されたシェイプに適合するという条件を指定する。 各sh:qualifiedValueShapeには、sh:qualifiedMinCountの値を1つ、 sh:qualifiedMaxCountの値を1つ、またはそれぞれの値を1つずつ、同じ主語に指定できる。

制約コンポーネントIRI: sh:QualifiedMinCountConstraintComponent, sh:QualifiedMaxCountConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:qualifiedValueShape 指定された数の値ノードが適合する必要があるシェイプ。 シェイプ内の sh:qualifiedValueShapeの値は、整形式のシェイプでなければならない。 ノード シェイプにはsh:qualifiedValueShapeの値を指定できない。 これは必須パラメーターであり、 sh:QualifiedMinCountConstraintComponentおよび sh:QualifiedMaxCountConstraintComponentに適用される。
sh:qualifiedValueShapesDisjoint これは省略可能なパラメーターであり、 sh:QualifiedMinCountConstraintComponentおよび sh:QualifiedMaxCountConstraintComponentに適用される。 trueに設定した場合、(カウントにおいて)値ノードは いずれの兄弟シェイプにも適合してはならない。 シェイプ内の sh:qualifiedValueShapesDisjointの値は、データ型が xsd:booleanのリテラルである。
sh:qualifiedMinCount シェイプに適合する値ノードの最小数。 シェイプ内の sh:qualifiedMinCountの値は、データ型が xsd:integerのリテラルである。 これは必須パラメーターであり、 sh:QualifiedMinCountConstraintComponentに適用される。
sh:qualifiedMaxCount シェイプに適合できる値ノードの最大数。 シェイプ内の sh:qualifiedMaxCountの値は、データ型が xsd:integerのリテラルである。 これは必須パラメーターであり、 sh:QualifiedMaxCountConstraintComponentに適用される。
兄弟シェイプのテキスト定義
Qを、シェイプとする。これはシェイプグラフG内で 限定カーディナリティ制約を宣言するものである。 (sh:qualifiedValueShapeと、少なくとも次のいずれかの値を持つことにより、 sh:qualifiedMinCountまたはsh:qualifiedMaxCount)。 psを、G内のシェイプの集合とする。これらはQを 値としてsh:propertyに持つ。 Qがsh:qualifiedValueShapesDisjointの値として trueを持つ場合、 Qの兄弟シェイプの集合は、次のすべての値の集合として定義される。 SPARQLプロパティパス sh:property/sh:qualifiedValueShapeの値であり、ps内の任意のシェイプについて、 Q自身のsh:qualifiedValueShapeの値を除いたものとする。 それ以外の場合、兄弟シェイプの集合は空である。
sh:qualifiedMinCountのテキスト定義
$qualifiedValueShapeをsh:qualifiedValueShapeの値と する。 $qualifiedMinCountをsh:qualifiedMinCountのパラメーター値と する。 Cを、次の条件を満たす値ノードvの数とする。 vが$qualifiedValueShapeに適合し、 かつvが現在のシェイプのいずれの適合対象となる兄弟シェイプにも適合しない場合である。 すなわち、vが検証される対象のシェイプであり、 sh:qualifiedValueShapeの値として$qualifiedValueShapeを持つシェイプである。 失敗は、上記の適合性チェックのいずれかが 失敗を生成した場合、生成しなければならない(MUST)。 それ以外の場合、Cが$qualifiedMinCount未満なら、検証結果が存在する。 sh:qualifiedMinCountの制約コンポーネントは、 sh:QualifiedMinCountConstraintComponentである。
sh:qualifiedMaxCountのテキスト定義
$qualifiedMaxCountをsh:qualifiedMaxCountのパラメーター値と する。 Cを、上記のsh:qualifiedMinCountで定義されたものとする。 失敗は、上記の適合性チェックのいずれかが 失敗を生成した場合、生成しなければならない(MUST)。 それ以外の場合、Cが$qualifiedMaxCountを超えるなら、検証結果が存在する。 sh:qualifiedMaxCountの制約コンポーネントは、 sh:QualifiedMaxCountConstraintComponentである。

このセクションの残りは非規範的である。

次のシェイプの例は、プロパティ ex:parentがちょうど2つの値を持ち、 そのうち少なくとも1つが女性であるという条件を指定するために使用できる。

次の例は、sh:qualifiedValueShapesDisjointを使用して、 手がex:digitの値を最大5つ持つこと( sh:maxCountを使用して表現される)、 そのうちちょうど1つがex:Thumbのインスタンスであり、ちょうど4つが ex:Fingerのインスタンスでなければならないこと、 ただし親指と他の指は互いに素でなければならないことを示す。 つまり、手のどの指も親指として同時に数えることはできない。

7.8.5 sh:reifierShape, sh:reificationRequired

sh:reifierShapeは、プロパティシェイプを1つ以上のノードシェイプに関連付けるために使用できる。 すべての具体化子は、これらのノードシェイプに適合しなければならない。

制約コンポーネントIRI: sh:ReifierShapeConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:reifierShape このトリプルの具体化子が適合しなければならないノードシェイプ。 sh:reifierShapeの値は、整形式のノード シェイプでなければならない。 sh:reifierShapeの値が指定されている場合、sh:pathの値は IRIに制限される。
sh:reificationRequired これは省略可能なパラメーターであり、 sh:ReifierShapeConstraintComponentに適用される。 trueに設定した場合、フォーカスノードとパスの組み合わせに対して、 データグラフ内に少なくとも1つの具体化値が存在しなければならない。 シェイプ内の sh:reificationRequiredの値は、データ型が xsd:booleanのリテラルである。
テキスト定義
$reifierShapeをsh:reifierShapeの値とし、 $reificationRequiredを 値とする。 sh:reificationRequiredの値(存在する場合)であり、 $pathを、値とする。これはプロパティシェイプのsh:pathの値である。 各値ノードvについて、tをトリプル項(フォーカスノード、 $path、v)とし、 tの具体化子を、ノードrとする。これらは データグラフが トリプルr rdf:reifies tを含むものである。

tの各具体化子rについて、失敗は、次の場合に生成しなければならない(MUST)。 rを検証した結果、 フォーカスノードとしてノードシェイプ $reifierShapeに対して失敗が生成される場合である。 それ以外の場合、$reifierShapeに適合しないtの各具体化子rについて、 検証結果が存在し、vを sh:valueとする。

$reificationRequiredがtrueで、tに具体化子がない場合、 検証結果が存在し、vを sh:valueとする。

このセクションの残りは非規範的である。

7.9 その他の制約コンポーネント

このセクションでは、他のカテゴリーに該当しないコア制約コンポーネントを列挙する。

7.9.1 sh:closed, sh:ignoredProperties

RDFデータモデルは非常に高い柔軟性を提供する。 原則として、どのノードも任意のプロパティの値を持つことができる。 しかし、場合によっては、どのプロパティをノードに適用できるかについて条件を指定することが 有用である。 SHACL Core言語には、sh:closedというプロパティが含まれており、 各値ノードが、次のプロパティについてのみ値を持つという条件を 指定するために使用できる。それらは、 プロパティシェイプを介してシェイプに指定され、 sh:propertyによって明示的に列挙されたプロパティである。

制約コンポーネントIRI: sh:ClosedConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:closed シェイプを閉じるにはtrueに設定する。 シェイプ内の sh:closedの値は、データ型が xsd:booleanのリテラル、 またはIRIsh:ByTypesである。
sh:ignoredProperties sh:propertyによって明示的に列挙されたものに加えて、 許可されるプロパティの省略可能なSHACLリスト。 シェイプ内の sh:ignoredPropertiesの値は、SHACL リストでなければならない。 そのようなリストの各メンバーは、 IRIでなければならない。
テキスト定義
$closedをsh:closedのパラメーター値と する。 $ignoredPropertiesをsh:ignoredPropertiesの値と する。

$closedがtrueまたはsh:ByTypesであり、Pが 以下で定義されるプロパティの集合である場合、 検証結果は、次の各トリプルについて存在する。値ノードを その 主語とし、Pに含まれない述語を持つトリプルである。 $ignoredPropertiesに値がある場合、次のメンバーとして列挙されたプロパティも許可される。このSHACLリストの プロパティは、値ノードに対しても許可される。 検証結果は、トリプルの次の述語を sh:resultPathとして持たなければならず(MUST)、 トリプルの目的語を sh:valueとして持たなければならない。

$closedがtrueの場合、Pは次のIRIプロパティの集合である。 現在のシェイプからSPARQLパスsh:property/sh:pathを介して到達可能なものである。

$closedがsh:ByTypesの場合、Pは次のIRIプロパティの集合である。 以下のアルゴリズムによって値ノードから到達可能なものに、rdf:typeを加えたものである。
function collectProperties(S)
    SからSPARQLパスを介して到達可能なすべてのIRIプロパティを追加する
            sh:property/sh:path
    if Sがシェイプグラフ内でrdfs:ClassのSHACLインスタンスである場合 {
        シェイプグラフ内で(S rdfs:subClassOf ?o)に一致する各トリプルについて
            collectProperties(?o)
        シェイプグラフ内で(?s sh:targetClass S)に一致する各トリプルについて
            collectProperties(?s)
    }
    if Sがシェイプグラフ内でsh:NodeShapeのSHACLインスタンスである場合
        シェイプグラフ内で(S sh:node ?o)に一致する各トリプルについて
            collectProperties(?o)

データグラフ内の値ノードの各rdf:type Tについて
    collectProperties(T)
実装では、上記のアルゴリズムが同じSを2回訪問しないようにすることで、 無限ループを防ぐ必要があることに注意する。

このセクションの残りは非規範的である。

次の例は、シェイプ内でsh:closedを使用して、 次の条件を 指定する方法を示す。特定のフォーカスノードはex:firstNameと ex:lastNameについてのみ値を持つことができる。 「無視される」プロパティrdf:typeも許可される。

sh:closed sh:ByTypesのユースケースには、現在の値ノードの型の スーパークラス内で宣言されたプロパティ(rdfs:subClassOfを介して)、 およびsh:targetClassを介してそれらの型に関連付けられた他のシェイプや、 sh:nodeを介してあるノードシェイプから別のノードシェイプへ到達可能なシェイプが含まれる。 sh:ByTypesの例は、テストケースライブラリーにある: closed-003.ttl、 closed-004.ttl。

7.9.2 sh:hasValue

sh:hasValueは、少なくとも1つの値ノードが、 指定されたRDF項と等しいという条件を指定する。

制約コンポーネントIRI: sh:HasValueConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:hasValue 必須となる特定の値。
テキスト定義
$hasValueをsh:hasValueのパラメーター値と する。 RDF項$hasValueが値ノードの中に存在しない場合、 検証結果が存在する。

このセクションの残りは非規範的である。

7.9.3 sh:in

sh:inは、各値ノードが、指定されたメンバーであるという条件を指定する。その対象はSHACLリストである。

制約コンポーネントIRI: sh:InConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:in 許可される値をSHACLリストのメンバーとして持つもの。 シェイプ内の sh:inの各値は、SHACLリストである。 シェイプには、 sh:inの値を最大1つ指定できる。 そのような リストには、少なくとも1つのSHOULDに従って メンバーを含めるべきである。
テキスト定義
$inをsh:inの値とする。 各値ノードのうち、 $inのメンバーでないものについて、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

リテラルの照合は厳密である必要があることに注意する。例えば、"04"^^xsd:byteは "4"^^xsd:integerと一致しない。

7.9.4 sh:rootClass

sh:rootClassによって指定される条件は、各値ノードが、 指定されたクラス、またはそのクラスの(推移的な)サブクラスであることである。

制約コンポーネントIRI: sh:RootClassConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:rootClass すべての値ノードが属さなければならないクラス階層のルート。 シェイプ内のsh:rootClassの値は、IRI、 または空白ノードであり、整形式のSHACL リストで、すべてのメンバーがIRIであるものとする。
テキスト定義
$rootClassをsh:rootClassのパラメーター値と する。 classesをIRIの集合と し、 $rootClassがIRIである 場合、集合はそのIRIのみから構成され、 $rootClassが空白ノードのSHACLリストである場合、 集合は そのリストのメンバーのみから構成されるものとする。

各値ノードのうち、 IRIでないもの、 またはIRIであって、次のいずれでもないものについて、すなわち等しくもSHACLサブクラスでもないもの、 データグラフ内でclassesのいずれのクラスに対しても、 検証結果が存在し、値ノードをsh:valueとする。

このセクションの残りは非規範的である。

sh:rootClass制約は通常、クラスを値として持つことができる プロパティシェイプ(例えば、sh:class rdfs:Classを介して)とともに使用され、 値ノードに許可されるサブクラス階層を制限する。 指定されたクラスは、許可されるクラス階層の上限として機能する。

7.9.5 sh:uniqueValuesFor

sh:uniqueValuesForは、指定された1つ以上のプロパティの値が 値ノードについて、 現在のシェイプのすべてのターゲットノードの中で一意でなければならないという条件を指定する。

制約コンポーネントIRI: sh:UniqueValuesForConstraintComponent

パラメーター:
プロパティ 概要と構文規則
sh:uniqueValuesFor プロパティの IRI、または 各SHACLリストのメンバーが プロパティのIRIであるもの。
テキスト定義
$uniqueValuesForをsh:uniqueValuesForの値とする。 これはシェイプS内の値である。 $propertiesを次のような集合とする。 $uniqueValuesForがIRIの場合、 $properties = { $uniqueValuesFor }とする。 $uniqueValuesForがSHACLリストの場合、 $propertiesはそのリストのメンバーの集合である。 $targetNodesをSのターゲットノードとする。 これらは、フォーカスノードが 直接指定されている場合でも、Sのターゲットから決定される。 例えば、Sがsh:nodeの値である場合である。
各値ノードVについて、別の ノードが$targetNodes内に存在し、 $properties内のすべてのプロパティについて、Vと完全に同じ値を持つ場合、 Vについて、 検証結果が存在する。 Vが$properties内のどのプロパティについても値を持たない場合、 検証結果は生成されない。

このセクションの残りは非規範的である。

リテラルの照合は厳密である必要があることに注意する。例えば、"04"^^xsd:byteは "4"^^xsd:integerと一致しない。 また、sh:uniqueValuesForはこれらの値の存在を要求しないため、 多くの場合、 sh:minCount 1制約と組み合わせて使用される。

ターゲットノードの計算は、シェイプの定義のみに依存することに注意する。例えば、 sh:uniqueValuesFor制約も持つシェイプの sh:targetClass宣言などである。

8. 検証に使用しないシェイプの 特性

このセクションは非規範的である。

前のセクションでは検証条件を表すプロパティを紹介したが、 このセクションではSHACLプロセッサーによって無視されるプロパティを扱う。 これらのいわゆる非検証 プロパティの使用は 完全に任意であり、正式な解釈上の取り決めの対象とはならない。 フォームの構築、コード生成、RDFファイルの予測可能な出力などの目的で使用できる。

8.1 sh:nameとsh:description

シェイプはsh:nameに1つ以上の値を持ち、 シェイプを定義する特性に対して人間が読める名前を提供できる。 すなわち、プロパティシェイプの場合はプロパティパス、 ノードシェイプの場合は対象となるリソースの種類である。

注記

sh:nameと他のラベル用プロパティ(rdfs:label、 skos:prefLabelなど)は相互に補完するものである。 他のラベル用プロパティは、シェイプリソース自体に名前を付ける。 sh:nameはシェイプリソースに名前を付けることを意図したものではなく、 前述したシェイプを定義する特性に名前を付けることを意図している。

sh:nameの値は、 リテラルであり、そのデータ型は xsd:string、rdf:dirLangString、またはrdf:langStringである。

同様に、シェイプはsh:descriptionに値を持つことができ、 同じ定義上の特性について人間が読める説明を提供できる。

sh:descriptionはシェイプリソース自体を説明することを意図したものではなく、 シェイプを定義する特性を説明することを意図している。 sh:descriptionの値は、 リテラルであり、そのデータ型は xsd:string、rdf:dirLangString、rdf:langString、または rdf:HTMLである。

sh:nameとsh:descriptionはいずれも 複数の値を持つことができるが、言語タグごとに値は1つだけにすべきである。

8.2 sh:intent

シェイプはsh:intentに値を持つことができ、それらの値はリテラルであるべきであり、 データ型はxsd:string、rdf:langString またはrdf:dirLangStringであるべきである。

プロパティsh:intentは、シェイプに関連付けられた1つ以上の意図された 規則、前提条件、制約について、人間が読める説明を提供する。

一般的な文書や編集上のテキストを含むことができるrdfs:commentとは異なり、 また、プロパティ値の意味を説明するsh:descriptionとも異なり、 sh:intentは、シェイプの意図された意味論を表す 個々の規則のような記述を捉えることを特に意図している。

sh:intentには、異なる意図された規則を表す複数の値を指定できる。 これらの規則の一部は、SHACLの制約コンポーネントを使用してすでに形式的に表現された制約と 重複する場合がある。 sh:intentの値が、同じシェイプグラフ内で形式的にも表現されている意味論を 表す場合、 sh:intent文のトリプルは、プロパティ値 sh:formalized trueを使用して具体化できる。 ただし、すべての非検証プロパティと同様に、 sh:intentの存在や内容はSHACLの検証や適合性に影響しない。

8.3 sh:agentInstruction

シェイプはsh:agentInstructionに値を持つことができ、それらの値は リテラルであるべきであり、 データ型はxsd:string、 rdf:langString、またはrdf:dirLangStringであるべきである。

このプロパティは、自然言語を理解するソフトウェアエージェントに 送信できるテキストによる指示を表すために使用できる。

注記

このプロパティは、次のプロパティによる同様のテキスト説明とともに 使用できる。 rdfs:comment、 sh:description、rdfs:label、sh:name、sh:intent、 およびsh:messageを使用して、 シェイプの意味論的な解釈についてソフトウェアエージェントに指示できる。

8.4 sh:codeIdentifier

シェイプはsh:codeIdentifierに1つの値を持ち、 API、クエリー言語、または同様のプログラムによるアクセスにおいて、 シェイプの表現に使用できる名前を提案できる。 sh:codeIdentifierの値は、リテラルであり、データ型はxsd:stringで、 その文字列は正規表現^[a-zA-Z_][a-zA-Z0-9_]*$に一致する。

注記

典型的なユースケースは、シェイプから GraphQL クエリ スキーマを生成し、プロパティシェイプを GraphQL フィールドに対応付けることである。 デフォルトでは、このようなスキーマ生成器は sh:path のローカル名を使用できるが、sh:codeIdentifier が存在する場合はそれを使用するべきである。 複合パス の場合は、明示的な sh:codeIdentifier の指定が 強く推奨される。 Java、JavaScript、Python などの API 生成器にも同様の要件がある。

8.5 sh:codeType

シェイプはsh:codeTypeに1つの値を持ち、 APIやクエリー言語におけるシェイプの表現で、値ノードの型を 提案できる。 同様のプログラムによるアクセスにも適用される。 sh:codeTypeの値は、IRIであり、データ型を表す。 例えば、[rdf12-concepts]に列挙されたXML Schemaデータ型のいずれかである。

sh:datatypeなどのシェイプの制約は、 sh:nodeKindやsh:classとともに、 項をデータグラフ内で記述するが、 sh:codeTypeは、それらの項を扱うコードが受け取るべき型を記述する。 sh:codeTypeの値は、これらの制約と一致している必要はない。 例えば、プロパティシェイプはsh:nodeKind sh:IRIと sh:codeType xsd:stringの両方を宣言できる。 通常は制約から型を導出するツールであっても、 sh:codeTypeが存在する場合はその値を使用すべきである。 sh:codeTypeは各値ノードに個別に適用され、 単一の値と値の集合のどちらが期待されるかは示さない。

注記

制約ではコードが期待する型を表現できない場合に、sh:codeTypeが必要となる。 例えば、ファイルの場所を保持するプロパティは、IRIと リテラルの両方を受け入れる場合があり、 sh:nodeKind sh:IRIOrLiteralで宣言される一方、コードはどちらの場合も文字列を期待する。 sh:datatype xsd:stringを宣言すると、すべてのIRI値について検証結果が生成されるが、 sh:codeType xsd:stringは検証に影響せず、コードに 文字列を受け取るよう指示する。 sh:codeTypeは特定のプログラミング言語に依存しない。 指定されたデータ型をどのネイティブ型で表すか、および値ノードをどのように変換するかは、 実装に委ねられる。

8.6 sh:unit

シェイプはプロパティsh:unitに値を持ち、値ノードに関する計量単位、 通貨、または同様の情報を示すことができる。 sh:unitの値は、リテラルであり、そのデータ型はxsd:string、 rdf:langString、rdf:dirLangStringのいずれか、またはIRIである。 SHACL 1.2では、執筆時点 (2026年)に、 これらを統一的に表現する公式のW3C標準が存在せず、 W3C以外にも複数の標準が存在するため、sh:unitの特定の値を規定しない。

SHACL 1.2では、次の推奨事項を示す。

これらの構文規則は意図的に柔軟なままとされているが、特定のアプリケーションでは より具体的な規則を適用してもよい。 例えば、sh:unitプロパティにsh:class qudt:Unit制約を宣言する ことができる。

SHACLに基づくユーザーインターフェイスツールは、sh:unitの値を使用して値を表示できる。 ユーザーのロケールによっては、そのようなツールが単位を自動的に変換したり、 実際の値が保存される単位とは異なる単位でのデータ入力を許可したりすることもできる。

注記

SHACL Coreはsh:unitの具体的な意味論を指定しないが、 SHACLに基づく拡張の中には、検証を含む他の目的で単位を使用するものもある。 例えば、プロパティがsh:unit "K"を宣言する任意のリテラルに対して、 sh:minInclusive 0制約を適用するシェイプを定義できる。

次の例は、上記の例を変形したもので、ノードシェイプを使用して、 単位だけでなく最小値などの制約も含む、再利用可能な「ユーロ建て価格」の 定義をカプセル化する。

8.7 sh:order

プロパティシェイプは、プロパティsh:orderに1つの値を持ち、 フォーム構築などの目的でプロパティシェイプの相対的な順序を示すことができる。 sh:orderの値は、リテラルであり、そのデータ型はxsd:decimalまたは xsd:integerである。 sh:orderは検証目的には使用されない。 プロパティシェイプに存在する場合、sh:orderの推奨される用途は、 ユーザーインターフェイスでプロパティシェイプを昇順に並べ替えることである。例えば、より小さい 順序値を持つプロパティを より大きい順序値を持つプロパティの上方または先頭側(左から右に書く言語では左側)に配置する。

注記

sh:orderは、リスト内の要素の相対的な順序を指定するための汎用的な仕組みを 提供する。 sh:orderはSHACLの検証には影響しないが、任意の種類の 主語とともに使用でき、他の仕様ではより強い意味論を持つ場合がある。

8.8 sh:group

プロパティシェイプは、プロパティsh:groupを使用して クラスsh:PropertyGroupのSHACLインスタンスにリンクし、 そのシェイプが関連するプロパティシェイプのグループに属することを 示すことができる。 各グループには、アプリケーションの目的に役立つ追加のトリプルを持たせることができる。 例えば、フォーム構築用のrdfs:labelなどである。 グループはsh:orderプロパティを持ち、 同じフォーム内におけるグループの相対的な順序を示すこともできる。

次の例は、これらのさまざまな機能を組み合わせて使用する方法を示す。

フォーム構築アプリケーションは、上記の情報を使用して次のように情報を表示できる。

名前
名: John
姓: Doe
住所
番地を含む住所: 123 Silverado Ave
市区町村: Cupertino
郵便番号: 54321

次の例でも同じ情報が生成されることに注意する。 これはトリプルの順序を変更するが、sh:orderの値は変更しない。

注記
xsd:string、rdf:langString、 rdf:dirLangString、またはrdf:HTML型のリテラルを受け入れる述語については、 xsd:stringを避け、rdf:langStringまたはrdf:dirLangStringを優先すべきである。 国際化をサポートし、双方向テキストを正しく扱うために、言語タグと、 適切な場合には方向性マーカーを使用することが推奨される。

付録

A. SHACL構文規則の概要

この節では、SHACL のすべての規範的な構文規則を列挙する。 この節は、この仕様の他の部分から自動生成されており、参照元へのハイパーリンクが提供される。 規則の文脈が不明な場合は、その説明文を参照できる。 これらの規則に違反するノードは、シェイプグラフ内では、整形式でない。 sh:shapesGraph や sh:shape に関するものなど、一部の規則は、 代わりにデータ グラフ内のトリプルに適用される。 するべきであるを用いて記述される規則は推奨事項である: そのような規則だけに違反するノードは、整形式でないものではないが、プロセッサーは警告を報告してもよい。 sh:incomplete や sh:incompleteURIStart に関するものなど、一部の規則は、 代わりにデータグラフ内のトリプルに適用される。

構文規則 ID 構文規則の本文
SHACL-list SHACL リストは、RDF グラフ G 内のIRIまたは空白ノードであり、 rdf:nil である(ただし、rdf:nil が値を持たないこと、 rdf:first と rdf:rest のいずれにも)、または、ちょうど 1 つの値を、 G 内でプロパティ rdf:first に持ち、かつ、ちょうど 1 つの値を、 G 内でプロパティ rdf:rest に持ち、その値も SHACL リストである、 G 内で、 そして、このリストはプロパティパス rdf:rest+ の値として自身を持たない、 G 内で。
entailment-nodeKind 値は、プロパティ sh:entailment の場合、IRI である。
shape シェイプ は、IRIまたは空白ノード s であり、 以下の条件の少なくとも 1 つを満たす。その条件は、シェイプグラフ内で評価される:
multiple-parameters 一部の制約コンポーネント、例えばsh:PatternConstraintComponent は、複数の パラメーターを宣言する。 そのようなコンポーネントのいずれかのパラメーターについて複数の値を持つシェイプは、整形式でない。
targetNode-nodeKind 各値は、シェイプ内の sh:targetNode の場合、整形式の ノード式である。
targetClass-nodeKind シェイプ内の sh:targetClass の各値は、IRIである。
implicit-targetClass-nodeKind s が、SHACL インスタンスであり、sh:NodeShape または sh:PropertyShape のもので、 RDF グラフ G 内にあり、かつ s が、SHACL インスタンスでもある場合、 そのクラスは rdfs:Class で、G 内にあり、かつ s がIRIでないなら、 s は、整形式でないシェイプである。G 内で。
targetSubjectsOf-nodeKind 値は、シェイプ内の sh:targetSubjectsOf の場合、IRIである。
targetObjectsOf-nodeKind 値は、シェイプ内の sh:targetObjectsOf の場合、IRIである。
targetWhere-node シェイプ内の sh:targetWhere の各値は、整形式のシェイプである。
shape-nodeKind 各値は、sh:shape の場合、IRIである。
severity-maxCount シェイプが持てるのは最大 1 つの値である。プロパティ sh:severity に対して、シェイプグラフ内で。
severity-nodeKind sh:severity の各値は、IRIである。
severity-reifier-maxCount T を、次のトリプルの集合とする。それらは制約を表し、その制約はシェイプ内にある。 シェイプグラフは、最大 1 つの値を指定できる。そのプロパティは sh:severity であり、 指定先の具象化子は、トリプル、すなわち T 内のものの具象化子である。
message-datatype sh:message の値は、リテラルであり、そのデータ型は、 xsd:string、rdf:dirLangString、rdf:langString、または rdf:HTML である。
message-reifier-maxCount T を、次のトリプルの集合とする。それらは制約を表し、その制約はシェイプ内にある。 シェイプグラフは、最大 1 つの値を指定できる。そのプロパティは sh:message であり、 指定先の具象化子は、トリプル、すなわち T 内のものの具象化子である。
deactivated-maxCount シェイプは、プロパティ sh:deactivated に対して最大 1 つの値を持つことができる。
deactivated-datatype sh:deactivated の値は、ノード式であり、 true または false のいずれかを、(唯一の)出力ノードとして持たなければならない。
deactivated-reifier-maxCount トリプルが、シェイプを主語として、 パラメーター(sh:minCount など)を述語として持つ場合、最大 1 つの 具象化子を持つことができる。その具象化子は、値を持ち、そのプロパティは sh:deactivated である。
NodeShape-path-maxCount SHACL インスタンスは、sh:NodeShape の場合、持つことができない、 値を、 プロパティ sh:path に対して。
PropertyShape プロパティシェイプは、シェイプであり、シェイプグラフ内にあり、 かつ、主語である。そのトリプルは、sh:path を述語として持つ。
path-maxCount シェイプは、最大 1 つの値を sh:path に対して持つ。
path-node 値は、プロパティシェイプ内の sh:path の場合、整形式の SHACL プロパティパスである。
PropertyShape-path-minCount SHACL インスタンスは、sh:PropertyShape の場合、1 つの 値を持つ。 プロパティ sh:path に対して。
path-values プロパティシェイプは、最大 1 つの値を持つ。そのプロパティは sh:values であり、この値は、整形式のノード式である。
path-defaultValue プロパティシェイプは、最大 1 つの値を持つ。そのプロパティは sh:defaultValue であり、この値は、整形式のノード式である。
path-values-iri プロパティシェイプが値を持てるのは、 sh:values および/または sh:defaultValue に対して、その値が、 sh:path に対して述語パスである場合に限られる。
path-metarule RDF グラフ内のノードが整形式のSHACL プロパティ パス p であるのは、以下の構文規則のちょうど 1 つを満たす場合である。 それらは、以下の小節に示される。
path-non-recursive ノード p は、整形式の SHACL プロパティパスではない。p が空白 ノードであり、p のいずれかのパスマッピングが直接または推移的に p を参照する場合。
path-predicate 述語パスは、IRIである。
path-sequence シーケンスパスは、空白ノードであり、SHACL リストである。 少なくとも 2 つのメンバーを持ち、各メンバーは整形式の SHACL プロパティパスである。
path-alternative 選択パスは、空白ノードであり、ちょうど 1 つのトリプルの主語である。 G 内で。 このトリプルは、sh:alternativePath を述語、L を目的語として持ち、 L は、SHACL リストであり、少なくとも 2 つのメンバーを持つ。 そして、L の各メンバーは、整形式の SHACL プロパティパスである。
path-inverse 逆パスは、空白ノードであり、主語である。ちょうど 1 つのトリプルの、G 内で。 このトリプルは、sh:inversePath を述語として持ち、目的語 v は、整形式の SHACL プロパティパスである。
path-zero-or-more 0 回以上パスは、空白ノードであり、主語である。ちょうど 1 つのトリプルの、G 内で。 このトリプルは、sh:zeroOrMorePath を述語として持ち、目的語 v は、整形式の SHACL プロパティパスである。
path-one-or-more 1 回以上パスは、空白ノードであり、主語である。ちょうど 1 つのトリプルの、G 内で。 このトリプルは、sh:oneOrMorePath を述語として持ち、目的語 v は、整形式の SHACL プロパティパスである。
path-zero-or-one 0 回または 1 回パスは、空白ノードであり、主語である。ちょうど 1 つのトリプルの、G 内で。 このトリプルは、sh:zeroOrOnePath を述語として持ち、目的語 v は、整形式の SHACL プロパティパスである。
IRIExpression-syntax RDF グラフ内のノードが整形式のIRI 式であるのは、 それがIRIである場合である。
LiteralExpression-syntax RDF グラフ内のノードが整形式のリテラル 式であるのは、それがリテラルである場合である。
shapesGraph-nodeKind すべての値は、sh:shapesGraph の場合、IRIである
incomplete-datatype 値は、sh:incomplete の場合、リテラルであり、データ型は xsd:boolean である。
incompleteURIStart-datatype 値は、sh:incompleteURIStart の場合、リテラルであり、データ型は xsd:boolean である。
incompleteURIStart-subject 主語は、トリプルの述語が sh:incompleteURIStart である場合、IRIである。
class-nodeKind シェイプ内の sh:class の値は、IRI または空白ノードであり、後者は整形式のSHACL リストで、そのすべてのメンバーがIRIである。
datatype-maxCount シェイプは、sh:datatype に対して最大 1 つの値を持つ。
datatype-nodeKind シェイプ内の sh:datatype の値は、IRI または空白ノードであり、後者は整形式のSHACL リストで、そのすべてのメンバーがIRIである。
nodeKind-maxCount シェイプは、sh:nodeKind に対して最大 1 つの値を持つ。
nodeKind-nodeKind シェイプ内の sh:nodeKind の値は、IRIまたは 空白ノードであり、後者は整形式のSHACL リストで、そのすべてのメンバーがIRIである。
nodeKind-in sh:nodeKind の値が IRI である場合、シェイプ内の sh:nodeKind の値は、 クラス sh:NodeKind の以下の 7 つのインスタンスのいずれかである: sh:BlankNode、sh:IRI、sh:Literal、 sh:BlankNodeOrIRI、sh:BlankNodeOrLiteral、sh:IRIOrLiteral、 および sh:TripleTerm。

sh:nodeKind の値が整形式の SHACL リストである場合、それらのリストのメンバーは、 シェイプ内で、クラス sh:NodeKind の以下の 4 つのインスタンスのいずれかである: sh:BlankNode、sh:IRI、sh:Literal、および sh:TripleTerm。
minCount-scope ノードシェイプは、いかなる値も持つことができない、 sh:minCount に対して。
minCount-maxCount プロパティシェイプは、最大 1 つの値を持つ、 sh:minCount に対して。
minCount-datatype プロパティシェイプ内の sh:minCount の値は、リテラルであり、そのデータ型は xsd:integer である。
maxCount-scope ノードシェイプは、いかなる値も持つことができない、 sh:maxCount に対して。
maxCount-maxCount プロパティシェイプは、最大 1 つの値を持つ、 sh:maxCount に対して。
maxCount-datatype プロパティシェイプ内の sh:maxCount の値は、リテラルであり、そのデータ型は xsd:integer である。
minExclusive-nodeKind シェイプ内の sh:minExclusive の値は、リテラルである。
minExclusive-maxCount シェイプは、sh:minExclusive に対して最大 1 つの値を持つ。
minInclusive-nodeKind シェイプ内の sh:minInclusive の値は、リテラルである。
minInclusive-maxCount シェイプは、sh:minInclusive に対して最大 1 つの値を持つ。
maxExclusive-nodeKind シェイプ内の sh:maxExclusive の値は、リテラルである。
maxExclusive-maxCount シェイプは、sh:maxExclusive に対して最大 1 つの値を持つ。
maxInclusive-nodeKind シェイプ内の sh:maxInclusive の値は、リテラルである。
maxInclusive-maxCount シェイプは、sh:maxInclusive に対して最大 1 つの値を持つ。
minLength-datatype シェイプ内の sh:minLength の値は、リテラルであり、そのデータ型は xsd:integer である。
minLength-maxCount シェイプは、sh:minLength に対して最大 1 つの値を持つ。
maxLength-datatype シェイプ内の sh:maxLength の値は、リテラルであり、そのデータ型は xsd:integer である。
maxLength-maxCount シェイプは、sh:maxLength に対して最大 1 つの値を持つ。
pattern-datatype シェイプ内の sh:pattern の値は、データ型が xsd:string のリテラルである。
pattern-regex シェイプ内の sh:pattern の値は、次に対する有効なパターン引数である。SPARQL REGEX 関数。
flags-datatype シェイプ内の sh:flags の値は、データ型が xsd:string のリテラルである。
singleLine-datatype シェイプ内の sh:singleLine の値は、リテラルであり、そのデータ型は xsd:boolean である。
singleLine-maxCount シェイプは、sh:singleLine に対して最大 1 つの値を持つ。
languageIn-node シェイプ内の sh:languageIn の各値は、SHACL リストである。
languageIn-members-datatype 各メンバーは、そのようなリストでは、リテラルであり、そのデータ型は xsd:string である。
languageIn-maxCount シェイプは、sh:languageIn に対して最大 1 つの値を持つ。
uniqueLang-datatype シェイプ内の sh:uniqueLang の値は、リテラルであり、そのデータ型は xsd:boolean である。
uniqueLang-maxCount プロパティシェイプは、sh:uniqueLang に対して最大 1 つの値を持つ。
uniqueLang-scope ノードシェイプは、いかなる値も持つことができない、 sh:uniqueLang に対して。
memberShape-node sh:memberShape の値は、整形式のノードシェイプでなければならない。
minListLength-datatype シェイプ内の sh:minListLength の値は、リテラルであり、そのデータ型は xsd:integer である。
minListLength-minInclusive シェイプ内の sh:minListLength の値は、0 以上の整数である。
minListLength-maxCount シェイプは、sh:minListLength に対して最大 1 つの値を持つ。
maxListLength-datatype シェイプ内の sh:maxListLength の値は、リテラルであり、そのデータ型は xsd:integer である。
maxListLength-minInclusive シェイプ内の sh:maxListLength の値は、0 以上の整数である。
maxListLength-maxCount シェイプは、sh:maxListLength に対して最大 1 つの値を持つ。
uniqueMembers-datatype シェイプ内の sh:uniqueMembers の値は、リテラルであり、そのデータ型は xsd:boolean である。
uniqueMembers-maxCount シェイプは、sh:uniqueMembers に対して最大 1 つの値を持つ。
equals-nodeKind シェイプ内の sh:equals の値は、整形式のSHACL プロパティパスである。
disjoint-nodeKind シェイプ内の sh:disjoint の値は、整形式のSHACL プロパティパスである。
subsetOf-nodeKind シェイプ内の sh:subsetOf の値は、整形式のSHACL プロパティパスである。
lessThan-nodeKind シェイプ内の sh:lessThan の値は、整形式のSHACL プロパティパスである。
lessThan-scope ノードシェイプは、いかなる値も持つことができない、 sh:lessThan に対して。
lessThanOrEquals-nodeKind シェイプ内の sh:lessThanOrEquals の値は、整形式のSHACL プロパティパスである。
lessThanOrEquals-scope ノードシェイプは、いかなる値も持つことができない、 sh:lessThanOrEquals に対して。
not-node シェイプ内の sh:not の値は、整形式のシェイプでなければならない。
and-node シェイプ内の sh:and の各値は、SHACL リストである。
and-members-node 各メンバーは、そのようなリストでは、整形式のシェイプでなければならない。
or-node シェイプ内の sh:or の各値は、SHACL リストである。
or-members-node 各メンバーは、そのようなリストでは、整形式のシェイプでなければならない。
xone-node シェイプ内の sh:xone の各値は、SHACL リストである。
xone-members-node 各メンバーは、そのようなリストでは、整形式のシェイプでなければならない。
xone-minListLength そのような各リストは、持つべきである、少なくとも 1 つのメンバーを。
node-node シェイプ内の sh:node の値は、整形式のノードシェイプでなければならない。
property-node シェイプ内の sh:property の各値は、整形式のプロパティシェイプでなければならない。
someValue-shape シェイプ内の sh:someValue の値は、整形式のシェイプでなければならない。
qualifiedValueShape-node シェイプ内の sh:qualifiedValueShape の値は、整形式のシェイプでなければならない。
qualifiedValueShape-scope ノードシェイプは、いかなる値も持つことができない、 sh:qualifiedValueShape に対して。
qualifiedValueShapesDisjoint-datatype シェイプ内の sh:qualifiedValueShapesDisjoint の値は、リテラルであり、そのデータ型は xsd:boolean である。
qualifiedMinCount-datatype シェイプ内の sh:qualifiedMinCount の値は、リテラルであり、そのデータ型は xsd:integer である。
qualifiedMaxCount-datatype シェイプ内の sh:qualifiedMaxCount の値は、リテラルであり、そのデータ型は xsd:integer である。
reifierShape-node sh:reifierShape の値は、整形式のノードシェイプでなければならない。 sh:reifierShape の値が与えられた場合、sh:path の値は、 IRI に制限される。
reificationRequired-datatype シェイプ内の sh:reificationRequired の値は、リテラルであり、そのデータ型は xsd:boolean である。
closed-datatype シェイプ内の sh:closed の値は、データ型が xsd:boolean のリテラル、 またはIRI sh:ByTypes である。
ignoredProperties-node シェイプ内の sh:ignoredProperties の値は、SHACL リストでなければならない。
ignoredProperties-members-nodeKind 各メンバーは、そのようなリストでは、IRIでなければならない。
in-node シェイプ内の sh:in の各値は、SHACL リストである。
in-maxCount シェイプは、sh:in に対して最大 1 つの値を持つ。
in-minListLength そのような各リストは、持つべきである、少なくとも 1 つのメンバーを。
rootClass-nodeKind シェイプ内の sh:rootClass の値は、IRI または空白ノードであり、後者は整形式のSHACL リストで、そのすべてのメンバーがIRIである。
uniqueValuesFor-node IRI、すなわちプロパティの IRI、または SHACL リストで、その各メンバーがIRI、すなわちプロパティの IRI であるもの。

B. シェイプグラフを検証するためのSHACLシェイプ

このセクションは非規範的である。

SHACL 1.2概要のSHACL-SHACL付録 [shacl12-overview]では、 他のSHACLシェイプグラフを検証するために使用でき、それによって 各種SHACL仕様への適合を目指すRDFデータに関する多くの構文上の 制約を適用できるSHACLグラフについて説明している。

SHACL-SHACLシェイプグラフは仕様ごとに提供されており、統合された「和集合」としても http://www.w3.org/ns/shacl-shaclで利用できる。これは 概要の付録に示されている。

C. SHACL Coreバリデーターの概要

このセクションでは、SHACL Coreのすべての規範的なバリデーターを列挙する。 このセクションは本仕様の他の部分から自動生成されており、バリデーターの文脈が不明確な場合に 本文を参照できるよう、ハイパーリンクが提供されている。

制約コンポーネント別のバリデーター
sh:ClassConstraintComponent: $class を sh:class の パラメーター値 とする。 classes を IRI の集合とし、 次の条件を満たすものとする。 $class が IRI である場合、 その集合は、ちょうどその IRI のみから構成され、 $class が 空白ノード である SHACL リスト の場合、 その集合は、 ちょうどそのリストのメンバーから構成される。

各 値ノード について、 それが リテラル であるか、または SHACL インスタンス ではない非リテラルであり、classes 内のいずれのクラスについても データグラフ 内で該当しない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:DatatypeConstraintComponent: $datatype を パラメーター値 とし、その対象を sh:datatype とする。 datatypes を IRI の集合とし、 次の条件を満たすものとする。 $datatype が IRI である場合、 その集合は、ちょうどその IRI のみから構成され、 $datatype が 空白ノード である SHACL リスト の場合、 その集合は、 ちょうどそのリストのメンバーから構成される。

各 値ノード について、 リテラル でないか、または リテラル であって、そのデータ型が datatypes のいずれにも一致しない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。

リテラルのデータ型は、SPARQL 1.2 の datatype 関数に従って決定される。 リテラル がデータ型に一致するのは、リテラル のデータ型が同じ IRI を持ち、 かつ、SPARQL 1.2 がサポートするデータ型については、型が不正な リテラルではない場合である。
sh:NodeKindConstraintComponent: $nodeKind を パラメーター値 とし、その対象を sh:nodeKind とする。 nodeKinds を IRI の集合とし、 次の条件を満たすものとする。 $nodeKind が IRI である場合、 その集合は、ちょうどその IRI のみから構成され、 $nodeKind が 空白ノード である SHACL リスト の場合、 その集合は、 ちょうどそのリストのメンバーから構成される。

各 値ノード について、 nodeKinds のいずれにも一致しない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。 任意の IRI は、sh:IRI、 sh:BlankNodeOrIRI、sh:IRIOrLiteral のみに一致する。 任意の 空白ノード は、sh:BlankNode、 sh:BlankNodeOrIRI、sh:BlankNodeOrLiteral のみに一致する。 任意の リテラル は、sh:Literal、 sh:BlankNodeOrLiteral、sh:IRIOrLiteral のみに一致する。 任意の トリプル項 は、sh:TripleTerm のみに一致する。
sh:MinCountConstraintComponent: $minCount を パラメーター値 とし、その対象を sh:minCount とする。 値ノード の数が $minCount より小さい場合、 検証結果 が存在する。
sh:MaxCountConstraintComponent: $maxCount を パラメーター値 とし、その対象を sh:maxCount とする。 値ノード の数が $maxCount より大きい場合、 検証結果 が存在する。
sh:MinExclusiveConstraintComponent: $minExclusive を パラメーター値 とし、その対象を sh:minExclusive とする。 各 値ノード v について、 SPARQL 式 $minExclusive < v が true を返さない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:MinInclusiveConstraintComponent: $minInclusive を パラメーター値 とし、その対象を sh:minInclusive とする。 各 値ノード v について、 SPARQL 式 $minInclusive <= v が true を返さない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:MaxExclusiveConstraintComponent: $maxExclusive を パラメーター値 とし、その対象を sh:maxExclusive とする。 各 値ノード v について、 SPARQL 式 $maxExclusive > v が true を返さない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:MaxInclusiveConstraintComponent: $maxInclusive を パラメーター値 とし、その対象を sh:maxInclusive とする。 各 値ノード v について、 SPARQL 式 $maxInclusive >= v が true を返さない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:MinLengthConstraintComponent: $minLength を パラメーター値 とし、その対象を sh:minLength とする。 各 値ノード v について、 v の文字列表現の長さ(SPARQL STRLEN 関数 で定義される長さ) が $minLength より小さい場合、または v が SPARQL str 関数 で定義される文字列表現の 対象であり、v が 空白ノード である場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:MaxLengthConstraintComponent: $maxLength を パラメーター値 とし、その対象を sh:maxLength とする。 各 値ノード v について、 v の文字列表現の長さ(SPARQL STRLEN 関数 で定義される長さ) が $maxLength より大きい場合、または v が SPARQL str 関数 で定義される文字列表現の 対象であり、v が 空白ノード である場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:PatternConstraintComponent: $pattern を パラメーター値 とし、その対象を sh:pattern とする。 $flags を パラメーター値 とし、その対象を sh:flags とする。 各 値ノード について、 空白ノードであるか、または その文字列表現(SPARQL str 関数 で定義される) が正規表現 $pattern(SPARQL REGEX 関数 で定義される)に一致しない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。 $flags に値がある場合、照合は 必ず SPARQL REGEX 関数の 3 引数版の定義に従い、$flags を 第 3 引数として使用しなければならない。
sh:SingleLineConstraintComponent: $singleLine を パラメーター値 とし、その対象を sh:singleLine とする。 $singleLine が true の場合、各 値ノード について、 そのノードがリテラルであり、その字句形式に U+000A(改行)、U+000B(垂直タブ)、U+000C(改ページ)、または U+000D (復帰)のいずれかの文字が含まれる場合、 検証結果が存在する。
sh:LanguageInConstraintComponent: $languageIn を sh:languageIn の 値 とする。 各 値ノード について、 リテラル でないか、または言語タグが $languageIn の メンバー である基本言語範囲のいずれにも一致せず、 SPARQL langMatches 関数で定義されるフィルタリング方式に従っても一致しない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:UniqueLangConstraintComponent: $uniqueLang を パラメーター値 とし、その対象を sh:uniqueLang とする。 $uniqueLang が true の場合、 少なくとも 2 つの 値ノード で使用される空でない言語タグごとに、 検証結果 が存在する。 値ノード の データ型 が rdf:dirLangString の場合、 基本方向 も一意性の条件に含まれる。 例えば、"1"@ar--rtl と "1"@ar--ltr は異なり、 "1"@ar--rtl と "1"@ar の組も同様に異なる。
sh:MemberShapeConstraintComponent: $memberShape を パラメーター値 とし、その対象を sh:memberShape とする。 各 値ノード v は SHACL リスト でなければならない。v が SHACL リストでない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。 SHACL リスト v のいずれかのメンバー m が $memberShape に 適合 しない場合、v を sh:value とする 検証結果 が存在する。 sh:value。
sh:MinListLengthConstraintComponent: $minListLength を パラメーター値 とし、その対象を sh:minListLength とする。 各 値ノード v は SHACL リスト でなければならない。v が SHACL リストでない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。 リスト v のメンバー数が $minListLength より小さい場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:MaxListLengthConstraintComponent: $maxListLength を パラメーター値 とし、その対象を sh:maxListLength とする。 各 値ノード v は SHACL リスト でなければならない。v が SHACL リストでない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。 リスト v のメンバー数が $maxListLength より大きい場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:UniqueMembersConstraintComponent: $uniqueMembers を パラメーター値 とし、その対象を sh:uniqueMembers とする。 各 値ノード v は SHACL リスト でなければならない。v が SHACL リストでない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。 $uniqueMembers が true であり、リスト v に重複する メンバーがある場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:EqualsConstraintComponent: $equals を sh:equals の 値 とし、$path を SHACL プロパティパス とする。このパスは、 シェイプグラフ 内で $equals によって表される。 $otherNodes を ノード の集合とし、フォーカスノード から $path を介して到達可能なものとする。 各 値ノード について、 $otherNodes に存在しない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。 $otherNodes 内の各 ノード について、 値ノード のいずれでもない場合、 その ノード を sh:value とする 検証結果 が存在する。
sh:DisjointConstraintComponent: $disjoint を パラメーター値 とし、その対象を sh:disjoint とする。また、$path を SHACL プロパティパス とする。このパスは、 シェイプグラフ 内で $disjoint によって表される。 $otherNodes を ノード の集合とし、フォーカスノード から $path を介して到達可能なものとする。 $otherNodes にも含まれる各 値ノード について、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:SubsetOfConstraintComponent: $subsetOf を sh:subsetOf の 値 とし、$path を SHACL プロパティパス とする。このパスは、 シェイプグラフ 内で $subsetOf によって表される。 $otherNodes を ノード の集合とし、フォーカスノード から $path を介して到達可能なものとする。 $otherNodes に存在しない各 値ノード について、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:LessThanConstraintComponent: $lessThan を sh:lessThan の 値 とし、$path を SHACL プロパティパス とする。このパスは、 シェイプグラフ 内で $lessThan によって表される。 $otherNodes を ノード の集合とし、フォーカスノード から $path を介して到達可能なものとする。 値ノード と $otherNodes のメンバーの各組について、 最初の 値 が 2 番目の 値 より小さくない場合(SPARQL の < 演算子に基づく)、 または 2 つの値を比較できない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:LessThanOrEqualsConstraintComponent: $lessThanOrEquals を sh:lessThanOrEquals の 値 とし、 $path を SHACL プロパティパス とする。このパスは、 $lessThanOrEquals によって シェイプグラフ 内で表される。 $otherNodes を ノード の集合とし、フォーカスノード から $path を介して到達可能なものとする。 値ノード と $otherNodes のメンバーの各組について、 最初の 値 が 2 番目の 値 以下でない場合、 (SPARQL の <= 演算子に基づく)、 または 2 つの値を比較できない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:NotConstraintComponent: $not を sh:not の 値 とする。 各 値ノード v について、 v をシェイプ $not に対して 適合性チェック した結果、 失敗 が生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、v がシェイプ $not に 適合 するならば、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:AndConstraintComponent: $and を sh:and の 値 とする。 各 値ノード v について、 v を $and のいずれかの メンバー に対して 適合性チェック した結果、 失敗 が生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、v が $and の各 メンバー に 適合 しないならば、 $and について、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:OrConstraintComponent: $or を sh:or の 値 とする。 各 値ノード v について、 v を $or のいずれかの メンバー に対して 適合性チェック した結果、 失敗 が生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、v が $or のどの メンバー にも 適合 しないならば、 $or について、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:XoneConstraintComponent: $xone を sh:xone の 値 とする。 各 値ノード v について、 N を、$xone の メンバー である シェイプ の数とし、 $xone のうち、 v がそのシェイプに 適合 するものを数える。 v をいずれかの メンバー に対して 適合性チェック した結果、 失敗 が生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、N がちょうど 1 でなければ、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:NodeConstraintComponent: $node を sh:node の 値 とする。 各 値ノード v について、 v を $node に対して 適合性チェック した結果、 失敗 が生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、v が $node に 適合 しないならば、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:PropertyConstraintComponent: $property を sh:property の 値 とする。 各 値ノード v について、 v を フォーカスノード としてプロパティシェイプ $property に対して 検証した結果、失敗 が生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、検証結果は、v を フォーカスノード としてプロパティシェイプ $property に対して 検証 した結果となる。
sh:SomeValueConstraintComponent: $someValue を sh:someValue の 値 とする。 いずれかの 値ノード を $someValue に対して 適合性チェック した結果、 失敗 が生じた場合、失敗 を 必ず生成しなければならない。ただし、少なくとも 1 つの 値ノード が $someValue に適合する場合を除く。 それ以外の場合、どの 値ノード も $someValue に 適合 しないならば、 検証結果 が存在する。
sh:QualifiedMinCountConstraintComponent: $qualifiedValueShape を sh:qualifiedValueShape の 値 とする。 sh:qualifiedValueShape。 $qualifiedMinCount を パラメーター値 とし、その対象を sh:qualifiedMinCount とする。 C を 値ノード v の数とし、 v が $qualifiedValueShape に 適合 し、 かつ v が、現在の シェイプのどの 兄弟シェイプ にも 適合 しないものを数える。 すなわち、v が検証される対象のシェイプであり、 sh:qualifiedValueShape の値として $qualifiedValueShape を持つシェイプである。 これらの適合性チェックのいずれかが 失敗 を生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、C が $qualifiedMinCount より小さければ、 検証結果 が存在する。 sh:qualifiedMinCount の 制約コンポーネント は、 sh:QualifiedMinCountConstraintComponent である。
sh:QualifiedMaxCountConstraintComponent: $qualifiedMaxCount を パラメーター値 とし、その対象を sh:qualifiedMaxCount とする。 C は、上記の sh:qualifiedMinCount で定義されたものとする。 これらの適合性チェックのいずれかが 失敗 を生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、C が $qualifiedMaxCount より大きければ、 検証結果 が存在する。 sh:qualifiedMaxCount の 制約コンポーネント は、 sh:QualifiedMaxCountConstraintComponent である。
sh:ReifierShapeConstraintComponent: $reifierShape を sh:reifierShape の 値 とし、 $reificationRequired を sh:reificationRequired の 値 とする。 (存在する場合)、 また、$path を 値 とし、その対象を プロパティシェイプ の sh:path とする。 各 値ノード v について、t を トリプル項(フォーカスノード、 $path、v)とし、 t の再具体化子を ノード r とする。これは、データグラフ が トリプル r rdf:reifies t を含む場合のノードである。

t の各再具体化子 r について、r を フォーカスノード として、ノードシェイプ $reifierShape に対して検証した結果、失敗 が生じた場合、失敗 を 必ず生成しなければならない。 それ以外の場合、t の各再具体化子 r が 適合 しない場合、 $reifierShape に対して、 v を sh:value とする 検証結果 が存在する。 sh:value。

$reificationRequired が true であり、t に再具体化子がない場合、 v を sh:value とする 検証結果 が存在する。 sh:value。
sh:ClosedConstraintComponent: $closed を パラメーター値 とし、その対象を sh:closed とする。 $ignoredProperties を sh:ignoredProperties の 値 とする。

$closed が true または sh:ByTypes であり、P が 以下で定義されるプロパティの集合である場合、 値ノード を 主語 とし、P に含まれない 述語 を持つ各 トリプル について、検証結果 が存在する。 $ignoredProperties に値がある場合、この SHACL リスト の メンバー として列挙されたプロパティも、 値ノード に対して許可される。 検証結果 は、トリプルの 述語 を sh:resultPath とし、 そのトリプルの 目的語 を sh:value として 必ず持たなければならない。

$closed が true の場合、P は 現在のシェイプから SPARQL パス sh:property/sh:path を介して到達可能な IRI プロパティの集合である。

$closed が sh:ByTypes の場合、P は IRI プロパティの集合であり、 以下のアルゴリズムによって値ノードから到達可能なものに rdf:type を加えたものである。
function collectProperties(S)
    add all IRI properties that can be reached from S via the SPARQL path
            sh:property/sh:path
    if S is a SHACL instance of rdfs:Class in the shapes graph {
        for each triple in the shapes graph matching (S rdfs:subClassOf ?o)
            collectProperties(?o)
        for each triple in the shapes graph matching (?s sh:targetClass S)
            collectProperties(?s)
    }
    if S is a SHACL instance of sh:NodeShape in the shapes graph
        for each triple in the shapes graph matching (S sh:node ?o)
            collectProperties(?o)

for each rdf:type T of the value node in the data graph
    collectProperties(T)
実装は、上記のアルゴリズムで同じ S を 2 回訪問しないようにすることで、 無限ループを回避する必要があることに注意。
sh:HasValueConstraintComponent: $hasValue を パラメーター値 とし、その対象を sh:hasValue とする。 RDF 項 $hasValue が 値ノード に含まれない場合、 検証結果 が存在する。
sh:InConstraintComponent: $in を sh:in の 値 とする。 各 値ノード について、 $in の メンバー でない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:RootClassConstraintComponent: $rootClass を パラメーター値 とし、その対象を sh:rootClass とする。 classes を IRI の集合とし、 次の条件を満たすものとする。 $rootClass が IRI である場合、 その集合は、ちょうどその IRI のみから構成され、 $rootClass が 空白ノード である SHACL リスト の場合、 その集合は、 ちょうどそのリストのメンバーから構成される。

各 値ノード について、 IRI でないか、または IRI でありながら classes のいずれとも等しくなく、また SHACL サブクラス でもなく、 データグラフ 内でその条件を満たさない場合、 その 値ノード を sh:value とする 検証結果 が存在する。 sh:value。
sh:UniqueValuesForConstraintComponent: $uniqueValuesFor を シェイプ S 内の sh:uniqueValuesFor の 値 とする。 $properties を次の集合とする。 $uniqueValuesFor が IRI である場合、 $properties = { $uniqueValuesFor }。 $uniqueValuesFor が SHACL リスト の場合、 $properties はそのリストの メンバー の集合である。 $targetNodes を S の ターゲット ノードとする。 これらは、フォーカスノード が直接指定されている場合でも、 S のターゲットから決定される。 例えば、S が sh:node の 値 である場合などである。
各 値ノード V について、別の ノード が $targetNodes 内に存在し、 $properties 内のすべてのプロパティについて、V とまったく同じ 値 を持つ場合、 V について、 検証結果 が存在する。 V が $properties 内のいずれのプロパティについても 値 を持たない場合、 $properties について結果は生成されない。

D. セキュリティとプライバシーに関する 考慮事項

このセクションは非規範的である。

ほとんどのRDFベースの技術と同様に、SHACLプロセッサーはさまざまなソースから 結合されたグラフを処理する場合がある。一部のアプリケーションはオープンな「リンクトデータ」アーキテクチャを採用し、 組織の信頼できるネットワークの外部にあるソースからRDFトリプルを動的に組み立てる場合がある。 RDFでは誰でも任意のリソースについて文を追加できるため、トリプルによって シェイプ定義やデータグラフ内のノードの本来意図された意味論が変更され、誤解を招く結果につながる可能性がある。 このような状況を防ぐには、信頼できる 検証済みのRDFソースのみを使用し、owl:importsや sh:shapesGraphを介してグラフが動的に追加される可能性を排除する必要がある。

E. 索引

E.1 本仕様で定義される 用語

E.2 参照先で定義される用語

F. 謝辞

このセクションは非規範的である。

元のSHACL Core仕様は、RDF Data Shapes Working Groupによって作成された。 その謝辞のセクションを参照する。

G. 変更点 元のSHACL CoreとSHACL 1.2 Coreの間の変更点

このセクションは非規範的である。

H. 参考文献

H.1 規範的参考文献

[BCP47]
言語を識別するためのタグ. Addison Phillips; Mark Davis. IETF. 2009年9月. 現行最良慣行. URL: https://www.rfc-editor.org/info/bcp47
[owl2-syntax]
OWL 2 Web オントロジー言語の構造 仕様と関数形式構文(第2版). Boris Motik; Peter Patel-Schneider; Bijan Parsia. W3C. 2012年12月11日. W3C 勧告. URL: https://www.w3.org/TR/owl2-syntax/
[rdf12-concepts]
RDF 1.2 の概念と抽象データ モデル. Andy Seaborne; Gregg Kellogg; Olaf Hartig; Pierre-Antoine Champin. W3C. 7日 2026年4月. W3C 勧告候補. URL: https://www.w3.org/TR/rdf12-concepts/
[RFC2119]
RFC で使用するキーワード: 要求レベルを示すために. S. Bradner. IETF. 1997年3月. 現行最良慣行. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC8174]
大文字と小文字の曖昧さ:RFC 2119 のキーワードにおける. B. Leiba. IETF. 2017年5月. 現行最良慣行. URL: https://www.rfc-editor.org/info/rfc8174/
[shacl-ucr]
SHACL のユースケースと要件. Simon Steyskal; Karen Coyle. W3C. 2017年7月20日. W3C ワーキンググループノート. URL: https://www.w3.org/TR/shacl-ucr/
[shacl12-node-expr]
SHACL 1.2 ノード式. Robert David; Holger Knublauch; Simon Steyskal. W3C. 2026年7月21日. W3C 作業草案. URL: https://www.w3.org/TR/shacl12-node-expr/
[shacl12-profiling]
SHACL 1.2 プロファイリング. Nicholas Car; Scott Henninger; Yousouf Taghzouti; Alexander Nelson; Matt Goldberg. W3C. 2026年7月2日. FPWD. URL: https://www.w3.org/TR/shacl12-profiling/
[shacl12-sparql]
SHACL 1.2 SPARQL 関連機能. Holger Knublauch; Matt Goldberg; Scott Henninger; Livio Robaldo. W3C. 2026年10月11日. W3C 作業 草案. URL: https://www.w3.org/TR/shacl12-sparql/
[sparql12-entailment]
SPARQL 1.2 含意レジーム. Peter Patel-Schneider. W3C. 2026年4月9日. W3C 作業草案. URL: https://www.w3.org/TR/sparql12-entailment/
[sparql12-query]
SPARQL 1.2 クエリ言語. Olaf Hartig; Andy Seaborne; Ruben Taelman; Gregory Williams; Thomas Pellissier Tanon. W3C. 10月11日 2026年. W3C 作業草案. URL: https://www.w3.org/TR/sparql12-query/

H.2 参考情報

[json-ld]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 2020年11月3日. W3C 勧告. URL: https://www.w3.org/TR/json-ld/
[owl2-mapping-to-rdf]
OWL 2 Web オントロジー言語のマッピング先: RDF グラフ(第2版). Peter Patel-Schneider; Boris Motik. W3C. 12月11日 2012年. W3C 勧告. URL: https://www.w3.org/TR/owl2-mapping-to-rdf/
[rdf12-turtle]
RDF 1.2 Turtle. Gregg Kellogg; Andy Seaborne; Dominik Tomaszuk. W3C. 2026年10月7日. W3C 作業草案. URL: https://www.w3.org/TR/rdf12-turtle/
[shacl12-core]
SHACL 1.2 コア. Holger Knublauch; Thomas Bergwinkl; Yousouf Taghzouti; Jesse Wright. W3C. 2026年10月13日. W3C 作業草案. URL: https://www.w3.org/TR/shacl12-core/
[shacl12-inference-rules]
SHACL 1.2 推論規則. Holger Knublauch; Simon Steyskal; Scott Henninger; Livio Robaldo; Matt Goldberg. W3C. 9月17日 2026年. FPWD. URL: https://www.w3.org/TR/shacl12-inference-rules/
[shacl12-overview]
SHACL 1.2 概要. W3C. W3C 編集者草案. URL: https://w3c.github.io/data-shapes/shacl12-overview/
[shacl12-ui]
SHACL 1.2 ユーザーインターフェース. Thomas Bergwinkl; Edmond Chuc; Ieben Smessaert; Daniël Beeke. W3C. 2026年5月26日. FPWD. URL: https://www.w3.org/TR/shacl12-ui/
[sparql12-rl]
SPARQL 1.2 RL. Robert David; David Habgood; Andy Seaborne; Simon Steyskal. W3C. 2026年10月12日. W3C 作業草案. URL: https://www.w3.org/TR/sparql12-rl/