SHACL 1.2 SPARQL 拡張

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-shacl12-sparql-20260709/
最新公開バージョン:
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.)
(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 ベースのノード式を定義します。

この文書の状態

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

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

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

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

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

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

SHACL 仕様

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

仕様は次のとおりです:

作業草案:

SHACL 1.2 Core
SHACL の Core を定義します
SHACL 1.2 SPARQL Extensions
SHACL の SPARQL 関連の拡張を定義します
SHACL 1.2 Node Expressions
SHACL においてフォーカスノードを決定するために用いられるグラフ式を定義します
SHACL 1.2 Rules
SHACL のルールベース推論の方法を定義します
SHACL 1.2 UI
ユーザーインターフェイス生成のための SHACL の使用を定義します
SHACL 1.2 Profiling
SHACL データを含む、データのプロファイリングにおける SHACL の使用を定義します

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

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

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

1. はじめに

この文書は、SHACL (Shapes Constraint Language) の 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 1.2 Concepts and Abstract Syntax [rdf12-concepts] で定義される、 RDF グラフRDF トリプルIRIリテラル空白 ノード、 RDF グラフの ノードデータ型RDF 用語、および RDF トリプルの 主語述語、および 目的語 という用語を使用します。
バインディング、解
バインディングとは、(変数, 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 の場合は (3.3 SPARQL ベースの 制約コンポーネントによる検証で説明されるように) SPARQL クエリ内で 置換される外部バインディングを表します。

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

1.3 適合性

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

この文書におけるキーワード MAYMUST、および SHOULD は、 ここに示すようにすべて大文字で現れる場合、かつその場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されるように解釈されます。

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

SHACL Core の適合性セクションにおける 整形式性の議論も参照してください。

2. SPARQL ベースの制約

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

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

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

SPARQL ベースの制約の構文規則検証プロセスは、このセクションの残りで定義されます。

2.1 SPARQL ベースの 制約の例

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

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

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

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

2.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 の値が 2 つ以上あってはならず、 またデータ型 xsd:string の値が複数あってもなりません。 SPARQL ベースの 制約は、プロパティ sh:deactivated に対して高々 1 つの値を持つことができます かつ、この値は true または false です。 SPARQL ベースの制約は、 プロパティ sh:severity に対して高々 1 つの値を持つことができ、 この値は IRI です。

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

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

2.2.1 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 ベースの制約コンポーネントバリデーター、 および 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:ShapesGraphSHACL インスタンスにおける 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 文が省略されていることがあります。

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

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

テキスト定義
$sparqlsh: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 解バインディングから 結果プロパティへのマッピングで説明されるプロパティ値を持たなければなりません。 $sparqlsh:severityを持つ場合、 検証結果は その値を (唯一の) sh:resultSeverity として持たなければなりません。 失敗は、 の 1 つが failureバインディングとして true を持つ場合、かつその場合に限り、 生成されなければなりません。

2.3.1 SPARQL 制約における事前バインド変数 $this

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

2.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 の値

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

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

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

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

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

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

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

SPARQL ベースの制約コンポーネントは、 IRIであり、 シェイプグラフ内で sh:ConstraintComponentSHACL 型を 持ちます。

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

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

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

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

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

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

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

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

3.2.3 バリデーター

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

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

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

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

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

sh:SPARQLSelectValidatorSHACL 型を持つ バリデーターは、 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 を書くことなく、クエリロジックを複数の場所で再利用できます。

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

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

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

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

sh:SPARQLAskValidatorSHACL 型を持つ バリデーターは、 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 クエリは適合しない値ノードを返します。

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

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

最初のステップとして、バリデーターは、 3.2.3 バリデーターで概説された規則に基づいて選択されなければなりません。 次に、SPARQL クエリのの集合を生成する、次の規則が適用されます:

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

検証結果の生成規則は、 上で生成された QS を使用して、 SPARQL ベースの制約のものと同一です。

4. 注釈プロパティ

このセクションは、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 変数へのマッピングは、次の規則を使用します:

  1. プロパティ sh:annotationVarNameを使用します
  2. そのようなが 存在しない場合、sh:annotationPropertyローカル名を変数名として使用します。

変数名を決定できた場合、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
	]
] .

5. SPARQL ベースのノード式

このセクションでは、SPARQL に基づくノード式関数を導入します。

5.1 Select 式

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 式出力 ノードは、クエリが フォーカス グラフに対して評価されたときに、SELECT 句から射影される (唯一の) 変数のバインディングだけからなるリスト resultNodes です。 focusNode の値は、SPARQL 変数 this の値として 事前バインドされます。 各スコープ変数の値は、同じ名前と値を持つ SPARQL 変数として 事前バインドされます。 スコープ変数の 1 つが this と呼ばれる場合、 失敗が 生成されます。

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

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

5.2 SPARQL Expr 式

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

SPARQL expr 式出力 ノードは、クエリが フォーカスグラフに対して評価されたときに、 上で定義された select クエリの SELECT 句から射影される (唯一の) 変数のバインディングだけからなる リスト resultNodes です。 focusNode の値は、SPARQL 変数 this の値として 事前バインドされます。 各スコープ変数の値は、同じ名前と値を持つ SPARQL 変数として 事前バインドされます。 スコープ変数の 1 つが this と呼ばれる場合、 失敗が 生成されます。

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

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

付録

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

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

(危険性のある機能) 課題 647: SHACL-SPARQL prebinding に 「at risk」通知を追加する SPARQL

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

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

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

定義: Values Insertion

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

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

Values Insertion 関数 Replace(X, μ) を、 X における Basic Graph PatternProperty Path ExpressionGraph(Var, pattern) の各出現 Yjoin(Y, Table(μ)) で置き換えるものとして定義します。

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

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

B. SHACL 構文規則の要約

このセクションは、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:stringrdf:dirLangStringrdf: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:ConstraintComponentSHACL 型を 持ちます。
Parameter-predicate-count パラメーター宣言は、プロパティ sh:path に対して正確に 1 つの値を持ちます
Parameter パラメーター宣言では、sh:pathIRIです。
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 クエリ (sh:select および sh:ask を介するもの) を含む シェイプ グラフを処理している場合、 失敗を報告しなければなりません。 潜在的に事前バインドされる変数という用語には、変数 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 変数は、実行前に 事前バインドされる、または $PATH の場合は (3.3 SPARQL ベースの 制約コンポーネントによる検証で説明されるように) SPARQL クエリ内で 置換される外部バインディングを表します。

C.1 sh:targetClass

次のクエリは、SPARQL における クラスターゲットの潜在的な定義を表します。 変数 targetClass は、sh:targetClass の指定された値に 事前バインドされます。 からの変数 this のすべての バインディングは、フォーカスノードになります。

SPARQL における潜在的な定義
SELECT DISTINCT ?this    # ?this is the focus node
WHERE {
	?this rdf:type/rdfs:subClassOf* $targetClass .
}

C.2 sh:targetSubjectsOf

次のクエリは、SPARQL における subjects-of ターゲットの 潜在的な定義を表します。 変数 targetSubjectsOf は、sh:targetSubjectsOf の指定された値に 事前バインドされます。 からの変数 this のすべての バインディングは、フォーカスノードになります。

SPARQL における潜在的な定義
SELECT DISTINCT ?this    # ?this is the focus node
WHERE {
	?this $targetSubjectsOf ?any .
}

C.3 sh:targetObjectsOf

次のクエリは、SPARQL における objects-of ターゲットの 潜在的な定義を表します。 変数 targetObjectsOf は、sh:targetObjectsOf の指定された値に 事前バインドされます。 からの変数 this のすべての バインディングは、フォーカスノードになります。

SPARQL における潜在的な定義
SELECT DISTINCT ?this    # ?this is the focus node
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 Structural Specification and Functional-Style Syntax (Second Edition). 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 Concepts and Abstract Data Model. 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年6月12日. W3C 作業草案. URL: https://www.w3.org/TR/rdf12-turtle/
[REC-xml-names]
Namespaces in XML 1.0 (Third Edition). 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]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. 1997年3月. Best Current Practice. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. 2017年5月. Best Current Practice. URL: https://www.rfc-editor.org/info/rfc8174/
[shacl12-core]
SHACL 1.2 Core. Holger Knublauch; Thomas Bergwinkl; Yousouf Taghzouti; Jesse Wright. W3C. 2026年6月30日. W3C 作業草案. URL: https://www.w3.org/TR/shacl12-core/
[sparql12-query]
SPARQL 1.2 Query Language. 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]
Verifiable Credentials 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/