Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この文書は、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 1.2 仕様ファミリーの一部である。より詳細な 導入については、SHACL 1.2 Overview を参照されたい。
仕様は次のとおりである:
作業草案:
作業グループノート草案:
実装者は、 SHACL 1.2 テストスイートの テストケースに合格することにより、上記仕様への適合レベルを部分的に確認できる。 ただし、テストスイートのすべてのテストに合格しても、仕様への完全な適合を意味するわけではないことに注意されたい。 それは、実装がテストスイートでテストされた側面に適合していることのみを意味する。
導入には、用語の節が含まれる。
第2節および第3節では、SHACL の形状と制約、およびプロパティパスを扱う。
第4節ではノード式を導入し、第5節では SHACL における検証を定義する。
第6節では組み込みの SHACL Core 制約コンポーネントを定義し、第7節では検証を行わない プロパティについて議論する。
SHACL の構文は RDF である。 この文書の例では Turtle [rdf12-turtle] および JSON-LD [json-ld] を使用する。 実際には RDF/XML など、他の RDF シリアライズを使用してもよい。 読者は、トリプルなどの基本的な RDF 概念 [rdf12-concepts] に精通しているべきである。
この文書は、RDF グラフを記述し検証するための言語である SHACL(Shapes Constraint Language)のコアを規定する。 この節では、主要な用語の概要と基本概念を説明する例を用いて SHACL を導入する。
この文書全体を通じて、次の用語を使用する。
RDF 1.2 Concepts and Abstract Syntax の各部にリンクされている用語は、 そこで定義されているとおりに SHACL で使用される。SPARQL 1.2 Query Language の 各部にリンクされている用語は、そこで定義されているとおりに SHACL で使用される。 単一のリンクは、この文書における特定の用語のすべての出現に対する定義を提供するのに十分である。
定義はこの文書内で完全である。すなわち、この文書において ある状況を真にする規則が存在しない場合、その状況は偽である。
n は、
RDF グラフ内のプロパティ p について
値 v を持つ。
これは、そのグラフ内に、主語 n、
述語 p、および
目的語 v を持つ
RDF トリプルが存在する場合である。
「グラフ G における P のすべての値 ...」という句は、「述語 P を持つ G 内のトリプルのすべての目的語
...」を意味する。
(この文書では、RDF 項があるグラフ内の所与の述語について値を持つという事実を表すために、
動詞 specify または declare が使用されることがある。)
n が、RDF グラフ G において
SPARQL プロパティ
パス式
p について値 v を持つとは、G に対する SPARQL
クエリー
SELECT ?s ?o WHERE { ?s p' ?o } の結果に、
?s を n に、?o を v に束縛する
解マッピングが存在する場合であり、
ここで p' は p の SPARQL 表層構文である。
G における
SHACL リスト
は、IRI
または 空白ノードであり、
rdf:nil(ただし rdf:nil が rdf:first または
rdf:rest のいずれについても
値を持たない場合)、または
G においてプロパティ rdf:first についてちょうど1つの
値を持ち、かつ
G においてプロパティ rdf:rest について、G における
SHACL リストでもあるちょうど1つの 値
を持ち、さらにそのリストが G においてプロパティパス rdf:rest+ の値として
自分自身を持たないもののいずれかである。
G における rdf:nil 以外の任意の SHACL リストの
メンバーは、G における
rdf:first の値と、それに続く、G における rdf:rest の値の
G におけるメンバーから成る。
SHACL リスト rdf:nil は、いかなる RDF グラフにおいてもメンバーを持たない。
rdf:type についての
値の集合、
およびそのグラフ内におけるそれらの
値の
SHACL
スーパークラスである。
いくつかの SHACL 実装は、SHACL サブクラスを決定する
rdfs:subClassOf トリプルが、
データグラフに加えて
形状グラフからも照会されるようにパラメーター化できることに注意されたい。
6.3 rdfs:subClassOf
トリプルのためのグラフを参照。
この文書内では、次の名前空間接頭辞定義が使用される:
| 接頭辞 | 名前空間 |
|---|---|
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 を表す。
非規範的として示された節と同様に、この仕様におけるすべての作成ガイドライン、図、例、および注は 非規範的である。それ以外のすべてはこの仕様において規範的である。
この文書におけるキーワード MAY、MUST、MUST NOT、SHOULD、および SHOULD NOT は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているとおりに解釈される。
この文書は、単に SHACL とも呼ばれる SHACL Core 言語を定義する。 この仕様は、次に対する適合基準を記述する:
この文書には、形状および他のノードが 形状グラフ内で満たす必要のある構文規則が含まれる。 これらの規則は通常、形状は...を持たなければならない、X の値は リテラルである、または 述語 P を持つトリプルのすべての目的語は IRI でなければならない という形式である。 これらの規則の完全な一覧は、付録にある。 これらの規則のいずれかに違反するノードは 不正形式と呼ばれる。 これらの規則のいずれにも違反しないノードは 正形式と呼ばれる。
形状グラフは、次の条件がすべて成り立つ場合に 正形式である:
owl:imports 文を推移的にたどることにより決定される)
は、OWL 2 構文仕様
[owl2-syntax]
の 第3.4節で定義される制約を満たす。
すなわち、次のような2つの形状グラフを含まない:
owl:versionIRI 値を持つ)場合、または
owl:incompatibleWith 注釈を含み、その値が他方の形状グラフ IRI
または owl:versionIRI のいずれかに等しい場合。
SHACL は RDF および RDFS 語彙を使用するが、完全な RDFS 推論は要求されない。
ただし、SHACL プロセッサーは、SHACL プロセッサーに渡される前に事前計算されたものであるか、
SHACL 処理の一部としてオンザフライで実行されたものであるかを問わず
(データグラフまたは
形状グラフのいずれも変更せずに)、
含意 [sparql12-entailment] を含む RDF グラフ上で
動作してもよい。
含意の処理をサポートするために、SHACL は、所与の
形状グラフによって要求される推論を示す
プロパティ sh:entailment を含む。
プロパティ
sh:entailment の 値
は IRI である。
このプロパティの一般的な値は、[sparql12-entailment] で扱われる。
SHACL 実装は、含意レジームをサポートしてもよいが、要求されない。
形状グラフが、
述語 sh:entailment および目的語 E を持つ
トリプルを含み、
SHACL プロセッサーが、所与の
データ
グラフに対する含意レジームとして E をサポートしない場合、
そのプロセッサーは 失敗を通知しなければならない。
それ以外の場合、SHACL プロセッサーは、
形状グラフ内の
sh:entailment のすべての値に対する含意を提供しなければならず、
推論されたすべてのトリプルは、
検証プロセス中に
データ
グラフに対するすべてのクエリーによって返されなければならない。
この節は非規範的である。
この節では、SHACL Core の基本を紹介する簡単な例を順に説明する。 データがどのように見えるべきかを記述する方法と、SHACL プロセッサーがデータが その記述を満たしているかどうかをどのように確認するかを学ぶ。
エンティティの集合(Alice、Bob、Calvin)があり、それについてコンピューターまたは別の 人間に次のことを説明したいとする。
ex:Person というクラスが存在する
ex:Person の各インスタンスは最大1つの社会保障番号(SSN)を持ち、その SSN は
適切に整形されたテキスト(123-45-6789 など)である必要がある
ex:Person の各インスタンスは1つ以上の会社で働くことができるが、それらの会社は
データ内で ex:Company として型付けされていなければならない
ex:ssn)、勤務先関係(ex:worksFor)、および必須の型付け
(rdf:type)以外のプロパティは、ex:Person に対して許可されない
記述し検証したいデータは次のとおりである:
ここに、関心のあるドメインを表現する方法の自己完結した例を示す。 SHACL の用語では、これは 形状グラフと呼ばれるが、 ドメインモデルまたはオントロジーと考えることもできる。
これを分解して見てみよう:
sh:targetClass ex:Person は「この制約をすべての人に適用する」ことを意味する。
sh:property 定義は、次のことを宣言する:
sh:datatype xsd:string)、
sh:maxCount 1)、
sh:pattern "^\d{3}-\d{2}-\d{4}$")。
sh:property 定義は、次のことを宣言する:
ex:worksFor プロパティを持つ場合、その値は IRI であり、
ex:Company である何かを指していなければならない。
sh:closed true は、明示的に無視されるものを除き、列挙されたものを超える
プロパティは許可されないことを意味する。
sh:ignoredProperties ( rdf:type ) は、rdf:type が許可された
プロパティ一覧に含まれていなくても通過できるようにする。
形状グラフを用いて データグラフに対して SHACL 検証を実行すると、 検証器は、記述した制約に照らして各 Person をチェックする。
平易な英語で言えば、それが見つけるものは次のとおりである:
987-65-432A には数字であるべき場所に
文字がある)。
sh:maxCount は1つだけを
許可するとしている)。
ex:Company として宣言されていないもの(ex:UntypedCompany)のために働いている。
ex:birthDate を持っている。
この例の SHACL 検証レポートは次のようになる可能性がある(読みやすさのために簡略化):
レポートの読み方:
sh:ValidationReport は全体のレポートであり、sh:conforms false は
少なくとも1つの違反があったことを意味する。
sh:ValidationResult は、見つかった1つの問題である:
sh:resultSeverity — 問題がどれほど重大かを示す。この例では、すべての
問題が sh:Violation(最高かつ既定の重大度)である。
sh:focusNode — 失敗したデータノード。
sh:resultPath — 関係するプロパティ。
sh:value — 失敗を引き起こした実際の値。
sh:sourceConstraintComponent — どの種類の制約が破られたか(最大数、
パターン、クラスなど)。
sh:sourceShape — 制約を定義した形状。
sh:resultMessage — 人間が読める説明。
SHACL は主に形状を表現するために設計されているが、
rdfs:Class や rdfs:subClassOf などの用語や概念も RDF Schema 名前空間から借用する。
元の例で ex:Person と ex:PersonShape に別々のエンティティがあったように、
それらの概念を分けておくことを好む人もいる。
しかし、それらをより密接に結び付け、sh:ShapeClass を使って
クラスと形状の両方を同時に宣言することも可能である。
さらに、プロパティ形状が 空白ノードとして宣言されているのを見かけることがある。 IRIの代わりに そうするものである。 これはよりコンパクトな表記だが、たとえば他のグラフがノード形状を再利用しつつ プロパティ形状を無効化したい場合などに、そのプロパティ形状を外部から容易に参照できないことを意味する。
次の Turtle 例は、これら2つの構文上のバリエーションが実際に使われる様子を示している。
上記の形状宣言を用いて、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つのコンポーネントすべてに対して検証される。
次の導入は非規範的である。
次の非形式的な図は、SHACL 語彙における主要なクラスの一部の概要を示す。
各ボックスはクラスを表す。
クラス名の下にあるボックスは、これらのクラスのインスタンスが持つ可能性のある
よく使われるプロパティの小さな部分集合を、その値型とともに列挙している。
矢印は rdfs:subClassOf トリプルを示す。
SHACL 語彙の Turtle シリアライズには、 完全な SHACL 語彙が含まれている。
上記の定義には、正形式の形状に関する
すべての構文規則が含まれているわけではないことに注意されたい。
それらは文書全体に見られ、付録 A. SHACL
構文規則の要約にまとめられている。
たとえば、sh:targetClass の値として
リテラルを持つ形状は
不正形式である。
非形式的には、形状は、プロパティの値および フォーカスノードの他の特性に基づいて、フォーカスノードを どのように検証するかを決定する。 たとえば、形状は、フォーカスノードが IRI であること、またはフォーカスノードが あるプロパティについて特定の値を持ち、さらにそのプロパティについて最小数の値を持つことを 条件として宣言できる。
SHACL Core 言語は、2種類の形状を定義する:
sh:Shape は、SHACL 語彙におけるこれら2種類の形状型の
SHACL スーパークラスである。
そのサブクラスである sh:NodeShape および sh:PropertyShape は、
それぞれノード形状およびプロパティ形状の SHACL 型として使用できる。
形状は、制約コンポーネントの パラメーターを用いて 制約を宣言できる。
制約 コンポーネントは 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 Core に含まれる制約コンポーネントの一覧は、第4節で説明される。 SHACL-SPARQL は、SPARQL に基づく制約コンポーネントを 追加で宣言するために使用できる。
データグラフからのトリプルを用いて 形状に 対して検証される RDF 項は、 フォーカスノード と呼ばれる。
この節の残りは非規範的である。
形状に対する フォーカスノードの集合は、次のように識別できる:
sh:node)のパラメーターで
形状を参照する
任意の制約内で指定される
形状グラフ内の
形状の
ターゲット宣言は、
形状を
主語とし、この文書で説明される特定のプロパティ
(例: sh:targetClass)を
述語とする
トリプルである。
さらに、sh:shape
トリプルは、
データグラフ内でターゲットを宣言できる。
ターゲット宣言は、形状に対する
フォーカスノードを生成するために使用できる。
ターゲット宣言の
ターゲットは、この節の残りで説明される規則を
データグラフに
適用することにより生成される RDF 項の集合である。
形状のターゲットは、その
形状に対して宣言された個々の
ターゲット
によって生成されるすべての RDF 項の和集合である。
SHACL Core には、次の種類のターゲットが含まれる:
この導入の残りは非規範的である。
ターゲットによって生成される RDF 項は、
データグラフ内に
ノードとして存在することを要求されない。
形状のターゲットは、その形状の検証プロセスへの入力としてフォーカスノードが直接提供される場合には無視される。
これには、形状が sh:node などの
形状を期待する制約パラメーターの1つの値であり、
対応する制約コンポーネント(たとえば sh:NodeConstraintComponent)の検証中に
フォーカスノードが決定される場合が含まれる。
そのような場合、提供されたフォーカスノードは
形状の
ターゲット内にある必要はない。
ノード
ターゲットは、sh:targetNode 述語を用いて指定される。
形状内の
sh:targetNode の各値は、正形式の
ノード式である。
s が形状であり、
形状グラフ SG 内で
s が sh:targetNode について
値
expr を持つ場合、
evalExpr(expr, data graph, s, {})
の
出力ノードは、
フォーカスグラフとしての
データグラフ DG に対する
ターゲットである。
この節の残りは非規範的である。
下の例のデータでは、提供された形状のターゲットは ex:Alice のみである:
クラス
ターゲットは、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.3 rdfs:subClassOf
トリプルのためのグラフを参照)。この場合、上の例の rdfs:subClassOf トリプルは
データグラフ内に
ある必要はない。
非形式的には、形状が 形状グラフ内で クラスでもあると宣言されている場合、 このクラスのすべての 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 のインスタンスとして宣言されており、同じ解釈を持つ。
subjects-of ターゲットは、
述語 sh:targetSubjectsOf を用いて指定される。
形状内の
sh:targetSubjectsOf の
値は
IRIである。
s が形状グラフ SG 内の形状であり、
s が SG 内で sh:targetSubjectsOf について
値
p を持つ場合、データグラフ DG 内で
p を
述語として持つトリプルの
主語であるノードの集合は、
SG 内の s に対する DG からの
ターゲットである。
この節の残りは非規範的である。
上の例では、与えられた形状に対して検証されるのは ex:Alice のみである。
なぜなら、それは ex:knows を
述語として持つ
トリプルの
主語だからである。
objects-of ターゲットは、
述語 sh:targetObjectsOf を用いて指定される。
形状内の sh:targetObjectsOf の
値は
IRIである。
s が形状グラフ SG 内の形状であり、
s が SG 内で sh:targetObjectsOf について
値
p を持つ場合、データグラフ DG 内で
p を
述語として持つトリプルの
目的語であるノードの集合は、
SG 内の s に対する DG からの
ターゲットである。
この節の残りは非規範的である。
上の例では、与えられた形状に対して検証されるのは ex:Bob のみである。
なぜなら、それは ex:knows を
述語として持つ
トリプルの
目的語だからである。
where ターゲットは、sh:targetWhere
述語を用いて指定される。
形状内の sh:targetWhere の各値は、
正形式の
形状である。
s が形状グラフ SG 内の形状であり、
s が SG 内で sh:targetWhere について
値
w を持つ場合、
データグラフ DG 内で w に
適合する
ノードの集合は、
SG 内の s に対する DG からの
ターゲットである。
この節の残りは非規範的である。
TODO
この例では、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つずつフィルターする必要がある。
明示的な形状ターゲットは、sh:shape
述語を用いて指定される。
sh:shape の各
値は
IRIである。
s が
形状グラフ内の
形状であり、
n が
データグラフ内の
ノードであるとする。
n が
データグラフ内で sh:shape について
値
s を持つ場合、
n は s の
ターゲットである。
この節の残りは非規範的である。
sh:shape は sh:targetNode とは異なるが、どちらも個々のノードを
形状にリンクするために使用できる。
sh:shape は、特定の
主語ノードから
目的語である形状を指す。
さらに、sh:targetNode トリプルは
形状グラフから照会されるのに対し、
sh:shape トリプルは
データグラフ内に
あることが期待される。
下の例のデータでは、提供された形状のターゲットは ex:Alice のみである:
形状は、
形状グラフ内でプロパティ 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 が既定値である。
次の例はこれを示している。
次の例は、上の形状グラフのバリエーションであり、具象化を用いて個々の制約の重大度を指定している:
形状はプロパティ sh:message について値を持つことができる。
sh:message の値は、
データ型
xsd:string、rdf:dirLangString、rdf:langString、または
rdf:HTML を持つ
リテラルである。
主語は、同じ言語タグを持つ sh:message の値を2つ以上持つべきではなく、
データ型 xsd:string を持つ値を複数持つべきでもない。
形状が形状グラフ内で sh:message について少なくとも1つの値を持つ場合、
その形状の結果として生成されるすべての
検証結果は、
sh:resultMessage の値として正確にこれらのメッセージを持つ。
すなわち、値は形状グラフから結果グラフへコピーされる。
形状ごとにメッセージを宣言することに加えて、プロパティ sh:message は、
形状を
主語とし、制約の
パラメーターの1つを
述語とするトリプルの
具象化子上でも使用できる。
T を、形状内の
制約を表す
トリプルの集合とする。
形状グラフは、T 内の
トリプルの
具象化子内で、プロパティ sh:message について
最大1つの
値を指定できる。
この節の残りは非規範的である。
sh:resultMessage の値がどのように設定されるかの詳細については、
検証結果における sh:resultMessage に関する節を参照。
前節の例は、この仕組みを用いて2番目の検証結果に2つのメッセージを提供している。 次の例は、メッセージが具象化を用いて宣言されるバリエーションである。
形状は、
プロパティ sh:deactivated について最大1つの値を持つことができる。
sh:deactivated の値は
ノード式であり、
true または false のいずれかを(唯一の)
出力ノードとして持たなければならない。
expr を、形状内の
sh:deactivated の
値とする。
evalExpr(expr, data graph, focus node, {})
が true を唯一の
出力ノードとして生成する場合、その形状は
無効化されていると呼ばれる。
無効化された形状は検証中に無視される。
形状のすべての制約を無効化することに加えて、個々の制約を無効化することも可能である。 これは具象化を用いて行われる。
形状を
主語とし、
sh:minCount などの
パラメーターを
述語とする
トリプルは、
プロパティ sh:deactivated について
値を持つ
具象化子を最大1つ持つことができる。
expr を、形状を
主語とし、
パラメーターを
述語とする
トリプル上の
具象化子内における
sh:deactivated の
値とする。
evalExpr(expr, data graph, focus node, {})
が true を唯一の
出力ノードとして生成する場合、その
トリプルを使用する制約は
無効化された制約と呼ばれる。
無効化された制約は検証中に無視される。
この節の残りは非規範的である。
SHACL Core において、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 トリプルは
インポートする側のグラフ内に置かれることになる。
次のデータでは、そのインスタンスが ex:name について値を持っていないにもかかわらず、
制約違反は報告されない。
次のバリエーションは、具象化を用いて、同じプロパティ形状上の他の制約に影響を与えずに
sh:minCount 制約だけを無効化する。
ノード形状は、
形状グラフ内の
形状であり、
sh:path を
述語として持つ
トリプルの
主語ではないものである。
ノード形状は、
sh:NodeShape の
SHACL インスタンスとして宣言されることが推奨されるが、要求はされない。
sh:NodeShape の
SHACL インスタンスは、プロパティ sh:path について
値を
持つことができない。
非形式的には、ノード形状は フォーカス ノードに関して満たされる必要がある制約を指定する。 プロパティ形状とは対照的に、ノード形状は主として プロパティ値ではなくフォーカスノード自体に適用される。
プロパティ形状は、
形状グラフ内の
形状であり、
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 について
値を持つことができる。
非形式的には、プロパティ形状は、
フォーカス
ノードから到達できる
ノードに関して満たされる必要がある制約を指定する。
それは、(a) sh:path を用いて
IRIとして
指定された所与のプロパティを直接たどること、
(b) sh:path を用いて指定された他の任意の
SHACL プロパティパスを直接たどること、
(c) sh:values を用いて指定されたノード式を評価すること、または、
(d) 他の値が存在しない場合に
sh:defaultValue を用いて指定されたノード式を評価することによって行われる。
sh:values および sh:defaultValue のサポートは SHACL Core では要求されないが、
[shacl12-sparql] などの
拡張には必要であることに注意されたい。
正形式の プロパティ形状および ノード 形状の定義は、これら2つのノード集合を互いに素にすることに注意されたい。
次の例は、プロパティ形状のいくつかの構文上のバリエーションを示している。
プロパティパスは、プロパティ形状の値
ノードを導出するために、sh:pathで使用できる。
SHACL には、次の SPARQL プロパティ
パスの部分集合を表す RDF 項が含まれる:
PredicatePath, InversePath, SequencePath,
AlternativePath,
ZeroOrMorePath, OneOrMorePath および ZeroOrOnePath。
次の小節では、正形式の
SHACL プロパティパスの
構文規則を、SPARQL 1.2 プロパティパスへの写像規則とともに示す。
これらの規則は、RDF グラフ G 内で SHACL プロパティパスである RDF 項
p について、パス写像 path(p,G) を定義する。
2つの SHACL プロパティパスは、まったく同じ SPARQL プロパティパスに写像される場合、
同等のパスとみなされる。
RDF グラフ内のノードは、次の小節の構文規則の
ちょうど1つを満たす場合、正形式の SHACL プロパティ
パス p である。
ノード p が空白
ノードであり、p の任意のパス写像が直接または推移的に p を参照する場合、
ノード p は正形式の SHACL プロパティパスではない。
次の例は、いくつかの有効な SHACL プロパティパスと、それに対応する SPARQL 1.2 の同等表現を示している。
述語 パスは IRIである。
p が述語パスである場合、path(p,G) は
p を iri とする SPARQL PredicatePath である。
シーケンス パスは、少なくとも2つのメンバーを持ち、各メンバーが正形式の SHACL プロパティパスである 空白ノードの SHACL リストである。
p が G 内のシーケンスパスであり、リストの
メンバー
が v1, v2, ..., vn である場合、
path(p,G) は、path(v1,G) を elt1 とし、
v2 のリストノードのパス写像の結果を elt2 とする
SPARQL SequencePath である。
非形式的な注: このような ノードは、SHACL リスト内で、
rdf:first および rdf:rest 以外のプロパティについて
値を
持つべきではない。
代替
パスは、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 である。
逆パスは、
G 内でちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:inversePath を述語とし、
目的語 v は
正形式の SHACL
プロパティパスである。
p が G 内の逆パスである場合、path(p,G) は
path(v,G) をその elt とする SPARQL InversePath である。
ゼロ回以上の
パスは、G 内でちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:zeroOrMorePath を
述語とし、
目的語 v は
正形式の SHACL
プロパティパスである。
p が G 内のゼロ回以上のパスである場合、
path(p,G) は
path(v,G) をその elt とする SPARQL ZeroOrMorePath である。
1回以上の
パスは、G 内でちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:oneOrMorePath を
述語とし、
目的語 v は
正形式の SHACL
プロパティパスである。
p が G 内の1回以上のパスである場合、
path(p,G) は
path(v,G) をその elt とする SPARQL OneOrMorePath である。
ゼロ回または1回の
パスは、G 内でちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:zeroOrOnePath を
述語とし、
目的語 v は
正形式の SHACL
プロパティパスである。
p が G 内のゼロ回または1回のパスである場合、
path(p,G) は
path(v,G) をその elt とする SPARQL ZeroOrOnePath である。
この節では、ノード式の概念を導入する。 SHACL Core は、次の機能においてノード式をサポートする:
sh:values および sh:defaultValue。
sh:targetNode。
sh:deactivated。
SHACL Core のみに関心がある読者は、通常この節を読み飛ばしてよい。 Core はノード式として定数 IRI とリテラルのみをサポートするため、ノード式のユースケースは、 従来の SHACL Core の使用と同一である。
evalExpr(expr, focusGraph, focusNode, scope) -> outputNodes
として定義される。ここで、
expr は、形状グラフ内の
ノード式である。
評価中、エンジンはトリプルを、
形状グラフ内の expr に関連するものとして参照できる。
focusGraph は、フォーカスグラフと呼ばれる
グラフである。これはノード式の評価における既定の
クエリーグラフである。
focusNode は、入力フォーカスノードと呼ばれる
ノードである。この変数は値を持たない場合がある。
scope は、(キーの)
項から個々の(値の)
項へのマップである。
空のマップは {} と書かれる。
SHACL Core 仕様は、次の2つの小節に基づく ノード式 関数のみを正確に定義する。 [shacl12-node-expr] は、ノード式の一般的な設計について より多くの背景を提供し、ノード式関数の包括的なライブラリーを含む。 [shacl12-sparql] などの他の仕様は、 空白ノードを用いて追加の関数を導入する。 したがって、ノード式は SHACL の拡張ポイントとして機能する。
ノード式であり、
リテラルであるものは、
関数名
sh:LiteralExpression を持つ
リテラル式と呼ばれる。
検証は、データグラフと 形状グラフを入力として受け取り、 検証結果を含む検証レポートを生成する。 適合性チェックは、検証の簡略版であり、 真偽値の結果を生成する。 検証を実行できるシステムはプロセッサーと呼ばれ、 動詞 処理は、検証プロセスを指すために使われることがある。
SHACL は、RDF 結果グラフとして検証レポートを生成するプロセッサーが使用できる RDF 検証レポート語彙を定義する。 この仕様は、制約コンポーネントに関連付けられた 検証器の規範的定義に、SHACL 結果語彙を使用する。 検証レポート語彙のすべての必須プロパティを生成できる SHACL 実装のみが、標準適合である。
形状グラフは、SHACL 検証プロセスに 形状および関連情報を提供する役割を持つ RDF グラフであり、それによって データグラフを形状に対して 検証できるようにする。
sh:ShapesGraph クラスは、
通常形状グラフの役割で動作するグラフの
IRIの rdf:type として
MAY 使用できる。
所与の検証に対する
形状グラフは、たとえば
owl:imports や sh:shapesGraph を通じて複数の形状グラフを結合した結果であってよい。
どのように構築されたとしても、検証に使用される
形状グラフは、
検証プロセス中に固定されたままで
MUST ある。
詳細は6.5 検証を参照。
この節の残りは非規範的である。
形状グラフは、述語
owl:importsで相互参照できる
再利用可能な検証モジュールであり得る。
検証前のステップとして、SHACL プロセッサーは、もともと提供された
形状グラフを、
owl:imports 述語を通じて
参照されるすべての形状グラフを推移的にたどってインポートすることで
拡張するべきである。
インポートされた IRI を解決する際、取得されたグラフが、そのインポートされた IRI を
owl:versionIRI の目的語として持つ
トリプルを含む場合、プロセッサーは、さらなる owl:imports 文をたどる目的で、
そのトリプルの主語を、インポートされたグラフの形状グラフ IRI として扱うべきである。
形式的には、プロセッサーは、バージョン IRI を使用してバージョン付き形状グラフをインポートできるように、
インポートを解決するためにプロパティパス ^owl:versionIRI?/owl:imports を反復的に使用するべきである。
次の例では、形状グラフは
<http://example.com/shapes/company/v2> をインポートする。
プロセッサーがその IRI のグラフを取得すると、
その IRI が <http://example.com/shapes/company> の
owl:versionIRI として宣言されていることを見つける。
その後、プロセッサーは、さらなる owl:imports 文をたどる際に
<http://example.com/shapes/company> を用いてそのグラフを識別し、
この場合は <http://example.com/shapes/base> をインポートする。
{
"@graph": [
{
"@id": "http://example.com/shapes/myapp",
"owl:imports": {
"@id": "http://example.com/shapes/company/v2"
}
},
{
"@id": "ex:PersonShape",
"@type": "sh:NodeShape",
"sh:targetClass": { "@id": "ex:Person" },
"sh:property": {
"sh:path": { "@id": "ex:worksFor" },
"sh:class": { "@id": "ex:Company" }
}
}
]
}
{
"@graph": [
{
"@id": "http://example.com/shapes/company",
"owl:versionIRI": {
"@id": "http://example.com/shapes/company/v2"
},
"owl:imports": {
"@id": "http://example.com/shapes/base"
}
},
{
"@id": "ex:CompanyShape",
"@type": "sh:NodeShape",
"sh:targetClass": { "@id": "ex:Company" },
"sh:property": {
"sh:path": { "@id": "ex:name" },
"sh:minCount": 1,
"sh:datatype": { "@id": "xsd:string" }
}
}
]
}
結果として得られるグラフは、検証のための不変の 形状グラフを形成する。
owl:versionIRI を使用してバージョン付き形状グラフをインポートする場合、
互換性のないバージョンをインポートしないよう注意するべきである。
特に、形状グラフのインポート閉包は、同一系列の異なるバージョンである2つのグラフ、
または一方が他方に対して owl:incompatibleWith を宣言するグラフを
含むべきではない(SHOULD NOT)。
そのような形状グラフは
不正形式とみなされる。
詳細は、正形式の形状
グラフの定義を参照。
形状宣言に加えて、形状グラフは sh:entailment 文など、SHACL
プロセッサーのための追加情報を含むことがある。
任意の RDF グラフはデータグラフになり得る。
sh:DataGraph クラスは、
通常データグラフとして使用されるグラフの
IRI
の rdf:type として MAY 使用できる。
ただし、形状グラフも
データ
グラフの役割を果たすことが MAY あることに注意されたい。たとえば、
形状自体を検証する場合である。
この節の残りは非規範的である。
データグラフは、検証のための SHACL プロセッサーへの入力の1つである。 SHACL プロセッサーはそれを一般的な RDF グラフとして扱い、その性質について仮定を置かない。 たとえば、それはメモリ内グラフ、RDF データセットの名前付きグラフ、または SPARQL エンドポイントであり得る。
SHACL は、ファイルシステム、HTTP リクエスト、または RDF データセットなど、任意の手段によって取得された RDF グラフとともに使用できる。 SHACL は、グラフが任意の RDF 含意レジームの下でそのグラフから含意されたトリプルを含むかどうかについて 仮定しない。
SHACL がクラスターゲットを正しく識別し、Core SHACL 制約を検証するために、
データグラフには、データに関連するすべてのオントロジー公理、特にすべての
rdfs:subClassOf トリプルが含まれていることが期待される。
データグラフ内の owl:imports は、検証作業の制御不能な増加を避けるため、
実行されない。複数の関連するオントロジーを検証したい場合は、それらを(まとめてまたは1つずつ)
SHACL プロセッサーに渡し、owl:imports リンクに依存してはならない。
SHACL はデータグラフ内の owl:imports を実行しないが、データグラフの管理者は、
インポート指示として owl:imports の振る舞いに依存するアプリケーションに引き続き注意するべきである。
特に、一部のアプリケーションは、X a owl:Ontology . が直接存在することに
構文上依存しており、X owl:imports Y . が owl:imports 文を
Y をロードする指示として処理することがある。
詳細は OWL 2
Web Ontology Language Mapping
to RDF Graphs, Section 3.1.1 を参照。
したがって、X a sh:DataGraph . という形式の文を使用する場合、
X a owl:Ontology . も含めるべきである。
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 プロセッサーは、true に設定された場合に
SHACL
型の定義を変更し、
rdfs:subClassOf トリプルを
データグラフに加えて
形状グラフからも照会するようにする
subClassOfInShapesGraph パラメーターを提供するべきである(SHOULD)。
rdf:type トリプルは常に
データグラフ内に
あることが期待される。
データ
グラフは、述語 sh:shapesGraph を用いて SHACL プロセッサーに1つ以上のグラフを
提案するために使用されるトリプルを含むことができる。
sh:shapesGraph のすべての
値は
IRIである。
これは、データ
グラフを検証するために使用される
形状グラフに含められるべき
(SHOULD)グラフを表す。
sh:shapesGraph の値は
owl:versionIRI の値であってよく、
したがって形状グラフについて説明した、バージョン IRI から形状グラフ IRI を
解決する同じ戦略がここにも適用される。
次の例では、SHACL プロセッサーは、所与のグラフを検証する際に、
ex:graph-shapes1 グラフおよび ex:graph-shapes2 グラフ
(およびそれらの owl:imports)の和集合を
形状グラフとして使用するべきである(SHOULD)。
検証は、何らかの入力から 検証結果への写像であり、次の段落で定義される。
形状グラフに対するデータグラフの検証: データグラフおよび 形状グラフが与えられたとき、 検証結果は、形状グラフ内のすべての 形状に対する データグラフの 検証結果の和集合である。
形状に対するデータグラフの検証: データグラフおよび 形状グラフ内の 形状が与えられたとき、 検証結果は、 データグラフ内における 形状の ターゲットに含まれるすべての フォーカス ノードの 検証結果の和集合である。
形状に対するフォーカスノードの検証: データグラフ内の フォーカスノードおよび 形状グラフ内の 形状が与えられたとき、 検証結果は、その 形状によって宣言されたすべての 制約に対する フォーカス ノードの 検証結果の和集合である。ただし、 形状が 無効化されている場合は、 検証結果は空である。
制約に対するフォーカスノードの検証:
データグラフ内の
フォーカスノードおよび
形状グラフ内の
種別
C の
制約が与えられたとき、
検証結果は、
制約
コンポーネント C の
検証器によって定義される。
これらの検証器は通常、入力として
フォーカスノード、
形状グラフ内の
制約の C の
パラメーターの具体的な
値、
およびその制約を宣言する
形状の
値
ノードを取る。
検証中、データグラフおよび 形状グラフは 不変のままで MUST ある。すなわち、検証終了時の両グラフは、検証開始時のグラフと 同一で MUST ある。 SHACL プロセッサーは、これらのグラフが保存済みグラフの変更を許す RDF ストアの一部である場合でも、 形状グラフまたはデータグラフを構築するために使用するグラフを変更してはならない(MUST NOT)。 SHACL プロセッサーは、検証結果を含むグラフなど、自ら作成するグラフを保存することが MAY あり、この操作は RDF ストア内の既存のグラフを変更することが MAY あるが、形状グラフまたはデータグラフを構築するために使用された いずれのグラフも変更してはならない。 したがって、SHACL 処理は冪等である。
検証および 適合性 チェックは、失敗をもたらす場合がある。 たとえば、特定の SHACL プロセッサーは再帰的な形状を許可するが、データ内のループを検出した場合に 失敗を報告することがある。 失敗は、リソース枯渇によって報告される場合もある。 失敗は、実装固有のチャネルを通じて通知される。
形状グラフが 不正形式のノードを 含む場合、検証プロセスの結果は未定義である。 SHACL プロセッサーは、この場合に 失敗を生成するべきである (SHOULD)。 6.7.1.4 形状グラフの 構文チェック(sh:shapesGraphWellFormed)も参照。
次のプロパティは、SHACL Core におけるいわゆる 形状を期待する制約 パラメーターである:
次のプロパティは、SHACL Core におけるいわゆる リスト受容制約パラメーターである:
RDF グラフ G 内の形状 s1 は、
ある制約コンポーネントの非リスト受容で形状を期待するパラメーターについて
s2 を
値として持つ場合、または
ある制約コンポーネントのリスト受容で形状を期待するパラメーターについての
値の
メンバーとして s2 を持つ場合、
G 内で形状 s2 を
参照する。
RDF グラフ G 内の形状は、G 内で
参照する関係の推移閉包によって
自分自身に関連付けられている場合、G 内の
再帰的な
形状である。
再帰的な形状を伴う 検証は SHACL では定義されず、SHACL プロセッサー実装に委ねられる。 たとえば、SHACL プロセッサーは再帰シナリオをサポートしてもよく、再帰を検出したときに失敗を 生成してもよい。
この節の残りは非規範的である。
上記の再帰ポリシーは、幅広い実装戦略をサポートするために選択された。 再帰を未定義のままにすることで、実装は再帰をサポートしないことを選べるため、 循環をサポートせずに(SPARQL エンドポイントに対する)静的な SPARQL クエリー集合を発行できる。 ワーキンググループは、他の実装が再帰をサポートする可能性があること、および一部の形状グラフが これらの特定の特性に依存する可能性があることを認識している。 将来の作業、たとえば W3C コミュニティグループにおける作業により、 再帰が十分に定義された SHACL の特定の方言の定義につながることが期待される。
フォーカスノードは、 形状に対する そのフォーカスノードの 検証結果の集合に、不許可レベル集合の重大度レベルを持つ 検証結果が含まれず、かつそれによって 失敗が報告されていない場合に限り、 その形状に適合する。
不許可の重大度レベルの集合は、sh:conformanceDisallows を述語とし、
検証レポートを主語とするトリプルの
目的語として定義される。
検証レポートがそのようなトリプルを含まない場合、sh:Violation、
sh:Warning、および sh:Info が既定値として設定される。
適合性チェックは、所与の
フォーカスノードが
所与の形状に
適合する
場合に限り true を生成し、それ以外の場合は false を生成する。
SHACL Core のすべての形状を期待する制約パラメーターは、
適合性チェックに依存することに注意されたい。
これらの場合、適合性チェックの結果を判定するために使用される
検証結果は、
周囲の検証プロセスのものとは分離され、通常は同じ検証レポートには含まれない
(おそらく sh:detail の値として含まれる場合を除く)。
検証レポートは、検証プロセスの結果であり、 適合性と、すべての 検証結果の集合を報告する。 検証レポートは、この節で定義される SHACL 検証レポート語彙で記述される。 この語彙は、データグラフ内の違反を識別または修正する方法についての手がかりを提供し得る 構造情報を表すための RDF プロパティを定義する。
SHACL 適合プロセッサーは、この仕様で説明されるすべての必須の 検証結果を含む検証レポートを返す能力を 持たなければならない(MUST)。 SHACL 適合プロセッサーは、返される結果数を制限できる任意引数をサポートしてもよい (MAY)。 この柔軟性は、たとえば一部の大規模データセット検証ユースケースで必要とされる。
次のグラフは、形状グラフに適合するデータグラフの検証に対する検証レポートの例を表している。
次のグラフは、形状グラフに適合しないデータグラフの検証に対する検証レポートの例を表している。
sh:resultMessage の具体的な値は SHACL によって義務付けられておらず、
実装固有とみなされることに注意されたい。
検証プロセスの結果は、
sh:ValidationReport の
SHACL インスタンスをちょうど1つ持つ RDF グラフである。
RDF グラフは、来歴メタデータなどの追加情報を含んでもよい(MAY)。
結果グラフ内の sh:ValidationReport の各 SHACL インスタンスは、
プロパティ sh:conforms についてちょうど1つの値を持ち、
その値はデータ型 xsd:boolean である。
これは適合性チェックの結果を表す。
結果グラフ内の sh:ValidationReport の各 SHACL インスタンスは、
プロパティ sh:conformanceDisallows について1つ以上の値を持ってもよい
(MAY)。
sh:conformanceDisallows のすべての値は IRI で
MUST ある。
すべての値を組み合わせて、不許可の重大度レベル集合を定義する。
不許可の重大度レベル集合に含まれる重大度レベルを持つ
sh:ValidationResult が存在する場合、関連する sh:ValidationReport
インスタンス上の sh:conforms 値は false にならなければならない
(MUST)。
結果グラフ内にプロパティ sh:conformanceDisallows の値が存在しない場合、
sh:Violation、sh:Warning、および sh:Info から成る
既定集合を使用しなければならない(MUST)。
適合性不許可集合は、検証エンジンによって定義される。 検証エンジンは、この集合をカスタマイズする仕組みを提供してもよい(MAY)。
検証プロセスによって生成される
すべての検証結果(適合性チェックの文脈で言及されたものを除く)について、
結果グラフ内の sh:ValidationReport の SHACL インスタンスは、
プロパティ sh:result について値を持つ。
sh:result の各値は、クラス sh:ValidationResult の
SHACL インスタンスである。
SHACL 検証エンジンは、
形状グラフが
正形式かどうかを
チェックすることを厳密には要求されない。
そのようなチェックを実行する実装(たとえば、形状グラフがシステムにインストールされるとき、
または検証の前もしくは最中)は、この事実を検証レポートの利用者に知らせるために
プロパティ sh:shapesGraphWellFormed を使用するべきである
(SHOULD)。
結果グラフ内の sh:ValidationReport の SHACL インスタンスが
sh:shapesGraphWellFormed について
true を値として持つ場合、
プロセッサーは、
検証プロセスに使用された
形状グラフが
正形式であると
確信していたことを意味する。
SHACL は、個々の SHACL
検証結果を報告するために、
sh:ValidationResult を sh:AbstractResult のサブクラスとして定義する。
SHACL 実装は、たとえば正常に完了した制約チェックや累積結果を報告するために、
sh:AbstractResult の他の
SHACL サブクラスを使用してもよい。
この節の残りの小節で説明されるすべてのプロパティは、
sh:ValidationResult 内で指定できる。
プロパティ sh:focusNode、sh:resultSeverity、および
sh:sourceConstraintComponent は、すべての検証結果について必須である唯一のプロパティである。
各検証結果は、プロパティ sh:focusNode についてちょうど1つの値を持ち、
その値は結果を引き起こした
フォーカスノードと等しい。
これは、検証結果が生成されたときに検証されていた
フォーカスノードである。
検証結果は、正形式の
SHACL
プロパティパスを指すプロパティ sh:resultPath の値を持つことがある。
プロパティ形状によって生成された結果については、
別段の定めがない限り、この
SHACL プロパティパスは、その形状の
sh:path の値と同等である。
sh:path p が
空白ノードである場合、
sh:resultPath は結果グラフ内における p の
ディープコピーである。
検証結果は、結果を引き起こした RDF 項を、プロパティ
sh:value の値として
最大1つ含むことがある。
SHACL Core コンポーネントの検証器のテキスト定義は、この値がどのように構築されるかを指定する。
多くの場合、それは制約に違反した
値ノードである。
検証結果は、プロパティ sh:sourceShape の唯一の
値として、
所与の sh:focusNode が検証された対象の
形状を含むことがある。
検証結果は、プロパティ sh:sourceConstraintComponent についてちょうど1つの値を持ち、
この値は結果を引き起こした
制約コンポーネントの
IRIである。
たとえば、sh:minCount の値に基づく制約違反によって生成された結果は、
ソース制約コンポーネント sh:MinCountConstraintComponent を持つことになる。
プロパティ sh:detail は、(親)結果を、その(親)結果の原因について
さらなる詳細を提供できる sh:AbstractResult の1つ以上の SHACL インスタンスに
リンクすることがある。
SHACL プロセッサーの能力によっては、たとえば sh:node を介した適合性チェックの一部として
評価された制約の違反が含まれることがある。
検証結果は、たとえば人間に追加のテキスト詳細を伝えるために、プロパティ
sh:resultMessage の値を持つことがある。
sh:resultMessage は複数の値を持つことがあるが、同じ言語タグを持つ値が2つあってはならない。
これらの値は、形状グラフ内の制約の sh:message の値に基づいて
検証エンジンによって生成される。形状のメッセージの宣言を参照。
具象化を用いて宣言されたメッセージは、周囲の形状で宣言されたものより優先される。
制約が形状グラフ内で sh:message について値を持たない場合、
SHACL プロセッサーは sh:resultMessage の他の値を自動生成してもよい
(MAY)。
各検証結果は、プロパティ sh:resultSeverity についてちょうど1つの
値を持ち、
この値はIRIである。
値は次の規則(順序どおり)によって決定される:
sh:severity の
値
sh:severity の
値
sh:severity が指定されていない場合、
sh:Violation を既定値とする。
ほとんどの制約コンポーネントの 検証器は、次の2つの小節で定義される 値ノードの概念を使用する。
sh:path p について
値を持つ
プロパティ形状の場合、
値ノードの集合は、次の手順によって生成される:
p の
パス写像によって
フォーカスノードから到達できる、
データグラフ内の
すべてのノードを追加する。
e が、その
プロパティ形状における sh:values の
値である場合、
evalExpr(e, data graph, focus node, {})
の出力ノードを追加する。
d がその
プロパティ形状における
sh:defaultValue の
値である場合、
evalExpr(d, data graph, focus node, {})
の出力ノードを追加する。
この節では、すべての SHACL Core プロセッサーがサポートしなければならない(MUST)組み込みの SHACL Core 制約コンポーネントを定義する。 各制約コンポーネントの定義には、その IRI と パラメーターの表が含まれる。 別段の定めがない限り、これらのパラメーターはすべて 必須パラメーターである。 これらのパラメーター表に列挙された構文規則のいずれかに違反する形状は 不正形式である。
各制約コンポーネントには、コンポーネントに関連付けられた
検証器を記述する
テキスト定義も含まれる。
これらのテキスト定義は、制約内のパラメーターの値を、
$paramName という形式の変数で参照する。ここで paramName は、
パラメーターの IRI のうち、
sh: 名前空間の後の部分である。
たとえば、sh:ClassConstraintComponent のテキスト定義は、
sh:class の値を変数 $class を用いて参照する。
SHACL Core において、パラメーター値という用語は、
パラメーターの値、
すなわち、形状グラフ内の
トリプルの
目的語を意味する。ここで、その
主語
は形状であり、
述語は(sh:class などの)
パラメーターである。
執筆時点では、WG の意図は、SHACL Core の外部で SHACL の方言を定義し、その中で
パラメーター値という用語が
ノード式も
許容するようにすることである。
すべての制約コンポーネントがパラメーター値という用語を使用するわけではなく、
代わりに値
という用語を参照することに注意されたい。
たとえば、sh:node の値は、決して
ノード式には
なり得ない。なぜなら、そうすると空白ノードの扱いが複雑になるからである。
TODO: Node Expression 仕様が準備できている場合はそこへのリンクを追加し、
そうでなければ上記の文を明確化する。
これらの検証器は、コンポーネントによって生成される検証結果の唯一のものを定義することに注意されたい。 さらに、検証器は常に新しい結果ノードを生成する。すなわち、テキスト定義が 「...検証結果が存在する...」と述べる場合、それは結果グラフ内の別個の新しいノードを指す。
この節の残りは非規範的である。
SHACL Core に含まれる制約コンポーネントの選択は、 [shacl-ucr] 文書によって収集された要件に基づいて行われた。 できるだけ多くの一般的なユースケースを網羅しようとすることと、 Core 言語の規模を扱いやすく保つこととのバランスに、特別な注意が払われた。 すべてのユースケースを Core 言語だけで表現できるわけではない。 代わりに、SHACL-SPARQL は、この仕様の第2部で説明される拡張機構を提供する。 追加の再利用可能な 制約コンポーネントのライブラリーが、 第三者によって維持されることが期待される。
別段の定めがない限り、Core 制約コンポーネントは
プロパティ形状と
ノード
形状の両方で使用できる。
一部の制約パラメーターには、それらを使用する
ノード形状を
不正形式にする構文規則が付随している。
これには、プロパティ形状でのみ
サポートされる sh:minCount などが含まれる。
この節の制約コンポーネントに共通する点は、値ノードの型を制限するために使用できることである。 複数の値型の選択肢は、sh:or を用いて表現できることに注意されたい。
sh:class によって指定される条件は、各
値ノードが、与えられた型の
SHACL インスタンスであることである。
制約コンポーネント IRI:
sh:ClassConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:class |
すべての値ノードの型。
形状内の
sh:class の値は、IRI、
または、すべてのメンバーが
IRIである
正形式の
SHACL
リストである
空白ノードのいずれかである。
|
この節の残りは非規範的である。
sh:class の複数の値は連言として解釈されることに注意されたい。
すなわち、値はそれらすべての SHACL インスタンスである必要がある。
和集合の意味にはリストを使用する。
次の例は、sh:class のリストベースの構文を示しており、
プロパティ ex:pet の値は猫または犬のいずれかでなければならないことを意味する。
sh:datatype は、各
値ノードのデータ型に関して満たされるべき条件を指定する。
制約コンポーネント IRI:
sh:DatatypeConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:datatype |
すべての値ノードの許可されるデータ型(例: xsd:integer)。
形状は
sh:datatype について最大1つの値を持つ。
形状内の
sh:datatype の値は、IRI、
または、すべてのメンバーが
IRIである
正形式の
SHACL
リストである
空白ノードのいずれかである。
|
$datatype を sh:datatype の
パラメーター値とする。
datatypes を、IRIの
集合とし、$datatype が
IRIである場合、
その集合はちょうどその IRI のみから成り、
$datatype が
空白ノードの
SHACL リストである場合、
その集合はちょうどそのリストのメンバーから成るものとする。datatypes のどれにも一致しないデータ型を持つ
リテラルである場合、
その値ノードを sh:value とする
検証結果が存在する。この節の残りは非規範的である。
sh:datatype の値は通常、xsd:string などの
データ型である。
次の例はリストベースの構文を示しており、
rdfs:label のすべての値は xsd:string または
rdf:langString のいずれかでなければならないことを意味する。
sh:nodeKind は、各
値ノードの RDF ノード種別によって満たされるべき条件を指定する。
制約コンポーネント IRI:
sh:NodeKindConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:nodeKind |
すべての値ノードのノード種別(IRI、空白ノード、リテラル、トリプル項、またはこれらの組み合わせ)。
形状は
sh:nodeKind について最大1つの値を持つ。
形状内の sh:nodeKind の値は、IRI、またはすべてのメンバーが IRI である
正形式の SHACL リストである空白ノードのいずれかである。
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。
|
$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 または空白ノードである必要があることを意味する。
次の制約コンポーネントは、所与の フォーカスノードに対する 値ノードの数に関する制限を表す。
sh:minCount は、条件を満たす
値ノードの最小数を
指定する。
最小カーディナリティ値が 0 の場合、この制約は常に満たされるため、省略してもよい。
制約コンポーネント IRI:
sh:MinCountConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:minCount |
最小カーディナリティ。
ノード形状は
sh:minCount についていかなる値も持つことができない。
プロパティ形状は
sh:minCount について最大1つの値を持つ。
プロパティ形状内の
sh:minCount の値は、データ型
xsd:integer を持つリテラルである。
|
この節の残りは非規範的である。
sh:maxCount は、条件を満たす
値ノードの最大数を
指定する。
制約コンポーネント IRI:
sh:MaxCountConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:maxCount |
最大カーディナリティ。
ノード形状は
sh:maxCount についていかなる値も持つことができない。
プロパティ形状は
sh:maxCount について最大1つの値を持つ。
プロパティ形状内の
sh:maxCount の値は、データ型
xsd:integer を持つリテラルである。
|
この節の残りは非規範的である。
次の制約コンポーネントは、<、<=、>、
>= などの演算子を介して比較可能な値ノードによって満たされるべき
値範囲条件を指定する。
次の例は、これらの制約コンポーネントの典型的なユースケースを示している。
制約コンポーネント IRI:
sh:MinExclusiveConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:minExclusive |
排他的最小値。
形状内の sh:minExclusive の値は
リテラルである。
形状は sh:minExclusive について最大1つの値を持つ。
|
この節の残りは非規範的である。
値ノードを指定された範囲と比較できない場合、たとえば文字列と整数を比較する場合には、 検証結果が存在する。
制約コンポーネント IRI:
sh:MinInclusiveConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:minInclusive |
包括的最小値。
形状内の sh:minInclusive の値は
リテラルである。
形状は sh:minInclusive について最大1つの値を持つ。
|
制約コンポーネント IRI:
sh:MaxExclusiveConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:maxExclusive |
排他的最大値。
形状内の sh:maxExclusive の値は
リテラルである。
形状は sh:maxExclusive について最大1つの値を持つ。
|
制約コンポーネント IRI:
sh:MaxInclusiveConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:maxInclusive |
包括的最大値。
形状内の sh:maxInclusive の値は
リテラルである。
形状は sh:maxInclusive について最大1つの値を持つ。
|
この節の制約コンポーネントに共通する点は、 値ノードの文字列表現に関する条件を指定することである。
sh:minLength は、条件を満たす各
値ノードの
最小文字列長を指定する。
これは任意のリテラルおよび
IRIに
適用できるが、空白ノードには適用できない。
制約コンポーネント IRI:
sh:MinLengthConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:minLength |
最小長。
形状内の sh:minLength の値は、データ型
xsd:integer を持つリテラルである。
形状は
sh:minLength について最大1つの値を持つ。
|
$minLength を sh:minLength の
パラメーター値とする。
値ノード v ごとに、
v の文字列表現(SPARQL str 関数によって定義される)
の長さ(SPARQL STRLEN 関数によって定義される)
が $minLength より短い場合、または v が
空白ノードである場合、
v を
sh:value とする
検証結果が存在する。
この節の残りは非規範的である。
sh:minLength の値が 0 の場合、文字列長に関する制限はないが、
値ノードが空白ノードであれば、それでも制約に違反することに注意されたい。
sh:maxLength は、条件を満たす各
値ノードの
最大文字列長を指定する。
これは任意のリテラルおよび
IRIに
適用できるが、空白ノードには適用できない。
制約コンポーネント IRI:
sh:MaxLengthConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:maxLength |
最大長。
形状内の sh:maxLength の値は、データ型
xsd:integer を持つリテラルである。
形状は
sh:maxLength について最大1つの値を持つ。
|
$maxLength を sh:maxLength の
パラメーター値とする。
値ノード v ごとに、
v の文字列表現(SPARQL str 関数によって定義される)
の長さ(SPARQL STRLEN 関数によって定義される)
が $maxLength より長い場合、または v が
空白ノードである場合、
v を
sh:value とする
検証結果が存在する。
この節の残りは非規範的である。
sh:pattern は、条件を満たすために各
値ノードが一致する
正規表現を指定する。
制約コンポーネント IRI:
sh:PatternConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:pattern |
すべての値ノードが一致する必要のある正規表現。
形状内の
sh:pattern の値は、データ型
xsd:string を持つリテラルである。
形状内の sh:pattern の値は、
SPARQL REGEX
関数に対する有効な pattern 引数である。
|
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)。
この節の残りは非規範的である。
この機能は、この機能(および類似の)便宜機能に関する WG の決議待ちのため「リスクあり」である。 WG は、Core に入れるべき機能と、他の文書に入れるべき機能との境界をどこに引くかについて、 まだ確信していない。 もともとは Issue 177 として議論された。
true に設定されている場合、sh:singleLine は
値ノードが改行を含んではならないことを指定する。
制約検証に加えて、この情報は、ユーザーインターフェイス構築器が
(単一行の)テキストフィールドと(複数行の)テキストエリアを選択するために利用できる。
制約コンポーネント IRI:
sh:SingleLineConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:singleLine |
この制約を有効化するための true。
形状内の sh:singleLine の値は、データ型
xsd:boolean を持つリテラルである。
形状は sh:singleLine について最大1つの値を持つ。
|
$singleLine を sh:singleLine の
パラメーター値とする。
$singleLine が true である場合、語彙形式が
正規表現(SPARQL REGEX 関数によって定義される)
[\f\r\n\v] に一致するリテラルである
値ノードごとに、
検証結果が存在する。
この節の残りは非規範的である。
この例では、形状の有効なターゲットノードは
rdfs:label について単一行の値のみを含むことができる。
rdfs:comment の値は改行を含むことが明示的に許可されており、
フォーム構築器に対して、それらの値は複数行(テキストエリア)の入力ウィジェットで
編集されるべきであることを示している。
sh:languageIn によって指定される条件は、各
値ノードに許可される言語タグが、所与の言語タグのリストによって
制限されることである。
制約コンポーネント IRI:
sh:LanguageInConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:languageIn |
[BCP47] に従う
基本言語範囲のリスト。
形状内の
sh:languageIn の各値は
SHACL
リストである。
そのようなリストの各
メンバーは、
データ型 xsd:string を持つリテラルである。
形状は sh:languageIn について最大1つの値を持つ。
|
この節の残りは非規範的である。
次の例の形状は、ex:prefLabel のすべての値が
英語またはマオリ語のいずれかであり得ることを述べている。
例のインスタンスからは、ex:Berg がそのすべてのラベルについて
制約違反につながる。
プロパティ sh:uniqueLang は、同じ言語タグを使用する
値ノードの組が存在してはならないことを指定するために
true に設定される。存在する場合は、テキスト方向も考慮に含める。
制約コンポーネント IRI:
sh:UniqueLangConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:uniqueLang |
この制約を有効化するための true。
形状内の sh:uniqueLang の値は、データ型
xsd:boolean を持つリテラルである。
プロパティ形状は sh:uniqueLang について最大1つの値を持つ。
ノード形状は
sh:uniqueLang についていかなる値も持つことができない。
|
この節の残りは非規範的である。
この節の制約コンポーネントは、値ノードであり、SHACL リストであるものに適用される。 それらは、SHACL リストの構造、長さ、およびメンバーに関する条件を指定する。
sh:memberShape は、SHACL
リストである値ノードのすべてのメンバーが、与えられたノード形状に適合しなければならないことを指定する。
制約コンポーネント IRI:
sh:MemberShapeConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:memberShape |
SHACL リストのすべてのメンバーが
適合しなければならない形状。
sh:memberShape の値は、正形式のノード形状でなければならない。
|
この節の残りは非規範的である。
$memberShape に適合しない値ノード v の各メンバー m は、
v に対する検証結果内で、個別の sh:detail として
報告されるべきである。
v が有効なSHACL リストでない場合、これは
トップレベルの検証結果として報告されるべきであり、個々のメンバーの
検証は試みるべきではない。
検証結果内で sh:detail を生成する方法の例は、SHACL テストスイートの
sh:memberShape のテストケースで見つけることができる: memberShape-001.ttl。
次の例では、プロパティ ex:speakerOrder のすべての値は、メンバーが IRI である
SHACL リストでなければならない。
sh:minListLength は、SHACL リストである
値ノードが持たなければならない
メンバーの最小数を指定する。
制約コンポーネント IRI:
sh:MinListLengthConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:minListLength |
SHACL リスト内のメンバーの最小数。
形状内の sh:minListLength の値は、
データ型 xsd:integer を持つリテラルである。
形状内の
sh:minListLength の値は、0 以上の整数である。
|
この節の残りは非規範的である。
次の例では、プロパティ ex:skills のすべての値は、少なくとも1つのメンバーを持つ
SHACL リストでなければならない。
sh:minListLength の追加のテストケースは SHACL テストスイートで見つけることができる: minListLength-001.ttl。
sh:maxListLength は、SHACL リストである
値ノードが持たなければならない
メンバーの最大数を指定する。
制約コンポーネント IRI:
sh:MaxListLengthConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:maxListLength |
SHACL リスト内のメンバーの最大数。
形状内の sh:maxListLength の値は、
データ型 xsd:integer を持つリテラルである。
形状内の
sh:maxListLength の値は、0 以上の整数である。
|
この節の残りは非規範的である。
次の例では、プロパティ ex:hobbies のすべての値は、多くても2つのメンバーを持つ
SHACL リストでなければならない。
sh:maxListLength の追加のテストケースは SHACL テストスイートで見つけることができる: maxListLength-001.ttl。
sh:uniqueMembers は、SHACL リストである
値ノードが一意のメンバーを持たなければならないかどうかを指定する。
制約コンポーネント IRI:
sh:UniqueMembersConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:uniqueMembers |
SHACL リストのメンバーが一意でなければならないかどうかを
指定するブール値。
形状内の sh:uniqueMembers
の値は、データ型 xsd:boolean を持つリテラルである。
|
この節の残りは非規範的である。
リスト v の各重複メンバー m は、v に対する
検証結果内で個別の
sh:detail として報告されるべきである。リスト v が有効な
SHACL
リストでない場合、これはトップレベルの検証
結果として報告されるべきであり、一意なメンバーシップの検証は試みるべきではない。
検証結果内で sh:detail を生成する方法の例は、SHACL テストスイートの
sh:uniqueMembers のテストケースで見つけることができる: uniqueMembers-001.ttl。
次の例では、プロパティ ex:preferences のすべての値は、それぞれの SHACL リスト内で
一意の値を持つメンバーから成る SHACL リストでなければならない。
この節の制約コンポーネントは、他のプロパティまたはプロパティパスとの関係において、 値ノードの集合に 関する条件を指定する。 これらの制約コンポーネントは、プロパティ形状によってのみ使用できる。
sh:equals は、すべての値ノードの集合が、
フォーカスノードから、sh:equals を用いて指定された
SHACL プロパティ
パスを介して到達できるノードの集合と等しい、という条件を指定する。
制約コンポーネント IRI:
sh:EqualsConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:equals |
比較対象となるプロパティパス。
形状内の
sh:equals の値は、正形式の
SHACL プロパティパスである。
|
この節の残りは非規範的である。
次の例は、特定のフォーカスノードが ex:firstName と
ex:givenName について同じ値集合を持つ必要があることを指定するために、
形状内で sh:equals を使用することを示している。
次の例は、SHACL プロパティパスが
sh:path と sh:equals の値の両方として使用できることを示している。
この例では、Bob が自分のタトゥーとは異なる名前の配偶者を持っていた場合、またはその逆の場合に 警告が報告されることになる。 Bob が配偶者もタトゥーも持たない場合、または 両方を持ち、それらの名前とテキストがまったく同じノード集合に一致する場合、警告は生成されない。
sh:disjoint は、値ノードの集合が、
フォーカスノードから、
sh:disjoint の値である
SHACL プロパティパスを介して到達できる
ノードの集合と互いに素である、という条件を指定する。
制約コンポーネント IRI:
sh:DisjointConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:disjoint |
値と比較するためのプロパティパス。
形状内の
sh:disjoint の値は、正形式の
SHACL プロパティパスである。
|
この節の残りは非規範的である。
次の例は、特定のフォーカスノードが ex:prefLabel と
ex:altLabel についていかなる値も共有できないことを指定するために、
形状内で sh:disjoint を使用することを示している。
sh:subsetOf は、すべての値ノードが
同時に、
フォーカスノードから、sh:subsetOf を用いて指定された
SHACL プロパティ
パスを介して到達可能でなければならない、という条件を指定する。
制約コンポーネント IRI:
sh:SubsetOfConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:subsetOf |
比較対象となるプロパティパス。
形状内の
sh:subsetOf の値は、正形式の
SHACL プロパティパスである。
|
この節の残りは非規範的である。
次の例は、ある人のお気に入りの子が実際の子の中に含まれていなければならないことを指定するために、
形状内で sh:subsetOf を使用することを示している。
sh:lessThan は、各値ノードが、
フォーカスノードから
sh:lessThan の値である
SHACL プロパティパスを介して到達できるすべての
ノードより小さい、という条件を指定する。
制約コンポーネント IRI:
sh:LessThanConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:lessThan |
値と比較するためのプロパティパス。
形状内の
sh:lessThan の値は、正形式の
SHACL プロパティパスである。
ノード形状は
sh:lessThan についていかなる値も持つことができない。
|
この節の残りは非規範的である。
次の例は、ex:startDate のすべての値が
ex:endDate の値より「前」であることを指定するために、
形状内で sh:lessThan を使用することを示している。
sh:lessThanOrEquals は、各値ノードが、
フォーカスノードから
sh:lessThanOrEquals の値である
SHACL プロパティパスを介して到達できるすべての
ノード以下である、という条件を指定する。
制約コンポーネント IRI:
sh:LessThanOrEqualsConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:lessThanOrEquals |
値と比較するためのプロパティパス。
形状内の
sh:lessThanOrEquals の値は、正形式の
SHACL プロパティパスである。
ノード
形状は sh:lessThanOrEquals についていかなる値も持つことができない。
|
この節の制約コンポーネントは、一般的な論理演算子 and、or、not、および 排他的論理和 の変種を実装する。
sh:not は、各値ノードが、与えられた形状に適合できない、という条件を指定する。
これは否定および論理的な "not" 演算子に相当する。
制約コンポーネント IRI:
sh:NotConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:not |
否定する形状。
形状内の
sh:not の値は、正形式の形状でなければならない。
|
この節の残りは非規範的である。
次の例は、特定のフォーカスノードが ex:property のいかなる値も持てないという条件を
指定するために、形状内で sh:not を使用することを示している。
sh:and は、各値ノードが、提供されたすべての
形状に適合する、という条件を指定する。
これは論理積および論理的な "and" 演算子に相当する。
制約コンポーネント IRI:
sh:AndConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:and |
値ノードを検証する対象となる形状のSHACL リスト。
形状内の
sh:and の各値は、SHACL リストである。
そのようなリストの各メンバーは、正形式の形状でなければならない。
|
この節の残りは非規範的である。
sh:and は値として形状のSHACL リストを持つが、
それらの形状の順序は検証結果に影響しないことに注意されたい。
ショートカット評価セマンティクスを使用する実装では、その順序が検証の効率に影響する場合がある。
評価しやすい制約、または失敗する可能性が高い制約を、リストの前の方に置くことが推奨される。
次の例は、特定のフォーカスノードが ex:property の値をちょうど1つ持つという条件を
指定するために、形状内で sh:and を使用することを示している。
これは、最小カウントを指定する個別の名前付き形状(ex:SuperShape)と、
追加で最大カウントを指定するプロパティ形状との論理積によって実現される。
ここに示すように、sh:and は形状間の特殊化機構を実装するために使用できる。
sh:or は、各値ノードが、提供された形状の少なくとも1つに
適合する、という条件を指定する。
これは論理和および論理的な "or" 演算子に相当する。
制約コンポーネント IRI: sh:OrConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:or |
値ノードを検証する対象となる形状のSHACL リスト。
形状内の
sh:or の各値は、SHACL リストである。
そのようなリストの各メンバーは、正形式の形状でなければならない。
|
この節の残りは非規範的である。
sh:or は値として形状のSHACL リストを持つが、
それらの形状の順序は検証結果に影響しないことに注意されたい。
ショートカット評価セマンティクスを使用する実装では、その順序が検証の効率に影響する場合がある。
評価しやすい制約、または成功する可能性が高い制約を、リストの前の方に置くことが推奨される。
次の例は、特定のフォーカスノードが ex:firstName の値を少なくとも1つ、
または ex:givenName の値を少なくとも1つ持つという条件を指定するために、
形状内で sh:or を使用することを示している。
次の例は、所与のプロパティ ex:address の値が、
データ型 xsd:string を持つリテラル、またはクラス
ex:Address のSHACL インスタンスのいずれかでよいことを述べるために、
プロパティ形状内で sh:or を使用できることを示している。
SHACL におけるすべての制約は実行時に AND 結合されることに注意されたい。次の例を考える:
正しい解釈は、(shapeA OR shapeB) AND (shapeC
OR shapeD) である。
ターゲットノードは shapeA または shapeB に適合し、さらに
shapeC または shapeD にも適合する必要がある。
sh:xone は、各値ノードが、提供された形状のうち
ちょうど1つに適合する、という条件を指定する。
制約コンポーネント IRI:
sh:XoneConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:xone |
値ノードを検証する対象となる形状のSHACL リスト。
形状内の
sh:xone の各値は、SHACL リストである。
そのようなリストの各メンバーは、正形式の形状でMUST ある。
そのような
各リストは、少なくとも1つの
メンバーを持つべきである
(SHOULD)。
|
この節の残りは非規範的である。
sh:xone は値として形状のSHACL リストを持つが、
それらの形状の順序は検証結果に影響しないことに注意されたい。
次の例は、特定のフォーカスノードが ex:fullName の値を持つか、または
ex:firstName と ex:lastName の値を持つ必要があるが、
両方であってはならない、という条件を指定するために、形状内で sh:xone を使用することを示している。
この節の制約コンポーネントは、特定の形状に対して値ノードを検証することにより、 複雑な条件を指定するために使用できる。
sh:node は、各値ノードが、与えられたノード形状に適合する、という条件を指定する。
制約コンポーネント IRI:
sh:NodeConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:node |
すべての値ノードが適合する必要のあるノード形状。
形状内の
sh:node の値は、正形式のノード
形状でなければならない。
|
この節の残りは非規範的である。
次の例は、プロパティ形状内での sh:node の使用を示している。
プロパティ ex:address のすべての値は、
形状
ex:AddressShape によって表現される
制約を満たさなければならない。
次の例は、ノード形状内での sh:node の使用を示している。
この例は、郵便番号のための一般的な基本形状と、特定の国向けの2つの特殊化を定義する。
sh:datatype xsd:string や sh:minLength 3 などの基本制約は、
すべての郵便番号に適用される。
プロパティ sh:node は、rdfs:subClassOf がサブクラスを
スーパークラスにリンクする方法と同様に、より狭い形状をより広い形状にリンクするために使用される。
SHACL における再帰的な形状の扱いについては、6.5.3 再帰的な形状の扱いを参照。
sh:property は、各値ノードが、
与えられたプロパティ形状を持つことを指定するために使用できる。
制約コンポーネント IRI:
sh:PropertyConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:property |
すべての値ノードが持つ必要のあるプロパティ形状。
形状内の
sh:property の各値は、正形式のプロパティ形状でなければならない。
|
この節の残りは非規範的である。
sh:property と sh:node の間には重要な違いがあることに注意されたい:
値ノードが制約に違反している場合、sh:node についてはその値ノードに対して
単一の検証結果のみが存在し、
その sh:sourceConstraintComponent は sh:NodeConstraintComponent である。
一方、sh:property については任意の数の検証結果が存在し得る。
これらは、プロパティ形状内の
制約の個々の制約コンポーネントを、
sh:sourceConstraintComponent の値として持つ。
他のすべての検証結果と同様に、プロパティ形状が
sh:property を介して到達されるたびに、
検証エンジンは新しい検証結果ノードを生成しなければならない(MUST)。
これには、同じフォーカスノードが、形状グラフ内の異なるパスを介して
到達されるにもかかわらず、同じプロパティ形状に対して検証される場合が含まれる。
sh:someValue は、少なくとも1つの値ノードが、
与えられた形状に適合する、という条件を指定する。
制約コンポーネント IRI:
sh:SomeValueConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:someValue |
値ノードの少なくとも1つが適合する必要のある
形状。
形状内の
sh:someValue の値は、正形式の形状でなければならない。
|
この節の残りは非規範的である。
実装は、いずれかの値ノードが適合した時点で値ノードの処理を停止してもよいことに注意されたい。 値ノード集合におけるノードの順序は未定義であるため、失敗を引き起こすノードに 到達する保証はない。 したがって、処理を予測可能にするため、すべての値ノードが成功なしに訪問されない限り、 失敗は暗黙に無視される。
次の例では、ex:DuckFarmerShape に適合する任意のノードは、
ex:tendsAnimal について、ex:Duck の
SHACL インスタンスである値を
少なくとも1つ持つ必要がある。
sh:someValue は、sh:qualifiedValueShape と
sh:qualifiedMinCount 1 の組み合わせに対する構文糖衣とみなすことができる。
また、sh:someValue は、プロパティ形状で使用される場合に主に意味を持つことにも注意されたい。
ノード形状では、sh:someValue は
sh:node または sh:property を使用することと同等である。
sh:qualifiedValueShape は、指定された数の値ノードが、与えられた形状に適合する、という条件を指定する。
各 sh:qualifiedValueShape は、同じ主語において、sh:qualifiedMinCount の値を1つ、
sh:qualifiedMaxCount の値を1つ、またはそれぞれ1つずつ持つことができる。
| プロパティ | 要約と構文規則 |
|---|---|
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 を、Q を sh:property の値として持つ、G
内の形状の集合とする。
Q が sh:qualifiedValueShapesDisjoint について
true を値として持つ場合、
Q の兄弟形状の集合は、ps 内の任意の
形状について、
SPARQL プロパティパス
sh:property/sh:qualifiedValueShape のすべての
値から、Q 自身の
sh:qualifiedValueShape の値を除いた集合として定義される。
それ以外の場合、兄弟形状の集合は空である。
$qualifiedValueShape を
sh:qualifiedValueShape の値とする。
$qualifiedMinCount を sh:qualifiedMinCount の
パラメーター値とする。
C を、v が $qualifiedValueShape に
適合し、
かつ v が現在の形状、すなわち v が検証されていて、
$qualifiedValueShape を sh:qualifiedValueShape の値として持つ形状についての
兄弟形状のいずれにも適合しない
値ノード v の数とする。
前述の適合性チェックのいずれかが失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでなく、C が $qualifiedMinCount より小さい場合、
検証結果が存在する。
sh:qualifiedMinCount の
制約コンポーネントは
sh:QualifiedMinCountConstraintComponent である。
この節の残りは非規範的である。
次の例の形状は、プロパティ ex:parent がちょうど2つの値を持ち、
そのうち少なくとも1つが女性であるという条件を指定するために使用できる。
次の例は、片手が ex:digit の値を最大5つ持たなければならないこと
(sh:maxCount を用いて表現)、
そのうちちょうど1つが ex:Thumb のインスタンスで、ちょうど4つが
ex:Finger のインスタンスでなければならず、
ただし親指と指は互いに素でなければならないことを表現するための
sh:qualifiedValueShapesDisjoint の使用を示している。
言い換えると、片手において、どの指も親指として数えられてはならない。
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 を持つリテラルである。
|
この節の残りは非規範的である。
この例では、形状 ex:PersonShape は、ex:Person のすべてのインスタンスが
ex:age の値を、形状 ex:ProvenanceShape に適合する具象化子で
具象化しなければならない、すなわち ex:date と
ex:author を指定する必要がある、と述べている。
この節では、他のカテゴリに当てはまらない Core 制約コンポーネントを列挙する。
RDF データモデルは非常に大きな柔軟性を提供する。
任意のノードは、原則として任意のプロパティについて値を持つことができる。
しかし、場合によっては、どのプロパティをノードに適用できるかについて条件を指定することが
意味を持つ。
SHACL Core 言語には、sh:closed と呼ばれるプロパティが含まれており、
各値ノードが、sh:property を介して形状に指定された
プロパティ形状によって
明示的に列挙されたプロパティについてのみ値を持つ、という条件を指定するために使用できる。
制約コンポーネント IRI:
sh:ClosedConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:closed |
形状を閉じるには true に設定する。
形状内の
sh:closed の値は、データ型
xsd:boolean を持つリテラル、または
IRI sh: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 として持ち、
そのトリプルの目的語を
sh:value として持たなければならない(MUST)。
$closed が true である場合、P は、現在の形状から
SPARQL パス sh:property/sh:path を介して到達できる
IRI プロパティの集合である。
$closed が sh:ByTypes である場合、P は、
次のアルゴリズムを介して値ノードから到達できる
IRI プロパティの集合に
rdf:type を加えたものである:
function collectProperties(S)
SPARQL パス sh:property/sh:path を介して S から到達できるすべての
IRI プロパティを追加する
S が形状グラフ内で rdfs:Class の SHACL インスタンスである場合 {
形状グラフ内で (S rdfs:subClassOf ?o) に一致する各トリプルについて
collectProperties(?o)
形状グラフ内で (?s sh:targetClass S) に一致する各トリプルについて
collectProperties(?s)
}
S が形状グラフ内で sh:NodeShape の SHACL インスタンスである場合
形状グラフ内で (S sh:node ?o) に一致する各トリプルについて
collectProperties(?o)
データグラフ内の値ノードの各 rdf:type T について
collectProperties(T)
S を2回訪問しないようにすることで、
無限ループを避ける必要があることに注意されたい。
この節の残りは非規範的である。
次の例は、特定のフォーカスノードが ex:firstName と
ex:lastName についてのみ値を持つという条件を指定するために、
形状内で sh:closed を使用することを示している。
「無視される」プロパティ rdf:type も許可される。
sh:closed sh:ByTypes のユースケースには、現在の値ノードの型のスーパークラスで
宣言されたプロパティ(rdfs:subClassOf を介する)に加えて、
sh:targetClass を介してそれらの型にリンクされた他の形状、および
sh:node を介してあるノード形状から別のノード形状へ到達できる形状が含まれる。
sh:ByTypes の例は、テストケースライブラリーで見つけることができる:
closed-003.ttl,
closed-004.ttl.
sh:hasValue は、少なくとも1つの値ノードが、
与えられた RDF 項と等しい、という条件を指定する。
制約コンポーネント IRI:
sh:HasValueConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:hasValue |
特定の必須値。 |
この節の残りは非規範的である。
sh:in は、各値ノードが、提供された
SHACL リストの
メンバーである、
という条件を指定する。
制約コンポーネント IRI: sh:InConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:in |
許可される値をメンバーとして持つ
SHACL リスト。
形状内の
sh:in の各値は、SHACL リストである。
形状は
sh:in について最大1つの値を持つ。
そのような
各リストは、少なくとも1つのメンバーを持つべきである
(SHOULD)。
|
この節の残りは非規範的である。
リテラルの一致は厳密である必要があることに注意されたい。たとえば
"04"^^xsd:byte は "4"^^xsd:integer と一致しない。
sh:rootClass によって指定される条件は、各値ノードが、
与えられたクラス、またはそのクラスの(推移的な)サブクラスであることである。
制約コンポーネント IRI:
sh:RootClassConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:rootClass |
すべての値ノードが属さなければならないクラス階層のルート。
形状内の sh:rootClass の値は、IRI、
またはすべてのメンバーが
IRIである
正形式の
SHACL
リストである空白ノードのいずれかである。
|
$rootClass を sh:rootClass の
パラメーター値とする。
classes をIRIの
集合とし、$rootClass がIRI
である場合、その集合はちょうどその IRI のみから成り、
$rootClass が空白ノードの
SHACL リストである場合、
その集合はちょうどそのリストのメンバーから成るものとする。valueNode rdfs:subClassOf* class を含意するような
classes 内の class が存在しない各値ノードについて、
その値ノードを sh:value とする
検証結果が存在する。
この節の残りは非規範的である。
sh:rootClass 制約は通常、値としてクラスを持ち得るプロパティ形状
(たとえば sh:class rdfs:Class を介する)とともに使用され、
値ノードの許可されるサブクラス階層を制限する。
与えられたクラスは、許可されるクラス階層の上限として機能する。
sh:uniqueValuesFor は、値ノードの1つ以上の指定された
プロパティの値が、現在の形状のすべての
ターゲットノード内で一意でなければならない、
という条件を指定する。
制約コンポーネント IRI:
sh:UniqueValuesForConstraintComponent
| プロパティ | 要約と構文規則 |
|---|---|
sh:uniqueValuesFor |
プロパティの IRI、または 各メンバーが プロパティのIRIである SHACL リスト。 |
$uniqueValuesFor を、シェイプ S における
sh:uniqueValuesFor の値とする。
$properties を、次のような集合とする:
$uniqueValuesFor が IRI である場合、
$properties = { uniqueValuesFor } とする。
$uniqueValuesFor が SHACL リストである場合、
$properties は、そのリストのメンバーの集合である。
$targetNodes を、S のターゲットノードとする。
$targetNodes 内に、V と同じく
$properties 内のすべてのプロパティについて完全に同一の値を持つ別の
ノードが存在する各
値ノード V について、
検証結果が存在する。
V が $properties 内のいずれのプロパティについても値を持たない場合、
結果は生成されない。
この節の残りは非規範的である。
リテラルの一致は厳密である必要があることに注意されたい。たとえば
"04"^^xsd:byte は "4"^^xsd:integer と一致しない。
また、sh:uniqueValuesFor はこれらの値の存在を規定しないため、
多くの場合 sh:minCount 1 制約と組み合わせられることにも注意されたい。
この例では、ex:Record2 と ex:Record3 について2つの制約違反が報告される。
なぜなら、それらは ex:id についてまったく同じ値を持ち、同じ
形状の
ターゲット内にあるからである。
しかし、ex:id "One" については違反は報告されない。
なぜなら ex:UnrelatedNode は ex:Record のインスタンスではなく、
したがって ex:SingleIdExampleShape のターゲットではないからである。
ターゲットノードの計算は、
形状の定義、たとえば sh:uniqueValuesFor 制約も保持している形状の
sh:targetClass 宣言のみに依存することに注意されたい。
上記の例では、形状のフォーカスノードのいずれも、指定された2つのプロパティの同じ組み合わせを 持たないため、違反は報告されない。
この節は非規範的である。
前の節では検証条件を表すプロパティを導入したが、 この節では SHACL プロセッサーによって無視されるプロパティを扱う。 これらのいわゆる 検証を行わない プロパティ の使用は完全に任意であり、形式的な解釈上の契約の対象ではない。 それらは、フォーム構築、コード生成、または RDF ファイルの予測可能な出力などの目的で使用できる。
プロパティ形状は、現れるターゲット内でそのプロパティに対する人間可読なラベルを提供するために、
sh:name について1つ以上の値を持つことができる。
存在する場合、ツールは rdf:Property 自体においてグローバルに指定されたラベルよりも、
そのようなローカルに指定されたラベルを優先するべきである。
たとえば、フォームが sh:name を持つ所与のプロパティ形状のターゲット内にあるノードを
表示する場合、そのツールは提供された名前を使用するべきである。
sh:name の値は、
xsd:string、rdf:dirLangString、または rdf:langString の
データ型を持つ
リテラルでなければならない。
同様に、プロパティ形状は、所与の文脈におけるそのプロパティの説明を提供するために、
sh:description について値を持つことができる。
sh:description の値は、
xsd:string、rdf:dirLangString、rdf:langString、または
rdf:HTML のデータ型を持つ
リテラルでなければならない。
sh:name と sh:description はどちらも
複数の値を持つことができるが、言語タグごとに
値は1つだけであるべきである。
sh:name と sh:description は、ノード
形状には使用するべきではない(SHOULD NOT)ことに注意されたい。
それらについては、プロパティ rdfs:label と rdfs:comment が広く確立されており、
クラス定義にもすでに使用されている。
形状は 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 検証または適合性に影響してはならない
(MUST NOT)。
この例では、最初の sh:intent はすでに sh:maxCount を用いて
捉えられている。
この場合、そのテキスト説明は技術的知識の少ない誰かによって作成された可能性があり、
または SHACL を理解しないエージェントのために意図的に重複として残されている可能性がある。
2番目の sh:intent は、SHACL で形式的に表現することが難しい
(たとえば SPARQL 関数 NOW を使わない限り)。
3番目の sh:intent は、SHACL エンジンが検証することは不可能である。
形状は sh:agentInstruction について値を持つことができ、それらの値は
xsd:string、
rdf:langString、または rdf:dirLangString の
データ型を持つ
リテラル
であるべきである。
このプロパティは、自然言語を理解するソフトウェアエージェントに送信できるテキスト指示を表すために使用できる。
このプロパティは、rdfs:comment、
sh:description、rdfs:label、sh:name、sh:intent、
および sh:message からの類似のテキスト説明とともに、
形状のセマンティックな解釈についてソフトウェアエージェントに指示するために使用できる。
形状は 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 生成器にも同様の要件が存在する。
形状は、測定単位、通貨、または値ノードに関する類似の情報を示すために、
プロパティ sh:unit について値を持つことができる。
sh:unit の値は、データ型 xsd:string、
rdf:langString または rdf:dirLangString を持つ
リテラル、または
IRIのいずれかでよい。
SHACL 1.2 は、sh:unit の具体的な値を規定しない。なぜなら、執筆時点
(2026年)では、それらを統一的に表す公式の
W3C 標準が存在せず、W3C 外部に複数の標準が存在するからである。
SHACL 1.2 では、次の推奨事項が示される:
sh:unit の値は、UCUM で定義されたコードに正確に一致する
xsd:string の
リテラルでよい。
たとえば、sh:unit "cm" である。
sh:unit の値は、
ISO 4217 で定義されたコードに
正確に一致する xsd:string の
リテラルでよい。
たとえば、sh:unit "AUD" である。
sh:unit の値は、
QUDT または類似の単位語彙によって定義された
IRIでよい。
たとえば sh:unit qudt:CentiM である。
"in" に加えて "Zoll"@de がある。
これらの構文規則は意図的に柔軟なままにされているが、特定のアプリケーションはより具体的な規則を
強制してもよい。
たとえば、sh:unit プロパティに sh:class qudt:Unit 制約を宣言する場合である。
SHACL に基づくユーザーインターフェイスツールは、sh:unit の値を使用して値をレンダリングできる。
ユーザーのロケールによっては、そのようなツールは単位間を自動的に変換することさえでき、
実際の値が保存される単位とは異なる単位でのデータ入力を許可することもできる。
この例について、ユーザーインターフェイスは高さを次のようにレンダリングしてもよい
180.5 cm (71 in)
または、米国の訪問者には、次のようにレンダリングしてもよい
71 in (180.5 cm)
SHACL Core は sh:unit に対する具体的なセマンティクスを指定しないが、
一部の SHACL ベースの拡張は、検証を含む他の目的で単位を使用することがある。
たとえば、プロパティが sh:unit "K" を宣言する任意のリテラルに対して
sh:minInclusive 0 制約を強制する形状を定義できる。
上記の例の次の変種は、ノード形状を使用して、 「ユーロ建て価格」の再利用可能な定義をカプセル化する。 それには単位だけでなく、最小値などの制約も含まれる。
プロパティ形状は、フォーム構築などの目的のために、プロパティ形状の相対順序を示すため、
プロパティ sh:order について1つの値を持つことができる。
sh:order の値は、xsd:decimal または
xsd:integer のデータ型を持つ
リテラルである。
sh:order は検証目的には使用されず、
任意の型の主語とともに使用できる。
プロパティ形状に存在する場合、sh:order の推奨される使用法は、
プロパティ形状を昇順で並べ替えることである。たとえば、より小さい order を持つプロパティが、
より大きい order を持つプロパティより上、または先頭(左から右へ書く言語では左)に
配置されるようにする。
プロパティ形状は、プロパティ sh:group を使用して、
クラス sh:PropertyGroup の
SHACL インスタンスへリンクすることにより、
その形状が関連するプロパティ形状のグループに属していることを示すことができる。
各グループは、フォーム構築のための rdfs:label など、
アプリケーション目的に役立つ追加のトリプルを持つことができる。
グループは、同じフォーム内におけるグループの相対順序を示すために、
sh:order プロパティを持つこともできる。
次の例は、これらのさまざまな機能を一緒に使用する方法を示している。
フォーム構築アプリケーションは、上記の情報を使用して、情報を次のように表示してもよい:
| first name: | John |
| last name: | Doe |
| street address: | 123 Silverado Ave |
| locality: | Cupertino |
| zip code: | 54321 |
同じ情報は、トリプルの順序を変更するが sh:order の値は変更しない
次の例によっても生成されることに注意されたい:
xsd:string、rdf:langString、
rdf:dirLangString、または rdf:HTML 型のリテラルを受け入れる述語について、
利用者は xsd:string を避け、rdf:langString または
rdf:dirLangString を使用するべきである。
国際化をサポートし、双方向テキストを正しく扱うために、言語タグと、適切な場合には
方向性マーカーを使用することが推奨される。
この節は、SHACL のすべての規範的な構文規則を列挙する。 この節は、この仕様の他の部分から自動的に生成されており、規則の文脈が不明確な場合に 本文へ戻るハイパーリンクが提供されている。 形状グラフ内でこれらの規則に違反するノードは、不正形式である。
| 構文規則 ID | 構文規則テキスト |
|---|---|
| SHACL-list | 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+ の値として
自分自身を持たないものである。
|
| 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 |
RDF グラフ G において s が sh:NodeShape または
sh:PropertyShape の
SHACL インスタンスであり、
かつ s が G において
rdfs:Class の
SHACL インスタンス
でもあり、
かつ 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 | 形状は、形状グラフ内でプロパティ sh:severity について
1つの値を指定できる。 |
| severity-nodeKind | sh:severity の各値は
IRIである。
|
| severity-reifier-maxCount |
T を、形状内の
制約を表す
トリプルの集合とする。
形状グラフは、T 内の
トリプルの
具象化子において、プロパティ
sh:severity について最大1つの
値を指定できる。
|
| message-datatype | sh:message の値は、
xsd:string、rdf:dirLangString、rdf:langString、または
rdf:HTML の
データ型を持つ
リテラルである。
主語は、同じ言語タグを持つ sh:message の値を複数持つべきではなく、
またデータ型 xsd:string を持つ複数の値も持つべきではない。
|
| message-reifier-maxCount |
T を、形状内の
制約を表す
トリプルの集合とする。
形状グラフは、T 内の
トリプルの
具象化子において、プロパティ
sh:message について最大1つの
値を指定できる。
|
| deactivated-maxCount | 形状は、プロパティ sh:deactivated について最大1つの値を持つことができる。 |
| deactivated-datatype | sh:deactivated の値は
ノード式であり、
その(唯一の)出力ノードとして true または
false のいずれかを持たなければならない。
|
| deactivated-reified-maxCount | トリプルが
形状を
主語とし、
sh:minCount などの
パラメーターを
述語として持つ場合、
そのトリプルは、プロパティ sh:deactivated について
値を持つ
具象化子を最大1つ持つことができる。
|
| NodeShape-path-maxCount | sh:NodeShape の
SHACL インスタンスは、
プロパティ sh:path について
値を
持つことができない。
|
| PropertyShape | プロパティ形状は、形状グラフ内の
形状であり、
sh:path を
述語として持つ
トリプルの
主語である。
|
| path-maxCount | 形状は sh:path について最大1つの
値を持つ。
|
| path-node | プロパティ形状内の sh:path の
値は、正形式の
SHACL プロパティパスである。
|
| PropertyShape-path-minCount | sh:PropertyShape の
SHACL インスタンスは、
プロパティ sh:path について1つの
値を持つ。
|
| path-values | プロパティ形状は、
プロパティ sh:values について最大1つの
値を持ち、
この値は
正形式の
ノード式である。
|
| path-defaultValue | プロパティ形状は、
プロパティ sh:defaultValue について最大1つの
値を持ち、
この値は
正形式の
ノード式である。
|
| path-values-iri | プロパティ形状は、
sh:path の値が
述語パスである場合にのみ、
sh:values および/または sh:defaultValue について
値を持つことができる。
|
| path-metarule | RDF グラフ内のノードは、次の小節における構文規則のうちちょうど1つを満たす場合、
正形式の
SHACL プロパティ
パス p である。
|
| path-non-recursive | ノード p は、p が空白ノードであり、
p の任意のパスマッピングが直接または推移的に p を参照する場合、
正形式の SHACL プロパティパスではない。
|
| path-sequence | シーケンスパスは、 少なくとも2つのメンバーを持つ SHACL リストである 空白ノードであり、 各メンバーは正形式の SHACL プロパティパスである。 |
| path-alternative |
代替パスは、
G 内でちょうど1つのトリプルの主語である
空白ノードである。
このトリプルは sh:alternativePath を述語、L を目的語として持ち、
L は少なくとも2つのメンバーを持つ
SHACL リストであり、
L の各メンバーは正形式の SHACL プロパティパスである。
|
| path-inverse |
逆パスは、G 内のちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:inversePath を述語として持ち、
目的語 v は
正形式の
SHACL プロパティパスである。
|
| path-zero-or-more |
ゼロ回以上パスは、G 内のちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:zeroOrMorePath を
述語として持ち、
目的語 v は
正形式の
SHACL プロパティパスである。
|
| path-one-or-more |
1回以上パスは、G 内のちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:oneOrMorePath を
述語として持ち、
目的語 v は
正形式の
SHACL プロパティパスである。
|
| path-zero-or-one |
ゼロ回または1回パスは、G 内のちょうど1つの
トリプルの
主語である
空白ノードである。
このトリプルは sh:zeroOrOnePath を
述語として持ち、
目的語 v は
正形式の
SHACL プロパティパスである。
|
| IRIExpression-syntax | RDF グラフ内のノードは、それが IRIである場合、 正形式の IRI 式である。 |
| LiteralExpression-syntax | RDF グラフ内のノードは、それが リテラルである場合、 正形式の リテラル 式である。 |
| ShapesGraph | sh:ShapesGraph クラスは、通常
形状グラフの役割を果たすグラフの
IRIの
rdf:type として使用してもよい(MAY)。
|
| DataGraph | sh:DataGraph クラスは、通常
データグラフとして使用されるグラフの
IRIの rdf:type として使用してもよい
(MAY)。
|
| shapesGraph-nodeKind | sh:shapesGraph のすべての
値は
IRIである
|
| class-nodeKind | 形状内の sh:class の値は、
IRI、
または、すべてのメンバーが
IRIである
正形式の
SHACL リストである
空白ノードのいずれかである。
|
| datatype-maxCount | 形状は sh:datatype について最大1つの値を持つ。 |
| datatype-nodeKind | 形状内の sh:datatype の値は、
IRI、
または、すべてのメンバーが
IRIである
正形式の
SHACL リストである
空白ノードのいずれかである。
|
| nodeKind-maxCount | 形状は sh:nodeKind について最大1つの値を持つ。 |
| 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 | プロパティ形状は
sh:minCount について最大1つの値を持つ。
|
| minCount-datatype | プロパティ形状内の sh:minCount の値は、データ型
xsd:integer を持つリテラルである。
|
| maxCount-scope | ノード形状は、
sh:maxCount についていかなる値も持つことができない。
|
| maxCount-maxCount | プロパティ形状は
sh:maxCount について最大1つの値を持つ。
|
| 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 関数に対する有効な pattern 引数である。
|
| 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 以上の整数である。 |
| maxListLength-datatype | 形状内の sh:maxListLength の値は、データ型
xsd:integer を持つリテラルである。
|
| maxListLength-minInclusive | 形状内の sh:maxListLength の値は、0 以上の整数である。 |
| uniqueMembers-datatype | 形状内の sh:uniqueMembers の値は、データ型
xsd:boolean を持つリテラルである。
|
| 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 | そのようなリストの各メンバーは、 正形式の 形状で MUST ある。 |
| xone-minListLength | そのような各リストは、少なくとも1つの メンバーを持つべきである (SHOULD)。 |
| 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つの メンバーを持つべきである (SHOULD)。 |
| rootClass-nodeKind |
形状内の sh:rootClass の値は、
IRI、
または、すべてのメンバーが
IRIである
正形式の
SHACL リストである
空白ノードのいずれかである。
|
| uniqueValuesFor-node | プロパティの IRI、または 各メンバーがプロパティの IRIである SHACL リスト。 |
この節は非規範的である。
SHACL 1.2 Overview の SHACL-SHACL 付録では、 他の SHACL 形状グラフを検証するために使用でき、したがって各種 SHACL 仕様への適合を目指す RDF データに 関連する構文上の 制約の多くを強制し得る SHACL グラフについて説明している。
SHACL-SHACL 形状グラフは、仕様ごとに利用可能であり、また Overview の付録に示されているように、 http://www.w3.org/ns/shacl-shacl において バンドルされた「union」としても利用可能である。
この節は、SHACL Core のすべての規範的なバリデーターを列挙する。 この節は、この仕様の他の部分から自動的に生成されており、バリデーターの文脈が不明確な場合に 本文へ戻るハイパーリンクが提供されている。
| 制約コンポーネント別バリデーター |
|---|
sh:ClassConstraintComponent:
$class を sh:class のパラメーター値とする。
classes をIRIの集合とし、
$class がIRIである場合、
その集合はちょうどその IRI のみから成り、
$class が空白ノードのSHACL リストである場合、
その集合は
ちょうどそのリストのメンバーから成るものとする。値ノードごとに、 その値ノードがリテラルであるか、または非リテラルであって データグラフ内で classes のいずれの
SHACL インスタンスでもない場合、
その値ノードを
sh:value とする
検証結果が存在する。
|
sh:DatatypeConstraintComponent:
$datatype を sh:datatype のパラメーター値とする。
datatypes をIRIの集合とし、
$datatype がIRIである場合、
その集合はちょうどその IRI のみから成り、
$datatype が空白ノードのSHACL リストである場合、
その集合は
ちょうどそのリストのメンバーから成るものとする。値ノードごとに、 それがリテラルでない場合、または datatypes のいずれにも一致しないデータ型を持つ
リテラルである場合、
その値ノードを
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 とする
検証結果が存在する。
任意の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 のパラメーター値とする。
SPARQL 式 $minExclusive < v が true を返さない
各値ノード v について、
v を
sh:value とする検証結果が存在する。
|
sh:MinInclusiveConstraintComponent:
$minInclusive を sh:minInclusive のパラメーター値とする。
SPARQL 式 $minInclusive <= v が true を返さない
各値ノード v について、
v を
sh:value とする検証結果が存在する。
|
sh:MaxExclusiveConstraintComponent:
$maxExclusive を sh:maxExclusive のパラメーター値とする。
SPARQL 式 $maxExclusive > v が true を返さない
各値ノード v について、
v を
sh:value とする検証結果が存在する。
|
sh:MaxInclusiveConstraintComponent:
$maxInclusive を sh:maxInclusive のパラメーター値とする。
SPARQL 式 $maxInclusive >= v が true を返さない
各値ノード v について、
v を
sh:value とする検証結果が存在する。
|
sh:MinLengthConstraintComponent:
$minLength を sh:minLength のパラメーター値とする。
各値ノード v について、
v の文字列表現(SPARQL str 関数によって定義される)の長さ
(SPARQL STRLEN 関数によって定義される)が
$minLength より小さい場合、または v が空白ノードである場合、
v を
sh:value とする検証結果が存在する。
|
sh:MaxLengthConstraintComponent:
$maxLength を sh:maxLength のパラメーター値とする。
各値ノード v について、
v の文字列表現(SPARQL str 関数によって定義される)の長さ
(SPARQL STRLEN 関数によって定義される)が
$maxLength より大きい場合、または v が空白ノードである場合、
v を
sh:value とする検証結果が存在する。
|
sh:PatternConstraintComponent:
$pattern を sh:pattern のパラメーター値とする。
$flags を sh:flags のパラメーター値とする。
各値ノードについて、
それが空白ノードである場合、または
(SPARQL str 関数によって定義される)
文字列表現が(SPARQL REGEX 関数によって定義される)
正規表現 $pattern に一致しない場合、
その値ノードを
sh:value とする
検証結果が存在する。
$flags が値を持つ場合、一致処理は $flags を第3引数として使用し、
SPARQL REGEX 関数の3引数版の定義に従わなければならない(MUST)。
|
sh:SingleLineConstraintComponent:
$singleLine を sh:singleLine のパラメーター値とする。
$singleLine が true である場合、字句形式が
(SPARQL REGEX 関数によって定義される)
正規表現
[\f\r\n\v] に一致するリテラルである各値ノードについて、
検証結果が存在する。
|
sh:LanguageInConstraintComponent:
$languageIn を sh:languageIn の値とする。
各値ノードについて、
それがリテラルでない場合、または
SPARQL langMatches 関数によって定義される
フィルタリングスキーマに従って、$languageIn のメンバーである基本言語範囲のいずれにも
一致する言語タグを持たない場合、
その値ノードを
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 リストでない場合、
検証結果が存在する。
SHACL リスト v の任意のメンバー m が
$memberShape に適合しない場合、検証結果が存在する。
|
sh:MinListLengthConstraintComponent:
$minListLength を sh:minListLength のパラメーター値とする。
各値ノード v は
SHACL リストでなければならない - v が SHACL リストでない場合、
検証結果が存在する。
リスト v 内のメンバー数が $minListLength より少ない場合、
検証結果が存在する。
|
sh:MaxListLengthConstraintComponent:
$maxListLength を sh:maxListLength のパラメーター値とする。
各値ノード v は
SHACL リストでなければならない - v が SHACL リストでない場合、
検証結果が存在する。
リスト v 内のメンバー数が $maxListLength より多い場合、
検証結果が存在する。
|
sh:UniqueMembersConstraintComponent:
$uniqueMembers を sh:uniqueMembers のパラメーター値とする。
各値ノード v は
SHACL リストでなければならない - v が SHACL リストでない場合、
検証結果が存在する。
$uniqueMembers が true であり、リスト v に重複メンバーが
ある場合、
検証結果が存在する。
|
sh:EqualsConstraintComponent:
$equals を sh:equals の値とし、$path
を形状グラフ内で
$equals によって表される
SHACL プロパティパスとする。
$otherNodes を、フォーカスノードから
$path を介して到達できる
ノードの集合とする。
$otherNodes 内に存在しない
値ノードごとに、
その値ノードを
sh:value とする
検証結果が存在する。
$otherNodes 内のノードであって、
値ノードの1つでないものごとに、
その値を
sh:value とする
検証結果が存在する。
|
sh:DisjointConstraintComponent:
$disjoint を
sh:disjoint のパラメーター値とし、
$path
を形状グラフ内で
$disjoint によって表される
SHACL プロパティパスとする。
$otherNodes を、フォーカスノードから
$path を介して到達できる
ノードの集合とする。
$otherNodes にも含まれる
値ノードごとに、
その値ノードを
sh:value とする
検証結果が存在する。
|
sh:SubsetOfConstraintComponent:
$subsetOf を sh:subsetOf の値とし、$path
を形状グラフ内で
$subsetOf によって表される
SHACL プロパティパスとする。
$otherNodes を、フォーカスノードから
$path を介して到達できる
ノードの集合とする。
$otherNodes 内に存在しない
値ノードごとに、
その値ノードを
sh:value とする
検証結果が存在する。
|
sh:LessThanConstraintComponent:
$lessThan を sh:lessThan の値とし、$path
を形状グラフ内で
$lessThan によって表される
SHACL プロパティパスとする。
$otherNodes を、フォーカスノードから
$path を介して到達できる
ノードの集合とする。
値ノードと $otherNodes のメンバーとの各ペアについて、
最初の値が2番目の値より小さくない場合
(SPARQL の
< 演算子に基づく)、
または2つの値を比較できない場合、
その値ノードを
sh:value とする
検証結果が存在する。
|
sh:LessThanOrEqualsConstraintComponent:
$lessThanOrEquals を sh:lessThanOrEquals の値とし、
$path
を形状グラフ内で
$lessThanOrEquals によって表される
SHACL プロパティパスとする。
$otherNodes を、フォーカスノードから
$path を介して到達できる
ノードの集合とする。
値ノードと $otherNodes のメンバーとの各ペアについて、
最初の値が2番目の値
以下でない場合
(SPARQL の <= 演算子に基づく)、
または2つの値を比較できない場合、
その値ノードを
sh:value とする
検証結果が存在する。
|
sh:NotConstraintComponent:
$not を sh:not の値とする。
各値ノード v について:
形状 $not に対する v の適合性チェックが失敗を生成する場合、
失敗が報告されなければならない(MUST)。
そうでなく、v が形状 $not に
適合する場合、
v を
sh:value とする検証結果が存在する。
|
sh:AndConstraintComponent:
$and を sh:and の値とする。
各値ノード v について:
$and のメンバーのいずれかに対する v の
適合性チェックが失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでなく、v が $and の各メンバーに
適合しない場合、
v を
sh:value とする検証結果が存在する。
|
sh:OrConstraintComponent:
$or を sh:or の値とする。
各値ノード v について:
いずれかのメンバーに対する v の
適合性チェックが失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでなく、v が $or のメンバーのいずれにも
適合しない場合、
v を
sh:value とする検証結果が存在する。
|
sh:XoneConstraintComponent:
$xone を sh:xone の値とする。
各値ノード v について、
N を、$xone の
メンバーである
形状のうち、
v がその形状に適合するものの数とする。
いずれかのメンバーに対する v の
適合性チェックが失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでなく、N がちょうど 1 でない場合、
v を
sh:value とする検証結果が存在する。
|
sh:NodeConstraintComponent:
$node を sh:node の値とする。
各値ノード v について:
$node に対する v の
適合性チェックが
失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでなく、v が $node に
適合しない場合、
v を
sh:value とする検証結果が存在する。
|
sh:PropertyConstraintComponent:
$property を sh:property の値とする。
各値ノード v について:
プロパティ形状 $property に対して、v をフォーカスノードとして検証した結果が
失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでない場合、検証結果は、プロパティ形状 $property に対して
v をフォーカスノードとして検証する結果である。
|
sh:SomeValueConstraintComponent:
$someValue を sh:someValue の値とする。
任意の値ノードに対する
$someValue への適合性チェックが
失敗を生成する場合、
いずれか1つ以上の値ノードが
$someValue に適合していない限り、
失敗が生成されなければならない(MUST)。
そうでなく、いずれの値ノードも $someValue に適合しない場合、
検証結果が存在する。
|
sh:QualifiedMinCountConstraintComponent:
$qualifiedValueShape を
sh:qualifiedValueShape の値とする。
$qualifiedMinCount を sh:qualifiedMinCount のパラメーター値とする。
C を、v が $qualifiedValueShape に
適合し、
かつ v が現在の形状、すなわち v が検証されていて、
$qualifiedValueShape を sh:qualifiedValueShape の値として持つ形状についての
兄弟形状のいずれにも
適合しない
値ノード v の数とする。
前述の適合性チェックのいずれかが失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでなく、C が
$qualifiedMinCount より小さい場合、
検証結果が存在する。
sh:qualifiedMinCount の
制約コンポーネントは
sh:QualifiedMinCountConstraintComponent である。
|
sh:QualifiedMaxCountConstraintComponent:
$qualifiedMaxCount を sh:qualifiedMaxCount のパラメーター値とする。
C を、上記の sh:qualifiedMinCount について定義されたものとする。
前述の適合性チェックのいずれかが失敗を生成する場合、
失敗が生成されなければならない(MUST)。
そうでなく、C が
$qualifiedMaxCount より大きい場合、
検証結果が存在する。
sh:qualifiedMaxCount の
制約コンポーネントは
sh:QualifiedMaxCountConstraintComponent である。
|
sh:ReifierShapeConstraintComponent:
t をトリプル項(フォーカスノード,
$path, 値ノード)とする。
トリプル項 t の各具象化子について、その
具象化子をフォーカスノードとして、
ノード形状
$reifierShape に対してその具象化子を検証した結果が
失敗を生成する場合、失敗が生成されなければならない
(MUST)。
$reifierShape に適合しない各具象化子 t について、
t を
sh:value とする検証結果が存在する。
|
sh:ReificationRequiredConstraintComponent:
$reificationRequired が true に設定されており、
データグラフ内にトリプル項 t についての具象化文が存在しない場合、
t を sh:value とする検証結果が存在する。
|
sh:ClosedConstraintComponent:
$closed を sh:closed のパラメーター値とする。
$ignoredProperties を sh:ignoredProperties の値とする。
$closed が true または sh:ByTypes であり、
P が下で定義されるプロパティ集合である場合、
値ノードを
主語とし、
P に含まれない
述語を持つ各トリプルについて、
検証結果が存在する。
$ignoredProperties が値を持つ場合、このSHACL リストの
メンバーとして列挙されたプロパティも、
値ノードについて許可される。
検証結果は、そのトリプルの
述語を
sh:resultPath として持ち、
そのトリプルの目的語を sh:value として
持たなければならない(MUST)。
$closed が true である場合、P は、現在の形状から
SPARQL パス sh:property/sh:path を介して到達できる
IRI プロパティの集合である。
$closed が sh:ByTypes である場合、P は、
次のアルゴリズムを介して値ノードから到達できる
IRI プロパティの集合に rdf:type を加えたものである:
S を2回訪問しないようにすることで、
無限ループを避ける必要があることに注意されたい。
|
sh:HasValueConstraintComponent:
$hasValue を sh:hasValue のパラメーター値とする。
RDF 項 $hasValue が値ノードの中に
含まれない場合、
検証結果が存在する。
|
sh:InConstraintComponent:
$in を sh:in の値とする。
$in のメンバーではない
各値ノードについて、
その値ノードを
sh:value とする
検証結果が存在する。
|
sh:RootClassConstraintComponent:
$rootClass を sh:rootClass のパラメーター値とする。
classes をIRIの集合とし、
$rootClass がIRIである場合、
その集合はちょうどその IRI のみから成り、
$rootClass が空白ノードのSHACL リストである場合、
その集合は
ちょうどそのリストのメンバーから成るものとする。各値ノードについて、 それがIRIでない場合、または IRIであっても、 データグラフが valueNode rdfs:subClassOf* class を含意するような
classes 内の class が存在しない場合、
その値ノードを
sh:value とする
検証結果が存在する。
|
sh:UniqueValuesForConstraintComponent:
$uniqueValuesFor を、シェイプ S における
sh:uniqueValuesFor の値とする。
$properties を、次のような集合とする:
$uniqueValuesFor が IRI である場合、
$properties = { uniqueValuesFor } とする。
$uniqueValuesFor が SHACL リストである場合、
$properties は、そのリストのメンバーの集合である。
$targetNodes を、S のターゲットノードとする。
$targetNodes 内に、V と同じく ノード が存在し、そのノードが
$properties 内のすべてのプロパティについて
V と完全に同一の値を持つ各
値ノード V について、
検証結果が存在する。
V が $properties 内のいずれのプロパティについても値を持たない場合、
結果は生成されない。
|
この節は非規範的である。
ほとんどの RDF ベースの技術と同様に、SHACL プロセッサーは、さまざまなソースから
結合されたグラフに対して動作することがある。一部のアプリケーションは、オープンな
「リンクトデータ」アーキテクチャを持ち、組織の信頼ネットワークの外部にあるソースから
RDF トリプルを動的に組み立てることがある。
RDF では誰でも任意のリソースについて文を追加できるため、トリプルは形状定義または
データグラフ内のノードの本来意図されたセマンティクスを変更し、誤解を招く結果につながる可能性がある。
これ(および以下)のシナリオからの保護は、信頼され検証済みの RDF ソースのみを使用し、
owl:imports および sh:shapesGraph を介してグラフが動的に追加される
可能性を排除することで実現できる。
この節は非規範的である。
元の SHACL core 仕様は RDF Data Shapes Working Group によって作成された。 その 謝辞の節を参照。
この節は非規範的である。
sh:targetNode、
sh:deactivated および
sh:defaultValue を一般化し、ノード式をサポートするために sh:values を導入した。
sh:singleLine を追加した。Issue 177 を参照sh:someValue を追加した。Issue 178 を参照sh:ShapeClass を追加した。
Issue 212 を参照
sh:closed の新しい値 sh:ByTypes を追加した。Issue 172 を参照sh:class および sh:datatype の値がリストにもできるようになり、
選択肢の和集合を示せるようになった。Issue 160 を参照sh:nodeKind の値もリストにできるようになり、
選択肢の和集合を示せるようになった。Issue 407 を参照
sh:ReifierShape を追加した。Issue 300 を参照sh:conformanceDisallows プロパティを
追加した。Issue 453 を参照rdf:dirLangString のサポートを追加した。Issue
737 を参照
sh:rootClass を追加した。Issue 792 を参照sh:subsetOf を追加した。
Issue 786 を参照
sh:DataGraph および sh:ShapesGraph を追加した。Issue 169 を参照sh:uniqueValuesFor を追加した。Issue 661 を参照owl:versionIRI の
形状グラフインポートにおけるサポートを追加し、正形式な形状グラフの定義を拡張して、
[owl2-syntax]
からの
インポート閉包制約を含めた。
Issue 830 を参照
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: