SHACL 1.2 SPARQL 拡張

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-shacl12-sparql-20260828/
最新公開バージョン:
https://www.w3.org/TR/shacl12-sparql/
最新編集者草案:
https://w3c.github.io/data-shapes/shacl12-sparql/
履歴:
https://www.w3.org/standards/history/shacl12-sparql/
コミット履歴
テストスイート:
https://w3c.github.io/data-shapes/data-shapes-test-suite/
最新勧告:
https://www.w3.org/TR/2017/REC-shacl-20170720/#part2
編集者:
(TopQuadrant, Inc.)
(Corning)
(JPMorgan Chase & Co.)
(Swansea University)
元編集者:
Dimitris Kontokostas
フィードバック:
GitHub w3c/data-shapes (プルリクエスト, 新しい課題, 未解決の課題)
public-shacl@w3.org に、 件名行を [shacl12-sparql] として送信してください (アーカイブ)

概要

この文書は、SHACL Shapes Constraint Language の SPARQL 関連の拡張を定義します。 SHACL の Core 部分ではシェイプの基本構文と、SHACL がサポートする最も一般的な制約コンポーネントを 定義していますが、SPARQL 関連の拡張では、SPARQL を用いて Core の表現力を拡張する機能を 扱います。 特に、この文書では、SPARQL を使用して制約および制約コンポーネントを定義する方法を定義します。 さらに、この文書では、ノードのリストを導出するために使用できる SPARQL ベースのノード式を 導入します。 最後に、この文書では、SHACL ノード式に基づいて新しい SPARQL 関数を定義するための宣言的なメカニズムを 定義します。

この文書の状態

このセクションは、この文書の公開時点における状態を説明します。現在の W3C 公開物の一覧と、この技術報告書の最新版は、 W3C 標準および草案 インデックスで確認できます。

この文書は、Data Shapes ワーキンググループによって、 勧告 トラックを使用する 作業草案として公開されました。

作業草案としての公開は、 W3C およびそのメンバーによる承認を意味するものではありません。

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

この文書は、 W3C 特許 ポリシーの下で活動する グループによって作成されました。 W3C は、 グループの成果物に関連して行われた 特許開示の公開一覧 を管理しています。そのページには、特許を開示するための手順も含まれています。 個人が、その個人が 必須クレーム を含むと考える特許について実際の知識を有している場合、その個人は W3C 特許ポリシーのセクション 6 に従って情報を開示しなければなりません。

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

SHACL 仕様

この仕様は、SHACL 1.2 仕様群の一部です。より詳細な 入門については、SHACL 1.2 概要を参照してください。

仕様は次のとおりです:

作業草案:

SHACL 1.2 コア
SHACL のコアを定義します
SHACL 1.2 推論規則
SHACL の規則ベース推論のフレームワークを定義します
SHACL 1.2 ノード式
SHACL においてフォーカスノードおよび値ノードを導出するために使用される式を定義します
SHACL 1.2 プロファイリング
SHACL データを含むデータのプロファイリングに SHACL を使用する方法を定義します
SHACL 1.2 SPARQL 拡張
SHACL の SPARQL 関連の拡張を定義します
SHACL 1.2 UI
ユーザーインターフェイス生成のための SHACL の使用方法を定義します

ワーキンググループノート草案:

SHACL 1.2 Overview
SHACL 仕様群の概要を示します
SHACL 1.2 Compact Syntax
SHACL の概念を表現するための RDF 構文を定義します
注記

実装者は、SHACL 1.2 テストスイートの テストケースに合格することで、上記仕様への適合レベルを部分的に確認できます。 ただし、テストスイート内のすべてのテストに合格しても、仕様への完全な適合を意味するわけではありません。 それは、実装がテストスイートでテストされた側面に適合していることのみを意味します。

1. はじめに

この文書は、Shapes Constraint Language (SHACL) の SPARQL 関連機能を規定します。

1.1 用語

この文書全体で、次の用語を使用します。

この文書で定義される 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 つのリンクがあれば、この文書内に出現する特定の用語のすべての箇所に対する定義を提供するのに十分です。

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

基本的な RDF 用語
この文書では、 RDF グラフRDF トリプルIRIリテラル空白 ノード、 RDF グラフの ノードデータ型具体化子RDF 用語、ならびに RDF トリプルの 主語述語、および 目的語 という用語を、 RDF 1.2 Concepts and Abstract Syntax [rdf12-concepts] で定義されているとおりに使用します。
バインディング、解
バインディングとは、(変数, RDF 用語) の組であり、 [sparql12-query] における この用語の用法と一致します。 とは、各変数が一意でなければならないバインディングの集合です。 非公式には、解は SPARQL クエリの結果表の本体における 1 行として理解されることがよくあります。

1.2 文書の表記規則

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 またはテキスト定義が含まれます。

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

$ マーカーを使用する SPARQL 変数は、実行前に 事前バインドされる、または $PATH の場合は (4.3 SPARQL ベースの 制約コンポーネントによる検証で説明されるように) SPARQL クエリ内で 置換される外部バインディングを表します。

true は RDF 用語 "true"^^xsd:boolean を表します。 false は RDF 用語 "false"^^xsd:boolean を表します。

1.3 適合性

非規範的とマークされたセクションに加えて、この仕様のすべての作成ガイドライン、図、例、および注記は 非規範的です。この仕様のそれ以外のすべては規範的です。

この文書におけるキーワードしてもよいしなければならないしては ならない、およびすべきであるは、 ここに示すように、すべて大文字で表記されている場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているとおりに解釈されるものとします。

この文書は、SHACL Core を拡張する SHACL-SPARQL 言語を定義します。 この仕様は、次のものに対する適合基準を説明します:

SHACL Coreの適合性の節にある 整形式性についての説明も参照してください。

2. SPARQLクエリの接頭辞 宣言

この節では、SPARQLクエリの名前空間接頭辞を宣言するために、この文書全体で使用される仕組みを 紹介します。

シェイプグラフには、 同じシェイプグラフから導出されたSPARQLクエリを短縮するために使用できる名前空間接頭辞の宣言を 含めることができます。 このような接頭辞宣言の構文を、次の例に示します。

sh:prefixsh: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 ベースの制約コンポーネントバリデーターSPARQL ベースのノード式、および SPARQL ベースの推論 規則で使用できます。 これらのノードでは、プロパティ 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がない場合、システムは、 owl:Ontologysh:DataGraphsh:ShapesGraph、 または sh:RulesGraphsh:ShapesGraph のサブクラス)の SHACL インスタンスにおいて sh:declareである、シェイプ グラフからの プレフィックス宣言を使用します。

SHACLプロセッサは、すべての接頭辞マッピングに対応する PREFIX宣言を先頭に追加して、 sh:selectの値(およびsh:asksh:constructなどの 同様のプロパティ)をSPARQLへ変換します。 sh:prefixの各値はPNAME_NSに変換され、 sh:namespaceの各値は PREFIX宣言内のIRIREFに変換されます。 上記のシェイプグラフの例では、SHACL-SPARQLプロセッサは PREFIX ex: <http://example.com/ns#>のような行を生成します。 結果のクエリ文字列を有効なSPARQL 1.2クエリとして構文解析できない場合、 SHACL-SPARQLプロセッサは失敗を生成しなければならない

この文書の以降の部分では、簡潔にするためsh:prefixes文が省略されている場合があります。

3. SPARQLベースの制約

SHACL-SPARQLは、SPARQL SELECTクエリに基づく制限を表現するために使用できる 制約コンポーネントを サポートします。

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

パラメーター:
プロパティ 概要
sh:sparql 評価するSPARQLクエリを宣言するSPARQLベースの 制約

SPARQLベースの制約の構文規則および検証プロセスは、この節の以降の部分で定義します。

3.1 SPARQLベースの制約の 例

この節は非規範的です。

次の例は、SPARQLベースの 制約の構文を示しています。

SPARQLクエリは、制約に違反する変数valueのすべての束縛について、 結果集合のを返します。 後述するマッピング規則を適用し、 その結果集合内の各に対して1つの検証結果があります。 この例では、各検証結果は、変数 this束縛sh:focusNodeとして、 ex:germanLabelsh:resultPathとして、違反する値を sh:valueとして持ちます。

次の例は、上記と同様のシナリオをプロパティシェイプで示します。

3.2 SPARQLベースの制約の 構文

シェイプはプロパティ 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:stringrdf:dirLangStringrdf:langString、または rdf:HTMLを持つリテラルです。 同じ言語タグを持つsh:messageの値が複数あってはならず、 データ型xsd:stringを持つ値も複数あってはなりません。 SPARQLベースの 制約は、プロパティsh:deactivatedの値を最大1つ持つことができます この値はtrueまたはfalseです。 SPARQLベースの制約は、プロパティ sh:severityの値を最大1つ持つことができ、 この値はIRIです。

プロパティシェイプの文脈で 使用されるSELECTクエリは、シェイプが使用するパスのプレースホルダーとして、 PATHという名前の特別な変数を使用します。

SPARQLベースの制約およびSELECTベースのバリデーターのSPARQLクエリにおいて、 変数PATHを合法的に使用できる唯一の場所は、トリプルパターン述語の位置です。 変数PATHを他の位置で使用するクエリは、非整形式です。

3.3 SPARQLベースの 制約による検証

この節では、sh:SPARQLConstraintComponentバリデーターについて説明します。 このバリデーターは、考えられる実装戦略の1つだけを説明するものであり、 結果が同等である限り、SHACLプロセッサは別の方法を選択できることに注意してください。

テキストによる定義
$sparqlsh:sparqlとします。 SPARQLベースの制約が、プロパティ sh:deactivatedとしてtrueを 持つ場合、検証結果はありません。 それ以外の場合は、3.3.1 SPARQL制約における 事前束縛変数$thisで説明されているように、変数this事前束縛し、SPARQLベースの制約$sparqlで 指定されたSPARQLクエリを実行します。 シェイププロパティ シェイプである場合、実行前に、 述語の位置に現れる 変数PATHを、プロパティシェイプのsh:pathによって指定された SHACLプロパティパスの 有効なSPARQL表層構文文字列で置換します変数failure束縛としてtrueを持たない各に対して、1つの検証結果があります。 これらの検証結果は、3.3.2 解の 束縛から結果プロパティへのマッピングで説明されているプロパティ値を 持たなければならない$sparqlsh:severityを持つ場合、 検証結果は、 その値を唯一のsh:resultSeverityとして 持たなければならない。 いずれかのfailure束縛としてtrueを持つ場合、かつその場合に限り、 失敗を生成 しなければならない

3.3.1 SPARQL制約における事前束縛変数$this

SPARQLベースの制約の SPARQLクエリ、およびSPARQLベースの制約コンポーネントバリデーター処理されるとき、 SHACL-SPARQLプロセッサは、変数$thisの値を現在のフォーカスノード事前束縛します

3.3.2 解の束縛から結果プロパティへのマッピング

検証結果ノードの プロパティのは、結果の解と制約自体の値を 組み合わせて、次の規則によって導出されます。 規則は上から下へ実行され、最初に束縛された値が使用されることを意図しています。

プロパティ 生成規則
sh:focusNode
  1. 変数thisの束縛
sh:resultPath
  1. 変数pathの束縛(それがIRIの場合)
  2. プロパティ シェイプによって生成された結果の場合、シェイプの sh:pathと同等の SHACL プロパティパス
sh:value
  1. 変数valueの束縛
  2. 値ノード
sh:resultMessage
  1. 変数messageの束縛
  2. SPARQLベースの制約の場合: SPARQLベースの制約sh:messageの値。 SPARQLベースの制約コンポーネントの場合: SPARQLベースの 制約コンポーネントバリデーターsh:messageの値。
  3. SPARQLベースの制約コンポーネントの場合: SPARQLベースの 制約コンポーネントsh:messageの値。
  4. それ以外の場合は、シェイプまたは制約でメッセージを宣言する ための既定の仕組みが適用されます。
これらのメッセージリテラルには、{?varName}または {$varName}を介して任意のSELECT結果変数の名前を含めることができます。 制約がSPARQLベースの制約 コンポーネントに基づく場合、コンポーネントのパラメーター名も使用できます。 これらの{?varName}および{$varName}ブロックは、 それらの変数の値を表す適切な文字列表現に置き換える べきである
sh:sourceConstraint
  1. SPARQLベースの制約、 すなわちsh:sparqlの値

4. SPARQLベースの制約 コンポーネント

SPARQLベースの制約は高い柔軟性を提供しますが、 人によっては理解しにくかったり、繰り返しにつながったりする可能性があります。 この節では、SPARQLの複雑さを抽象化し、Core制約コンポーネントに類似した 高水準で再利用可能なコンポーネントを宣言する方法として、SPARQLベースの制約 コンポーネントを導入します。 このような制約コンポーネントは、SHACL RDF語彙を使用して宣言できるため、共有および再利用できます。

4.1 SPARQLベースの 制約コンポーネントの例

この節は非規範的です。

次の例は、SHACL-SPARQL言語を使用して新しい制約コンポーネントを指定するために、 SPARQLをどのように使用できるかを示しています。 この例では、各値ノードが指定された正規表現に 一致することを検証するために、sh:patternおよび sh:flagsSPARQL ASKクエリを使用して実装します。 これは実装例にすぎず、規範的なものと見なすべきではないことに注意してください。

制約コンポーネントを宣言すると、次の例に示すように、そのパラメーターをシェイプで使用できます。

制約コンポーネントは、シェイプ内の制約を 識別して検証する方法を、検証エンジンに指示します。 一般に、シェイプ Sがプロパティpを持ち、 pをパラメーターとして指定する制約コンポーネント Cが存在し、SCのすべての必須 パラメーターの値を持つ場合、 これらのパラメーター値の集合(任意選択のパラメーターを含む)は 制約を宣言し、 検証エンジンはCの適切なバリデーターを使用して この制約の検証を実行します。 上記の例では、sh:PatternConstraintComponentは必須パラメーター sh:pattern、 任意選択のパラメーターsh:flags、 およびノードシェイプまたはプロパティシェイプの いずれかに対する検証の実行に使用できるバリデーターを宣言します。

4.2 SPARQLベースの 制約コンポーネントの構文

SPARQLベースの制約コンポーネントは、 シェイプ グラフにおいてSHACL型 sh:ConstraintComponentを持つIRIです。

この文書で新しい制約コンポーネントを 宣言する仕組みは、SPARQLに基づくものに限定されています。 ただし、パラメーターおよびバリデーターを宣言するための一般構文は、 JavaScriptなどの他の拡張言語でも機能するように設計されています。

4.2.1 パラメーター 宣言(sh:parameter)

制約 コンポーネントパラメーターは、 プロパティsh:parameterを介して宣言されます。 sh:parameterの値は、パラメーター宣言と呼ばれます。 クラスsh:Parameterは、パラメーター宣言として使用できますが、 そのようなトリプルは必須ではありません。 パラメーター宣言は、プロパティ sh:pathの値を正確に1つ持ちますパラメーター宣言において、 sh:pathIRIです。

IRIローカル名は、IRIの末尾にある最長の NCNAMEであり、 IRI内の 最初のコロンがその直前にないものとして定義されます。 パラメーター宣言パラメーター名は、sh:pathローカル名として定義されます。 パラメーターからSPARQL変数への正しいマッピングを可能にするため、次の構文規則が適用されます。

すべての パラメーター名は、有効な SPARQL VARNAMEです。 パラメーター名は、次のいずれかであってはなりません: thispathPATHvalue 2つ以上の パラメーター宣言が 同じパラメーター名を使用する制約コンポーネントは、非整形式です。

sh:optionalの値は、データ型xsd:booleanを持つ リテラルでなければなりません。 パラメーター宣言は、プロパティ sh:optionalの値を最大1つ持つことができます。 trueに設定されている場合、パラメーター宣言は任意選択のパラメーターを 宣言します。 すべての制約コンポーネントは、 任意選択ではないパラメーターを少なくとも1つ持ちます。

クラスsh:Parameterは、sh:PropertyShapeSHACLサブクラスとして 定義されており、プロパティシェイプに適用可能なすべてのプロパティをパラメーターにも 使用できます。 これには、sh:namesh:descriptionなどの記述プロパティだけでなく、 sh:classなどの制約パラメーターも含まれます。 パラメーターに 対して宣言された制約に適合しないシェイプは、非整形式です。 一部の実装は、無効なパラメーター値を持つ制約コンポーネントの実行を防ぐために、 これらの制約パラメーターを使用してもよい

4.2.2 ラベルテンプレート (sh:labelTemplate)

プロパティsh:labelTemplateは、任意の制約コンポーネントで、 制約を 人間向けにどのように表示できるかを提案するために使用できます。 sh:labelTemplateの値は文字列(言語タグが付く場合があります)です。これらは ラベルテンプレートと呼ばれます。

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

ラベルテンプレートには、制約コンポーネントに対して 宣言されたパラメーターの名前を、{?varName}または{$varName}という 構文を使用して含めることができます。ここで、varNameパラメーター名です。 表示時に、これらの{?varName}および{$varName}ブロックは、 実際のパラメーター値に置き換えるべきです。 同じ主語に対して複数のラベルテンプレートが存在する場合がありますが、 同じ言語タグを持つべきではなく、データ型xsd:stringを持つテンプレートが 複数あってはなりません。

4.2.3 バリデーター

サポートされる各シェイプ型(すなわち、プロパティシェイプまたはノードシェイプ)について、 制約コンポーネントは適切なバリデーターを宣言します。 特定の制約について、次の規則を順番に使用して制約コンポーネントからバリデーターを選択します。

  1. ノード シェイプの場合、sh:nodeValidatorの値が存在すれば、そのいずれかを 使用します。
  2. プロパティシェイプの場合、 sh:propertyValidatorの値が存在すれば、そのいずれかを使用します。
  3. それ以外の場合は、sh:validatorの値のいずれかを使用します。

適切なバリデーターが見つからない場合、SHACL-SPARQLプロセッサはその制約を無視します。

SHACL-SPARQLには、SPARQL SELECTsh:nodeValidatorおよびsh:propertyValidator用)または SPARQL ASKクエリ(sh:validator用)に 基づく2種類のバリデーターが含まれています。

4.2.3.1 SELECTベースの バリデーター

バリデーター のうち、SHACL 型sh:SPARQLSelectValidator であるものを、SELECT ベースのバリデーターと呼びます。 sh:nodeValidator の値は、SELECT ベースのバリデーターでなければなりません。 sh:propertyValidator の値は、SELECT ベースのバリデーターでなければなりません。 SELECT ベースのバリデーターは、 プロパティ sh:select に対してちょうど 1 つのを持ちます。 sh:select の値は、前述の 接頭辞処理規則を使用する有効な SPARQL 1.2 SELECT クエリです。 sh:select の値から導出される SPARQL クエリは、その SELECT 節で変数 this射影します

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

次の例は、SPARQL SELECT クエリに基づく制約コンポーネントの宣言を示しています。 これは、3.1 SPARQL に基づく制約の例の例を一般化したものです。 その SPARQL クエリには、特定のプロパティ ex:germanLabel と言語タグ de という2つの定数が含まれていましたが、 この例では、任意のプロパティを言語タグ付きで定義できるように制約を一般化しています。 実際には、制約コンポーネントは、 パラメータ述語をシェイプに追加することで適用され(例: ex:lang "de")、SHACL-SPARQL プロセッサは、SELECT バリデータを実行する前に、これを対応する SPARQL 変数(例: $lang)に事前バインドします。 制約コンポーネントを使用すると、このようなシナリオを一般化し、定数が事前バインドされる際にパラメータを使用できます。 これにより、新しい SPARQL を記述することなく、複数の場所でクエリロジックを再利用できます。

制約コンポーネントを(シェイプグラフ内で)宣言すると、その パラメータを次の例に示すように使用できます。ex:lang を含むすべてのプロパティシェイプは、 ex:LanguageConstraintComponentUsingSELECT を使用するものとして解釈されます($lang をその 値にバインドします)。

上記のシェイプ例は、ex:germanLabel のすべての値が 言語タグ de を持ち、 ex:englishLabel のすべての値が言語として en を持つという条件を指定しています。 これらの詳細は、制約コンポーネントで必須とされる ex:lang パラメータの値を持つ2つのプロパティシェイプによって指定されています。

4.2.3.2 ASKベースのバリデーター

多くの制約コンポーネントでは、すべての値ノードを 何らかのブール条件に対して個別にテストします。 特に、制約コンポーネントをプロパティシェイプノード シェイプの両方で使用できる場合、このためのSELECTクエリの記述は煩雑になります。 SHACL-SPARQLは、ASKクエリに基づくバリデーター用に、より簡潔な代替構文を提供します。

SHACL 型sh:SPARQLAskValidatorを持つバリデーターは、 ASKベースのバリデーターと 呼ばれます。 sh:validatorの値は、ASKベースのバリデーターで なければなりません。 ASKベースのバリデーターは、プロパティ sh:askの値を正確に1つ持ちます sh:askの値は、データ型xsd:stringを持つリテラルで なければなりません。 sh:askの値は、前述の接頭辞 処理規則を使用する有効なSPARQL ASKクエリでなければなりません。

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

ASKクエリは、指定された値ノード (事前束縛された変数valueによって表されます)が制約に適合する場合、 かつその場合に限りtrueを返します。

次の例は、ASKクエリを使用して制約コンポーネントを宣言します。

ASKクエリによって実装される検証条件は、対応するSELECTクエリとは 「逆方向」であることに注意してください。 ASKクエリは制約に適合する値ノードに対してtrueを返す一方、 SELECTクエリは適合しない値ノードを返します。

4.3 SPARQLベースの 制約コンポーネントによる検証

この節では、SPARQLベースの制約コンポーネントバリデーターを定義します。 このバリデーターは、考えられる実装戦略の1つだけを説明するものであり、 結果が同等である限り、SHACLプロセッサは別の方法を選択できることに注意してください。

最初の手順として、4.2.3 バリデーターで説明されている規則に基づいて、 バリデーターを選択 しなければならない。 次に、以下の規則を適用して、SPARQLクエリのの集合を生成します。

上記のSPARQLクエリの実行では、3.3.1 SPARQL制約における事前束縛変数$thisで 説明されているように、変数this事前束縛しなければならない。 さらに、制約内の制約コンポーネントパラメーターの各は、 パラメーター名を名前として持つ変数として、 事前束縛しなければならない

検証結果の生成規則は、 上記で生成されたQSを使用する点を除き、 SPARQLベースの制約の生成規則と同一です。

5. 注釈プロパティ

この節では、一般的なメカニズムを拡張して、 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 用語

solution ごとに、SELECT 結果セットの各 注釈をサポートする SHACL プロセッサーは、宣言された結果注釈を順にたどります。 結果注釈から SPARQL 変数への対応付けは、次の規則を用います:

  1. プロパティ sh:annotationVarNamevalue を使用します
  2. そのような value が存在しない場合は、sh:annotationPropertylocal name を変数名として使用します。

変数名を決定できた場合、SHACL プロセッサーは、現在の solution に対して生成される binding を、 sh:annotationProperty を使用して指定されたプロパティの値として、 作成中の validation result にコピーします。 結果セットの solution にその変数の binding がない場合は、 sh:annotationValuevalues が、存在すれば使用されます。

6. SPARQLベースのノード式

この節では、SPARQLに基づくノード式関数を 導入します。

6.1 選択式

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 式の評価

output nodes は、select expressionresultNodes のリストであり、 クエリを focus graph に対して評価したときに、 SELECT 句から射影される(唯一の) 変数の束縛だけから構成されます。 focusNode の値は、SPARQL 変数 this の値として pre-bound されます。 各スコープ変数の値は、同じ名前と値を持つ SPARQL 変数として pre-bound されます。 スコープ内の変数名が文字列リテラルでない場合は、"arg" + str(name) を使用します。 たとえば、変数名が "0"^^xsd:integer なら、arg0 を使用します。 スコープ変数の 1 つが this という名前の場合は、 failure が 生成されます。

evalExpr(expr, focusGraph, focusNode, scope) -> resultNodes

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

6.2 SPARQL Expr式

sh:sparqlExprを持つ ノード 式は、関数名 sh:SPARQLExprExpression を持つ SPARQL expr 式と呼ばれます。

RDF グラフ内のノードが 整形式SPARQL expr 式であるのは、それが 空白ノード であり、述語 sh:sparqlExpr に対してちょうど 1 つ持ち、 そのリテラル であり、そのデータ型xsd:string である場合です。 整形式SPARQL expr 式は、プロパティ sh:prefixes に対して最大 1 つのを持つことができ、 この値は IRI または 空白ノードです。

$EXPR$sh:sparqlExprとし、 $PREFIXES$sh:prefixes の値を使用する接頭辞処理規則から得られる SPARQL 接頭辞ブロックとします。 このとき、select$EXPR$$PREFIXES$ を次のように挿入した文字列として定義されます。

$PREFIXES$ SELECT ($EXPR$ AS ?result) WHERE {}

select は有効な SPARQL 1.2 SELECT クエリです。

SPARQL EXPR 式の評価

output nodes は、SPARQL expr expressionresultNodes のリストであり、 select クエリの SELECT 句から投影される(唯一の) 変数の束縛だけから構成されます。 これは above で定義されたとおり、 クエリを focus graph に対して評価したときに適用されます。 focusNode の値は、SPARQL 変数 this の値として pre-bound されます。 各スコープ変数の値は、同じ名前と値を持つ SPARQL 変数として pre-bound されます。 スコープ内の変数名が文字列リテラルでない場合は、"arg" + str(name) を使用します。 たとえば、変数名が "0"^^xsd:integer なら、arg0 を使用します。 スコープ変数の 1 つが this と呼ばれる場合は、 failure が 生成されます。

evalExpr(expr, focusGraph, focusNode, scope) -> resultNodes

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

7. ノード式に基づく SPARQL 関数の宣言

SHACL 1.2 Node Expressionsカスタム List Parameter Functions を、新しい node expression 関数を宣言するための仕組みとして定義しています。 これらは他の SHACL node expression の一部として評価できますが、関数のような実行をサポートする他のエンジンにとっても有用である場合があります。

SPARQL 仕様は、いくつかの SPARQL エンジンが追加の SPARQL 関数を提供できるようにする 拡張ポイント を定義しています。 この節では、その拡張ポイントを用いて、SPARQL プロセッサーが SHACL の list parameter functions を SPARQL 関数として利用可能にするための宣言的な仕組みを導入します。

7.1 一般的な Node Expressions を用いた SPARQL 関数の例

7.2 SPARQL ベースの Node Expressions を用いた SPARQL 関数の例

次のカスタム list parameter functions は、評価時に「入れ子になった」SPARQL クエリを使用します。

次の例では、本体として sh:select node expression を使用します。

7.3 カスタム SPARQL 関数の評価

この文書では、そのようなカスタム SPARQL 関数がいつ、どのように追加されるかについての厳密な制約は定義しません。 推奨は、SPARQL エンジンが、提供された任意の SHACL instance of sh:ListParameterExpressionFunction を、その shapes graph 内に対して登録すべきだというものです。 同じ IRI を持つ関数がすでに登録されている場合、 SHACL エンジンは、その関数が以前にカスタム SPARQL 関数として追加されたものでない限り、 それを再定義しようとする試みを無視しなければなりません。 SPARQL エンジンは、SPARQL クエリを実行している間は登録済みの SPARQL 関数を変更してはなりません。

カスタム SPARQL 関数の評価

f を SPARQL function calliri とし、 argsExpression 引数のリストとします。 function を、f をその IRI として定義した graph 内の対応するカスタム list parameter function とします。

args から各 SPARQL 式を評価し、新しい nodes のリスト nodesList を得ます。 評価で error が発生した場合、 対応する引数の sh:parametersh:optional true を持つのでない限り、 SPARQL 関数呼び出しの結果も error になります。 その場合、その引数は scope 内で unbound になります。

rs を、focusGraph が SPARQL コンテキストで現在アクティブな query graph であり、 scopenodesList から評価済み引数を、引数の index を変数名(map key)として 持つ map であるときの evalExpr(function, focusGraph, f, scope)output nodes とします。

出力ノードのリスト rs がちょうど 1 つの要素を持つ場合、そのノードを返します。 それ以外の場合、または評価が evaluation failure を生じる場合、SPARQL 関数呼び出しの結果は error になります。

Note

SPARQL クエリの評価中には、専用の focus node はありません。 代わりに、node expression に基づく custom SPARQL function に渡される focusNode は、 関数自身の IRI です。

付録

A. SPARQL クエリにおける変数の 事前バインディング

SHACL-SPARQL の一部の機能は、この節で定義されている変数の事前バインディングの概念に依存しています。

(リスクのある機能) Issue 999: SPARQL 1.2 に合わせて 事前バインディングを更新する SPARQL

この機能は「リスクあり」であり、この領域で現在進行中の RDF および SPARQL 1.2 の作業に 合わせるために変更される可能性があります(削除はされません)。 当初は Issue 647 として議論されました。

SHACL で使用される事前バインディングの定義では、SPARQL クエリに次の制限が必要です。 SHACL-SPARQL プロセッサーは、事前バインドされた変数を使用して実行され、これらの「しなければならない」 制限のいずれかに違反する SHACL-SPARQL クエリ(sh:asksh:construct および sh:select を介したもの)を含むシェイプグラフ を処理している場合、失敗を報告しなければなりません事前バインドされる可能性のある変数という用語には、変数 thisvalue(ASK クエリの場合)、 およびそのクエリを使用する制約 コンポーネントパラメーターを表す任意の変数が含まれることに注意してください。

さらに、SPARQL クエリにはフェデレーテッドクエリ (SERVICE)を含めるべきではありませんSERVICE を許可しない実装は、上記のように失敗を報告しなければなりません。 ただし、一部の SPARQL 実装では SERVICE キーワードを 特定の(通常はローカルな)操作の構文として使用していることが認識されているため、このキーワードは一般的には禁止されません。

定義: 値の挿入

解マッピング μ に対して、Table(μ)μ から形成される多重集合として定義します。

   Table(μ) = { μ }
   Card[μ] = 1

値の挿入関数 Replace(X, μ) を、X 内に出現する 基本グラフ パターンプロパティパス 式Graph(Var, pattern) の各 Yjoin(Y, Table(μ)) で置き換えるものとして定義します。

定義: 変数の 事前バインディング

事前バインドされた変数 μ を伴うSPARQL クエリ Q = (E, DS, QF) の評価は、SPARQL クエリ Q' = (Replace(E, μ), DS, QF) の評価として定義されます。

B. 構文規則の要約

この節では、この文書のすべての規範的な構文規則を列挙します。 この節は、この仕様の他の部分から自動的に生成されており、規則の文脈が不明確な場合に本文へ戻れるよう ハイパーリンクが提供されています。 シェイプグラフ内でこれらの規則に違反するノードは不正形式です。

構文規則 ID 構文規則のテキスト
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に対して 複数の異なる名前空間が含まれている場合、 シェイプ グラフ不正形式です。
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:stringrdf:dirLangStringrdf:langString、または rdf:HTML を持つリテラルです。 同じ言語タグを持つ sh:message の値が複数存在することも、 データ型 xsd:string を持つ値が複数存在することも避けるべきです。
SPARQLConstraint-deactivated-maxCount SPARQL ベースの制約は、プロパティ sh:deactivated に対して最大 1 つの値を持つことができます
SPARQLConstraint-severity SPARQL ベースの制約は、プロパティ sh:severity に対して最大 1 つの値を持つことができ、 この値は IRI です。
PATH-position SPARQL ベースの制約 および SELECT ベースのバリデーターの SPARQL クエリにおける変数 PATH の 唯一の正当な使用箇所は、トリプルパターン述語 の位置です。
ConstraintComponent SPARQL ベースの制約コンポーネントは、 IRI であり、シェイプグラフ内でSHACL 型 sh:ConstraintComponent を持ちます。
Parameter-predicate-count パラメーター宣言は、プロパティ sh:path に対してちょうど 1 つの値を持ちます
Parameter パラメーター宣言では、sh:pathIRI です。
parameter-name-VARNAME すべてのパラメーター名は、有効な SPARQL VARNAME です。
parameter-name-not-in パラメーター名は、次のいずれかであってはなりません: thispathPATHvalue
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 グラフ内のノードが整形式select 式であるのは、それが空白ノード であり、述語 sh:select に対してちょうど 1 つのを持ち、このが、データ型 xsd:stringリテラルである場合です。
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 グラフ内のノードが 整形式SPARQL expr 式であるのは、それが空白ノード であり、述語 sh:sparqlExpr に対してちょうど 1 つのを持ち、そのが、データ型 xsd:stringリテラルである場合です。
SPARQLExprExpression-syntax-prefixes 整形式SPARQL expr 式は、プロパティ sh:prefixes に対して最大 1 つのを持つことができ、 この値は IRI または 空白ノードです。
SPARQLExprExpression-template $EXPR$sh:sparqlExprとし、 $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 プロセッサーは、事前バインドされた変数を使用して実行され、これらの「しなければならない」制限のいずれかに違反する SHACL-SPARQL クエリ (sh:asksh:construct および sh:select を介したもの)を含むシェイプ グラフを処理している場合、 失敗を 報告しなければなりません事前バインドされる可能性のある変数という用語には、変数 thisvalue(ASK クエリの場合)、 およびそのクエリを使用する制約コンポーネントパラメーターを表す任意の変数が含まれることに注意してください。

  • SPARQL クエリは MINUS 節を含んではなりません
  • SPARQL クエリは、事前バインドされる可能性のある変数に言及する VALUES 節を 含んではなりません
  • SPARQL クエリは、事前バインドされる可能性のある変数に対して構文形式 ​​AS ?var を使用してはなりません

さらに、SPARQL クエリにはフェデレーテッドクエリ (SERVICE)を含めるべきではありませんSERVICE を許可しない実装は、上記のように失敗を 報告しなければなりません。 ただし、一部の SPARQL 実装では SERVICE キーワードを特定の(通常はローカルな)操作の構文として使用していることが認識されているため、 このキーワードは一般的には禁止されません。

C. SHACL Core 制約バリデーターの潜在的な SPARQL 定義

この節は非規範的です。

この附属書では、[shacl12-core]の制約 コンポーネントおよびターゲットのセマンティクスについて、 非規範的な代替定義でSPARQL 1.2の一部を使用する。 これらは一部の実装者に役立つ可能性があるが、SHACL Core言語の実装にSPARQLは必須ではない。

$マーカーを使用するSPARQL変数は、実行前にSPARQLクエリー内で事前束縛される外部束縛、または $PATHの場合は置換される外部束縛を表す(4.3 SPARQLベースの 制約コンポーネントによる検証で説明するとおり)。

C.1 sh:targetClass

次のクエリーは、SPARQLにおけるクラスターゲットの可能な定義を表す。 変数targetClassは、指定されたsh:targetClassの値に事前束縛される。 から得られる変数thisのすべての束縛がフォーカスノードとなる。

SPARQLにおける可能な定義
SELECT DISTINCT ?this    # ?thisはフォーカスノード
WHERE {
	?this rdf:type/rdfs:subClassOf* $targetClass .
}

C.2 sh:targetSubjectsOf

次のクエリーは、SPARQLにおける主語ターゲットの可能な定義を表す。 変数targetSubjectsOfは、指定されたsh:targetSubjectsOfの値に事前束縛される。 から得られる変数thisのすべての束縛がフォーカスノードとなる。

SPARQLにおける可能な定義
SELECT DISTINCT ?this    # ?thisはフォーカスノード
WHERE {
	?this $targetSubjectsOf ?any .
}

C.3 sh:targetObjectsOf

次のクエリーは、SPARQLにおける目的語ターゲットの可能な定義を表す。 変数targetObjectsOfは、指定されたsh:targetObjectsOfの値に事前束縛される。 から得られる変数thisのすべての束縛がフォーカスノードとなる。

SPARQLにおける可能な定義
SELECT DISTINCT ?this    # ?thisはフォーカスノード
WHERE {
	?any $targetObjectsOf ?this .
}

C.4 sh:class

次のクエリーは、sh:classの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(各値ノード$valueについてtrueと評価されなければならない)
ASK {
	$value rdf:type/rdfs:subClassOf* $class .
}

C.5 sh:nodeKind

次のクエリーは、sh:nodeKindの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(各値ノード$valueについてtrueと評価されなければならない)
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 ) )) .
}

C.6 sh:minExclusive(など)

次のクエリーは、sh:minExclusiveの SPARQLベースの可能なバリデーターを表す。 値ノードを指定された範囲と比較できない場合、たとえば文字列を整数と比較した場合、 SPARQL式はエラーを生成する。 比較を実行できない場合は、検証結果が存在する。 これは、そのようなエラーが暗黙のうちに結果を生成しない通常のSPARQLクエリーなどとは異なる。

SPARQLにおける可能な定義(各値ノード$valueについてtrueと評価されなければならない)
ASK {
	FILTER ($minExclusive < $value)
}

次のものについても同様の定義が可能である。

C.7 sh:minLength

次のクエリーは、sh:minLengthの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(各値ノード$valueについてtrueと評価されなければならない)
ASK {
	FILTER (STRLEN(str($value)) >= $minLength) .
}

C.8 sh:maxLength

次のクエリーは、sh:maxLengthの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(各値ノード$valueについてtrueと評価されなければならない)
ASK {
	FILTER (STRLEN(str($value)) <= $maxLength) .
}

C.9 sh:pattern

次のクエリーは、sh:patternの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(各値ノード$valueについてtrueと評価されなければならない)
ASK {
	FILTER (!isBlank($value) && IF(bound($flags), regex(str($value), $pattern, $flags), regex(str($value), $pattern)))
}

C.10 sh:disjoint

次のクエリーは、sh:disjointの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(指定された$PATHについて結果を返してはならない)
SELECT DISTINCT $this ?value
WHERE {
	$this $PATH ?value .
	$this $disjoint ?value .
}

C.11 sh:lessThan

次のクエリーは、sh:lessThanの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(指定された$PATHについて結果を返してはならない)
SELECT $this ?value
WHERE {
	$this $PATH ?value .
	$this $lessThan ?otherValue .
	BIND (?value < ?otherValue AS ?result) .
	FILTER (!bound(?result) || !(?result)) .
}

C.12 sh:lessThanOrEquals

次のクエリーは、sh:lessThanOrEqualsの SPARQLベースの可能なバリデーターを表す。

SPARQLにおける可能な定義(指定された$PATHについて結果を返してはならない)
SELECT $this ?value
WHERE {
	$this $PATH ?value .
	$this $lessThanOrEquals ?otherValue .
	BIND (?value <= ?otherValue AS ?result) .
	FILTER (!bound(?result) || !(?result)) .
}

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

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

GRAPHFROM などの SPARQL キーワードは、データセット内の アクティブデータグラフ以外のグラフへのアクセスを提供する可能性があることに注意してください。 SHACL-SPARQL エンジンは、検証を開始したユーザーがアクセスを許可されていない 名前付きグラフへのアクセスを SPARQL エンジンが提供しないようにすべきです。

SHACL-SPARQL のセキュリティ上の考慮事項には、 SPARQLSPARQL Federated Query (SERVICE)、および SHACL Core の すべてのセキュリティ上の考慮事項が含まれます。

E. 謝辞

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

元の SHACL core 仕様は、RDF Data Shapes Working Group によって作成されました。 Core 仕様の謝辞 セクションおよび Advanced Features 仕様の 謝辞セクションを参照してください。

F. 元の SHACL 仕様と SHACL 1.2 SPARQL の間の変更点

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

G. 参考文献

G.1 規範的参考文献

[owl2-syntax]
OWL 2 Web Ontology Language 構造 仕様および関数形式構文(第2版). Boris Motik; Peter Patel-Schneider; Bijan Parsia. W3C. 2012年12月11日. W3C 勧告. URL: https://www.w3.org/TR/owl2-syntax/
[rdf12-concepts]
RDF 1.2 の概念および抽象データ モデル. Andy Seaborne; Gregg Kellogg; Olaf Hartig; Pierre-Antoine Champin. W3C. 2026年4月7日. W3C 勧告候補. URL: https://www.w3.org/TR/rdf12-concepts/
[rdf12-turtle]
RDF 1.2 Turtle. Gregg Kellogg; Andy Seaborne; Dominik Tomaszuk. W3C. 2026年8月12日. W3C 作業草案. URL: https://www.w3.org/TR/rdf12-turtle/
[REC-xml-names]
XML 1.0 における名前空間(第3版). Tim Bray; Dave Hollander; Andrew Layman; Richard Tobin; Henry Thompson et al. W3C. 2009年12月8日. W3C 勧告. URL: https://www.w3.org/TR/xml-names/
[RFC2119]
要求レベルを示すために RFC で使用する キーワード. S. Bradner. IETF. 1997年3月. 現行のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC8174]
RFC 2119 のキーワードにおける大文字と小文字の 曖昧さ. B. Leiba. IETF. 2017年5月. 現行のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc8174/
[shacl12-core]
SHACL 1.2 コア. Holger Knublauch; Thomas Bergwinkl; Yousouf Taghzouti; Jesse Wright. W3C. 2026年8月3日. W3C 作業草案. URL: https://www.w3.org/TR/shacl12-core/
[shacl12-inference-rules]
SHACL 1.2 推論 規則. W3C. W3C 編集者草案. URL: https://w3c.github.io/data-shapes/shacl12-inference-rules/
[shacl12-node-expr]
SHACL 1.2 ノード式. Robert David; Holger Knublauch; Simon Steyskal. W3C. 2026年7月21日. W3C 作業草案. URL: https://www.w3.org/TR/shacl12-node-expr/
[sparql12-query]
SPARQL 1.2 クエリ言語. Olaf Hartig; Andy Seaborne; Ruben Taelman; Gregory Williams; Thomas Pellissier Tanon. W3C. 2026年6月25日. W3C 作業草案. URL: https://www.w3.org/TR/sparql12-query/
[vc-data-model]
検証可能な資格情報データモデル v2.0. Ivan Herman; Michael Jones; Manu Sporny; Ted Thibodeau Jr; Gabe Cohen. W3C. 2025年5月15日. W3C 勧告. URL: https://www.w3.org/TR/vc-data-model-2.0/

G.2 参考情報的参考文献

[sparql12-federated-query]
SPARQL 1.2 Federated Query. Ruben Taelman; Gregory Williams. W3C. 2026年4月23日. W3C 作業草案. URL: https://www.w3.org/TR/sparql12-federated-query/