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 概要 には、より詳細な これらの仕様の紹介があります。
仕様は次のとおりです:
作業草案:
編集者草案:
実装者は、上記の仕様への適合度を部分的に確認できます。そのためにはテストを 自ら 各仕様が提供し、それぞれのメタデータからリンクされているテストケースを用いて行います。 ただし、テストスイート内のすべてのテストに合格しても、完全な適合を意味するわけではない点に注意してください。その 仕様に関して、 合格が意味するのは、実装がテストスイートでテストされた側面に適合していることだけです。
序論には用語の節が含まれる。
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] に精通していることが望ましい。
この文書は、RDF グラフを記述し検証するための言語である SHACL(Shapes Constraint Language)のコアを規定する。 この節では、主要な用語の概要と基本概念を説明する例を用いて SHACL を導入する。
この文書全体を通じて、次の用語を使用する。
RDF 1.2 Concepts and Abstract Syntax の各部分にリンクされている用語は、そこで定義されているとおりに SHACL で使用される。SPARQL 1.2 Query Language の 各部分にリンクされている用語は、そこで定義されているとおりに SHACL で使用される。1 つの リンクがあれば、この文書内における特定の用語のすべての出現箇所に対する 定義を提供するのに十分である。
定義はこの文書内で完全である。すなわち、この文書において ある状況を真にする規則が存在しない場合、その状況は偽である。
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 グラフにおいてもメンバーを持たない。
SubがRDFグラフ内で、あるSHACL
サブクラス関係にあり、その上位側が別のノードSuper
であるという関係がグラフ内で成り立つのは、トリプルの列がグラフ内に存在し、その各トリプルの述語がrdfs:subClassOf
であり、最初の主語については、最初のトリプルのものがSub、
目的語については、最後のトリプルのものがSuperであり、
さらに、目的語については、最後を除く各トリプルのものが、次のトリプルの主語である場合である。
SubがSHACLサブクラス関係にあり、その上位側がSuperであるという関係がRDFグラフ内で成り立つ場合、Super
はSHACL
スーパークラス関係にあり、その下位側はSubである。この関係はグラフ内で成り立つ。
rdf:type についての
値の集合、
およびそのグラフ内におけるそれらの
値の
SHACL
スーパークラスである。
いくつかの SHACL 実装は、SHACL サブクラスを決定する
rdfs:subClassOf トリプルが、
データグラフに加えて
形状グラフからも照会されるようにパラメーター化できることに注意されたい。
6.4 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 言語を定義する。 この仕様は、次に対する適合基準を記述する:
この文書には、シェイプやその他のノードがシェイプグラフ内で満たす必要がある構文規則が含まれる
(また、sh:shapesGraph などの一部のプロパティについては、データグラフ内でも適用される)。
これらの規則は通常、シェイプは...を持たなければならない、X の値は
リテラルである、または述語が P であるトリプルのすべてのオブジェクトは IRI でなければならないという形式を取る。
これらの規則の完全な一覧は付録に記載されている。
これらの規則のいずれかに違反するノードは、不正形式と呼ばれる。
これらの規則のいずれにも違反しないノードは、整形式と呼ばれる。
形状グラフは、次の条件がすべて成り立つ場合に 正形式である:
owl:imports 文を推移的にたどることにより決定される)
は、OWL 2 構文仕様
[owl2-syntax]
の 第3.4節で定義される制約を満たす。
すなわち、次のような2つの形状グラフを含まない:
owl:versionIRI 値を持つ)場合、または
owl:incompatibleWith 注釈を含み、その値が他方の形状グラフ IRI
または owl:versionIRI のいずれかに等しい場合。
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のすべての値(シェイプグラフ内のもの)に対する含意。
また、推論されたすべてのトリプルは返されなければならない(データ
グラフに対するすべてのクエリにより、検証処理中に)。
この節は非規範的である。
この節では、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 語彙が含まれている。
sであり、
シェイプグラフ内で次の条件の少なくとも1つを満たすものをいう。
sは、sh:NodeShapeまたは
sh:PropertyShapeのSHACL インスタンスである。
sは、主語であり、そのトリプルは
sh:targetClass、sh:targetNode、
sh:targetObjectsOf、sh:targetSubjectsOfまたはsh:targetWhere
を述語として持つ。
sは、主語であり、そのトリプルはパラメーターを述語として持つ。
sは、sh:nodeなどの、シェイプを要求するが、リストを受け取らないパラメーターの
値であるか、
または、シェイプを要求し、かつリストを受け取るsh:orなどのパラメーターの
値である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 コアに含まれる制約コンポーネントの一覧は、7. コア制約コンポーネントで説明する。 SHACL-SPARQL を使用して、追加のSPARQL に基づく制約 コンポーネントを宣言できる。
データグラフからのトリプルを用いて 形状に 対して検証される RDF 項は、 フォーカスノード と呼ばれる。
この節の残りは非規範的である。
形状に対する フォーカスノードの集合は、次のように識別できる:
sh:node)のパラメーターで
形状を参照する
任意の制約内で指定される
シェイプグラフ内のシェイプのターゲット宣言とは、
トリプルであり、シェイプを主語とし、この文書で説明する特定のプロパティ
(例:sh:targetClass)を述語とするものをいう。
さらに、sh:shape トリプルによって、データグラフ内でターゲットを宣言できる。
ターゲット宣言を使用して、シェイプのフォーカスノードを生成できる。
ターゲット宣言のターゲットとは、
この節の残りの部分で説明する規則をデータグラフに適用することで
生成される RDF 用語の集合である。
シェイプのターゲットとは、
そのシェイプに対して宣言された個々の
ターゲット
によって生成されるすべての RDF 用語の和集合であるシェイプのターゲットをいう。
SHACL コアには、次の種類のターゲットが含まれる。
この序論の残りの部分は非規範的である。
ターゲットによって生成される RDF 用語は、データグラフ内にノードとして存在する必要はない。
フォーカスノードがシェイプの検証プロセスへの入力として直接提供される場合、
そのシェイプのターゲットは無視される。
これには、シェイプがシェイプを要求する制約パラメーター(
sh:nodeなど)のいずれかの値であり、
対応する制約コンポーネント(
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.4 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 からの
ターゲットである。
この節の残りは非規範的である。
この例では、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が値 sを、データグラフ内でsh:shapeに対して持つ場合、
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について同じ言語タグを持つ複数の値を持つべきではなく、
また、
データ型が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, データグラフ, フォーカスノード, {})
が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トリプルは
インポート先のグラフ内に存在することになる。
次のデータでは、そのインスタンスが 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 について
値を持つことができる。
非形式的に言えば、プロパティシェイプは、ノードに関して満たす必要がある制約を指定する。これらのノードには、
フォーカス
ノードから、sh:pathを使用して指定されたプロパティまたは他のSHACL
プロパティパスをたどることで到達できるノードと、
sh:valuesを使用して指定されたノード式を評価することで
生成されるノードが含まれる。
そのようなノードが存在しない場合は、代わりにsh:defaultValueを使用して指定されたノード式が
評価される。
正確な定義については、6.9.2 プロパティ
シェイプの値ノードを参照。
SHACL コアでは、定数のノード式(IRIおよびリテラル)のみが定義されることに注意。
したがって、SHACL コアでは、sh:valuesとsh:defaultValueは定数
値のみを生成できる。
[shacl12-node-expr]や[shacl12-sparql]などの拡張では、さらに多くの種類の
ノード式が定義される。
正形式の プロパティ形状および ノード 形状の定義は、これら2つのノード集合を互いに素にすることに注意されたい。
次の例は、プロパティ形状のいくつかの構文上のバリエーションを示している。
プロパティパスは、プロパティ形状の値
ノードを導出するために、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 の同等表現を示している。
述語パスは、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 コアは、次の機能でノード式をサポートする。
sh:valuesとsh:defaultValueでは、プロパティシェイプの
値ノードを導出する。sh:targetNodeでは、シェイプのターゲットを動的に計算する。
sh:deactivatedでは、特定の
条件下でシェイプを非アクティブ化する。SHACL コアのみに関心がある読者は、通常、この節を読み飛ばしてもよい。 コアでは定数の IRI とリテラルのみがノード式としてサポートされるため、ノード 式のユースケースは、 従来の SHACL コアの使用法と同じである。
evalExpr(expr, focusGraph, focusNode, scope) -> outputNodes
ここで、
exprは、シェイプグラフ内のノード式である。
評価中、エンジンはトリプルにアクセスできる。これらは、
シェイプグラフ内のexprに関連するものである。
focusGraphは、フォーカスグラフと呼ばれるグラフである。これは、ノード式の評価におけるデフォルトの
クエリグラフである。focusNodeは、入力フォーカスノードと呼ばれるノードである。この変数は
値を持たない場合がある。scopeは、(キーとなる)用語から、個々の(値となる)用語へのマップである。
空のマップは{}と表記する。
SHACL コア仕様では、次の2つの小節で説明するノード式関数のみを 定義する。 [shacl12-node-expr]では、ノード式の一般的な 設計に関するさらに詳しい背景情報を提供し、 ノード式関数の包括的なライブラリを含む。 [shacl12-sparql]などの他の仕様では、 空白ノードを使用して追加の関数を導入する。 したがって、ノード式は SHACL の拡張ポイントとして機能する。
検証は、データグラフとシェイプグラフを入力として受け取り、 生成するのは、 検証レポートであり、これには検証の結果が含まれる。 適合性の確認は検証を簡略化したものであり、 ブール値の結果を生成する。 検証を実行できるシステムをプロセッサーと呼び、 動詞の処理するは、検証プロセスを指すために使われることがある。
SHACL は RDF の検証レポート語彙を定義しており、これは 検証レポートを RDF の結果グラフとして生成するプロセッサーで使用できる。 この仕様では、SHACL の結果語彙を、バリデーターの規範的な定義に使用する。 これらは、制約コンポーネントに関連付けられている。 検証レポート語彙の必須プロパティをすべて生成できる SHACL 実装だけが 標準に準拠する。
シェイプグラフとは、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>。
{
"@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 を宣言する 2 つのグラフを。そのようなシェイプグラフは、
整形式でないと見なされる。整形式のシェイプ
グラフの定義に詳細を示す。
シェイプの宣言に加えて、シェイプグラフには SHACL プロセッサー向けの追加情報を含めることができる。
例えば、sh:entailment 文などである。
どの 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 .
も含めることが望ましい。
結果 グラフは、RDF グラフであり、検証の出力である。
結果グラフは、必ず次を含まなければならない。検証レポート。また、含んでもよい、 次で定義されるその他の要素を。 SHACL 1.2 プロファイリングの語彙。
SHACL 1.2 プロファイリングの語彙の全要素は、 SHACL 名前空間内に含まれるため、追加の RDF リソースは、SHACL 1.2 Core ですでに必要なものを超えて、これらの要素に必要とはならない。
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 トリプルは、常にデータグラフにあることが期待される。
データ
グラフには、SHACL プロセッサーに 1 つ以上のグラフを提案するためのトリプルを含めることができる。
その述語には sh:shapesGraph を使用する。
各値は、
sh:shapesGraph の場合、IRIである。これは、次に含めるべきであるグラフを表す。シェイプグラフであり、その検証対象はデータ
グラフである。
sh:shapesGraph の値は、次の値である場合がある。owl:versionIRI。
したがって、バージョン IRI からシェイプグラフ IRI を解決する同じ方法が、シェイプグラフで説明されているとおり、ここにも適用される。
次の例では、SHACL プロセッサーは、使用するべきである、和集合を、
ex:graph-shapes1 と ex:graph-shapes2 のグラフ(およびそれらの
owl:imports)の和集合を、シェイプグラフとして、与えられたグラフを検証する際に。
検証は、ある 入力から 検証結果へのマッピングであり、以下の段落で定義する。
シェイプグラフに照らしたデータグラフの検証: データグラフとシェイプグラフが与えられた場合、 検証結果は、次の結果の和集合である。検証の対象となるデータグラフについて、すべての シェイプに照らした結果である。 そのシェイプは、シェイプグラフ内にある。
シェイプに照らしたデータグラフの検証: データグラフとシェイプが、シェイプグラフ内で与えられた場合、 検証結果は、次の結果の和集合である。検証の対象となるすべての フォーカス ノードのうち、ターゲットに含まれるものの結果であり、そのシェイプのターゲットは、データグラフ内にある。
シェイプに照らしたフォーカスノードの検証: フォーカスノードがデータグラフ内で、またシェイプがシェイプグラフ内で与えられた場合、 検証結果は、次の結果の和集合である。検証の対象であるフォーカスノードについて、すべての 制約に照らした結果であり、それらはシェイプで宣言される。ただし、そのシェイプが 無効化されている場合を除く。 その場合、検証結果は空になる。
制約に照らしたフォーカスノードの検証:
フォーカスノードがデータグラフ内で、また制約が、その種類を
C として、シェイプグラフ内で与えられた場合、
検証結果は、次のバリデーターによって定義される。制約
コンポーネント C のものである。
これらのバリデーターは通常、入力としてフォーカスノードと、具体的な
値を受け取る。
その値は、パラメーター、すなわち C のものに対応し、
制約はシェイプグラフ内にある。さらに、値
ノードを受け取り、それはシェイプ、すなわちその制約を宣言するものの値ノードである。
検証中、データグラフおよびシェイプグラフは、必ず不変のままでなければならない。つまり、検証終了時の両グラフは、必ず検証開始時のグラフと同一でなければならない。 SHACL プロセッサーは、変更してはならない、構築に使用するグラフを、 シェイプグラフまたはデータグラフの構築に使用するものを、 それらのグラフが、格納されたグラフの変更を許可する RDF ストアの一部である場合でも。 SHACL プロセッサーは、格納してもよい、自身が作成するグラフを、例えば 検証結果を含むグラフを。 また、この操作は、変更してもよい、RDF ストア内の既存のグラフを。ただし、 シェイプグラフまたはデータグラフの構築に使用されたグラフを変更してはならない。 したがって、SHACL の処理は冪等である。
検証および適合性の 確認は、失敗に終わることがある。 例えば、ある SHACL プロセッサーは再帰的なシェイプを許可していても、失敗を報告する場合がある。 これは、データ内にループを検出した場合である。 リソースの枯渇によって失敗が報告されることもある。 失敗は、実装固有の経路を通じて通知される。
シェイプグラフに整形式でないノードが含まれる場合、 検証プロセスの結果は未定義である。 SHACL プロセッサーは、生成するべきである、失敗を、この場合。 6.8.1.4 構文 確認の対象となるシェイプグラフ (sh:shapesGraphWellFormed)も参照のこと。
以下のプロパティは、いわゆるシェイプを要求する制約 パラメーターであり、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.8.1.2
適合性を認めない集合 (sh:conformanceDisallows)を参照のこと。
同じ集合が、検証自体、およびその間に実行されるすべての適合性の確認に適用される。
これには、入れ子になったものも含まれる。
デフォルトでは、許可されない重大度レベルの集合には sh:Warning と
sh:Info が含まれる。
例えば、値ノードは、次のシェイプに適合しない。
sh:node のシェイプであり、そのシェイプに照らした検証が
重大度 sh:Warning の検証結果を生成する場合である。
適合性の確認が生成するのは、
true である。その必要十分条件は、与えられたフォーカスノードが
適合することである。
その対象は、与えられたシェイプであり、それ以外の場合は false を生成する。
すべてのシェイプを要求する制約パラメーターは、
SHACL Core において、
適合性の確認に依存することに注意すること。
これらの場合、検証結果のうち、結果の判定に使用されるもの、
すなわち適合性の確認に使用されるものは、
それを包含する検証プロセスの結果とは分離され、通常、同じ
検証レポートには含まれない
(ただし、sh:detail の値として含まれる場合はある)。
データグラフは、使用してもよい、プロパティ
sh:conformsToShapesGraph を。これは、それが適合することを示す。その対象は、与えられたシェイプグラフである。
値は、IRIであり、次のシェイプグラフを識別する。
このプロパティには rdfs:domain sh:DataGraph と rdfs:range sh:ShapesGraph がある。
シェイプグラフへの適合の節を参照のこと。 SHACL 1.2 プロファイリングに、このプロパティの使用に関する詳細を示す。
検証レポートは、検証プロセスの結果であり、適合性と、すべての 検証結果の集合を報告する。 検証レポートは、SHACL の検証レポート語彙を用いて記述される。 この語彙は、本節で定義される。 この語彙は、構造的な情報を表現する RDF プロパティを定義する。その情報は指針を提供し得る。 これは、データグラフ内の違反を識別または修正する方法についての指針である。
SHACL に準拠するプロセッサーは、必ず次を返せなければならない。結果グラフであり、その検証レポートは、必要なすべての 検証結果を含み、 それらはこの仕様に記述されている。 SHACL に準拠するプロセッサーは、サポートしてもよい、任意の引数を。これにより、 返される結果の数を制限できる。 この柔軟性は、例えば、一部の大規模なデータセット検証のユースケースで必要となる。
次のグラフは、データグラフの検証に関する検証レポートの例を表す。そのデータグラフは、 シェイプグラフに適合している。
次のグラフは、データグラフの検証に関する検証レポートの例を表す。そのデータグラフは、
シェイプグラフに適合していない。
sh:resultMessage の具体的な値は、SHACL によって指定されていないことに注意すること。
これは実装固有と見なされる。
SHACL に準拠するプロセッサーは、返せてもよい、結果グラフを。その中には検証レポートが含まれ、 追加の項目にリンクされる。その項目はSHACL 1.2 プロファイリングの語彙に記述される。
検証プロセスの結果は、RDF グラフであり、ちょうど 1 つのSHACL インスタンスを
sh:ValidationReport に対して持つ。
検証レポートの節を参照のこと。SHACL 1.2
プロファイリングに、拡張された検証の結果の詳細を示す。その結果には、
sh:ValidationReport のインスタンス、検証への入力の詳細、および検証システムの
詳細が含まれる。
結果グラフ内の sh:ValidationReport の各 SHACL インスタンスは、ちょうど 1 つの
値をプロパティ sh:conforms に持ち、その値のデータ型は
xsd:boolean である。
これは、適合性の確認の結果を表す。
各検証プロセスは、許可されない重大度
レベルの集合、すなわち適合性を認めない集合を使用する。
デフォルトの集合は、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 インスタンス上の値である。
各検証結果について、それを生成するのが検証プロセスである場合、
(ただし、適合性の
確認の文脈で言及するものを除く)、
結果グラフ内の sh:ValidationReport の SHACL インスタンスは、値を持つ。
そのプロパティは sh:result である。
sh:result の各値は、SHACL インスタンスであり、そのクラスは
sh:ValidationResult である。
SHACL 検証エンジンには、次の確認は厳密には要求されない。シェイプグラフが整形式かどうかの確認である。
そのような確認を実行する実装(例えば、シェイプグラフをインストールする際、
システムに、
または検証の前や途中)は、使用するべきである、プロパティ
sh:shapesGraphWellFormed を。これは、
検証レポートの利用者に、この事実を知らせるためである。
結果グラフ内の sh:ValidationReport の SHACL インスタンスが、
true を値として
sh:shapesGraphWellFormed に持つ場合、プロセッサーは、次のことを確信していたことになる。シェイプグラフ、すなわち
検証プロセスで使用されたものが、整形式であるということである。
結果グラフ内の sh:ValidationReport の SHACL インスタンスは、持ってもよい、プロパティ
sh:usedDataGraph の値を。
その値は、IRIであり、データグラフを識別する。
それを検証したのはプロセッサーであり、そのレポートを生成するためである。
データグラフのバージョン IRI も、使用してもよい、この
プロパティの値として。
結果グラフ内の sh:ValidationReport の SHACL インスタンスは、持ってもよい、プロパティ
sh:usedShapesGraph の値を。
その値は、IRIであり、シェイプグラフを識別する。
それを使用したのはプロセッサーであり、その間に行われたのは検証
プロセスである。
シェイプグラフのバージョン IRI も、使用してもよい、この
プロパティの値として。
結果グラフ内の sh:ValidationReport の SHACL インスタンスは、持ってもよい、プロパティ
sh:usedConfiguration の値を。
その値は、sh:ProcessorConfiguration のインスタンスであり、状態と
設定を記述する。
プロセッサー、すなわちレポートを生成したものの状態と設定である。
SHACL プロセッサーは、変更してはならない、検証の動作を、次に基づいて。
sh:ProcessorConfiguration インスタンスの内容に基づいて。
sh:ProcessorConfiguration は、プロセッサーの設定のクラスである。
このクラスのインスタンスは、SHACL のプロセッサーの状態と設定を、
検証レポートを生成した時点について記述する。
sh:ProcessorConfiguration インスタンスのプロパティは、この
仕様では定義しない。
実装は、このクラスのインスタンスに必要な任意のプロパティを自由に定義できる。 例えば、プロセッサー名、プロセッサーのバージョン、 最大再帰深度、その他の実行時パラメーターなどである。
SHACL は、sh:ValidationResult を sh:AbstractResult のサブクラスとして定義し、
個々の SHACL の検証結果を報告する。
SHACL 実装は、他のSHACL サブクラスを使用してもよい。
sh:AbstractResult のものであり、例えば、
正常に完了した制約の確認や集積された結果を報告するためである。
この節の残りの小節で記述するすべてのプロパティは、指定できる。
sh:ValidationResult 内に。
プロパティ sh:focusNode、sh:resultSeverity および
sh:sourceConstraintComponent
だけが、すべての検証結果で必須となるプロパティである。
各検証結果は、プロパティ sh:focusNode に対してちょうど 1 つの値を持つ。
その値は、フォーカスノード、すなわち結果の原因となったものと等しい。
これは、フォーカスノードであり、検証結果が
生成されたときに検証されていたものである。
検証結果は、プロパティ sh:resultPath に値を持つことができ、それは整形式のSHACL
プロパティパスを指す。
プロパティシェイプによって生成された結果では、このSHACL プロパティパスは、次の値と等価である。シェイプの
sh:path の値であり、
別段の記載がある場合を除く。
sh:path p が空白ノードの場合、sh:resultPath は、
ディープコピーであり、結果グラフ内の p のコピーである。
検証結果には、値として、プロパティ
sh:value に、
結果の原因となった RDF 用語を最大 1 つ含めることができる。
SHACL Core コンポーネントのバリデーターの文章による定義では、この
値の構築方法を指定する。多くの場合、それらは値ノードであり、
制約に違反したものである。
検証結果には、唯一の値として、プロパティ
sh:sourceShape に、
シェイプを含めることができる。与えられた sh:focusNode の検証で、
照合先となったものである。
検証結果は、プロパティに対してちょうど 1 つの値を持つ。
sh:sourceConstraintComponent に対してであり、
その値は、IRIである。
これは、制約コンポーネント、すなわち結果の原因となったものの IRI である。
例えば、ある値に基づく制約への違反によって生成された結果では、
sh:minCount の値に基づく場合、
発生元の制約コンポーネントは sh:MinCountConstraintComponent となる。
プロパティ sh:detail は、(親の)結果を 1 つ以上の SHACL インスタンスにリンクできる。
その対象は、
sh:AbstractResult のインスタンスであり、(親の)結果の原因についてさらに詳細を
提供できるものである。
SHACL プロセッサーの機能によっては、これには例えば違反が含まれる。
sh:node を通じた適合性の確認の一部として評価された制約の違反である。
検証結果は、プロパティ sh:resultMessage の値を持つことができる。
例えば、人に追加の詳細をテキストで伝えるためである。
sh:resultMessage は複数の値を持つことができるが、2 つの値を持たないことが望ましい。
同じ言語タグを持つ値を。
これらの値は、検証エンジンにより、sh:message の値に基づいて生成される。
それは、制約の値であり、
シェイプグラフ内にある。シェイプのメッセージの宣言を参照のこと。
具象化を使用して宣言されたメッセージは、包含する
シェイプで宣言されたものより優先される。
制約が sh:message の値を持たない場合、そのシェイプ
グラフ内で、
SHACL プロセッサーは、自動生成してもよい、他の値を、
sh:resultMessage に対して。
各検証結果は、ちょうど 1 つの値を、プロパティ
sh:resultSeverity に持ち、この値はIRIである。
値は、以下の規則によって(この順序で)決定される:
sh:severity の値、
その場所は具象化子であり、次のいずれかのトリプルのものである。そのトリプルにはパラメーターが含まれ、その制約は、
結果の原因となったものであるsh:severity の値、
そのシェイプは、シェイプ
グラフ内にあり、結果の原因となったものであるsh:Violation となる。sh:severity が指定されていない場合、
シェイプにも制約にも指定されていない場合である。データグラフは、意図的に一部だけを含む場合がある。 それは、一部のノードに関する情報の一部であり、 例えば、関心領域外にある「外部」のリソースにリンクする場合や、 次のようなノードにリンクする場合である。残りのトリプルがまだ入力されていないが、後で 入力されることが期待されるノードである。 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 つが満たされる場合である:
true が、不完全性の値に含まれる。
n のものに。
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 の違反を非表示にすることを選択してもよい。
バリデーターのうち、大部分の制約コンポーネントのものは、次の概念を使用する。値ノードであり、以下の 2 つの小節で定義する。
プロパティシェイプが、値として、
sh:path に p を持つ場合、
値ノードの集合は、以下のステップによって生成される:
このセクションでは、すべてのSHACL Coreプロセッサーがサポートしなければならない(MUST)組み込みのSHACL Core制約コンポーネントを定義する。 各制約コンポーネントの定義には、そのIRIとパラメーターの表が含まれる。 特に明記されない限り、これらのパラメーターはすべて必須パラメーターである。 これらのパラメーター表に列挙された構文規則のいずれかに違反するシェイプは、不正形式である。
各制約コンポーネントには、そのコンポーネントに関連付けられたバリデーターを説明する
テキスト定義も含まれる。
これらのテキスト定義では、制約内のパラメーターの値を、paramNameがパラメーターのIRIの
sh:名前空間以降の部分である$paramName形式の変数で参照する。
例えば、sh:ClassConstraintComponentのテキスト定義では、
sh:classの値を変数$classを使用して参照する。
SHACL Coreでは、パラメーター値という用語は、
パラメーターの値、
すなわち、目的語が、トリプルのものであり、シェイプグラフ内で主語が
シェイプであり、
述語が(sh:classなどの)パラメーターであることを意味する。
執筆時点で、WGはSHACL Coreの外部にSHACLの方言を定義する意図を持っており、
そこでは
パラメーター値という用語にノード式も許容される。
すべての制約コンポーネントがパラメーター値という用語を使用するわけではなく、
代わりに値という
用語を参照するものもあることに注意する。
例えば、sh:nodeの値をノード式にすることは
決してできない。これは
空白ノードの処理が複雑になるためである。
SHACL Coreの定数IRIおよびリテラルを超えるノード式は、[shacl12-node-expr]で定義される。
これらのバリデーターは、コンポーネントが生成する検証結果のすべてを定義することに 注意すること。 さらに、バリデーターは常に新しい結果ノードを生成する。すなわち、文章による定義で 次のように述べられている場合、 「…検証結果が存在する…」とは、結果グラフ内の個別の新しいノードを指す。
このセクションの残りは非規範的である。
SHACL Coreに含める制約コンポーネントの選択は、 [shacl-ucr]文書によって収集された要件に基づいて行われた。 可能な限り多くの一般的なユースケースを網羅することと、 コア言語の規模を管理可能な範囲に保つことのバランスに特に注意が払われた。 すべてのユースケースをコア言語だけで表現できるわけではない。 代わりに、SHACL-SPARQL [shacl12-sparql]が拡張 メカニズムを提供する。 再利用可能な制約コンポーネントの追加ライブラリーは、 サードパーティーによって維持されることが期待される。
特に明記されない限り、コア制約コンポーネントはプロパティシェイプとノード
シェイプの両方で使用できる。
一部の制約パラメーターには、それらを使用するノードシェイプを
不正形式にする構文規則が付随している。
その例として、プロパティシェイプでのみ
サポートされるsh:minCountが挙げられる。
このセクションの制約コンポーネントには、いずれも 値ノードの型を制限するために使用できるという共通点がある。 sh:orを使用して複数の値型の選択肢を表現できることに 注意する。
sh:classによって指定される条件は、各値ノードが、指定された型のSHACLインスタンスであることである。
制約コンポーネントIRI:
sh:ClassConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:class |
すべての値ノードの型。
シェイプ内の
sh:classの値は、IRI、
またはすべての空白ノードが整形式のSHACL
リストであり、すべてのメンバーがIRIであるものとする。
|
このセクションの残りは非規範的である。
sh:classの複数の値は論理積として解釈されることに注意する。
つまり、値はそれらすべてのSHACLインスタンスである必要がある。
和集合の意味論にはリストを使用する。
次の例は、sh:classのリストに基づく構文を示しており、
プロパティex:petの値が猫または犬のいずれかでなければならないことを意味する。
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とする。このセクションの残りは非規範的である。
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、または空白ノードであり、整形式の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または空白ノードでなければならないことを意味する。
次の制約コンポーネントは、指定された フォーカスノードに対する 値ノードの数に関する制限を表す。
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のリテラルである。
|
このセクションの残りは非規範的である。
次の制約コンポーネントは、値ノードが満たすべき値範囲条件を指定する。これらの値ノードは、
比較可能であり、
<、<=、>、>=などの演算子によって比較される。
次の例は、これらの制約コンポーネントの典型的なユースケースを示す。
sh:minExclusiveは、各値ノードが超えなければならない排他的な最小値を指定する。
制約コンポーネントIRI:
sh:MinExclusiveConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:minExclusive |
排他的な最小値。
シェイプ内のsh:minExclusiveの値は、
リテラルである。
シェイプには、
sh:minExclusiveの値を最大1つ指定できる。
|
このセクションの残りは非規範的である。
値ノードを指定された範囲と比較できない場合、検証結果が存在する。 例えば、文字列と整数を比較した場合などである。
sh:minInclusiveは、各値ノードがそれ以上でなければならない包含的な最小値を指定する。
制約コンポーネントIRI:
sh:MinInclusiveConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:minInclusive |
包含的な最小値。
シェイプ内のsh:minInclusiveの値は、
リテラルである。
シェイプには、
sh:minInclusiveの値を最大1つ指定できる。
|
sh:maxExclusiveは、各値ノードがそれ未満でなければならない排他的な最大値を指定する。
制約コンポーネントIRI:
sh:MaxExclusiveConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:maxExclusive |
排他的な最大値。
シェイプ内のsh:maxExclusiveの値は、
リテラルである。
シェイプには、
sh:maxExclusiveの値を最大1つ指定できる。
|
sh:maxInclusiveは、各値ノードがそれ以下でなければならない包含的な最大値を指定する。
制約コンポーネント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 STRLEN関数によって定義される)
(文字列表現はSPARQL str関数によって定義される)
が$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 STRLEN関数によって定義される)
(文字列表現はSPARQL str関数によって定義される)
が$maxLengthを超える場合、またはvが空白ノードである場合、
検証結果が存在し、vを
sh:valueとする。
このセクションの残りは非規範的である。
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)。
このセクションの残りは非規範的である。
この機能は、この機能(および類似の利便性機能)に関するWGの決議が下されるまで「リスクのある」状態にある。 WGは、コアに含めるべき機能と 他の文書に含めるべき機能の境界をどこに設けるか、まだ確定していない。 当初は課題177として議論された。
trueに設定すると、sh:singleLineは、
値ノードに改行が含まれてはならないことを指定する。
制約の検証に加えて、ユーザーインターフェイスの構築者はこの情報を利用して、
(単一行の)テキストフィールドと(複数行の)テキストエリアを選択できる。
制約コンポーネントIRI:
sh:SingleLineConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:singleLine |
この制約を有効にするにはtrueを指定する。
シェイプ内の
sh:singleLineの値は、データ型が
xsd:booleanのリテラルである。
シェイプには、
sh:singleLineの値を最大1つ指定できる。
|
このセクションの残りは非規範的である。
この例では、シェイプの有効なターゲットノードに含めることができる
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に設定すると、どの2つの値ノードも同じ言語タグを使用できないことを指定する。
テキスト方向が存在する場合は、それも考慮される。
制約コンポーネント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の値は、整形式のノード
シェイプでなければならない。
|
このセクションの残りは非規範的である。
値ノードvのメンバーmのうち、
$memberShapeに適合しないものは、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以上の
整数である。
シェイプには、
sh:minListLengthの値を最大1つ指定できる。
|
このセクションの残りは非規範的である。
次の例では、プロパティ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以上の
整数である。
シェイプには、
sh:maxListLengthの値を最大1つ指定できる。
|
このセクションの残りは非規範的である。
次の例では、プロパティex:hobbiesのすべての値は、
最大2つのメンバーを持つSHACLリストでなければならない。
sh:maxListLengthの追加テストケースは、SHACLテストスイートにある:maxListLength-001.ttl。
sh:uniqueMembersは、SHACLリストである値ノードが一意のメンバーを持たなければならないかどうかを指定する。
制約コンポーネントIRI:
sh:UniqueMembersConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:uniqueMembers |
SHACLリストのメンバーが一意でなければならないかどうかを指定する真偽値。
シェイプ内のsh:uniqueMembersの値は、
データ型がxsd:booleanのリテラルである。
シェイプには、
sh:uniqueMembersの値を最大1つ指定できる。
|
このセクションの残りは非規範的である。
リストvの重複する各メンバーmは、
vの検証結果において、個別の
sh:detailとして報告すべきである。
リストvが有効なSHACLリストでない場合、これは
最上位の検証結果として報告すべきであり、一意性の
検証を試みるべきではない。
検証結果でsh:detailを生成する方法の例は、SHACLテストスイートの
sh:uniqueMembersのテストケースにある:uniqueMembers-001.ttl。
次の例では、プロパティex:preferencesのすべての値は、
各SHACLリスト内で一意の値を持つメンバーからなるSHACLリストでなければならない。
このセクションの制約コンポーネントは、他のプロパティやプロパティパスとの関係において、
値ノードの集合に関する
条件を指定する。
sh:lessThanとsh:lessThanOrEqualsは、プロパティシェイプでのみ使用できる。
sh:equalsは、すべての値ノードの集合が、
ノードの集合と等しいという条件を指定する。
その集合は、フォーカスノードから、sh:equalsを使用して指定されたSHACLプロパティ
パスを介して到達可能なノードからなる。
制約コンポーネントIRI:
sh:EqualsConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:equals |
比較対象となるプロパティパス。
シェイプ内の
sh:equalsの値は、整形式のSHACLプロパティパスである。
|
このセクションの残りは非規範的である。
次の例は、シェイプ内でsh:equalsを使用して、
特定のフォーカスノードがex:firstNameと
ex:givenNameについて同じ値の集合を持つ必要があることを指定する方法を示す。
次の例は、SHACLプロパティパスが
両方の値として使用できることを示している。
すなわち、sh:pathとsh:equalsの値として使用できる。
この例では、Bobに タトゥーに記された名前と異なる名前の配偶者がいる場合、またはその逆の場合に警告が報告される。 Bobに配偶者もタトゥーもない場合、または 両方があり、その名前とテキストが完全に同じノードの集合と一致する場合、警告は生成されない。
sh:disjointは、値ノードの集合が、
ノードの集合と互いに素であるという条件を指定する。その集合は、
フォーカスノードから、
sh:disjointの値であるSHACLプロパティパスを介して
到達可能なノードからなる。
制約コンポーネントIRI:
sh:DisjointConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:disjoint |
値の比較対象となるプロパティパス。
シェイプ内の
sh:disjointの値は、整形式のSHACLプロパティパスである。
|
このセクションの残りは非規範的である。
次の例は、シェイプ内でsh:disjointを使用して、
特定のフォーカスノードがex:prefLabelと
ex:altLabelで値を共有できないことを指定する方法を示す。
sh:subsetOfは、すべての値ノードが、
さらに到達可能でなければならないという条件を指定する。
すなわち、フォーカスノードから、sh:subsetOfを使用して指定されたSHACLプロパティ
パスを介して到達可能でなければならない。
制約コンポーネントIRI:
sh:SubsetOfConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:subsetOf |
比較対象となるプロパティパス。
シェイプ内の
sh:subsetOfの値は、整形式のSHACLプロパティパスである。
|
このセクションの残りは非規範的である。
次の例は、シェイプ内でsh:subsetOfを使用して、
ある人のお気に入りの子供が、実際の子供の中に含まれなければならないことを指定する方法を示す。
sh:lessThanは、各値ノードが
すべての
ノードより小さくなければならないという条件を指定する。これらはフォーカスノードから
SHACLプロパティパスを介して到達可能であり、
そのパスはsh:lessThanの値である。
制約コンポーネントIRI:
sh:LessThanConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:lessThan |
値の比較対象となるプロパティパス。
シェイプ内の
sh:lessThanの値は、整形式のSHACLプロパティパスである。
ノードシェイプには
sh:lessThanの値を指定できない。
|
このセクションの残りは非規範的である。
次の例は、シェイプ内でsh:lessThanを使用して、
ex:startDateのすべての値がex:endDateの値より「前」であることを指定する方法を示す。
sh:lessThanOrEqualsは、各値ノードが、
以下のすべてのノード以下であるという条件を指定する。
すなわち、ノードのうち、フォーカスノードから
SHACLプロパティパスを介して到達可能なものであり、
そのパスはsh:lessThanOrEqualsの値である。
制約コンポーネントIRI:
sh:LessThanOrEqualsConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:lessThanOrEquals |
値の比較対象となるプロパティパス。
シェイプ内の
sh:lessThanOrEqualsの値は、整形式のSHACLプロパティパスである。
ノード
シェイプにはsh:lessThanOrEqualsの値を指定できない。
|
このセクションの残りは非規範的である。
次の例は、シェイプ内でsh:lessThanOrEqualsを使用して、
ex:startDateの値がex:endDateの値より後でないことを指定する方法を示す。
sh:lessThanとは異なり、プロジェクトは開始日と同じ日に終了してもよい。
このセクションの制約コンポーネントは、一般的な論理演算子である 論理積、論理和、否定、および排他的論理和の変種を実装する。
sh:notは、各値ノードが、指定された適合の対象となるシェイプに適合してはならないという条件を指定する。
これは否定および論理「not」演算子に相当する。
制約コンポーネントIRI:
sh:NotConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:not |
否定するシェイプ。
シェイプ内の
sh:notの値は、整形式のシェイプでなければならない。
|
このセクションの残りは非規範的である。
次の例は、シェイプ内でsh:notを使用して、
特定のフォーカスノードがex:propertyの値を一切持てないことを指定する方法を示す。
sh:andは、各値ノードが指定されたすべての
シェイプに適合するという条件を指定する。
これは論理積および論理「and」演算子に相当する。
制約コンポーネントIRI:
sh:AndConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:and |
値ノードを検証する対象となるシェイプのSHACLリスト。
シェイプ内の
sh:andの各値は、SHACLリストである。
そのようなリストの各メンバーは、整形式のシェイプでなければならない。
|
このセクションの残りは非規範的である。
sh:andはシェイプのSHACLリストを値として持つが、
それらのシェイプの順序は検証結果に影響しないことに注意する。
短絡評価の意味論を使用する実装では、その順序が
検証の効率に影響する場合がある。
評価が容易な制約、または
失敗する可能性が高い制約をリストの前方に配置することが推奨される。
次の例は、シェイプ内でsh:andを使用して、
特定のフォーカスノードがex:propertyの値をちょうど1つ持つという条件を指定する方法を示す。
これは、最小数を指定する別個の名前付きシェイプ(ex:SuperShape)と、
それに加えて
最大数を指定するプロパティシェイプの論理積によって実現される。
ここに示すように、sh:andを使用して、シェイプ間の
特殊化メカニズムを実装できる。
sh:orは、各値ノードが、指定されたシェイプの少なくとも1つに
適合するという条件を指定する。
これは論理和および論理「or」演算子に相当する。
制約コンポーネントIRI: sh:OrConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:or |
値ノードを検証する対象となるシェイプのSHACLリスト。
シェイプ内の
sh:orの各値は、SHACLリストである。
そのようなリストの各メンバーは、整形式のシェイプでなければならない。
|
このセクションの残りは非規範的である。
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にも適合する必要がある。
sh:xoneは、各値ノードが、指定されたシェイプのちょうど
1つに適合するという条件を指定する。
制約コンポーネントIRI:
sh:XoneConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:xone |
値ノードを検証する対象となるシェイプのSHACLリスト。
シェイプ内の
sh:xoneの各値は、SHACLリストである。
そのようなリストの各メンバーは、整形式のシェイプでなければならない。
そのような
リストには少なくとも1つのSHOULDに従って
メンバーを含めるべきである。
|
このセクションの残りは非規範的である。
sh:xoneはシェイプのSHACLリストを値として持つが、
それらのシェイプの順序は検証結果に影響しないことに注意する。
次の例は、シェイプ内でsh:xoneを使用して、
次の条件を
指定する方法を示す。特定のフォーカスノードは、ex:fullNameの値、または
ex:firstNameとex:lastNameの値のいずれかを持たなければならず、両方を持ってはならない。
このセクションの制約コンポーネントは、値ノードを特定のシェイプに対して検証することで、 複雑な条件を指定するために使用できる。
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.6.3 再帰的な シェイプの処理を参照する。
sh:propertyは、各値ノードが、
指定されたプロパティシェイプを持つことを指定するために使用できる。
制約コンポーネントIRI:
sh:PropertyConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:property |
すべての値ノードが持つ必要があるプロパティシェイプ。
シェイプ内の
sh:propertyの各値は、整形式のプロパティシェイプでなければならない。
|
このセクションの残りは非規範的である。
sh:propertyと
sh:nodeには重要な違いがあることに注意する:
値ノードが制約に違反する場合、その値ノードに対する
sh:nodeの検証結果は1つだけであり、
sh:sourceConstraintComponentにはsh:NodeConstraintComponentが設定される。
一方、sh:propertyでは任意の数の検証結果が存在する場合があり、
それらの
制約に対応する個々の制約コンポーネントが、プロパティシェイプ内の制約に基づいて
sh:sourceConstraintComponentの値となる。
他のすべての検証結果と同様に、プロパティシェイプに
sh:propertyを介して到達するたびに、
検証エンジンは新しい検証結果ノードを生成しなければならない(MUST)。
これには、同じフォーカスノードが同じ
プロパティシェイプに対して検証される場合も含まれる。
たとえシェイプグラフ内の異なるパスを介して到達した場合でも同様である。
sh:someValueは、少なくとも1つの値ノードが、
指定されたシェイプに適合するという条件を指定する。
制約コンポーネントIRI:
sh:SomeValueConstraintComponent
| プロパティ | 概要と構文規則 |
|---|---|
sh:someValue |
少なくとも1つのシェイプに適合する必要がある値ノードのための指定シェイプ。
シェイプ内の
sh: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を使用することと同等である。
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の値を除いたものとする。
それ以外の場合、兄弟シェイプの集合は空である。
$qualifiedValueShapeをsh:qualifiedValueShapeの値と
する。
$qualifiedMinCountをsh:qualifiedMinCountのパラメーター値と
する。
Cを、次の条件を満たす値ノードvの数とする。
vが$qualifiedValueShapeに適合し、
かつvが現在のシェイプのいずれの適合対象となる兄弟シェイプにも適合しない場合である。
すなわち、vが検証される対象のシェイプであり、
sh:qualifiedValueShapeの値として$qualifiedValueShapeを持つシェイプである。
失敗は、上記の適合性チェックのいずれかが
失敗を生成した場合、生成しなければならない(MUST)。
それ以外の場合、Cが$qualifiedMinCount未満なら、検証結果が存在する。
sh:qualifiedMinCountの制約コンポーネントは、
sh:QualifiedMinCountConstraintComponentである。
このセクションの残りは非規範的である。
次のシェイプの例は、プロパティ
ex:parentがちょうど2つの値を持ち、
そのうち少なくとも1つが女性であるという条件を指定するために使用できる。
次の例は、sh:qualifiedValueShapesDisjointを使用して、
手がex:digitの値を最大5つ持つこと(
sh:maxCountを使用して表現される)、
そのうちちょうど1つがex:Thumbのインスタンスであり、ちょうど4つが
ex:Fingerのインスタンスでなければならないこと、
ただし親指と他の指は互いに素でなければならないことを示す。
つまり、手のどの指も親指として同時に数えることはできない。
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とする。
このセクションの残りは非規範的である。
この例では、シェイプex:PersonShapeは、
ex:Personのすべてのインスタンスが
ex:ageの値を、シェイプに適合する具体化子によって具体化しなければならないことを指定する。
ex:ProvenanceShapeに適合する必要があり、すなわちex:dateと
ex:authorを指定する必要がある。
このセクションでは、他のカテゴリーに該当しないコア制約コンポーネントを列挙する。
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。
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、
または空白ノードであり、整形式のSHACL
リストで、すべてのメンバーがIRIであるものとする。
|
このセクションの残りは非規範的である。
sh:rootClass制約は通常、クラスを値として持つことができる
プロパティシェイプ(例えば、sh:class rdfs:Classを介して)とともに使用され、
値ノードに許可されるサブクラス階層を制限する。
指定されたクラスは、許可されるクラス階層の上限として機能する。
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制約と組み合わせて使用される。
この例では、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つ以上の値を持ち、
シェイプを定義する特性に対して人間が読める名前を提供できる。
すなわち、プロパティシェイプの場合はプロパティパス、
ノードシェイプの場合は対象となるリソースの種類である。
sh:nameはプロパティパスに名前を付ける。sh:nameはシェイプのターゲットに共通するもの、
すなわちシェイプの制約によって記述されるリソースの種類に名前を付ける。
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つだけにすべきである。
シェイプは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の検証や適合性に影響しない。
この例では、最初の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: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は特定のプログラミング言語に依存しない。
指定されたデータ型をどのネイティブ型で表すか、および値ノードをどのように変換するかは、
実装に委ねられる。
シェイプはプロパティsh:unitに値を持ち、値ノードに関する計量単位、
通貨、または同様の情報を示すことができる。
sh:unitの値は、リテラルであり、そのデータ型はxsd:string、
rdf:langString、rdf:dirLangStringのいずれか、またはIRIである。
SHACL 1.2では、執筆時点
(2026年)に、
これらを統一的に表現する公式のW3C標準が存在せず、
W3C以外にも複数の標準が存在するため、sh:unitの特定の値を規定しない。
SHACL 1.2では、次の推奨事項を示す。
sh:unitの値はxsd:stringの
リテラルであり、UCUMで定義されたコードに完全に一致するものを使用できる。
例えば、sh:unit "cm"。
sh:unitの値はxsd:stringのリテラルであり、
ISO 4217で定義されたコードに完全に一致するものを使用できる。
例えば、sh:unit "AUD"。
sh:unitの値は、IRIであり、
QUDTまたは同様の単位語彙によって
定義されたものを使用できる。
例えば、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の推奨される用途は、
ユーザーインターフェイスでプロパティシェイプを昇順に並べ替えることである。例えば、より小さい
順序値を持つプロパティを
より大きい順序値を持つプロパティの上方または先頭側(左から右に書く言語では左側)に配置する。
sh:orderは、リスト内の要素の相対的な順序を指定するための汎用的な仕組みを
提供する。
sh:orderはSHACLの検証には影響しないが、任意の種類の
主語とともに使用でき、他の仕様ではより強い意味論を持つ場合がある。
プロパティシェイプは、プロパティ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を優先すべきである。
国際化をサポートし、双方向テキストを正しく扱うために、言語タグと、
適切な場合には方向性マーカーを使用することが推奨される。
この節では、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 であるもの。 |
このセクションは非規範的である。
SHACL 1.2概要のSHACL-SHACL付録 [shacl12-overview]では、 他のSHACLシェイプグラフを検証するために使用でき、それによって 各種SHACL仕様への適合を目指すRDFデータに関する多くの構文上の 制約を適用できるSHACLグラフについて説明している。
SHACL-SHACLシェイプグラフは仕様ごとに提供されており、統合された「和集合」としても http://www.w3.org/ns/shacl-shaclで利用できる。これは 概要の付録に示されている。
このセクションでは、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 を加えたものである。
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 について結果は生成されない。
|
このセクションは非規範的である。
ほとんどの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を追加した。課題177を参照。sh:someValueを追加した。課題178を参照。sh:ShapeClassを追加した。課題212を参照。
sh:closedに
新しい値sh:ByTypesを追加した。課題172を参照。
sh:classとsh:datatypeの値としてリストも使用できるようになり、
選択肢の和集合を表せるようになった。課題160を参照。sh:nodeKindの値としてリストも使用できるようになり、
選択肢の和集合を表せるようになった。課題407を参照。
sh:reifierShapeを追加した。課題300を参照。sh:conformanceDisallowsプロパティを
追加した。課題453を参照。rdf:dirLangStringのサポートを追加した。課題737を参照。sh:rootClassを追加した。課題792を参照。sh:subsetOfを追加した。
課題786を参照。
sh:DataGraphとsh:ShapesGraphを追加した。課題169を参照。sh:uniqueValuesForを追加した。課題661を参照。owl:versionIRIを
サポートし、整形式のシェイプグラフの定義を拡張して、
[owl2-syntax]のインポート閉包制約を含めた。
課題830を参照。
sh:Traceとsh:Debugを追加した。3.1.4 シェイプまたは制約の重大度の宣言を参照。
sh:severity、sh:message、およびsh:deactivatedを宣言できるようになった。sh:usedDataGraph、
sh:usedShapesGraph、およびsh:usedConfigurationと、クラスsh:ProcessorConfigurationを追加した。
sh:conformsToShapesGraphを
追加した。sh:TripleTermをsh:nodeKindに追加した。sh:memberShapeを追加した。sh:nameとsh:descriptionの意味を変更した。これらは
シェイプ自体ではなく、シェイプを定義する特性、すなわちプロパティシェイプのプロパティパス、
またはノードシェイプのターゲットとなるリソースの種類に名前を付け、説明するようになった。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:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: