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