Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この文書は、SHACL Shapes Constraint Language の SPARQL 関連の拡張を定義します。 SHACL の Core 部分は、シェイプの基本構文と、SHACL でサポートされる最も一般的な制約コンポーネントを 定義しますが、SPARQL 関連の拡張は、SPARQL によって Core の表現力を拡張する機能を扱います。 特に、この文書は、SPARQL を使用して制約および制約コンポーネントをどのように定義できるか、 ならびに SPARQL ベースのノード式を定義します。
このセクションは、この文書の公開時点における状態を説明します。現在の W3C 公開物の一覧と、この技術報告書の最新版は、 W3C 標準および草案 インデックスで確認できます。
この文書は、Data Shapes ワーキンググループによって、 勧告 トラックを使用する 作業草案として公開されました。
作業草案としての公開は、 W3C およびそのメンバーによる承認を意味するものではありません。
これは草案文書であり、いつでも他の文書によって更新、置換、または廃止される可能性があります。 この文書を、進行中の作業以外のものとして引用することは不適切です。
この文書は、 W3C 特許 ポリシーの下で活動する グループによって作成されました。 W3C は、 グループの成果物に関連して行われた 特許開示の公開一覧 を管理しています。そのページには、特許を開示するための手順も含まれています。 個人が、その個人が 必須クレーム を含むと考える特許について実際の知識を有している場合、その個人は W3C 特許ポリシーのセクション 6 に従って情報を開示しなければなりません。
この文書は、 2025年8月18日版 W3C プロセス文書 によって管理されます。
この仕様は、SHACL 1.2 仕様群の一部です。より詳細な 入門については、SHACL 1.2 概要を参照してください。
仕様は次のとおりです:
作業草案:
ワーキンググループノート草案:
実装者は、SHACL 1.2 テストスイートの テストケースに合格することで、上記仕様への適合レベルを部分的に確認できます。 ただし、テストスイート内のすべてのテストに合格しても、仕様への完全な適合を意味するわけではありません。 それは、実装がテストスイートでテストされた側面に適合していることのみを意味します。
この文書は、SHACL (Shapes Constraint Language) の SPARQL 関連機能を規定します。
この文書全体で、次の用語を使用します。
この文書で定義される SHACL SPARQL Extensions は、SHACL-SPARQL と呼ばれることがあります。
RDF 1.2 Concepts and Abstract Syntax の各部分にリンクされている用語は、そこで定義されているとおりに SHACL-SPARQL で使用されます。 SPARQL 1.2 Query Language の各部分にリンクされている用語は、そこで定義されているとおりに SHACL-SPARQL で使用されます。 SHACL 1.2 Core の各部分にリンクされている用語は、そこで定義されているとおりに SHACL-SPARQL で使用されます。 1 つのリンクで、この文書における特定の用語のすべての出現に定義を与えるのに十分です。
定義はこの文書内で完結しています。すなわち、この文書にある状況を真にする規則が 存在しない場合、その状況は偽です。
SHACL の構文は RDF です。 この文書の例では Turtle [rdf12-turtle] を使用します。 実際には RDF/XML などの他の RDF シリアル化を使用できます。 読者は、トリプルなどの基本的な RDF 概念 [rdf12-concepts] と、 SPARQL [sparql12-query] に精通している必要があります。
この文書内では、次の名前空間プレフィックスバインディングが使用されます:
| プレフィックス | 名前空間 |
|---|---|
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 の RDF グラフを含む色分けされたボックスが現れます。 これらの Turtle 文書の断片は、上記のプレフィックスバインディングを使用します。
SHACL 定義は青いボックスに表示されます:
# このボックスには SPARQL またはテキスト定義が含まれます。
このような灰色のボックスには、シェイプグラフに適用される構文規則が含まれます。
$ マーカーを使用する SPARQL 変数は、実行前に
事前バインドされる、または $PATH の場合は
(3.3 SPARQL ベースの
制約コンポーネントによる検証で説明されるように) SPARQL クエリ内で
置換される外部バインディングを表します。
true は RDF 用語 "true"^^xsd:boolean を表します。
false は RDF 用語 "false"^^xsd:boolean を表します。
非規範的とマークされたセクションに加えて、この仕様のすべての作成ガイドライン、図、例、および注記は 非規範的です。この仕様のそれ以外のすべては規範的です。
この文書におけるキーワード MAY、MUST、および SHOULD は、 ここに示すようにすべて大文字で現れる場合、かつその場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されるように解釈されます。
この文書は、SHACL Core を拡張する SHACL-SPARQL 言語を定義します。 この仕様は、次のものに対する適合基準を説明します:
SHACL Core の適合性セクションにおける 整形式性の議論も参照してください。
SHACL-SPARQL は、SPARQL SELECT クエリに基づく制限を表現するために使用できる 制約コンポーネントをサポートします。
制約コンポーネント IRI: sh:SPARQLConstraintComponent
| プロパティ | 概要 |
|---|---|
sh:sparql |
評価する SPARQL クエリを宣言するSPARQL ベースの制約。 |
SPARQL ベースの制約の構文規則と検証プロセスは、このセクションの残りで定義されます。
このセクションは非規範的です。
次の例は、SPARQL ベースの 制約の構文を示します。
SPARQL クエリは、制約に違反する変数 value のすべてのバインディングについて、
結果集合の解を返します。
その結果集合内の各解について、後で説明するマッピング規則を適用して
検証結果があります。
この例では、各検証結果は、
変数 this のバインディングを sh:focusNode として、
ex:germanLabel を sh:resultPath として、違反している値を
sh:value として持ちます。
次の例は、上記と同様のシナリオを示しますが、プロパティシェイプを使用します。
{
"@graph": [
{
"@id": "ex:LanguageExamplePropertyShape",
"@type": "sh:PropertyShape",
"sh:path": {
"@id": "ex:germanLabel"
},
"sh:sparql": {
"@type": "sh:SPARQLConstraint",
"sh:message": "Values are literals with German language tag.",
"sh:prefixes": {
"@id": "http://example.com/ns#"
},
"sh:select": "\n\t\t\tSELECT $this ?value\n\t\t\tWHERE {\n\t\t\t\t$this $PATH ?value .\n\t\t\t\tFILTER (!isLiteral(?value) || !langMatches(lang(?value), \"de\"))\n\t\t\t}\n\t\t\t"
},
"sh:targetClass": {
"@id": "ex:Country"
}
},
{
"@id": "http://example.com/ns#",
"sh:declare": {
"@id": "_:b1"
}
}
]
}
シェイプは、
プロパティ sh:sparql の値を持つことができ、これらの値は
IRI または
空白ノードです。
これらの値は、SPARQL ベースの制約と呼ばれます。
SPARQL ベースの制約は、
プロパティ sh:select に対して正確に 1 つの値を持ちます。
sh:select の値は、
データ型 xsd:string のリテラルです。
クラス sh:SPARQLConstraint は SHACL 語彙で定義されており、これらの
制約の型として使用できます
(ただし型は要求されません)。
プレフィックス処理規則を使用すると、sh:select の値は
有効な SPARQL 1.2 SELECT クエリです。
sh:select
の値から
導出される SPARQL クエリは、SELECT 句で変数
this を射影します。
次の 2 つのプロパティは、シェイプにおける使用と似ています:
SPARQL ベースの
制約は、プロパティ sh:message の値を持つことができ、
これらは xsd:string、rdf:dirLangString、rdf:langString、または
rdf:HTML のデータ型を持つ
リテラルです。
同じ言語タグを持つ sh:message の値が 2 つ以上あってはならず、
またデータ型 xsd:string の値が複数あってもなりません。
SPARQL ベースの
制約は、プロパティ sh:deactivated に対して高々 1 つの値を持つことができます
かつ、この値は true または false です。
SPARQL ベースの制約は、
プロパティ sh:severity に対して高々 1 つの値を持つことができ、
この値は IRI です。
プロパティシェイプの文脈で使用される
SELECT クエリは、そのシェイプで使用されるパスのプレースホルダーとして、PATH という
特別な変数を使用します。
SPARQL ベースの
制約および
SELECT ベースのバリデーターの SPARQL クエリにおいて、
変数 PATH の唯一の正当な使用は、
トリプルパターンの
述語
位置です。
変数 PATH を他のいずれかの位置で使用するクエリは、
非整形式です。
シェイプ グラフは、同じシェイプグラフから導出される SPARQL クエリを省略するために それらのプレフィックスを使用できるよう、名前空間プレフィックスの宣言を含むことができます。 そのようなプレフィックス宣言の構文は、次の例で示されます。
{
"@id": "http://example.com/ns#",
"@type": "sh:ShapesGraph",
"owl:imports": {
"@id": "http://www.w3.org/ns/shacl#"
},
"sh:declare": [
{
"sh:namespace": {
"@type": "xsd:anyURI",
"@value": "http://example.com/ns#"
},
"sh:prefix": "ex"
},
{
"sh:namespace": "http://schema.org/",
"sh:prefix": "schema"
}
]
}
sh:prefix と sh:namespace の両方の値を持つ
IRIまたは
空白ノードは、
プレフィックス宣言と呼ばれます。
SHACL 語彙には、そのようなプレフィックス宣言の型としてクラス
sh:PrefixDeclaration が含まれますが、
それらに rdf:type トリプルは要求されません。
プレフィックス宣言は、
プロパティ sh:prefix に対して正確に 1 つの値を持ちます。
sh:prefix
の値は、
データ型 xsd:string のリテラルです。
プレフィックス宣言は、
プロパティ sh:namespace に対して正確に 1 つの値を持ちます。
sh:namespace の値は、
データ型 xsd:anyURI または xsd:string のリテラルです。
そのような値の組は、プレフィックスから名前空間への単一のマッピングを指定します。
プロパティ
sh:declare の値は
プレフィックス宣言です。
sh:declare の値の推奨される主語は、それらのプレフィックスを使用する
シェイプを含む名前付きグラフの IRI です。
これらの IRI は、sh:ShapesGraph または owl:Ontology の
インスタンスとして宣言されることがよくありますが、これは要求されません。
プレフィックス宣言は、SPARQL
ベースの制約、
SPARQL ベースの制約コンポーネントの
バリデーター、
および SHACL 拡張によって定義される類似機能によって使用できます。
これらのノードは、プレフィックスマッピングの集合を指定するために
プロパティ sh:prefixes を使用できます。
sh:prefixes プロパティの使用例は、上記の
例にあります。
sh:prefixes の値は、
IRI または 空白ノードです。
SHACL プロセッサーは、
SPARQL ベースの制約または
バリデーターの
SPARQL プロパティパス
sh:prefixes/(^owl:versionIRI?/owl:imports)*/sh:declare
の値である個々のプレフィックスマッピング
すべての和集合として、プレフィックスマッピングの集合を収集します。
^owl:versionIRI? 要素は、
owl:versionIRI
によってインポートされたグラフをサポートし、さらなる owl:imports をたどる前に
バージョン IRI からシェイプグラフ IRI へ移動します。
そのようなプレフィックス宣言の集合に、sh:prefix の同じ
値に対して
複数の異なる名前空間が含まれている場合、
シェイプグラフは
非整形式です。
(SHACL プロセッサーは、到達されないプレフィックス宣言を無視してもよいことに注意してください)。
SPARQL クエリに sh:prefixes の値がない場合、
システムは、sh:ShapesGraph のSHACL
インスタンスにおける sh:declare の値である
プレフィックス宣言を
シェイプ
グラフから使用します。
SHACL プロセッサーは、すべてのプレフィックスマッピングについて
PREFIX 宣言を先頭に付加することで、
sh:select の値 (および sh:ask などの類似プロパティ) を
SPARQL に変換します。
sh:prefix の各値は PNAME_NS になり、sh:namespace の各値は
PREFIX 宣言内の IRIREF になります。
上記の例のシェイプグラフでは、SHACL-SPARQL プロセッサーは
PREFIX ex: <http://example.com/ns#> のような行を生成します。
生成されたクエリ文字列を有効な SPARQL 1.2 クエリとして解析できない場合、
SHACL-SPARQL プロセッサーは失敗を生成しなければなりません。
この文書の残りでは、簡潔にするため sh:prefixes 文が省略されていることがあります。
このセクションでは、sh:SPARQLConstraintComponent の
バリデーターについて説明します。
このバリデーターは、可能な 1 つの実装戦略を説明しているだけであり、
SHACL プロセッサーは結果が同等である限り、別の方法を選択してもよいことに注意してください。
$sparql を sh:sparql の値とします。
SPARQL ベースの制約が
プロパティ sh:deactivated の値として true を持つ場合、
検証結果はありません。
それ以外の場合、2.3.1 SPARQL
制約における
事前バインド変数 $thisで説明されるように、変数 this を
事前バインドして、
SPARQL ベースの制約
$sparql によって指定された SPARQL クエリを実行します。
シェイプが
プロパティ
シェイプである場合は、実行前に、
述語
位置のトリプルパターンに現れる
変数 PATH を、
プロパティシェイプの
sh:path によって指定された
SHACL
プロパティパスの
有効な SPARQL 表層構文文字列で
置換します。
変数 failure の
バインディングとして true を持たない各
解について、1 つの
検証結果があります。
これらの検証結果は、
2.3.2
解バインディングから
結果プロパティへのマッピングで説明されるプロパティ値を持たなければなりません。
$sparql が sh:severity の値を持つ場合、
検証結果は
その値を (唯一の) sh:resultSeverity として持たなければなりません。
失敗は、
解の 1 つが
failure のバインディングとして true を持つ場合、かつその場合に限り、
生成されなければなりません。
SPARQL ベースの制約の
SPARQL クエリ、および
SPARQL ベースの制約コンポーネントの
バリデーターが
処理されるとき、
SHACL-SPARQL プロセッサーは、現在の
フォーカスノードを
変数 $this の値として
事前バインドします。
検証結果ノードの プロパティ値は、 結果解と制約自体の値の組み合わせを通じて、次の規則によって導出されます。 規則は上から下へ実行されることを意図しており、最初にバインドされた値が使用されます。
| プロパティ | 生成規則 |
|---|---|
sh:focusNode |
|
sh:resultPath |
|
sh:value |
|
sh:resultMessage |
これらのメッセージリテラルには、
{?varName} または {$varName} によって
任意の SELECT 結果変数の名前を含めることができます。
制約が SPARQL ベースの
制約コンポーネントに基づく場合、そのコンポーネントの
パラメーター名も使用できます。
これらの {?varName} および {$varName} ブロックは、
当該変数の値の適切な文字列表現で置き換えられるべきです。
|
sh:sourceConstraint |
|
SPARQL ベースの制約は多くの柔軟性を提供しますが、 人によっては理解しにくかったり、反復につながったりすることがあります。 このセクションでは、SPARQL の複雑さを抽象化し、 Core 制約コンポーネントに似た 高レベルで再利用可能なコンポーネントを宣言する方法として、SPARQL ベースの制約 コンポーネントを導入します。 そのような制約コンポーネントは SHACL RDF 語彙を使用して宣言できるため、共有および再利用できます。
このセクションは非規範的です。
次の例は、SHACL-SPARQL 言語を使用して、SPARQL を新しい制約コンポーネントの指定に
どのように使用できるかを示します。
この例では、各値ノードが指定された正規表現に
一致することを検証するために、
SPARQL ASK クエリを使用して
sh:pattern と
sh:flagsを実装します。
これは例示的な実装にすぎず、規範的なものと見なすべきではないことに注意してください。
{
"@graph": [
{
"@id": "ex:hasPattern",
"@type": "sh:SPARQLAskValidator",
"sh:ask": "\n\t\tASK { \n\t\t\tFILTER (!isBlank($value) && \n\t\t\t\tIF(bound($flags), regex(str($value), $pattern, $flags), regex(str($value), $pattern)))\n\t\t}",
"sh:message": "Value does not match pattern {$pattern}"
},
{
"@id": "sh:PatternConstraintComponent",
"@type": "sh:ConstraintComponent",
"sh:parameter": [
{
"sh:path": {
"@id": "sh:pattern"
}
},
{
"sh:optional": {
"@type": "xsd:boolean",
"@value": "true"
},
"sh:path": {
"@id": "sh:flags"
}
}
],
"sh:validator": {
"@id": "ex:hasPattern"
}
}
]
}
制約コンポーネントは、シェイプ内の
制約を
どのように識別し検証するかについて、検証エンジンに指示を提供します。
一般に、シェイプ
S がプロパティ p の値を持ち、
p をパラメーターとして指定する
制約コンポーネント
C があり、S が C のすべての
必須
パラメーターの値を持つ場合、
それらのパラメーター値の集合 (任意パラメーターを含む) は
制約を宣言し、
検証エンジンはこの制約の検証を実行するために、C から適切な
バリデーターを使用します。
上の例では、sh:PatternConstraintComponent は必須パラメーター
sh:pattern、
任意パラメーター sh:flags、
およびノードシェイプまたは
プロパティシェイプのいずれに対しても
検証を実行するために使用できる
バリデーターを
宣言しています。
SPARQL ベースの制約コンポーネントは、
IRIであり、
シェイプグラフ内で
sh:ConstraintComponent の
SHACL 型を
持ちます。
この文書で新しい制約コンポーネントを宣言する 仕組みは、SPARQL に基づくものに限定されています。 ただし、パラメーターとバリデーターを宣言する一般的な構文は、JavaScript などの 他の拡張言語にも対応できるように設計されています。
制約
コンポーネントの
パラメーターは、
プロパティ sh:parameter を介して宣言されます。
sh:parameter の値は、パラメーター宣言と呼ばれます。
クラス sh:Parameter は、パラメーター宣言の
型として使用できますが、そのような
トリプルは要求されません。
各
パラメーター宣言は、プロパティ
sh:path に対して正確に 1 つの値を持ちます。
パラメーター宣言では、
sh:path の値は
IRIです。
IRI の
ローカル名は、IRIの末尾にある最長の
NCNAMEとして定義されます。ただし、
IRI内の最初のコロンの直後にあるものは除きます。
パラメーター宣言の
パラメーター名は、sh:path の
値の
ローカル名として定義されます。
パラメーターから SPARQL 変数への正しいマッピングを可能にするため、次の構文規則が適用されます:
すべての
パラメーター名は有効な
SPARQL VARNAMEです。
パラメーター名は、次のいずれであってはなりません:
this, path, PATH, value。
2 つ以上の
パラメーター宣言が同じ
パラメーター名を使用する制約コンポーネントは、
非整形式です。
sh:optional の値は、
データ型 xsd:boolean のリテラルでなければなりません。
パラメーター宣言は、プロパティ
sh:optional に対して高々 1 つの値を持つことができます。
true に設定された場合、そのパラメーター宣言は
任意パラメーターを宣言します。
すべての
制約コンポーネントは、
少なくとも 1 つの非任意パラメーターを持ちます。
クラス sh:Parameter は、sh:PropertyShape の
SHACL
サブクラスとして定義され、
プロパティシェイプに適用可能なすべてのプロパティは、パラメーターにも使用できます。
これには sh:name や sh:description などの記述的プロパティだけでなく、
sh:class などの制約パラメーターも含まれます。
パラメーターに対して
宣言された制約に適合
しないシェイプは、非整形式です。
一部の実装は、無効なパラメーター値を持つ制約コンポーネントの実行を防止するために、
これらの制約パラメーターを使用してもよいです。
プロパティ sh:labelTemplate は、任意の
制約コンポーネントで、
制約を人間に対して
どのように描画できるかを示唆するために使用できます。
sh:labelTemplate
の値は文字列 (言語タグ付きの場合があります) です。これらは
ラベルテンプレートと呼ばれます。
このセクションの残りは非規範的です。
ラベルテンプレートには、制約コンポーネントに対して
宣言されたパラメーターの名前を、
{?varName} または {$varName} という構文を使用して含めることができます。
ここで varName はパラメーター名です。
表示時には、これらの {?varName} および {$varName} ブロックは
実際のパラメーター値で置き換えられるべきです。
同じ主語に対して複数のラベルテンプレートが存在してもよいですが、同じ言語タグを
持つべきではなく、データ型 xsd:string のテンプレートが 2 つ以上あってはなりません。
サポートされる各シェイプ型 (すなわち、 プロパティシェイプまたは ノードシェイプ) ごとに、 制約コンポーネントは適切な バリデーターを宣言します。 与えられた制約について、バリデーターは次の規則を順に使用して制約コンポーネントから選択されます:
sh:nodeValidator の値の 1 つを使用します。sh:propertyValidator の値の 1 つを使用します。sh:validator の値の 1 つを使用します。
適切なバリデーターが見つからない場合、SHACL-SPARQL プロセッサーはその制約を無視します。
SHACL-SPARQL には、sh:nodeValidator および sh:propertyValidator 用の
SPARQL
SELECT、または sh:validator 用の
SPARQL ASK クエリに基づく、2 種類のバリデーターが含まれます。
sh:SPARQLSelectValidator の
SHACL
型を持つ
バリデーターは、
SELECT ベースのバリデーターと呼ばれます。
sh:nodeValidator
の値は、SELECT ベースのバリデーターでなければなりません。
sh:propertyValidator
の値は、SELECT ベースのバリデーターでなければなりません。
SELECT ベースのバリデーターは、
プロパティ sh:select に対して正確に 1 つの
値を
持ちます。
sh:select の値は、前述のプレフィックス処理規則を使用する有効な SPARQL SELECT
クエリです。
sh:select の値から導出される SPARQL クエリは、その SELECT 句で
変数 this を射影します。
このセクションの残りは非規範的です。
次の例は、SPARQL SELECT クエリに基づく制約コンポーネントの宣言を示します。
これは、2.1 SPARQL
ベースの制約の例からの例を
一般化した変形です。
その SPARQL クエリには、特定のプロパティ ex:germanLabel と言語タグ
de という 2 つの定数が含まれていました。
制約コンポーネントにより、そのようなシナリオを一般化し、定数を
事前バインドされた
パラメーターにすることが可能になります。
これにより、新しい SPARQL を書くことなく、クエリロジックを複数の場所で再利用できます。
{
"@id": "ex:LanguageConstraintComponentUsingSELECT",
"@type": "sh:ConstraintComponent",
"rdfs:label": "Language constraint component",
"sh:labelTemplate": "Values are literals with language \"{$lang}\"",
"sh:parameter": {
"sh:datatype": {
"@id": "xsd:string"
},
"sh:description": "The language tag, e.g. \"de\".",
"sh:minLength": {
"@type": "xsd:integer",
"@value": "2"
},
"sh:name": "language",
"sh:path": {
"@id": "ex:lang"
}
},
"sh:propertyValidator": {
"@type": "sh:SPARQLSelectValidator",
"sh:message": "Values are literals with language \"{?lang}\"",
"sh:select": "\n\t\t\tSELECT DISTINCT $this ?value\n\t\t\tWHERE {\n\t\t\t\t$this $PATH ?value .\n\t\t\t\tFILTER (!isLiteral(?value) || !langMatches(lang(?value), $lang))\n\t\t\t}\n\t\t\t"
}
}
制約コンポーネントが (シェイプグラフ内で) 宣言されると、次の例に示すように、そのパラメーターを使用できます。
{
"@id": "ex:LanguageExampleShape",
"@type": "sh:NodeShape",
"sh:property": [
{
"ex:lang": "de",
"sh:path": {
"@id": "ex:germanLabel"
}
},
{
"ex:lang": "en",
"sh:path": {
"@id": "ex:englishLabel"
}
}
],
"sh:targetClass": {
"@id": "ex:Country"
}
}
上記の例のシェイプは、ex:germanLabel のすべての値が言語タグ
de を持ち、
ex:englishLabel のすべての値が言語として en を持つという条件を
指定しています。
これらの詳細は、制約コンポーネントによって要求される ex:lang パラメーターの
値を持つ 2 つのプロパティシェイプを介して指定されます。
多くの制約コンポーネントは、すべての 値ノードが何らかの 真偽条件に対して個別にテストされる形式です。 これらに SELECT クエリを書くのは、特に制約コンポーネントが プロパティシェイプと ノード シェイプの両方で使用できる場合、煩雑になります。 SHACL-SPARQL は、ASK クエリに基づくバリデーターのための、よりコンパクトな代替構文を提供します。
sh:SPARQLAskValidator の
SHACL
型を持つ
バリデーターは、
ASK
ベースのバリデーターと呼ばれます。
sh:validator の値は、
ASK ベースの
バリデーターでなければなりません。
ASK ベースのバリデーターは、プロパティ
sh:ask に対して正確に 1 つの値を持ちます。
sh:ask の値は、
データ型 xsd:string のリテラルでなければなりません。
sh:ask の値は、
前述のプレフィックス処理規則を使用する有効な
SPARQL ASK クエリでなければなりません。
このセクションの残りは非規範的です。
ASK クエリは、指定された値ノード
(事前バインドされた変数 value によって表される) が制約に適合する場合、かつその場合に限り、
true を返します。
次の例は、ASK クエリを使用して制約コンポーネントを宣言します。
{
"@graph": [
{
"@id": "ex:hasLang",
"@type": "sh:SPARQLAskValidator",
"sh:ask": "\n\t\tASK {\n\t\t\tFILTER (isLiteral($value) && langMatches(lang($value), $lang))\n\t\t}\n\t\t",
"sh:message": "Values are literals with language \"{$lang}\""
},
{
"@id": "ex:LanguageConstraintComponentUsingASK",
"@type": "sh:ConstraintComponent",
"rdfs:label": "Language constraint component",
"sh:labelTemplate": "Values are literals with language \"{$lang}\"",
"sh:parameter": {
"sh:datatype": {
"@id": "xsd:string"
},
"sh:description": "The language tag, e.g. \"de\".",
"sh:minLength": {
"@type": "xsd:integer",
"@value": "2"
},
"sh:name": "language",
"sh:path": {
"@id": "ex:lang"
}
},
"sh:validator": {
"@id": "ex:hasLang"
}
}
]
}
ASK クエリによって実装される検証条件は、対応する SELECT のものとは「逆方向」であることに
注意してください:
ASK クエリは、制約に適合する値ノードに対して true を返しますが、
SELECT クエリは適合しない値ノードを返します。
このセクションでは、SPARQL ベースの制約コンポーネントの バリデーターを定義します。 このバリデーターは、可能な 1 つの実装戦略を説明しているだけであり、 SHACL プロセッサーは結果が同等である限り、別の方法を選択してもよいことに注意してください。
最初のステップとして、バリデーターは、 3.2.3 バリデーターで概説された規則に基づいて選択されなければなりません。 次に、SPARQL クエリの解の集合を生成する、次の規則が適用されます:
value に
v を持つ状態で false を返す各値
ノード v について、
($this, フォーカスノード) および
($value, v) のバインディングからなる 1 つの
解を作成します。
QS をこれらの解のリストとします。
PATH を、
プロパティシェイプの
sh:path によって指定された
SHACL
プロパティパスの
有効な SPARQL 表層構文文字列で
置換します。
QS を、SPARQL クエリを実行することによって生成された
解とします。
上記の SPARQL クエリ実行は、2.3.1
SPARQL 制約における事前バインド変数 $thisで説明されるように、
変数 this を事前バインド
しなければなりません。
さらに、制約内の
制約コンポーネントの
パラメーターの各
値は、
その名前としてパラメーター名を持つ変数として
事前バインドされなければなりません。
検証結果の生成規則は、
上で生成された QS 解を使用して、
SPARQL ベースの制約のものと同一です。
このセクションは、SPARQL ベースの制約または 制約コンポーネントを使用して 検証結果を生成するための 一般的な仕組みを拡張します。
この機能をサポートする実装は、SPARQL ベースの
制約または
制約コンポーネントの
SELECT クエリによって生成される各解について作成される
検証
結果ノードに、注釈プロパティを注入できます。
そのような注釈プロパティは、sh:select または sh:ask
トリプルの
主語における
sh:resultAnnotation の値を介して宣言される必要があります。
sh:resultAnnotation の
値は
結果注釈と呼ばれ、
IRIまたは
空白
ノードです。
結果注釈は次のプロパティを持ちます:
| プロパティ | 概要と構文規則 |
|---|---|
sh:annotationProperty |
設定されるべきプロパティ。
各結果注釈は、プロパティ
sh:annotationProperty に対して正確に 1 つの
値を持ち、
この値は IRIです。
|
sh:annotationVarName |
注釈値を取得する SPARQL 変数の名前。
各
結果注釈は、プロパティ
sh:annotationVarName に対して高々 1 つの
値を持ち、
この値は
データ型
xsd:string を持つ
リテラルです。
|
sh:annotationValue |
既定値として使用されるべき定数の RDF 用語。 |
SELECT 結果集合の各解について、注釈をサポートする SHACL プロセッサーは、
宣言された結果注釈をたどります。
結果注釈から SPARQL 変数へのマッピングは、次の規則を使用します:
変数名を決定できた場合、SHACL プロセッサーは、指定された変数の
バインディングを、
sh:annotationProperty を使用して指定されたプロパティの値として、現在の
解について生成されている
検証
結果にコピーします。
その変数が結果集合の解内に
バインディングを持たない場合、
sh:annotationValue の値が存在すれば使用されます。
結果注釈の使用を示す例を次に示します。
ex:AnnotationExample
a sh:NodeShape ;
sh:targetNode ex:ExampleResource ;
sh:sparql [ # _:b1
sh:resultAnnotation [
sh:annotationProperty ex:time ;
sh:annotationVarName "time" ;
] ;
sh:select """
SELECT $this ?message ?time
WHERE {
BIND (CONCAT("The ", "message.") AS ?message) .
BIND (NOW() AS ?time) .
}
""" ;
] .
検証により、次の検証報告が生成されます:
[ a sh:ValidationReport ;
sh:conforms false ;
sh:result [
a sh:ValidationResult ;
sh:focusNode ex:ExampleResource ;
sh:resultMessage "The message." ;
sh:resultSeverity sh:Violation ;
sh:sourceConstraint _:b1 ;
sh:sourceConstraintComponent sh:SPARQLConstraintComponent ;
sh:sourceShape ex:AnnotationExample ;
ex:time "2015-03-27T10:58:00"^^xsd:dateTime ; # Example
]
] .
このセクションでは、SPARQL に基づくノード式関数を導入します。
sh:select の値を持つ
ノード
式は、関数名
sh:SelectExpression を持つ
select
式と呼ばれます。
RDF グラフ内のノードは、
それが空白ノードであり、
述語
sh:select
に対して正確に 1 つの
値を持ち、
この値が
データ型
xsd:string を持つ
リテラルである場合、
整形式の
select 式です。
整形式の
select 式は、プロパティ
sh:prefixes に対して高々 1 つの
値を持つことができ、
この値は IRIまたは
空白ノードのみです。
プレフィックス処理
規則を使用すると、sh:select の値は有効な SPARQL 1.2 SELECT クエリです。
sh:select の値から導出される
SPARQL クエリは、SELECT 句で正確に 1 つの変数を
射影します。
select 式の
出力
ノードは、クエリが
フォーカス
グラフに対して評価されたときに、SELECT 句から射影される (唯一の)
変数のバインディングだけからなるリスト resultNodes です。
focusNode の値は、SPARQL 変数 this の値として
事前バインドされます。
各スコープ変数の値は、同じ名前と値を持つ SPARQL 変数として
事前バインドされます。
スコープ変数の 1 つが this と呼ばれる場合、
失敗が
生成されます。
evalExpr(expr, focusGraph, focusNode, scope) -> resultNodes
このセクションの残りは非規範的です。
これは、プロパティ "full name" のプロパティシェイプの値を、ex:firstName、スペース、
および ex:lastName の連結として計算する、
select 式の使用例です。
{
"@graph": [
{
"@id": "ex:Person-fullName",
"@type": "sh:PropertyShape",
"sh:datatype": {
"@id": "xsd:string"
},
"sh:name": "full name",
"sh:path": {
"@id": "ex:fullName"
},
"sh:values": {
"sh:prefixes": {
"@id": "http://example.com/ns"
},
"sh:select": "\n\t\t\tSELECT ?fullName\n\t\t\tWHERE {\n\t\t\t\t$this ex:firstName ?firstName .\n\t\t\t\t$this ex:lastName ?lastName .\n\t\t\t\tBIND (CONCAT(?firstName, \" \", ?lastName) AS ?fullName) .\n\t\t\t}\n\t\t"
}
},
{
"@id": "http://example.com/ns",
"@type": "owl:Ontology",
"sh:declare": {
"sh:namespace": {
"@type": "xsd:anyURI",
"@value": "http://example.com/ns#"
},
"sh:prefix": "ex"
}
}
]
}
この例は、解析前にクエリの先頭へ PREFIX 宣言を挿入するための
sh:prefixes の使用も示しています。
クエリは、現在のフォーカスノードが
変数 this に事前バインドされた状態で実行されることに注意してください。
これは、ex:age が 18 未満である
ex:Person のすべてのインスタンスからなるシェイプのターゲットノードを計算する、
select 式の使用例です。
{
"@id": "ex:ChildShape",
"@type": "sh:NodeShape",
"rdfs:comment": "This shape applies to all persons under 18 years of age.",
"rdfs:label": "Child shape",
"sh:targetNode": {
"sh:select": "\n\t\t\tPREFIX ex: <http://example.com/ns#>\n\t\t\tSELECT ?person\n\t\t\tWHERE {\n\t\t\t\t?person a/rdfs:subClassOf* ex:Person .\n\t\t\t\t?person ex:age ?age .\n\t\t\t\tFILTER (?age < 18) .\n\t\t\t}\n\t\t"
}
}
次のデータグラフからは、ex:Benjamin だけがターゲットノードです。
{
"@graph": [
{
"@id": "ex:Benjamin",
"@type": "ex:Person",
"ex:age": {
"@type": "xsd:integer",
"@value": "17"
}
},
{
"@id": "ex:Bernd",
"@type": "ex:Person"
},
{
"@id": "ex:Klaus",
"@type": "ex:Person",
"ex:age": {
"@type": "xsd:integer",
"@value": "48"
}
}
]
}
sh:sparqlExpr の値を持つ
ノード
式は、関数名
sh:SPARQLExprExpression を持つ
SPARQL expr
式と呼ばれます。
RDF グラフ内のノードは、それが
空白ノードであり、
述語
sh:sparqlExpr に対して正確に 1 つの
値を持ち、
その値が
データ型
xsd:string を持つ
リテラルである場合、
整形式の
SPARQL expr 式です。
整形式の
SPARQL expr 式は、プロパティ
sh:prefixes に対して高々 1 つの
値を持つことができ、
この値は IRIまたは
空白ノードです。
$EXPR$ を
sh:eval の値とし、
$PREFIXES$ を sh:prefixes の値を使用する
プレフィックス処理規則から得られる SPARQL プレフィックスブロックとします。
このとき select は、$EXPR$ と
$PREFIXES$ が次に挿入された文字列として定義されます
$PREFIXES$ SELECT ($EXPR$ AS ?result) WHERE {}
select は有効な SPARQL 1.2 SELECT
クエリです。
SPARQL expr 式の
出力
ノードは、クエリが
フォーカスグラフに対して評価されたときに、
上で定義された select クエリの
SELECT 句から射影される (唯一の) 変数のバインディングだけからなる
リスト resultNodes です。
focusNode の値は、SPARQL 変数 this の値として
事前バインドされます。
各スコープ変数の値は、同じ名前と値を持つ SPARQL 変数として
事前バインドされます。
スコープ変数の 1 つが this と呼ばれる場合、
失敗が
生成されます。
evalExpr(expr, focusGraph, focusNode, scope) -> resultNodes
このセクションの残りは非規範的です。
これは、フォーカスノードの IRI の長さとして、プロパティ "uri length" の プロパティシェイプの値を計算する、 SPARQL expr 式の 使用例です。
{
"@id": "ex:Resource-uriLength",
"@type": "sh:PropertyShape",
"sh:datatype": {
"@id": "xsd:integer"
},
"sh:name": "uri length",
"sh:path": {
"@id": "ex:uriLength"
},
"sh:values": {
"sh:sparqlExpr": "STRLEN(STR($this))"
}
}
URI http://example.com/ns#Test を持つフォーカスノードに適用された場合、結果は
26 になります。
これは次の変形と同じ結果を生成します:
{
"@id": "ex:Resource-uriLength",
"@type": "sh:PropertyShape",
"sh:datatype": {
"@id": "xsd:integer"
},
"sh:name": "uri length",
"sh:path": {
"@id": "ex:uriLength"
},
"sh:values": {
"sh:select": "\n\t\t\tSELECT (STRLEN(STR($this)) AS ?result)\n\t\t\tWHERE {\n\t\t\t}\n\t\t"
}
}
SHACL-SPARQL の一部の機能は、このセクションで定義される変数の事前バインディングという概念に依存します。
この機能は「at risk」であり、この領域で現在進行中の RDF および SPARQL 1.2 の作業と 整合させるために変更される可能性があります (削除されるわけではありません)。 元々は Issue 647 として議論されました。
SHACL で使用される事前バインディングの定義は、SPARQL クエリに次の制限を要求します。
SHACL-SPARQL プロセッサーは、これらの「MUST」制限のいずれかに違反する
SHACL-SPARQL クエリ (sh:select および sh:ask を介するもの) を含む
シェイプグラフを処理している場合、
失敗を報告しなければなりません。
潜在的に事前バインドされる変数という用語には、変数 this、
value (ASK クエリの場合)、
およびそのクエリを使用する制約
コンポーネントのパラメーターを表す任意の変数が
含まれることに注意してください。
MINUS 句を含んではなりませんVALUES 句を含んではなりませんAS ?var を使用してはなりません
さらに、SPARQL クエリは連合クエリ (SERVICE) を含むべきではありません。
SERVICE を許可しない実装は、上記のとおり失敗を
報告しなければなりません。
ただし、一部の SPARQL 実装は SERVICE キーワードを特定の
(通常はローカルな) 操作の構文として使用していることが認められているため、
このキーワードは一般には禁止されていません。
解マッピング μ について、Table(μ) を
μ から形成される多重集合として定義します。
Table(μ) = { μ }
Card[μ] = 1
Values Insertion 関数 Replace(X, μ) を、
X における
Basic Graph
Pattern、
Property Path
Expression、
Graph(Var, pattern)
の各出現 Y を join(Y, Table(μ)) で置き換えるものとして定義します。
事前バインドされた変数 μ を伴う
SPARQL Query
Q = (E, DS, QF) の評価は、SPARQL クエリ
Q' = (Replace(E, μ), DS, QF) の評価として定義されます。
このセクションは、SHACL のすべての規範的な構文規則を列挙します。 このセクションは、この仕様の他の部分から自動生成されており、 規則の文脈が不明な場合に散文へ戻るハイパーリンクが提供されています。 シェイプグラフ内でこれらの規則に 違反するノードは、非整形式です。
| 構文規則 ID | 構文規則テキスト |
|---|---|
| sparql-nodeKind | シェイプは、プロパティ sh:sparql の値を持つことができ、これらの値は
IRI または
空白
ノードです。
|
| SPARQLConstraint-select-count | SPARQL ベースの制約は、
プロパティ sh:select に対して正確に 1 つの値を持ちます |
| SPARQLConstraint-select-datatype | sh:select の値は、データ型 xsd:string のリテラルです。
|
| select-query-valid | プレフィックス処理規則を使用すると、sh:select の値は
有効な SPARQL 1.2 SELECT クエリです。 |
| select-query-this | sh:select の値から導出される SPARQL クエリは、SELECT 句で変数
this を射影します。
|
| SPARQLConstraint-message-datatype | SPARQL ベースの制約は、
プロパティ sh:message の値を持つことができ、
これらは xsd:string、rdf:dirLangString、rdf:langString、または
rdf:HTML のデータ型を
持つリテラルです。
同じ言語タグを持つ sh:message の値が 2 つ以上あってはならず、
またデータ型 xsd:string の値が複数あってもなりません。
|
| SPARQLConstraint-deactivated-maxCount | SPARQL ベースの制約は、プロパティ
sh:deactivated に対して高々 1 つの値を持つことができます
|
| SPARQLConstraint-severity | SPARQL ベースの制約は、プロパティ
sh:severity に対して高々 1 つの値を持つことができ、
この値は IRI です。
|
| PATH-position | SPARQL ベースの制約および
SELECT ベースのバリデーターの SPARQL クエリにおける
変数 PATH の唯一の正当な使用は、
トリプルパターンの
述語
位置です。
|
| prefix-count | プレフィックス宣言は、プロパティ
sh:prefix に対して正確に 1 つの値を持ちます
|
| prefix-datatype | sh:prefix の値は、データ型 xsd:string のリテラルです。
|
| namespace-count | プレフィックス宣言は、プロパティ
sh:namespace に対して正確に 1 つの値を持ちます。
|
| namespace-datatype | sh:namespace の値は、データ型 xsd:anyURI または
xsd:string のリテラルです。
|
| declare-nodeKind | プロパティ sh:declare の値は、
プレフィックス宣言です
|
| prefixes-nodeKind | sh:prefixes の値は、IRI または 空白ノードのいずれかです。 |
| prefixes-duplicates | SHACL プロセッサーは、
SPARQL ベースの制約または
バリデーターの
SPARQL
プロパティパス
sh:prefixes/(^owl:versionIRI?/owl:imports)*/sh:declare
の値である個々のプレフィックスマッピング
すべての和集合として、プレフィックスマッピングの集合を収集します。
^owl:versionIRI? 要素は、
owl:versionIRI
によってインポートされたグラフをサポートし、さらなる owl:imports をたどる前に
バージョン IRI からシェイプグラフ IRI へ移動します。
そのようなプレフィックス宣言の集合に、sh:prefix の同じ
値に対して
複数の異なる名前空間が含まれている場合、
シェイプ
グラフは 非整形式です。
|
| ConstraintComponent | SPARQL ベースの制約コンポーネントは、
IRIであり、
シェイプグラフ内で
sh:ConstraintComponent の
SHACL 型を
持ちます。
|
| Parameter-predicate-count | 各パラメーター宣言は、プロパティ
sh:path に対して正確に 1 つの値を持ちます
|
| Parameter | パラメーター宣言では、sh:path の
値は
IRIです。
|
| parameter-name-VARNAME | すべてのパラメーター名は、有効な SPARQL VARNAMEです。 |
| parameter-name-not-in | パラメーター名は、次のいずれであってはなりません:
this, path, PATH, value。
|
| parameter-name-unique | 2 つ以上のパラメーター宣言が同じ パラメーター名を使用する制約コンポーネントは、 非整形式です。 |
| optional-datatype | sh:optional の値は、データ型 xsd:boolean のリテラルでなければなりません。 |
| optional-maxCount | パラメーター宣言は、プロパティ
sh:optional に対して高々 1 つの値を持つことができます。
|
| ConstraintComponent-parameter | すべての制約コンポーネントは、 少なくとも 1 つの非任意パラメーターを持ちます。 |
| Parameter-conformance | パラメーターに対して宣言された制約に適合しないシェイプは、 非整形式です。 |
| labelTemplate-datatype | sh:labelTemplate の値は文字列です (言語タグ付きの場合があります) |
| nodeValidator-class | sh:nodeValidator の値は、SELECT ベースの
バリデーターでなければなりません。 |
| propertyValidator-class | sh:propertyValidator の値は、SELECT ベースの
バリデーターでなければなりません。 |
| SPARQLSelectValidator-select-count | SELECT ベースのバリデーターは、
プロパティ sh:select に対して正確に 1 つの
値を持ちます。
|
| validator-class | sh:validator の値は、ASK ベースの
バリデーターでなければなりません。 |
| ask-count | ASK ベースのバリデーターは、プロパティ
sh:ask に対して正確に 1 つの値を持ちます
|
| ask-datatype | sh:ask の値は、データ型 xsd:string のリテラルでなければなりません。 |
| ask-sparql | sh:ask の値は、前述のプレフィックス処理規則を使用する有効な SPARQL ASK
クエリでなければなりません。 |
| resultAnnotation-nodeKind | sh:resultAnnotation の値は
結果注釈と呼ばれ、
IRIまたは
空白ノードです
|
| annotationProperty | 各結果注釈は、プロパティ
sh:annotationProperty に対して正確に 1 つの
値を持ち、
この値は IRIです。
|
| annotationVarName | 各結果注釈は、プロパティ
sh:annotationVarName に対して高々 1 つの
値を持ち、
この値は
データ型
xsd:string を持つ
リテラルです。
|
| SelectExpression-syntax | RDF グラフ内のノードは、それが空白ノードであり、
述語
sh:select
に対して正確に 1 つの値を持ち、
この値が
データ型
xsd:string を持つ
リテラルである場合、
整形式の
select 式です。
|
| SelectExpression-syntax-prefixes | 整形式の
select 式は、プロパティ
sh:prefixes に対して高々 1 つの
値を持つことができ、
この値は IRIまたは
空白ノードのみです。
|
| SelectExpression-query-valid | プレフィックス処理規則を使用すると、sh:select の値は
有効な SPARQL 1.2 SELECT クエリです。 |
| SelectExpression-query-output-nodes | sh:select の値から導出される SPARQL クエリは、SELECT 句で正確に 1 つの変数を
射影します。
|
| SPARQLExprExpression-syntax-eval | RDF グラフ内のノードは、それが
空白ノードであり、
述語
sh:sparqlExpr に対して正確に 1 つの
値を持ち、
その値が
データ型
xsd:string を持つ
リテラルである場合、
整形式の
SPARQL expr 式です。
|
| SPARQLExprExpression-syntax-prefixes | 整形式の
SPARQL expr 式は、プロパティ
sh:prefixes に対して高々 1 つの
値を持つことができ、
この値は IRIまたは
空白ノードです。
|
| SPARQLExprExpression-template | $EXPR$ を sh:eval の
値とし、
$PREFIXES$ を sh:prefixes の値を使用する
プレフィックス処理規則から得られる SPARQL プレフィックスブロックとします。
このとき select は、$EXPR$ と
$PREFIXES$ が次に挿入された文字列として定義されます
$PREFIXES$ SELECT ($EXPR$ AS ?result) WHERE {} |
| SPARQLExprExpression-query-valid | select は有効な SPARQL 1.2 SELECT クエリです。 |
| pre-binding-limitations |
SHACL で使用される事前バインディングの定義は、SPARQL クエリに次の制限を要求します。
SHACL-SPARQL プロセッサーは、これらの「MUST」制限のいずれかに違反する
SHACL-SPARQL クエリ (
さらに、SPARQL クエリは連合クエリ ( |
このセクションは非規範的です。
この付録では、[shacl12-core] からの 制約 コンポーネントおよび ターゲットのセマンティクスの 非規範的な代替定義に、SPARQL 1.2 の一部を使用します。 これらは一部の実装者に役立つ場合がありますが、SHACL Core 言語の実装に SPARQL は要求されません。
$ マーカーを使用する SPARQL 変数は、実行前に
事前バインドされる、または $PATH の場合は
(3.3 SPARQL ベースの
制約コンポーネントによる検証で説明されるように) SPARQL クエリ内で
置換される外部バインディングを表します。
次のクエリは、SPARQL における
クラスターゲットの潜在的な定義を表します。
変数 targetClass は、sh:targetClass の指定された値に
事前バインドされます。
解からの変数
this のすべての
バインディングは、フォーカスノードになります。
SELECT DISTINCT ?this # ?this is the focus node
WHERE {
?this rdf:type/rdfs:subClassOf* $targetClass .
}
次のクエリは、SPARQL における
subjects-of ターゲットの
潜在的な定義を表します。
変数 targetSubjectsOf は、sh:targetSubjectsOf の指定された値に
事前バインドされます。
解からの変数
this のすべての
バインディングは、フォーカスノードになります。
SELECT DISTINCT ?this # ?this is the focus node
WHERE {
?this $targetSubjectsOf ?any .
}
次のクエリは、SPARQL における
objects-of ターゲットの
潜在的な定義を表します。
変数 targetObjectsOf は、sh:targetObjectsOf の指定された値に
事前バインドされます。
解からの変数
this のすべての
バインディングは、フォーカスノードになります。
SELECT DISTINCT ?this # ?this is the focus node
WHERE {
?any $targetObjectsOf ?this .
}
次のクエリは、sh:class の 潜在的な SPARQL ベースのバリデーターを表します。
ASK {
$value rdf:type/rdfs:subClassOf* $class .
}
次のクエリは、sh:nodeKind の 潜在的な SPARQL ベースのバリデーターを表します。
ASK {
FILTER ((isIRI($value) && $nodeKind IN ( sh:IRI, sh:BlankNodeOrIRI, sh:IRIOrLiteral ) ) ||
(isLiteral($value) && $nodeKind IN ( sh:Literal, sh:BlankNodeOrLiteral, sh:IRIOrLiteral ) ) ||
(isBlank($value) && $nodeKind IN ( sh:BlankNode, sh:BlankNodeOrIRI, sh:BlankNodeOrLiteral ) )) .
}
次のクエリは、sh:minExclusive の 潜在的な SPARQL ベースのバリデーターを表します。 SPARQL 式は、たとえば誰かが文字列を整数と比較する場合など、値ノードを指定された範囲と 比較できない場合にエラーを生成します。 比較を実行できない場合は、検証結果があります。 これは、たとえば通常の SPARQL クエリではそのようなエラーが黙って結果を生じないこととは異なります。
ASK {
FILTER ($minExclusive < $value)
}
類似の定義は次のものに対して可能です:
次のクエリは、sh:minLength の 潜在的な SPARQL ベースのバリデーターを表します。
ASK {
FILTER (STRLEN(str($value)) >= $minLength) .
}
次のクエリは、sh:maxLength の 潜在的な SPARQL ベースのバリデーターを表します。
ASK {
FILTER (STRLEN(str($value)) <= $maxLength) .
}
次のクエリは、sh:pattern の 潜在的な SPARQL ベースのバリデーターを表します。
ASK {
FILTER (!isBlank($value) && IF(bound($flags), regex(str($value), $pattern, $flags), regex(str($value), $pattern)))
}
次のクエリは、sh:disjoint の 潜在的な SPARQL ベースのバリデーターを表します。
SELECT DISTINCT $this ?value
WHERE {
$this $PATH ?value .
$this $disjoint ?value .
}
次のクエリは、sh:lessThan の 潜在的な SPARQL ベースのバリデーターを表します。
SELECT $this ?value
WHERE {
$this $PATH ?value .
$this $lessThan ?otherValue .
BIND (?value < ?otherValue AS ?result) .
FILTER (!bound(?result) || !(?result)) .
}
次のクエリは、sh:lessThanOrEquals の 潜在的な SPARQL ベースのバリデーターを表します。
SELECT $this ?value
WHERE {
$this $PATH ?value .
$this $lessThanOrEquals ?otherValue .
BIND (?value <= ?otherValue AS ?result) .
FILTER (!bound(?result) || !(?result)) .
}
このセクションは非規範的です。
GRAPH や FROM などの SPARQL キーワードは、データセット内の
アクティブデータグラフ以外のグラフへのアクセスを提供する可能性があることに注意してください。
SHACL-SPARQL エンジンは、検証を開始したユーザーがアクセスを許可されていない
名前付きグラフへのアクセスを SPARQL エンジンが提供しないようにすべきです。
SHACL-SPARQL のセキュリティ上の考慮事項には、
SPARQL、
SPARQL Federated Query
(SERVICE)、および
SHACL Core の
すべてのセキュリティ上の考慮事項が含まれます。
このセクションは非規範的です。
元の SHACL core 仕様は、RDF Data Shapes Working Group によって作成されました。 Core 仕様の謝辞 セクションおよび Advanced Features 仕様の 謝辞セクションを参照してください。
このセクションは非規範的です。
sh:SelectExpression を追加しました。Issue 288 を参照
sh:SPARQLExprExpression を追加しました。Issue 315 を参照
shapesGraph および
currentShape のサポートを削除しました。Issue
426
を参照
sh:severity を直接指定できるようになりました。Issue 573 を参照sh:prefixes が存在しない場合、システムは任意の sh:ShapesGraph で宣言された
任意の sh:prefix/sh:namespace ペアを使用します。Issue 176 を参照
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: