SHACL 1.2 コア

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-shacl12-core-20260630/
最新公開バージョン:
https://www.w3.org/TR/shacl12-core/
最新エディター草案:
https://w3c.github.io/data-shapes/shacl12-core/
履歴:
https://www.w3.org/standards/history/shacl12-core/
コミット履歴
テストスイート:
https://w3c.github.io/data-shapes/data-shapes-test-suite/
最新勧告:
https://www.w3.org/TR/2017/REC-shacl-20170720/
編集者:
(TopQuadrant, Inc.)
(TopQuadrant, Inc.)
(Inria)
(オックスフォード大学)
元編集者:
Dimitris Kontokostas
フィードバック:
GitHub w3c/data-shapes (プルリクエスト, 新しい課題, 未解決の課題)
public-shacl@w3.org に件名行 [shacl12-core] を付ける (アーカイブ)

要約

この文書は、SHACL のコアを定義する。

SHACL、すなわち Shapes Constraint Language は、RDF グラフの構造を記述するための言語である。 SHACL は、クラスおよびそれらのクラスのインスタンスが持つことができるプロパティを定義するために使用できる。 クラスおよびインスタンスよりも一般的に、SHACL は形状という概念を導入し、 RDF ノードおよびエッジの構造に対する制約を形式的に指定できるようにする。 SHACL 形状は、それ自体が形状グラフと呼ばれる RDF グラフで表される。 形状グラフによって記述される RDF グラフは、データグラフと呼ばれる。

SHACL は、 検証、推論、ドメインのモデリング、他のエージェントに情報を与えるためのオントロジー生成、 ユーザーインターフェイスの構築、コード生成、およびデータ統合など、さまざまな目的に使用できる。

この文書のステータス

この節は、この文書の公開時点におけるステータスを説明する。現在の W3C 公開文書およびこの技術報告書の最新リビジョンの一覧は、 W3C 標準および草案 索引にある。

この文書は、Data Shapes Working Group により、 勧告 トラックを用いる 作業草案として公開された。

作業草案としての公開は、 W3C およびその会員による承認を意味しない。

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

この文書は、 W3C 特許 ポリシーの下で運営される グループにより作成された。 W3C は、 そのグループの成果物に関連して行われた すべての特許開示の公開リスト を管理している。このページには、 特許を開示するための手順も含まれている。ある特許が 必須クレーム を含むと実際に知っている個人は、その情報を W3C 特許ポリシー第6節 に従って開示しなければならない。

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

SHACL 仕様

この仕様は、SHACL 1.2 仕様ファミリーの一部である。より詳細な 導入については、SHACL 1.2 Overview を参照されたい。

仕様は次のとおりである:

作業草案:

SHACL 1.2 Core
SHACL のコアを定義する
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 テストスイートの テストケースに合格することにより、上記仕様への適合レベルを部分的に確認できる。 ただし、テストスイートのすべてのテストに合格しても、仕様への完全な適合を意味するわけではないことに注意されたい。 それは、実装がテストスイートでテストされた側面に適合していることのみを意味する。

文書の概略

導入には、用語の節が含まれる。

第2節および第3節では、SHACL の形状と制約、およびプロパティパスを扱う。

第4節ではノード式を導入し、第5節では SHACL における検証を定義する。

第6節では組み込みの SHACL Core 制約コンポーネントを定義し、第7節では検証を行わない プロパティについて議論する。

SHACL の構文は RDF である。 この文書の例では Turtle [rdf12-turtle] および JSON-LD [json-ld] を使用する。 実際には RDF/XML など、他の RDF シリアライズを使用してもよい。 読者は、トリプルなどの基本的な RDF 概念 [rdf12-concepts] に精通しているべきである。

1. はじめに

この文書は、RDF グラフを記述し検証するための言語である SHACL(Shapes Constraint Language)のコアを規定する。 この節では、主要な用語の概要と基本概念を説明する例を用いて SHACL を導入する。

1.1 用語

この文書全体を通じて、次の用語を使用する。

RDF 1.2 Concepts and Abstract Syntax の各部にリンクされている用語は、 そこで定義されているとおりに SHACL で使用される。SPARQL 1.2 Query Language の 各部にリンクされている用語は、そこで定義されているとおりに SHACL で使用される。 単一のリンクは、この文書における特定の用語のすべての出現に対する定義を提供するのに十分である。

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

基本 RDF 用語
この文書では、 RDF グラフRDF トリプルIRIリテラルデータ型基底方向空白ノードトリプル項具象化子、 RDF グラフの ノードRDF 項主語述語、および RDF トリプルの 目的語 という用語を、RDF 1.2 Concepts and Abstract Syntax [rdf12-concepts] で定義されているとおりに使用する。 言語タグは、[BCP47] と同様に定義される。
プロパティ値とパス
プロパティIRI である。 RDF 項 n は、 RDF グラフ内のプロパティ p について v を持つ。 これは、そのグラフ内に、主語 n述語 p、および 目的語 v を持つ RDF トリプルが存在する場合である。 「グラフ G における P のすべての値 ...」という句は、「述語 P を持つ G 内のトリプルのすべての目的語 ...」を意味する。 (この文書では、RDF 項があるグラフ内の所与の述語について値を持つという事実を表すために、 動詞 specify または declare が使用されることがある。)
SPARQL プロパティパスは、SPARQL 1.2 と同様に定義される。 RDF 項 n が、RDF グラフ G において SPARQL プロパティ パスp について値 v を持つとは、G に対する SPARQL クエリー SELECT ?s ?o WHERE { ?s p' ?o } の結果に、 ?sn に、?ov に束縛する 解マッピングが存在する場合であり、 ここで p'p の SPARQL 表層構文である。
SHACL リスト
RDF グラフ G における SHACL リスト は、IRI または 空白ノードであり、 rdf:nil(ただし rdf:nilrdf:first または rdf:rest のいずれについても を持たない場合)、または G においてプロパティ rdf:first についてちょうど1つの を持ち、かつ G においてプロパティ rdf:rest について、G における SHACL リストでもあるちょうど1つの を持ち、さらにそのリストが G においてプロパティパス rdf:rest+ の値として 自分自身を持たないもののいずれかである。
RDF グラフ G における rdf:nil 以外の任意の SHACL リストの メンバーは、G における rdf:first の値と、それに続く、G における rdf:rest の値の G におけるメンバーから成る。 SHACL リスト rdf:nil は、いかなる RDF グラフにおいてもメンバーを持たない。
SHACL サブクラス、SHACL スーパークラス
ノード Sub は、RDF グラフ内の別の ノード SuperSHACL サブクラスである。 これは、そのグラフ内に、各述語が rdfs:subClassOf である トリプルの列が存在し、 最初のトリプル主語Sub であり、 最後のトリプルの 目的語Super であり、 最後を除く各 トリプル目的語が、次のトリプルの 主語である場合である。 Sub が RDF グラフ内で SuperSHACL サブクラスである場合、Super はそのグラフ内で SubSHACL スーパークラスである。
SHACL 型
RDF 項の、RDF グラフ内における SHACL 型は、 そのグラフ内における rdf:type についての の集合、 およびそのグラフ内におけるそれらの SHACL スーパークラスである。 いくつかの SHACL 実装は、SHACL サブクラスを決定する rdfs:subClassOf トリプルが、 データグラフに加えて 形状グラフからも照会されるようにパラメーター化できることに注意されたい。 6.3 rdfs:subClassOf トリプルのためのグラフを参照。
SHACL クラス
ノードのサブクラス、スーパークラス、または型である ノードは、 そのグラフ内において SHACL クラスと呼ばれる。
SHACL クラスインスタンス
ノード n は、RDF グラフ G における SHACL クラス CSHACL インスタンスである。 これは、G における nSHACL 型の1つが C である場合である。
ディープコピー
グラフ sourceGraph 内の ノード n について、 グラフ targetGraph 内における nディープコピー は、targetGraph 内の n に加え、n空白ノードである場合には、 n主語として開始し、到達可能なトリプルの 目的語位置に現れる 空白ノードを推移的にたどることで到達できる、 sourceGraph からの任意の トリプルである。 これは Concise Bounded Description に似ているが、 具象化を伴わない。

1.2 文書の表記規則

この文書内では、次の名前空間接頭辞定義が使用される:

接頭辞 名前空間
owl: http://www.w3.org/2002/07/owl#
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs: http://www.w3.org/2000/01/rdf-schema#
sh: http://www.w3.org/ns/shacl#
xsd: http://www.w3.org/2001/XMLSchema#
ex: http://example.com/ns#

この文書内では、次の JSON-LD コンテキストが使用される:

{
  "@context": {
    "owl": "http://www.w3.org/2002/07/owl#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "sh": "http://www.w3.org/ns/shacl#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "ex": "http://example.com/ns#"
  }
}

SHACL 語彙自体を定義するグラフの URI は上記の名前空間と等価であり、 すなわち # を含むことに注意されたい。 たとえば owl:imports を介した SHACL 語彙への参照には、 # を含めるべきである。

文書全体を通じて、Turtle、JSON-LD、および SHACL-C の RDF グラフを含む色分けされたボックスが 表示される。 Turtle 文書のこれらの断片は、上記の接頭辞束縛を使用する。 JSON-LD 文書断片は、上記のコンテキストを使用する。 特定の部分を強調表示できるのは Turtle 文書のみである。 SHACL-C 仕様は不安定であり、この文書内の SHACL-C 文書断片は参考情報である

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

true は RDF 項 "true"^^xsd:boolean を表す。 false は RDF 項 "false"^^xsd:boolean を表す。

1.3 適合性

非規範的として示された節と同様に、この仕様におけるすべての作成ガイドライン、図、例、および注は 非規範的である。それ以外のすべてはこの仕様において規範的である。

この文書におけるキーワード MAYMUSTMUST NOTSHOULD、および SHOULD NOT は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているとおりに解釈される。

この文書は、単に SHACL とも呼ばれる SHACL Core 言語を定義する。 この仕様は、次に対する適合基準を記述する:

この文書には、形状および他のノードが 形状グラフ内で満たす必要のある構文規則が含まれる。 これらの規則は通常、形状は...を持たなければならないX の値は リテラルである、または 述語 P を持つトリプルのすべての目的語は IRI でなければならない という形式である。 これらの規則の完全な一覧は、付録にある。 これらの規則のいずれかに違反するノードは 不正形式と呼ばれる。 これらの規則のいずれにも違反しないノードは 正形式と呼ばれる。

形状グラフは、次の条件がすべて成り立つ場合に 正形式である:

  1. それは 不正形式のノードを含まない(すなわち、すべてのノードが上記の構文規則を 満たす)。
  2. そのインポート閉包( owl:imports 文を推移的にたどることにより決定される) は、OWL 2 構文仕様 [owl2-syntax] の 第3.4節で定義される制約を満たす。 すなわち、次のような2つの形状グラフを含まない:
    • それらが同一系列の異なるバージョンである (すなわち、同じ形状グラフ IRI を共有するが、異なる owl:versionIRI 値を持つ)場合、または
    • 一方が owl:incompatibleWith 注釈を含み、その値が他方の形状グラフ IRI または owl:versionIRI のいずれかに等しい場合。

正形式ではない 形状グラフ不正形式である。

1.4 SHACL と RDFS 推論の関係

SHACL は RDF および RDFS 語彙を使用するが、完全な RDFS 推論は要求されない。

ただし、SHACL プロセッサーは、SHACL プロセッサーに渡される前に事前計算されたものであるか、 SHACL 処理の一部としてオンザフライで実行されたものであるかを問わず (データグラフまたは 形状グラフのいずれも変更せずに)、 含意 [sparql12-entailment] を含む RDF グラフ上で 動作してもよい。 含意の処理をサポートするために、SHACL は、所与の 形状グラフによって要求される推論を示す プロパティ sh:entailment を含む。

プロパティ sh:entailment は IRI である。 このプロパティの一般的な値は、[sparql12-entailment] で扱われる。

SHACL 実装は、含意レジームをサポートしてもよいが、要求されない。 形状グラフが、 述語 sh:entailment および目的語 E を持つ トリプルを含み、 SHACL プロセッサーが、所与の データ グラフに対する含意レジームとして E をサポートしない場合、 そのプロセッサーは 失敗を通知しなければならない。 それ以外の場合、SHACL プロセッサーは、 形状グラフ内の sh:entailment のすべての値に対する含意を提供しなければならず、 推論されたすべてのトリプルは、 検証プロセス中に データ グラフに対するすべてのクエリーによって返されなければならない。

2. SHACL Core 入門

この節は非規範的である。

この節では、SHACL Core の基本を紹介する簡単な例を順に説明する。 データがどのように見えるべきかを記述する方法と、SHACL プロセッサーがデータが その記述を満たしているかどうかをどのように確認するかを学ぶ。

2.1 ユースケース

エンティティの集合(Alice、Bob、Calvin)があり、それについてコンピューターまたは別の 人間に次のことを説明したいとする。

  1. これらのエンティティの型である ex:Person というクラスが存在する
  2. ex:Person の各インスタンスは最大1つの社会保障番号(SSN)を持ち、その SSN は 適切に整形されたテキスト(123-45-6789 など)である必要がある
  3. ex:Person の各インスタンスは1つ以上の会社で働くことができるが、それらの会社は データ内で ex:Company として型付けされていなければならない
  4. SSN (ex:ssn)、勤務先関係(ex:worksFor)、および必須の型付け (rdf:type)以外のプロパティは、ex:Person に対して許可されない

2.2 サンプルデータ(データグラフ)

記述し検証したいデータは次のとおりである:

2.3 形状と クラスを書く(形状グラフ)

ここに、関心のあるドメインを表現する方法の自己完結した例を示す。 SHACL の用語では、これは 形状グラフと呼ばれるが、 ドメインモデルまたはオントロジーと考えることもできる。

2.4 検証の 実行(検証レポート)

形状グラフを用いて データグラフに対して SHACL 検証を実行すると、 検証器は、記述した制約に照らして各 Person をチェックする。

平易な英語で言えば、それが見つけるものは次のとおりである:

この例の SHACL 検証レポートは次のようになる可能性がある(読みやすさのために簡略化):

レポートの読み方:

2.5 形状とクラスの 構文上のバリエーション

SHACL は主に形状を表現するために設計されているが、 rdfs:Classrdfs:subClassOf などの用語や概念も RDF Schema 名前空間から借用する。 元の例で ex:Personex:PersonShape に別々のエンティティがあったように、 それらの概念を分けておくことを好む人もいる。 しかし、それらをより密接に結び付け、sh:ShapeClass を使って クラスと形状の両方を同時に宣言することも可能である。

さらに、プロパティ形状が 空白ノードとして宣言されているのを見かけることがある。 IRIの代わりに そうするものである。 これはよりコンパクトな表記だが、たとえば他のグラフがノード形状を再利用しつつ プロパティ形状を無効化したい場合などに、そのプロパティ形状を外部から容易に参照できないことを意味する。

次の Turtle 例は、これら2つの構文上のバリエーションが実際に使われる様子を示している。

2.6 いくつかの SHACL 用語の導入

上記の形状宣言を用いて、SHACL で使用される形式的な用語のいくつかを導入できる。 これは、この仕様の残りの部分を読む助けになるかもしれない。

ex:PersonShape という 形状ターゲットは、 ex:Person という クラスの すべての SHACL インスタンスの集合である。 これはプロパティ sh:targetClass を用いて指定される。 検証中、これらのターゲットノードは、その形状の フォーカスノードになる。 ex:PersonShape という 形状ノード形状であり、これはフォーカスノードに適用されることを意味する。 それは、たとえば sh:closed および sh:ignoredProperties という パラメーターを用いて、 フォーカスノードに対する 制約を宣言する。 また、この ノード形状は、プロパティ sh:property により、他に2つの制約も宣言しており、 それぞれが プロパティ形状に裏付けられている。 これらの プロパティ形状は、sh:datatypesh:maxCount などの パラメーターを用いて、追加の 制約を宣言する。

一部の プロパティ形状は、 プロパティ値の複数の側面を制限するために、複数の 制約コンポーネントからのパラメーターを指定する。 たとえば、ex:ssn に対する プロパティ形状では、3つの 制約コンポーネントからのパラメーターが使用されている。 これらの 制約 コンポーネントパラメーターは、 sh:datatypesh:pattern、および sh:maxCount である。 各 フォーカスノードについて、ex:ssnプロパティ値は、 3つのコンポーネントすべてに対して検証される。

3. 形状と制約

次の導入は非規範的である。

次の非形式的な図は、SHACL 語彙における主要なクラスの一部の概要を示す。 各ボックスはクラスを表す。 クラス名の下にあるボックスは、これらのクラスのインスタンスが持つ可能性のある よく使われるプロパティの小さな部分集合を、その値型とともに列挙している。 矢印は rdfs:subClassOf トリプルを示す。

sh:targetClass : rdfs:Class
sh:targetObjectsOf : rdf:Property
sh:targetSubjectsOf : rdf:Property
sh:deactivated : xsd:boolean
sh:message : text
sh:severity : sh:Severity
クラス図の矢印
sh:closed : xsd:boolean または sh:ByTypes
sh:or, sh:and, sh:xone : rdf:List
sh:not : sh:Shape
sh:property : sh:PropertyShape
sh:minCount, sh:maxCount : xsd:integer
sh:minLength, sh:maxLength : xsd:integer
sh:class, sh:datatype : rdfs:Resource または rdfs:Resources の rdf:List
sh:node : sh:NodeShape
sh:name : xsd:string または rdf:dirLangString または rdf:langString
sh:values : any
sh:group : sh:PropertyGroup
sh:path : rdfs:Resource

SHACL 語彙の Turtle シリアライズには、 完全な SHACL 語彙が含まれている。

3.1 形状

形状は、IRI または 空白ノード s であり、 形状グラフ内で 次の条件の少なくとも1つを満たすものである:

上記の定義には、正形式の形状に関する すべての構文規則が含まれているわけではないことに注意されたい。 それらは文書全体に見られ、付録 A. SHACL 構文規則の要約にまとめられている。 たとえば、sh:targetClass の値として リテラルを持つ形状は 不正形式である。

非形式的には、形状は、プロパティのおよび フォーカスノードの他の特性に基づいて、フォーカスノードを どのように検証するかを決定する。 たとえば、形状は、フォーカスノードが IRI であること、またはフォーカスノードが あるプロパティについて特定の値を持ち、さらにそのプロパティについて最小数の値を持つことを 条件として宣言できる。

SHACL Core 言語は、2種類の形状を定義する:

sh:Shape は、SHACL 語彙におけるこれら2種類の形状型の SHACL スーパークラスである。 そのサブクラスである sh:NodeShape および sh:PropertyShape は、 それぞれノード形状およびプロパティ形状の SHACL 型として使用できる。

3.1.1 制約、パラメーター、および制約コンポーネント

形状は、制約コンポーネントパラメーターを用いて 制約を宣言できる。

制約 コンポーネントIRIである。 各制約コンポーネントは、1つ以上の 必須 パラメーターを持ち、それぞれはプロパティである。 各制約コンポーネントは、0個以上の 任意 パラメーターを持ち、それぞれはプロパティである。 制約コンポーネントの パラメーターは、その必須パラメーターと任意パラメーターを合わせたものである。

たとえば、コンポーネント sh:MinCountConstraintComponent は、 パラメーター sh:minCount を宣言し、ノードが特定のプロパティについて 少なくとも最小数のを持つという 制限を表す。

必須パラメーター p1, ... pn を持つ 制約コンポーネント C について、 形状 s が、形状グラフ SG 内で pi について viとして持つとき、 s は、SG 内で 必須パラメーター <p1,v1>, ... <pn,vn> を持つ C という 種別制約宣言する任意パラメーターを持つ 制約コンポーネントでは、その制約宣言は、その形状がそのコンポーネントのすべての必須および 任意パラメーターについて持つ から成る。

一部の制約コンポーネントは、単一のパラメーターのみを宣言する。 たとえば sh:ClassConstraintComponent は 単一のパラメーター sh:class を持つ。 これらのパラメーターは同じ形状内で複数回使用でき、 そのようなパラメーターの各は個別の 制約を宣言する。 そのような宣言の解釈は連言、すなわちすべての制約が適用されるということである。 次の例は、ex:customer の値が ex:Customerex:Person の両方の SHACL インスタンスでなければならないことを指定する。

sh:PatternConstraintComponent などの一部の 制約コンポーネントは、複数のパラメーターを宣言する。 そのようなコンポーネントのいずれかのパラメーターについて複数の値を持つ形状は 不正形式である。

この構文規則を回避する1つの方法は、次の例に示すように、制約を複数の(プロパティ)形状に分散させることである。

制約コンポーネントは、パラメーターがデータの検証にどのように使用されるかについての 指示(たとえば SPARQL クエリーで表現される)を提供する 検証器と関連付けられる。 RDF 項形状に対して検証することは、 その形状が制約コンポーネントの すべての必須 パラメーターについて を持つ各 制約に対して、その項を検証することを含み、 それぞれのコンポーネントに関連付けられた検証器を使用する。

SHACL Core に含まれる制約コンポーネントの一覧は、第4節で説明される。 SHACL-SPARQL は、SPARQL に基づく制約コンポーネントを 追加で宣言するために使用できる。

3.1.2 フォーカスノード

データグラフからのトリプルを用いて 形状に 対して検証される RDF 項は、 フォーカスノード と呼ばれる。

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

形状に対する フォーカスノードの集合は、次のように識別できる:

3.1.3 ターゲット

形状グラフ内の 形状ターゲット宣言は、 形状主語とし、この文書で説明される特定のプロパティ (例: sh:targetClass)を 述語とする トリプルである。 さらに、sh:shape トリプルは、 データグラフ内でターゲットを宣言できる。 ターゲット宣言は、形状に対する フォーカスノードを生成するために使用できる。 ターゲット宣言ターゲットは、この節の残りで説明される規則を データグラフに 適用することにより生成される RDF 項の集合である。 形状のターゲットは、その 形状に対して宣言された個々の ターゲット によって生成されるすべての RDF 項の和集合である。

SHACL Core には、次の種類のターゲットが含まれる:

この導入の残りは非規範的である。

ターゲットによって生成される RDF 項は、 データグラフ内に ノードとして存在することを要求されない。 形状のターゲットは、その形状の検証プロセスへの入力としてフォーカスノードが直接提供される場合には無視される。 これには、形状が sh:node などの 形状を期待する制約パラメーターの1つの値であり、 対応する制約コンポーネント(たとえば sh:NodeConstraintComponent)の検証中に フォーカスノードが決定される場合が含まれる。 そのような場合、提供されたフォーカスノードは 形状の ターゲット内にある必要はない。

3.1.3.1 ノードターゲット (sh:targetNode)

ノード ターゲットは、sh:targetNode 述語を用いて指定される。 形状内の sh:targetNode の各は、正形式の ノード式である。

テキスト定義
s形状であり、 形状グラフ SG 内で ssh:targetNode について expr を持つ場合、 evalExpr(expr, data graph, s, {})出力ノードは、 フォーカスグラフとしての データグラフ DG に対する ターゲットである。

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

下の例のデータでは、提供された形状のターゲットは ex:Alice のみである:

3.1.3.2 クラスベースのターゲット(sh:targetClass)

クラス ターゲットは、sh:targetClass 述語を用いて指定される。 形状内の sh:targetClass の各値は IRIである。

テキスト定義
s が形状グラフ SG 内の形状であり、 sSG 内で sh:targetClass について c を持つ場合、 データグラフ DG 内における cSHACL インスタンスの集合は、SG 内の s に対する DG からの ターゲットである。

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

この例では、ex:Aliceex:Bob のみがフォーカスノードである。 SHACL インスタンスの定義によれば、 クラス階層をたどるために必要なすべての rdfs:subClassOf 宣言は データグラフ内に存在する必要があることに注意されたい。 ただし、ex:Person a rdfs:Class トリプルは、どちらのグラフにも存在する必要はない。

次の例では、選択されるフォーカスノードは ex:Who のみである。

rdfs:subClassOf トリプルは、 形状グラフから照会される場合がある (6.3 rdfs:subClassOf トリプルのためのグラフを参照)。この場合、上の例の rdfs:subClassOf トリプルは データグラフ内に ある必要はない。

3.1.3.3 暗黙のクラスターゲットと sh:ShapeClass

非形式的には、形状形状グラフ内で クラスでもあると宣言されている場合、 このクラスのすべての SHACL インスタンスは、その形状のターゲットである。

s が RDF グラフ G 内で sh:NodeShape または sh:PropertyShapeSHACL インスタンスであり、 sG 内で rdfs:ClassSHACL インスタンスでもあり、かつ sIRI でない場合、sG 内の 不正形式の形状である。

テキスト定義
s形状グラフ SG 内で sh:NodeShape または sh:PropertyShapeSHACL インスタンスであり、かつ sSG 内で rdfs:ClassSHACL インスタンスでもある場合、 データグラフ DG 内における sSHACL インスタンスの集合は、 SG 内の s に対する DG からの ターゲットである。

SHACL 名前空間には、暗黙のクラスターゲットのパターンの構文上の近道として機能できる 専用クラス sh:ShapeClass が含まれる。

テキスト定義
クラス sh:ShapeClass は、 sh:NodeShaperdfs:Class の両方の rdfs:subClassOf である。 s形状グラフ SG 内で sh:ShapeClassSHACL インスタンスである場合、 データグラフ DG 内における sSHACL インスタンスの集合は、 SG 内の s に対する DG からの ターゲットである。

sh:ShapeClass は、SHACL を認識しない一部の実装では rdfs:Class のサブクラスであると理解されない可能性があることに留意されたい。 したがって、sh:ShapeClass を使用するグラフには owl:imports sh: 文を含めることが推奨される(ただし要求はされない)。

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

次の例では、ex:Alice はフォーカスノードである。なぜなら、それは SHACL インスタンスであり、 その対象である ex:Person形状グラフ内で クラスでも形状でもあるからである。

上の例の次のバリエーションでは、ex:Personsh:ShapeClass のインスタンスとして宣言されており、同じ解釈を持つ。

3.1.3.4 subjects-of ターゲット(sh:targetSubjectsOf)

subjects-of ターゲットは、 述語 sh:targetSubjectsOf を用いて指定される。 形状内の sh:targetSubjectsOfIRIである。

テキスト定義
s が形状グラフ SG 内の形状であり、 sSG 内で sh:targetSubjectsOf について p を持つ場合、データグラフ DG 内で p述語として持つトリプルの 主語であるノードの集合は、 SG 内の s に対する DG からの ターゲットである。

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

上の例では、与えられた形状に対して検証されるのは ex:Alice のみである。 なぜなら、それは ex:knows述語として持つ トリプル主語だからである。

3.1.3.5 objects-of ターゲット(sh:targetObjectsOf)

objects-of ターゲットは、 述語 sh:targetObjectsOf を用いて指定される。 形状内の sh:targetObjectsOfIRIである。

テキスト定義
s が形状グラフ SG 内の形状であり、 sSG 内で sh:targetObjectsOf について p を持つ場合、データグラフ DG 内で p述語として持つトリプルの 目的語であるノードの集合は、 SG 内の s に対する DG からの ターゲットである。

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

上の例では、与えられた形状に対して検証されるのは ex:Bob のみである。 なぜなら、それは ex:knows述語として持つ トリプル目的語だからである。

3.1.3.6 Where ターゲット (sh:targetWhere)

where ターゲットは、sh:targetWhere 述語を用いて指定される。 形状内の sh:targetWhere の各値は、 正形式形状である。

テキスト定義
s が形状グラフ SG 内の形状であり、 sSG 内で sh:targetWhere について w を持つ場合、 データグラフ DG 内で w適合する ノードの集合は、 SG 内の s に対する DG からの ターゲットである。

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

この例では、ex:Bob のみが ex:AdultPerson のフォーカスノードである。 なぜなら、彼は sh:targetWhere 形状によって定義された2つの制約に適合するからである。 sh:class 制約に基づき、彼は ex:PersonSHACL インスタンスであり、 彼の ex:age は18以上である。 しかし、ex:AdultPerson 形状はすべての成人が ex:votedFor について1つの値を持たなければならないと述べているため、 ex:Bobex:AdultPerson に適合しない。

sh:targetWhere は、形状に対する必要十分条件を提供する「定義」として解釈できることに注意されたい。 したがって、たとえば所与の条件集合を満たすすべてのノードを収集するなどの 「分類」タスクに使用できる可能性がある。

注意点として、where ターゲットの計算性能は実装間で異なる可能性がある。 最悪の場合、エンジンはデータグラフ内のすべてのノードを反復処理し、 それらを1つずつフィルターする必要がある。

3.1.3.7 明示的な 形状ターゲット(sh:shape)

明示的な形状ターゲットは、sh:shape 述語を用いて指定される。 sh:shape の各 IRIである。

テキスト定義
s形状グラフ内の 形状であり、 nデータグラフ内の ノードであるとする。 nデータグラフ内で sh:shape について s を持つ場合、 nsターゲットである。

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

sh:shapesh:targetNode とは異なるが、どちらも個々のノードを 形状にリンクするために使用できる。 sh:shape は、特定の 主語ノードから 目的語である形状を指す。 さらに、sh:targetNode トリプルは 形状グラフから照会されるのに対し、 sh:shape トリプルは データグラフ内に あることが期待される。

下の例のデータでは、提供された形状のターゲットは ex:Alice のみである:

3.1.4 形状または制約の重大度の宣言

形状は、 形状グラフ内でプロパティ sh:severity について 1つのを指定できる。 sh:severity の各値は IRIである。

形状ごとに重大度を宣言することに加えて、プロパティ sh:severity は、 形状主語とし、制約パラメーターの1つを 述語とするトリプルの 具象化子上でも使用できる。

T を、形状内の 制約を表す トリプルの集合とする。 形状グラフは、T 内の トリプル具象化子内で、プロパティ sh:severity について 最大1つの を指定できる。

sh:severity の値は 重大度と呼ばれる。 SHACL には、重大度を表すための、 下の表に列挙される IRI が含まれる。 これらは SHACL 語彙内で sh:Severity の SHACL インスタンスとして宣言されている。

重大度 説明
sh:Trace 制約違反ではないトレースメッセージ。
sh:Debug 制約違反ではないデバッグメッセージ。
sh:Info 情報メッセージを示す非重大な制約違反。
sh:Warning 警告を示す非重大な制約違反。
sh:Violation 制約違反。

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

検証プロセスは、適合性チェックに従って sh:severity の値を扱う。 さらに、ユーザーインターフェイスツールは、その値を用いて検証結果を分類できる。 sh:severity の値は、検証結果の sh:resultSeverity フィールドを設定するために SHACL プロセッサーによって使用される。 検証結果における重大度に関する節を参照。 任意の IRI を重大度として使用できる。

各形状および制約について、sh:severity が指定されていない場合、 sh:Violation が既定値である。 次の例はこれを示している。

次の例は、上の形状グラフのバリエーションであり、具象化を用いて個々の制約の重大度を指定している:

3.1.5 形状または制約のメッセージの宣言

形状はプロパティ sh:message について値を持つことができる。 sh:message の値は、 データ型 xsd:stringrdf:dirLangStringrdf:langString、または rdf:HTML を持つ リテラルである。 主語は、同じ言語タグを持つ sh:message の値を2つ以上持つべきではなく、 データ型 xsd:string を持つ値を複数持つべきでもない。

形状が形状グラフ内で sh:message について少なくとも1つの値を持つ場合、 その形状の結果として生成されるすべての 検証結果は、 sh:resultMessage の値として正確にこれらのメッセージを持つ。 すなわち、値は形状グラフから結果グラフへコピーされる。

形状ごとにメッセージを宣言することに加えて、プロパティ sh:message は、 形状主語とし、制約パラメーターの1つを 述語とするトリプルの 具象化子上でも使用できる。

T を、形状内の 制約を表す トリプルの集合とする。 形状グラフは、T 内の トリプル具象化子内で、プロパティ sh:message について 最大1つの を指定できる。

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

sh:resultMessage の値がどのように設定されるかの詳細については、 検証結果における sh:resultMessage に関する節を参照。

前節の例は、この仕組みを用いて2番目の検証結果に2つのメッセージを提供している。 次の例は、メッセージが具象化を用いて宣言されるバリエーションである。

3.1.6 形状と制約の 無効化

形状は、 プロパティ sh:deactivated について最大1つの値を持つことができる。 sh:deactivated の値は ノード式であり、 true または false のいずれかを(唯一の) 出力ノードとして持たなければならない。

expr を、形状内の sh:deactivatedとする。 evalExpr(expr, data graph, focus node, {})true を唯一の 出力ノードとして生成する場合、その形状は 無効化されていると呼ばれる。 無効化された形状は検証中に無視される。

形状のすべての制約を無効化することに加えて、個々の制約を無効化することも可能である。 これは具象化を用いて行われる。

形状主語とし、 sh:minCount などの パラメーター述語とする トリプルは、 プロパティ sh:deactivated について を持つ 具象化子を最大1つ持つことができる。

expr を、形状主語とし、 パラメーター述語とする トリプル上の 具象化子内における sh:deactivatedとする。 evalExpr(expr, data graph, focus node, {})true を唯一の 出力ノードとして生成する場合、その トリプルを使用する制約は 無効化された制約と呼ばれる。 無効化された制約は検証中に無視される。

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

SHACL Core において、sh:deactivated の有効な値は 定数リテラルノード式 true および false のみである。

この機能のユースケースには、形状の再利用とデバッグが含まれる。 他のグラフまたはファイルからの形状が所与の 形状グラフにインポートされるシナリオでは、 sh:deactivated をローカル形状グラフ内でインポートされた形状に対して true に設定し、現在のアプリケーションコンテキストに適用されない形状を除外できる。 これにより、元の作者が行った特定の仮定に同意しない場合でも、 他者が開発した SHACL グラフを再利用できる。 形状の作者が、その形状が他者によって無効化または変更される可能性があると予期する場合、 実際の形状には IRIを使用し、 空白ノードを使用しないことがよい慣行である。 たとえば、形状 ex:PersonShape におけるプロパティ ex:nameプロパティ形状は、 IRI ex:PersonShape-name を持つことができる。 sh:deactivated のもう1つの典型的なユースケースは、形状の開発とテスト中に、 特定の形状を(一時的に)無効化することである。

次の例は、sh:deactivated を用いて形状を無効化する使用法を示す。 形状が他のグラフからインポートされる場合、sh:deactivated true トリプルは インポートする側のグラフ内に置かれることになる。

次のバリエーションは、具象化を用いて、同じプロパティ形状上の他の制約に影響を与えずに sh:minCount 制約だけを無効化する。

3.2 ノード形状

ノード形状は、 形状グラフ内の 形状であり、 sh:path述語として持つ トリプル主語ではないものである。 ノード形状は、 sh:NodeShapeSHACL インスタンスとして宣言されることが推奨されるが、要求はされない。 sh:NodeShapeSHACL インスタンスは、プロパティ sh:path について を 持つことができない。

非形式的には、ノード形状は フォーカス ノードに関して満たされる必要がある制約を指定する。 プロパティ形状とは対照的に、ノード形状は主として プロパティ値ではなくフォーカスノード自体に適用される。

3.3 プロパティ形状

プロパティ形状は、 形状グラフ内の 形状であり、 sh:path述語として持つ トリプル主語である。 形状は sh:path について最大1つの を 持つ。 プロパティ形状内の sh:pathは、 正形式SHACL プロパティパスである。

プロパティ形状は、 sh:PropertyShapeSHACL インスタンスとして宣言されることが推奨されるが、要求はされない。 sh:PropertyShapeSHACL インスタンスは、プロパティ sh:path について 1つの を 持つ。

プロパティ形状は、 プロパティ sh:values について最大1つの を持ち、この 正形式ノード 式である。 プロパティ形状は、プロパティ sh:defaultValue について最大1つの を持ち、この 正形式ノード式である。 プロパティ形状は、sh:path についての 述語パスである場合にのみ、 sh:values および/または sh:defaultValue について を持つことができる。

非形式的には、プロパティ形状は、 フォーカス ノードから到達できる ノードに関して満たされる必要がある制約を指定する。 それは、(a) sh:path を用いて IRIとして 指定された所与のプロパティを直接たどること、 (b) sh:path を用いて指定された他の任意の SHACL プロパティパスを直接たどること、 (c) sh:values を用いて指定されたノード式を評価すること、または、 (d) 他の値が存在しない場合に sh:defaultValue を用いて指定されたノード式を評価することによって行われる。

sh:values および sh:defaultValue のサポートは SHACL Core では要求されないが、 [shacl12-sparql] などの 拡張には必要であることに注意されたい。

正形式プロパティ形状および ノード 形状の定義は、これら2つのノード集合を互いに素にすることに注意されたい。

次の例は、プロパティ形状のいくつかの構文上のバリエーションを示している。

4. SHACL プロパティパス

プロパティパスは、プロパティ形状の値 ノードを導出するために、sh:pathで使用できる。

SHACL には、次の SPARQL プロパティ パスの部分集合を表す RDF 項が含まれる: PredicatePath, InversePath, SequencePath, AlternativePath, ZeroOrMorePath, OneOrMorePath および ZeroOrOnePath

次の小節では、正形式SHACL プロパティパスの 構文規則を、SPARQL 1.2 プロパティパスへの写像規則とともに示す。 これらの規則は、RDF グラフ G 内で SHACL プロパティパスである RDF 項 p について、パス写像 path(p,G) を定義する。 2つの SHACL プロパティパスは、まったく同じ SPARQL プロパティパスに写像される場合、 同等のパスとみなされる。

RDF グラフ内のノードは、次の小節の構文規則の ちょうど1つを満たす場合、正形式SHACL プロパティ パス p である。 ノード p が空白 ノードであり、p の任意のパス写像が直接または推移的に p を参照する場合、 ノード p正形式の SHACL プロパティパスではない。

次の例は、いくつかの有効な SHACL プロパティパスと、それに対応する SPARQL 1.2 の同等表現を示している。

4.1 述語パス

述語 パスIRIである。

p述語パスである場合、path(p,G)piri とする SPARQL PredicatePath である。

4.2 シーケンスパス

シーケンス パスは、少なくとも2つのメンバーを持ち、各メンバーが正形式の SHACL プロパティパスである 空白ノードSHACL リストである。

pG 内のシーケンスパスであり、リストの メンバーv1, v2, ..., vn である場合、 path(p,G) は、path(v1,G)elt1 とし、 v2 のリストノードのパス写像の結果を elt2 とする SPARQL SequencePath である。

非形式的な注: このような ノードは、SHACL リスト内で、 rdf:first および rdf:rest 以外のプロパティについて を 持つべきではない。

4.3 代替パス

代替 パスは、G 内でちょうど1つのトリプルの主語である 空白ノードである。 このトリプルは sh:alternativePath を述語、L を目的語とし、 L は、少なくとも2つのメンバーを持ち、 L の各メンバーが正形式の SHACL プロパティパスである SHACL リストである。

pG 内の代替パスである場合、 その SHACL リスト L のメンバー v1, v2, ..., vn について、 path(p,G) は、path(v1,G)elt1 とし、 v2 についての AlternativePathelt2 とし、 ..., path(vn,G) までを順に持つ SPARQL AlternativePath である。

4.4 逆パス

逆パスは、 G 内でちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:inversePath を述語とし、 目的語 v正形式の SHACL プロパティパスである。

pG 内の逆パスである場合、path(p,G)path(v,G) をその elt とする SPARQL InversePath である。

4.5 ゼロ回以上のパス

ゼロ回以上の パスは、G 内でちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:zeroOrMorePath述語とし、 目的語 v正形式の SHACL プロパティパスである。

pG 内のゼロ回以上のパスである場合、 path(p,G)path(v,G) をその elt とする SPARQL ZeroOrMorePath である。

4.6 1回以上のパス

1回以上の パスは、G 内でちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:oneOrMorePath述語とし、 目的語 v正形式の SHACL プロパティパスである。

pG 内の1回以上のパスである場合、 path(p,G)path(v,G) をその elt とする SPARQL OneOrMorePath である。

4.7 ゼロ回または1回のパス

ゼロ回または1回の パスは、G 内でちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:zeroOrOnePath述語とし、 目的語 v正形式の SHACL プロパティパスである。

pG 内のゼロ回または1回のパスである場合、 path(p,G)path(v,G) をその elt とする SPARQL ZeroOrOnePath である。

5. ノード式

この節では、ノード式の概念を導入する。 SHACL Core は、次の機能においてノード式をサポートする:

SHACL Core のみに関心がある読者は、通常この節を読み飛ばしてよい。 Core はノード式として定数 IRI とリテラルのみをサポートするため、ノード式のユースケースは、 従来の SHACL Core の使用と同一である。

テキスト定義
ノード式は、ちょうど1つの ノード 式関数の構文規則に従う ノードである。 各ノード式関数は、 IRI関数名として持つ。
ノード式の評価
ノード式の評価は、 関数 evalExpr(expr, focusGraph, focusNode, scope) -> outputNodes として定義される。ここで、 ノード式の評価結果は、出力ノードと呼ばれる ノードの リスト(空である可能性があり、重複を含む可能性がある)である。 評価は評価失敗をもたらす場合もある。

SHACL Core 仕様は、次の2つの小節に基づく ノード式 関数のみを正確に定義する。 [shacl12-node-expr] は、ノード式の一般的な設計について より多くの背景を提供し、ノード式関数の包括的なライブラリーを含む。 [shacl12-sparql] などの他の仕様は、 空白ノードを用いて追加の関数を導入する。 したがって、ノード式は SHACL の拡張ポイントとして機能する。

5.1 IRI 式

ノード式であり、 IRIであるものは、 関数名 sh:IRIExpression を持つ IRI 式と呼ばれる。

RDF グラフ内のノードは、それが IRIである場合、正形式IRI 式である。

IRI 式の評価

IRI 式出力ノードは、 ちょうどそのノード式自体から成るリストである:

evalExpr(expr, focusGraph, focusNode, scope) -> [expr]

5.2 リテラル式

ノード式であり、 リテラルであるものは、 関数名 sh:LiteralExpression を持つ リテラル式と呼ばれる。

RDF グラフ内のノードは、それが リテラルである場合、 正形式リテラル 式である。

リテラル式の評価

リテラル 式出力ノードは、ちょうどその ノード式 自体から成るリストである:

evalExpr(expr, focusGraph, focusNode, scope) -> [expr]

6. 検証とグラフ

検証は、データグラフ形状グラフを入力として受け取り、 検証結果を含む検証レポートを生成する。 適合性チェックは、検証の簡略版であり、 真偽値の結果を生成する。 検証を実行できるシステムはプロセッサーと呼ばれ、 動詞 処理は、検証プロセスを指すために使われることがある。

SHACL は、RDF 結果グラフとして検証レポートを生成するプロセッサーが使用できる RDF 検証レポート語彙を定義する。 この仕様は、制約コンポーネントに関連付けられた 検証器の規範的定義に、SHACL 結果語彙を使用する。 検証レポート語彙のすべての必須プロパティを生成できる SHACL 実装のみが、標準適合である。

6.1 形状グラフ

形状グラフは、SHACL 検証プロセスに 形状および関連情報を提供する役割を持つ RDF グラフであり、それによって データグラフを形状に対して 検証できるようにする。

sh:ShapesGraph クラスは、 通常形状グラフの役割で動作するグラフの IRIrdf:type として MAY 使用できる。

所与の検証に対する 形状グラフは、たとえば owl:importssh:shapesGraph を通じて複数の形状グラフを結合した結果であってよい。 どのように構築されたとしても、検証に使用される 形状グラフは、 検証プロセス中に固定されたままで MUST ある。 詳細は6.5 検証を参照。

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

形状グラフは、述語 owl:importsで相互参照できる 再利用可能な検証モジュールであり得る。 検証前のステップとして、SHACL プロセッサーは、もともと提供された 形状グラフを、 owl:imports 述語を通じて 参照されるすべての形状グラフを推移的にたどってインポートすることで 拡張するべきである。 インポートされた IRI を解決する際、取得されたグラフが、そのインポートされた IRI を owl:versionIRI の目的語として持つ トリプルを含む場合、プロセッサーは、さらなる owl:imports 文をたどる目的で、 そのトリプルの主語を、インポートされたグラフの形状グラフ IRI として扱うべきである。 形式的には、プロセッサーは、バージョン IRI を使用してバージョン付き形状グラフをインポートできるように、 インポートを解決するためにプロパティパス ^owl:versionIRI?/owl:imports を反復的に使用するべきである。

次の例では、形状グラフは <http://example.com/shapes/company/v2> をインポートする。 プロセッサーがその IRI のグラフを取得すると、 その IRI が <http://example.com/shapes/company>owl:versionIRI として宣言されていることを見つける。 その後、プロセッサーは、さらなる owl:imports 文をたどる際に <http://example.com/shapes/company> を用いてそのグラフを識別し、 この場合は <http://example.com/shapes/base> をインポートする。

結果として得られるグラフは、検証のための不変の 形状グラフを形成する。

owl:versionIRI を使用してバージョン付き形状グラフをインポートする場合、 互換性のないバージョンをインポートしないよう注意するべきである。 特に、形状グラフのインポート閉包は、同一系列の異なるバージョンである2つのグラフ、 または一方が他方に対して owl:incompatibleWith を宣言するグラフを 含むべきではない(SHOULD NOT)。 そのような形状グラフは 不正形式とみなされる。 詳細は、正形式の形状 グラフの定義を参照。

形状宣言に加えて、形状グラフは sh:entailment 文など、SHACL プロセッサーのための追加情報を含むことがある。

6.2 データグラフ

任意の RDF グラフはデータグラフになり得る。

sh:DataGraph クラスは、 通常データグラフとして使用されるグラフの IRIrdf:type として MAY 使用できる。 ただし、形状グラフデータ グラフの役割を果たすことが MAY あることに注意されたい。たとえば、 形状自体を検証する場合である。

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

データグラフは、検証のための SHACL プロセッサーへの入力の1つである。 SHACL プロセッサーはそれを一般的な RDF グラフとして扱い、その性質について仮定を置かない。 たとえば、それはメモリ内グラフ、RDF データセットの名前付きグラフ、または SPARQL エンドポイントであり得る。

SHACL は、ファイルシステム、HTTP リクエスト、または RDF データセットなど、任意の手段によって取得された RDF グラフとともに使用できる。 SHACL は、グラフが任意の RDF 含意レジームの下でそのグラフから含意されたトリプルを含むかどうかについて 仮定しない。

SHACL がクラスターゲットを正しく識別し、Core SHACL 制約を検証するために、 データグラフには、データに関連するすべてのオントロジー公理、特にすべての rdfs:subClassOf トリプルが含まれていることが期待される。

データグラフ内の owl:imports は、検証作業の制御不能な増加を避けるため、 実行されない。複数の関連するオントロジーを検証したい場合は、それらを(まとめてまたは1つずつ) SHACL プロセッサーに渡し、owl:imports リンクに依存してはならない。

SHACL はデータグラフ内の owl:imports を実行しないが、データグラフの管理者は、 インポート指示として owl:imports の振る舞いに依存するアプリケーションに引き続き注意するべきである。 特に、一部のアプリケーションは、X a owl:Ontology . が直接存在することに 構文上依存しており、X owl:imports Y .owl:imports 文を Y をロードする指示として処理することがある。 詳細は OWL 2 Web Ontology Language Mapping to RDF Graphs, Section 3.1.1 を参照。 したがって、X a sh:DataGraph . という形式の文を使用する場合、 X a owl:Ontology . も含めるべきである。

6.3 rdfs:subClassOf トリプルのためのグラフ

SHACL のいくつかの機能( 7.1.1 sh:class3.1.3.2 クラスベースのターゲット (sh:targetClass)、および 3.1.3.3 暗黙のクラスターゲット と sh:ShapeClassなど)は、ある ノード が所与のクラスの SHACL インスタンスであるかどうかを判定するために、 SHACL 型の概念に依存する。 既定では、これは データグラフ内の rdfs:subClassOf および rdf:type トリプルを検索することによって決定される。 しかし、これは一部の場合には不十分である。なぜなら、rdfs:subClassOf トリプルは 多くの場合、インスタンスデータではなく、クラス定義および/または形状定義の一部として保存されるからである。

SHACL プロセッサーは、true に設定された場合に SHACL 型の定義を変更し、 rdfs:subClassOf トリプルを データグラフに加えて 形状グラフからも照会するようにする subClassOfInShapesGraph パラメーターを提供するべきである(SHOULD)。 rdf:type トリプルは常に データグラフ内に あることが期待される。

6.4 データ グラフを形状グラフにリンクする(sh:shapesGraph)

データ グラフは、述語 sh:shapesGraph を用いて SHACL プロセッサーに1つ以上のグラフを 提案するために使用されるトリプルを含むことができる。 sh:shapesGraph のすべての IRIである。 これは、データ グラフを検証するために使用される 形状グラフに含められるべき (SHOULD)グラフを表す。 sh:shapesGraph の値は owl:versionIRI の値であってよく、 したがって形状グラフについて説明した、バージョン IRI から形状グラフ IRI を 解決する同じ戦略がここにも適用される。

次の例では、SHACL プロセッサーは、所与のグラフを検証する際に、 ex:graph-shapes1 グラフおよび ex:graph-shapes2 グラフ (およびそれらの owl:imports)の和集合を 形状グラフとして使用するべきである(SHOULD)。

6.5 検証

検証は、何らかの入力から 検証結果への写像であり、次の段落で定義される。

形状グラフに対するデータグラフの検証: データグラフおよび 形状グラフが与えられたとき、 検証結果は、形状グラフ内のすべての 形状に対する データグラフ検証結果の和集合である。

形状に対するデータグラフの検証: データグラフおよび 形状グラフ内の 形状が与えられたとき、 検証結果は、 データグラフ内における 形状ターゲットに含まれるすべての フォーカス ノード検証結果の和集合である。

形状に対するフォーカスノードの検証: データグラフ内の フォーカスノードおよび 形状グラフ内の 形状が与えられたとき、 検証結果は、その 形状によって宣言されたすべての 制約に対する フォーカス ノード検証結果の和集合である。ただし、 形状無効化されている場合は、 検証結果は空である。

制約に対するフォーカスノードの検証: データグラフ内の フォーカスノードおよび 形状グラフ内の 種別 C制約が与えられたとき、 検証結果は、 制約 コンポーネント C検証器によって定義される。 これらの検証器は通常、入力として フォーカスノード形状グラフ内の 制約Cパラメーターの具体的な 、 およびその制約を宣言する 形状値 ノードを取る。

検証中、データグラフおよび 形状グラフは 不変のままで MUST ある。すなわち、検証終了時の両グラフは、検証開始時のグラフと 同一で MUST ある。 SHACL プロセッサーは、これらのグラフが保存済みグラフの変更を許す RDF ストアの一部である場合でも、 形状グラフまたはデータグラフを構築するために使用するグラフを変更してはならない(MUST NOT)。 SHACL プロセッサーは、検証結果を含むグラフなど、自ら作成するグラフを保存することが MAY あり、この操作は RDF ストア内の既存のグラフを変更することが MAY あるが、形状グラフまたはデータグラフを構築するために使用された いずれのグラフも変更してはならない。 したがって、SHACL 処理は冪等である。

6.5.1 失敗

検証および 適合性 チェックは、失敗をもたらす場合がある。 たとえば、特定の SHACL プロセッサーは再帰的な形状を許可するが、データ内のループを検出した場合に 失敗を報告することがある。 失敗は、リソース枯渇によって報告される場合もある。 失敗は、実装固有のチャネルを通じて通知される。

6.5.2 不正形式の 形状グラフの扱い

形状グラフ不正形式のノードを 含む場合、検証プロセスの結果は未定義である。 SHACL プロセッサーは、この場合に 失敗を生成するべきである (SHOULD)。 6.7.1.4 形状グラフの 構文チェック(sh:shapesGraphWellFormed)も参照。

6.5.3 再帰的な 形状の扱い

次のプロパティは、SHACL Core におけるいわゆる 形状を期待する制約 パラメーターである:

次のプロパティは、SHACL Core におけるいわゆる リスト受容制約パラメーターである:

RDF グラフ G 内の形状 s1 は、 ある制約コンポーネントの非リスト受容で形状を期待するパラメーターについて s2として持つ場合、または ある制約コンポーネントのリスト受容で形状を期待するパラメーターについての メンバーとして s2 を持つ場合、 G 内で形状 s2参照する。 RDF グラフ G 内の形状は、G 内で 参照する関係の推移閉包によって 自分自身に関連付けられている場合、G 内の 再帰的な 形状である。

再帰的な形状を伴う 検証は SHACL では定義されず、SHACL プロセッサー実装に委ねられる。 たとえば、SHACL プロセッサーは再帰シナリオをサポートしてもよく、再帰を検出したときに失敗を 生成してもよい。

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

上記の再帰ポリシーは、幅広い実装戦略をサポートするために選択された。 再帰を未定義のままにすることで、実装は再帰をサポートしないことを選べるため、 循環をサポートせずに(SPARQL エンドポイントに対する)静的な SPARQL クエリー集合を発行できる。 ワーキンググループは、他の実装が再帰をサポートする可能性があること、および一部の形状グラフが これらの特定の特性に依存する可能性があることを認識している。 将来の作業、たとえば W3C コミュニティグループにおける作業により、 再帰が十分に定義された SHACL の特定の方言の定義につながることが期待される。

6.6 適合性チェック

フォーカスノードは、 形状に対する そのフォーカスノード検証結果の集合に、不許可レベル集合の重大度レベルを持つ 検証結果が含まれず、かつそれによって 失敗が報告されていない場合に限り、 その形状に適合する

不許可の重大度レベルの集合は、sh:conformanceDisallows を述語とし、 検証レポートを主語とするトリプルの 目的語として定義される。 検証レポートがそのようなトリプルを含まない場合、sh:Violationsh:Warning、および sh:Info が既定値として設定される。

適合性チェックは、所与の フォーカスノードが 所与の形状適合する 場合に限り true を生成し、それ以外の場合は false を生成する。

SHACL Core のすべての形状を期待する制約パラメーターは、 適合性チェックに依存することに注意されたい。 これらの場合、適合性チェックの結果を判定するために使用される 検証結果は、 周囲の検証プロセスのものとは分離され、通常は同じ検証レポートには含まれない (おそらく sh:detail の値として含まれる場合を除く)。

6.7 検証レポート

検証レポートは、検証プロセスの結果であり、 適合性と、すべての 検証結果の集合を報告する。 検証レポートは、この節で定義される SHACL 検証レポート語彙で記述される。 この語彙は、データグラフ内の違反を識別または修正する方法についての手がかりを提供し得る 構造情報を表すための RDF プロパティを定義する。

SHACL 適合プロセッサーは、この仕様で説明されるすべての必須の 検証結果を含む検証レポートを返す能力を 持たなければならない(MUST)。 SHACL 適合プロセッサーは、返される結果数を制限できる任意引数をサポートしてもよい (MAY)。 この柔軟性は、たとえば一部の大規模データセット検証ユースケースで必要とされる。

次のグラフは、形状グラフに適合するデータグラフの検証に対する検証レポートの例を表している。

次のグラフは、形状グラフに適合しないデータグラフの検証に対する検証レポートの例を表している。 sh:resultMessage の具体的な値は SHACL によって義務付けられておらず、 実装固有とみなされることに注意されたい。

6.7.1 検証 レポート(sh:ValidationReport)

検証プロセスの結果は、 sh:ValidationReportSHACL インスタンスをちょうど1つ持つ RDF グラフである。 RDF グラフは、来歴メタデータなどの追加情報を含んでもよい(MAY)。

6.7.1.1 適合(sh:conforms)

結果グラフ内の sh:ValidationReport の各 SHACL インスタンスは、 プロパティ sh:conforms についてちょうど1つの値を持ち、 その値はデータ型 xsd:boolean である。 これは適合性チェックの結果を表す。

6.7.1.2 適合性不許可集合(sh:conformanceDisallows

結果グラフ内の sh:ValidationReport の各 SHACL インスタンスは、 プロパティ sh:conformanceDisallows について1つ以上の値を持ってもよい (MAY)。 sh:conformanceDisallows のすべての値は IRI で MUST ある。

すべての値を組み合わせて、不許可の重大度レベル集合を定義する。 不許可の重大度レベル集合に含まれる重大度レベルを持つ sh:ValidationResult が存在する場合、関連する sh:ValidationReport インスタンス上の sh:conforms 値は false にならなければならない (MUST)。

結果グラフ内にプロパティ sh:conformanceDisallows の値が存在しない場合、 sh:Violationsh:Warning、および sh:Info から成る 既定集合を使用しなければならない(MUST)。

適合性不許可集合は、検証エンジンによって定義される。 検証エンジンは、この集合をカスタマイズする仕組みを提供してもよい(MAY)。

6.7.1.3 結果(sh:result)

検証プロセスによって生成される すべての検証結果(適合性チェックの文脈で言及されたものを除く)について、 結果グラフ内の sh:ValidationReport の SHACL インスタンスは、 プロパティ sh:result について値を持つ。 sh:result の各値は、クラス sh:ValidationResultSHACL インスタンスである。

6.7.1.4 形状グラフの構文チェック(sh:shapesGraphWellFormed)

SHACL 検証エンジンは、 形状グラフ正形式かどうかを チェックすることを厳密には要求されない。 そのようなチェックを実行する実装(たとえば、形状グラフがシステムにインストールされるとき、 または検証の前もしくは最中)は、この事実を検証レポートの利用者に知らせるために プロパティ sh:shapesGraphWellFormed を使用するべきである (SHOULD)。 結果グラフ内の sh:ValidationReport の SHACL インスタンスが sh:shapesGraphWellFormed について trueとして持つ場合、 プロセッサーは、 検証プロセスに使用された 形状グラフ正形式であると 確信していたことを意味する。

6.7.2 検証 結果(sh:ValidationResult)

SHACL は、個々の SHACL 検証結果を報告するために、 sh:ValidationResultsh:AbstractResult のサブクラスとして定義する。 SHACL 実装は、たとえば正常に完了した制約チェックや累積結果を報告するために、 sh:AbstractResult の他の SHACL サブクラスを使用してもよい。

この節の残りの小節で説明されるすべてのプロパティは、 sh:ValidationResult 内で指定できる。 プロパティ sh:focusNodesh:resultSeverity、および sh:sourceConstraintComponent は、すべての検証結果について必須である唯一のプロパティである。

6.7.2.1 フォーカスノード (sh:focusNode)

各検証結果は、プロパティ sh:focusNode についてちょうど1つの値を持ち、 その値は結果を引き起こした フォーカスノードと等しい。 これは、検証結果が生成されたときに検証されていた フォーカスノードである。

6.7.2.2 パス(sh:resultPath)

検証結果は、正形式SHACL プロパティパスを指すプロパティ sh:resultPath の値を持つことがある。 プロパティ形状によって生成された結果については、 別段の定めがない限り、この SHACL プロパティパスは、その形状の sh:pathと同等である。 sh:path p空白ノードである場合、 sh:resultPath は結果グラフ内における pディープコピーである。

6.7.2.3 値(sh:value)

検証結果は、結果を引き起こした RDF 項を、プロパティ sh:valueとして 最大1つ含むことがある。 SHACL Core コンポーネントの検証器のテキスト定義は、この値がどのように構築されるかを指定する。 多くの場合、それは制約に違反した 値ノードである。

6.7.2.4 ソース(sh:sourceShape)

検証結果は、プロパティ sh:sourceShape の唯一の として、 所与の sh:focusNode が検証された対象の 形状を含むことがある。

6.7.2.5 制約コンポーネント(sh:sourceConstraintComponent)

検証結果は、プロパティ sh:sourceConstraintComponent についてちょうど1つの値を持ち、 この値は結果を引き起こした 制約コンポーネントIRIである。 たとえば、sh:minCount の値に基づく制約違反によって生成された結果は、 ソース制約コンポーネント sh:MinCountConstraintComponent を持つことになる。

6.7.2.6 詳細(sh:detail)

プロパティ sh:detail は、(親)結果を、その(親)結果の原因について さらなる詳細を提供できる sh:AbstractResult の1つ以上の SHACL インスタンスに リンクすることがある。 SHACL プロセッサーの能力によっては、たとえば sh:node を介した適合性チェックの一部として 評価された制約の違反が含まれることがある。

6.7.2.7 メッセージ (sh:resultMessage)

検証結果は、たとえば人間に追加のテキスト詳細を伝えるために、プロパティ sh:resultMessage の値を持つことがある。 sh:resultMessage は複数の値を持つことがあるが、同じ言語タグを持つ値が2つあってはならない。 これらの値は、形状グラフ内の制約の sh:message の値に基づいて 検証エンジンによって生成される。形状のメッセージの宣言を参照。 具象化を用いて宣言されたメッセージは、周囲の形状で宣言されたものより優先される。 制約が形状グラフ内で sh:message について値を持たない場合、 SHACL プロセッサーは sh:resultMessage の他の値を自動生成してもよい (MAY)。

6.7.2.8 重大度 (sh:resultSeverity)

各検証結果は、プロパティ sh:resultSeverity についてちょうど1つの を持ち、 この値はIRIである。 値は次の規則(順序どおり)によって決定される:

  1. 結果を引き起こした 制約パラメーターを含む トリプルのいずれかの 具象化子における sh:severity
  2. 結果を引き起こした 形状形状 グラフ内における sh:severity
  3. 形状または制約について sh:severity が指定されていない場合、 sh:Violation を既定値とする。

6.8 値ノード

ほとんどの制約コンポーネントの 検証器は、次の2つの小節で定義される 値ノードの概念を使用する。

6.8.1 ノード形状の値ノード

ノード形状の場合、 値ノードは個々の フォーカスノードであり、ちょうど1つのメンバーを持つ集合を形成する。

6.8.2 プロパティ形状の 値ノード

sh:path p について を持つ プロパティ形状の場合、 値ノードの集合は、次の手順によって生成される:

  1. pパス写像によって フォーカスノードから到達できる、 データグラフ内の すべてのノードを追加する。
  2. e が、その プロパティ形状における sh:valuesである場合、 evalExpr(e, data graph, focus node, {})出力ノードを追加する。
  3. 集合がまだ空であり、d がその プロパティ形状における sh:defaultValueである場合、 evalExpr(d, data graph, focus node, {})出力ノードを追加する。

7. コア制約コンポーネント

この節では、すべての SHACL Core プロセッサーがサポートしなければならない(MUST)組み込みの SHACL Core 制約コンポーネントを定義する。 各制約コンポーネントの定義には、その IRI と パラメーターの表が含まれる。 別段の定めがない限り、これらのパラメーターはすべて 必須パラメーターである。 これらのパラメーター表に列挙された構文規則のいずれかに違反する形状は 不正形式である。

各制約コンポーネントには、コンポーネントに関連付けられた 検証器を記述する テキスト定義も含まれる。 これらのテキスト定義は、制約内のパラメーターの値を、 $paramName という形式の変数で参照する。ここで paramName は、 パラメーターの IRI のうち、 sh: 名前空間の後の部分である。 たとえば、sh:ClassConstraintComponent のテキスト定義は、 sh:class の値を変数 $class を用いて参照する。 SHACL Core において、パラメーター値という用語は、 パラメーターの、 すなわち、形状グラフ内の トリプル目的語を意味する。ここで、その 主語形状であり、 述語は(sh:class などの) パラメーターである。

課題 1

執筆時点では、WG の意図は、SHACL Core の外部で SHACL の方言を定義し、その中で パラメーター値という用語が ノード式も 許容するようにすることである。 すべての制約コンポーネントがパラメーター値という用語を使用するわけではなく、 代わりに という用語を参照することに注意されたい。 たとえば、sh:node の値は、決して ノード式には なり得ない。なぜなら、そうすると空白ノードの扱いが複雑になるからである。 TODO: Node Expression 仕様が準備できている場合はそこへのリンクを追加し、 そうでなければ上記の文を明確化する。

これらの検証器は、コンポーネントによって生成される検証結果の唯一のものを定義することに注意されたい。 さらに、検証器は常に新しい結果ノードを生成する。すなわち、テキスト定義が 「...検証結果が存在する...」と述べる場合、それは結果グラフ内の別個の新しいノードを指す。

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

SHACL Core に含まれる制約コンポーネントの選択は、 [shacl-ucr] 文書によって収集された要件に基づいて行われた。 できるだけ多くの一般的なユースケースを網羅しようとすることと、 Core 言語の規模を扱いやすく保つこととのバランスに、特別な注意が払われた。 すべてのユースケースを Core 言語だけで表現できるわけではない。 代わりに、SHACL-SPARQL は、この仕様の第2部で説明される拡張機構を提供する。 追加の再利用可能な 制約コンポーネントのライブラリーが、 第三者によって維持されることが期待される。

別段の定めがない限り、Core 制約コンポーネントは プロパティ形状ノード 形状の両方で使用できる。 一部の制約パラメーターには、それらを使用する ノード形状不正形式にする構文規則が付随している。 これには、プロパティ形状でのみ サポートされる sh:minCount などが含まれる。

7.1 値型制約 コンポーネント

この節の制約コンポーネントに共通する点は、値ノードの型を制限するために使用できることである。 複数の値型の選択肢は、sh:or を用いて表現できることに注意されたい。

7.1.1 sh:class

sh:class によって指定される条件は、各 値ノードが、与えられた型の SHACL インスタンスであることである。

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

パラメーター:
プロパティ 要約と構文規則
sh:class すべての値ノードの型。 形状内の sh:class の値は、IRI、 または、すべてのメンバーIRIである 正形式SHACL リストである 空白ノードのいずれかである。
テキスト定義
$classsh:classパラメーター値とする。 classes を、IRIの 集合とし、$classIRIである場合、 その集合はちょうどその IRI のみから成り、 $class空白ノードSHACL リストである場合、 その集合はちょうどそのリストのメンバーから成るものとする。

値ノードごとに、 それがリテラルであるか、または非リテラルであって データグラフ内で classes のいずれの SHACL インスタンスでもない場合、 その値ノードsh:value とする 検証結果が存在する。

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

sh:class の複数の値は連言として解釈されることに注意されたい。 すなわち、値はそれらすべての SHACL インスタンスである必要がある。 和集合の意味にはリストを使用する。

次の例は、sh:class のリストベースの構文を示しており、 プロパティ ex:pet の値は猫または犬のいずれかでなければならないことを意味する。

7.1.2 sh:datatype

sh:datatype は、各 値ノードのデータ型に関して満たされるべき条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:datatype すべての値ノードの許可されるデータ型(例: xsd:integer)。 形状は sh:datatype について最大1つの値を持つ。 形状内の sh:datatype の値は、IRI、 または、すべてのメンバーIRIである 正形式SHACL リストである 空白ノードのいずれかである。
テキスト定義
$datatypesh:datatypeパラメーター値とする。 datatypes を、IRIの 集合とし、$datatypeIRIである場合、 その集合はちょうどその IRI のみから成り、 $datatype空白ノードSHACL リストである場合、 その集合はちょうどそのリストのメンバーから成るものとする。

値ノードごとに、 それがリテラルでない場合、または datatypes のどれにも一致しないデータ型を持つ リテラルである場合、 その値ノードsh:value とする 検証結果が存在する。

リテラルのデータ型は、SPARQL 1.2 の datatype 関数に従って決定される。 リテラルは、その リテラルのデータ型が同じ IRIを持ち、 かつ SPARQL 1.2 でサポートされるデータ型については 不正型リテラルでない場合、データ型に一致する。

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

sh:datatype の値は通常、xsd:string などの データ型である。

次の例はリストベースの構文を示しており、 rdfs:label のすべての値は xsd:string または rdf:langString のいずれかでなければならないことを意味する。

7.1.3 sh:nodeKind

sh:nodeKind は、各 値ノードの RDF ノード種別によって満たされるべき条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:nodeKind すべての値ノードのノード種別(IRI、空白ノード、リテラル、トリプル項、またはこれらの組み合わせ)。 形状は sh:nodeKind について最大1つの値を持つ。 形状内の sh:nodeKind の値は、IRI、またはすべてのメンバーが IRI である 正形式の SHACL リストである空白ノードのいずれかである。

sh:nodeKind の値が IRI である場合、形状内の sh:nodeKind の値は、クラス sh:NodeKind の次の7つの インスタンスのいずれかである: sh:BlankNode, sh:IRI, sh:Literal sh:BlankNodeOrIRI, sh:BlankNodeOrLiteral, sh:IRIOrLiteral, および sh:TripleTerm

sh:nodeKind の値が正形式の SHACL リストである場合、形状内のそれらの リストのメンバーは、クラス sh:NodeKind の次の4つのインスタンスの いずれかである: sh:BlankNode, sh:IRI, sh:Literal, および sh:TripleTerm
テキスト定義
$nodeKindsh:nodeKindパラメーター値とする。 $nodeKinds を、IRIの 集合とし、$nodeKindIRIである場合、 その集合はちょうどその IRI のみから成り、 $nodeKind空白ノードSHACL リストである場合、 その集合はちょうどそのリストのメンバーから成るものとする。

$nodeKinds のどれにも一致しない 値ノードごとに、 その値ノードsh:value とする 検証結果が存在する。 任意のIRIは、sh:IRIsh:BlankNodeOrIRI および sh:IRIOrLiteral にのみ一致する。 任意の空白ノードは、sh:BlankNodesh:BlankNodeOrIRI および sh:BlankNodeOrLiteral にのみ一致する。 任意のリテラルは、sh:Literalsh:BlankNodeOrLiteral および sh:IRIOrLiteral にのみ一致する。 任意のトリプル項は、 sh:TripleTerm にのみ一致する。

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

次の例は、任意の主語において ex:knows のすべての値が IRI である必要があることを述べている。

次の例はリストベースの構文を示しており、任意の主語において ex:knows のすべての値は IRI または空白ノードである必要があることを意味する。

7.2 カーディナリティ制約 コンポーネント

次の制約コンポーネントは、所与の フォーカスノードに対する 値ノードの数に関する制限を表す。

7.2.1 sh:minCount

sh:minCount は、条件を満たす 値ノードの最小数を 指定する。 最小カーディナリティ値が 0 の場合、この制約は常に満たされるため、省略してもよい。

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

パラメーター:
プロパティ 要約と構文規則
sh:minCount 最小カーディナリティ。 ノード形状sh:minCount についていかなる値も持つことができない。 プロパティ形状sh:minCount について最大1つの値を持つ。 プロパティ形状内の sh:minCount の値は、データ型 xsd:integer を持つリテラルである。
テキスト定義
$minCountsh:minCountパラメーター値とする。 値ノードの数が $minCount より少ない場合、 検証結果が存在する。

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

7.2.2 sh:maxCount

sh:maxCount は、条件を満たす 値ノードの最大数を 指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:maxCount 最大カーディナリティ。 ノード形状sh:maxCount についていかなる値も持つことができない。 プロパティ形状sh:maxCount について最大1つの値を持つ。 プロパティ形状内の sh:maxCount の値は、データ型 xsd:integer を持つリテラルである。
テキスト定義
$maxCountsh:maxCountパラメーター値とする。 値ノードの数が $maxCount より多い場合、 検証結果が存在する。

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

7.3 値範囲制約 コンポーネント

次の制約コンポーネントは、<<=>>= などの演算子を介して比較可能な値ノードによって満たされるべき 値範囲条件を指定する。 次の例は、これらの制約コンポーネントの典型的なユースケースを示している。

7.3.1 sh:minExclusive

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

パラメーター:
プロパティ 要約と構文規則
sh:minExclusive 排他的最小値。 形状内の sh:minExclusive の値は リテラルである。 形状は sh:minExclusive について最大1つの値を持つ。
テキスト定義
$minExclusivesh:minExclusiveパラメーター値とする。 SPARQL 式 $minExclusive < vtrue を返さない 値ノード v ごとに、 vsh:value とする 検証結果が存在する。

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

値ノードを指定された範囲と比較できない場合、たとえば文字列と整数を比較する場合には、 検証結果が存在する。

7.3.2 sh:minInclusive

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

パラメーター:
プロパティ 要約と構文規則
sh:minInclusive 包括的最小値。 形状内の sh:minInclusive の値は リテラルである。 形状は sh:minInclusive について最大1つの値を持つ。
テキスト定義
$minInclusivesh:minInclusiveパラメーター値とする。 SPARQL 式 $minInclusive <= vtrue を返さない 値ノード v ごとに、 vsh:value とする 検証結果が存在する。

7.3.3 sh:maxExclusive

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

パラメーター:
プロパティ 要約と構文規則
sh:maxExclusive 排他的最大値。 形状内の sh:maxExclusive の値は リテラルである。 形状は sh:maxExclusive について最大1つの値を持つ。
テキスト定義
$maxExclusivesh:maxExclusiveパラメーター値とする。 SPARQL 式 $maxExclusive > vtrue を返さない 値ノード v ごとに、 vsh:value とする 検証結果が存在する。

7.3.4 sh:maxInclusive

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

パラメーター:
プロパティ 要約と構文規則
sh:maxInclusive 包括的最大値。 形状内の sh:maxInclusive の値は リテラルである。 形状は sh:maxInclusive について最大1つの値を持つ。
テキスト定義
$maxInclusivesh:maxInclusiveパラメーター値とする。 SPARQL 式 $maxInclusive >= vtrue を返さない 値ノード v ごとに、 vsh:value とする 検証結果が存在する。

7.4 文字列ベース制約 コンポーネント

この節の制約コンポーネントに共通する点は、 値ノードの文字列表現に関する条件を指定することである。

7.4.1 sh:minLength

sh:minLength は、条件を満たす各 値ノードの 最小文字列長を指定する。 これは任意のリテラルおよび IRIに 適用できるが、空白ノードには適用できない。

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

パラメーター:
プロパティ 要約と構文規則
sh:minLength 最小長。 形状内の sh:minLength の値は、データ型 xsd:integer を持つリテラルである。 形状は sh:minLength について最大1つの値を持つ。
テキスト定義
$minLengthsh:minLengthパラメーター値とする。 値ノード v ごとに、 v の文字列表現(SPARQL str 関数によって定義される) の長さ(SPARQL STRLEN 関数によって定義される) が $minLength より短い場合、または v空白ノードである場合、 vsh:value とする 検証結果が存在する。

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

sh:minLength の値が 0 の場合、文字列長に関する制限はないが、 値ノードが空白ノードであれば、それでも制約に違反することに注意されたい。

7.4.2 sh:maxLength

sh:maxLength は、条件を満たす各 値ノードの 最大文字列長を指定する。 これは任意のリテラルおよび IRIに 適用できるが、空白ノードには適用できない。

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

パラメーター:
プロパティ 要約と構文規則
sh:maxLength 最大長。 形状内の sh:maxLength の値は、データ型 xsd:integer を持つリテラルである。 形状は sh:maxLength について最大1つの値を持つ。
テキスト定義
$maxLengthsh:maxLengthパラメーター値とする。 値ノード v ごとに、 v の文字列表現(SPARQL str 関数によって定義される) の長さ(SPARQL STRLEN 関数によって定義される) が $maxLength より長い場合、または v空白ノードである場合、 vsh:value とする 検証結果が存在する。

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

7.4.3 sh:pattern

sh:pattern は、条件を満たすために各 値ノードが一致する 正規表現を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:pattern すべての値ノードが一致する必要のある正規表現。 形状内の sh:pattern の値は、データ型 xsd:string を持つリテラルである。 形状内の sh:pattern の値は、 SPARQL REGEX 関数に対する有効な pattern 引数である。
sh:flags SPARQL 1.2 REGEX と同様に解釈される、 任意のフラグ文字列。 形状内の sh:flags の値は、データ型 xsd:string を持つリテラルである。
テキスト定義
$patternsh:patternパラメーター値とする。 $flagssh:flagsパラメーター値とする。 値ノードごとに、 それが空白ノードであるか、または文字列表現(SPARQL str 関数によって定義される) が正規表現 $patternSPARQL REGEX 関数によって定義される) に一致しない場合、 その値ノードsh:value とする 検証結果が存在する。 $flags が値を持つ場合、一致処理は、$flags を第3引数として使用して、 SPARQL REGEX 関数の3引数版の定義に従わなければならない(MUST)。

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

7.4.4 sh:singleLine

課題 2

この機能は、この機能(および類似の)便宜機能に関する WG の決議待ちのため「リスクあり」である。 WG は、Core に入れるべき機能と、他の文書に入れるべき機能との境界をどこに引くかについて、 まだ確信していない。 もともとは Issue 177 として議論された。

true に設定されている場合、sh:singleLine値ノードが改行を含んではならないことを指定する。 制約検証に加えて、この情報は、ユーザーインターフェイス構築器が (単一行の)テキストフィールドと(複数行の)テキストエリアを選択するために利用できる。

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

パラメーター:
プロパティ 要約と構文規則
sh:singleLine この制約を有効化するための true 形状内の sh:singleLine の値は、データ型 xsd:boolean を持つリテラルである。 形状は sh:singleLine について最大1つの値を持つ。
テキスト定義
$singleLinesh:singleLineパラメーター値とする。 $singleLinetrue である場合、語彙形式が 正規表現(SPARQL REGEX 関数によって定義される) [\f\r\n\v] に一致するリテラルである 値ノードごとに、 検証結果が存在する。

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

7.4.5 sh:languageIn

sh:languageIn によって指定される条件は、各 値ノードに許可される言語タグが、所与の言語タグのリストによって 制限されることである。

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

パラメーター:
プロパティ 要約と構文規則
sh:languageIn [BCP47] に従う 基本言語範囲のリスト。 形状内の sh:languageIn の各値は SHACL リストである。 そのようなリストの各 メンバーは、 データ型 xsd:string を持つリテラルである。 形状は sh:languageIn について最大1つの値を持つ。
テキスト定義
$languageInsh:languageInとする。 値ノードごとに、 それがリテラルでない場合、または $languageInメンバーである 基本言語範囲のいずれにも一致する言語タグを持たない場合、 SPARQL langMatches 関数で定義される フィルタリングスキーマに従って、 その値ノードsh:value とする 検証結果が存在する。

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

次の例の形状は、ex:prefLabel のすべての値が 英語またはマオリ語のいずれかであり得ることを述べている。

7.4.6 sh:uniqueLang

プロパティ sh:uniqueLang は、同じ言語タグを使用する 値ノードの組が存在してはならないことを指定するために true に設定される。存在する場合は、テキスト方向も考慮に含める。

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

パラメーター:
プロパティ 要約と構文規則
sh:uniqueLang この制約を有効化するための true 形状内の sh:uniqueLang の値は、データ型 xsd:boolean を持つリテラルである。 プロパティ形状は sh:uniqueLang について最大1つの値を持つ。 ノード形状sh:uniqueLang についていかなる値も持つことができない。
テキスト定義
$uniqueLangsh:uniqueLangパラメーター値とする。 $uniqueLangtrue である場合、 少なくとも2つの値ノードによって 使用される空でない言語タグごとに、 検証結果が存在する。 値ノードデータ型 rdf:dirLangString を持つ場合、 基底方向が一意性条件に含められる。 たとえば、"1"@ar--rtl"1"@ar-ltr は異なり、 "1"@ar--rtl"1"@ar の組も同様に異なる。

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

7.5 リスト制約コンポーネント

この節の制約コンポーネントは、値ノードであり、SHACL リストであるものに適用される。 それらは、SHACL リストの構造、長さ、およびメンバーに関する条件を指定する。

7.5.1 sh:memberShape

sh:memberShape は、SHACL リストである値ノードのすべてのメンバーが、与えられたノード形状に適合しなければならないことを指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:memberShape SHACL リストのすべてのメンバーが 適合しなければならない形状。 sh:memberShape の値は、正形式ノード形状でなければならない。
テキスト定義
$memberShapesh:memberShapeパラメーター値とする。 各値ノード vSHACL リストでなければならない — v が SHACL リストでない場合、 検証結果が存在する。 SHACL リスト v の任意のメンバー m$memberShape適合しない場合、検証結果が存在する。

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

$memberShape に適合しない値ノード v の各メンバー m は、 v に対する検証結果内で、個別の sh:detail として 報告されるべきである。 v が有効なSHACL リストでない場合、これは トップレベルの検証結果として報告されるべきであり、個々のメンバーの 検証は試みるべきではない。

検証結果内で sh:detail を生成する方法の例は、SHACL テストスイートの sh:memberShape のテストケースで見つけることができる: memberShape-001.ttl

次の例では、プロパティ ex:speakerOrder のすべての値は、メンバーが IRI である SHACL リストでなければならない。

7.5.2 sh:minListLength

sh:minListLength は、SHACL リストである 値ノードが持たなければならない メンバーの最小数を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:minListLength SHACL リスト内のメンバーの最小数。 形状内の sh:minListLength の値は、 データ型 xsd:integer を持つリテラルである。 形状内の sh:minListLength の値は、0 以上の整数である。
テキスト定義
$minListLengthsh:minListLengthパラメーター値とする。 各値ノード vSHACL リストでなければならない — v が SHACL リストでない場合、 検証結果が存在する。 リスト v 内のメンバー数が $minListLength より少ない場合、 検証結果が存在する。

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

次の例では、プロパティ ex:skills のすべての値は、少なくとも1つのメンバーを持つ SHACL リストでなければならない。 sh:minListLength の追加のテストケースは SHACL テストスイートで見つけることができる: minListLength-001.ttl

7.5.3 sh:maxListLength

sh:maxListLength は、SHACL リストである 値ノードが持たなければならない メンバーの最大数を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:maxListLength SHACL リスト内のメンバーの最大数。 形状内の sh:maxListLength の値は、 データ型 xsd:integer を持つリテラルである。 形状内の sh:maxListLength の値は、0 以上の整数である。
テキスト定義
$maxListLengthsh:maxListLengthパラメーター値とする。 各値ノード vSHACL リストでなければならない — v が SHACL リストでない場合、 検証結果が存在する。 リスト v 内のメンバー数が $maxListLength より多い場合、 検証結果が存在する。

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

次の例では、プロパティ ex:hobbies のすべての値は、多くても2つのメンバーを持つ SHACL リストでなければならない。 sh:maxListLength の追加のテストケースは SHACL テストスイートで見つけることができる: maxListLength-001.ttl

7.5.4 sh:uniqueMembers

sh:uniqueMembers は、SHACL リストである 値ノードが一意のメンバーを持たなければならないかどうかを指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:uniqueMembers SHACL リストのメンバーが一意でなければならないかどうかを 指定するブール値。 形状内の sh:uniqueMembers の値は、データ型 xsd:boolean を持つリテラルである。
テキスト定義
$uniqueMemberssh:uniqueMembersパラメーター値とする。 各値ノード vSHACL リストでなければならない — v が SHACL リストでない場合、 検証結果が存在する。 $uniqueMemberstrue であり、リスト v に重複メンバーが ある場合、 検証結果が存在する。

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

リスト v の各重複メンバー m は、v に対する 検証結果内で個別の sh:detail として報告されるべきである。リスト v が有効な SHACL リストでない場合、これはトップレベルの検証 結果として報告されるべきであり、一意なメンバーシップの検証は試みるべきではない。

検証結果内で sh:detail を生成する方法の例は、SHACL テストスイートの sh:uniqueMembers のテストケースで見つけることができる: uniqueMembers-001.ttl

次の例では、プロパティ ex:preferences のすべての値は、それぞれの SHACL リスト内で 一意の値を持つメンバーから成る SHACL リストでなければならない。

7.6 プロパティ対制約 コンポーネント

この節の制約コンポーネントは、他のプロパティまたはプロパティパスとの関係において、 値ノードの集合に 関する条件を指定する。 これらの制約コンポーネントは、プロパティ形状によってのみ使用できる。

7.6.1 sh:equals

sh:equals は、すべての値ノードの集合が、 フォーカスノードから、sh:equals を用いて指定された SHACL プロパティ パスを介して到達できるノードの集合と等しい、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:equals 比較対象となるプロパティパス。 形状内の sh:equals の値は、正形式SHACL プロパティパスである。
テキスト定義
$equalssh:equalsとし、$path形状グラフ内で $equals によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 $otherNodes 内に存在しない 値ノードごとに、 その値ノードsh:value とする 検証結果が存在する。 $otherNodes 内のノードであって、 値ノードの1つでないものごとに、 そのsh:value とする 検証結果が存在する。

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

次の例は、特定のフォーカスノードが ex:firstNameex:givenName について同じ値集合を持つ必要があることを指定するために、 形状内で sh:equals を使用することを示している。

次の例は、SHACL プロパティパスsh:pathsh:equals の値の両方として使用できることを示している。

7.6.2 sh:disjoint

sh:disjoint は、値ノードの集合が、 フォーカスノードから、 sh:disjointである SHACL プロパティパスを介して到達できる ノードの集合と互いに素である、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:disjoint 値と比較するためのプロパティパス。 形状内の sh:disjoint の値は、正形式SHACL プロパティパスである。
テキスト定義
$disjointsh:disjointパラメーター値とし、 $path形状グラフ内で $disjoint によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 $otherNodes にも含まれる 値ノードごとに、 その値ノードsh:value とする 検証結果が存在する。

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

次の例は、特定のフォーカスノードが ex:prefLabelex:altLabel についていかなる値も共有できないことを指定するために、 形状内で sh:disjoint を使用することを示している。

7.6.3 sh:subsetOf

sh:subsetOf は、すべての値ノード同時にフォーカスノードから、sh:subsetOf を用いて指定された SHACL プロパティ パスを介して到達可能でなければならない、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:subsetOf 比較対象となるプロパティパス。 形状内の sh:subsetOf の値は、正形式SHACL プロパティパスである。
テキスト定義
$subsetOfsh:subsetOfとし、$path形状グラフ内で $subsetOf によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 $otherNodes 内に存在しない 値ノードごとに、 その値ノードsh:value とする 検証結果が存在する。

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

次の例は、ある人のお気に入りの子が実際の子の中に含まれていなければならないことを指定するために、 形状内で sh:subsetOf を使用することを示している。

7.6.4 sh:lessThan

sh:lessThan は、各値ノードが、 フォーカスノードから sh:lessThanである SHACL プロパティパスを介して到達できるすべての ノードより小さい、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:lessThan 値と比較するためのプロパティパス。 形状内の sh:lessThan の値は、正形式SHACL プロパティパスである。 ノード形状sh:lessThan についていかなる値も持つことができない。
テキスト定義
$lessThansh:lessThanとし、$path形状グラフ内で $lessThan によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 値ノード$otherNodes のメンバーとの各ペアについて、 最初のが2番目のより小さくない場合 (SPARQL の < 演算子に基づく)、 または2つの値を比較できない場合、 その値ノードsh:value とする 検証結果が存在する。

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

次の例は、ex:startDate のすべての値が ex:endDate の値より「前」であることを指定するために、 形状内で sh:lessThan を使用することを示している。

7.6.5 sh:lessThanOrEquals

sh:lessThanOrEquals は、各値ノードが、 フォーカスノードから sh:lessThanOrEqualsである SHACL プロパティパスを介して到達できるすべての ノード以下である、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:lessThanOrEquals 値と比較するためのプロパティパス。 形状内の sh:lessThanOrEquals の値は、正形式SHACL プロパティパスである。 ノード 形状sh:lessThanOrEquals についていかなる値も持つことができない。
テキスト定義
$lessThanOrEqualssh:lessThanOrEqualsとし、$path を、形状グラフ内で $lessThanOrEquals によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 値ノード$otherNodes のメンバーとの各ペアについて、 最初のが2番目の以下でない場合(SPARQL の <= 演算子に基づく)、 または2つの値を比較できない場合、 その値ノードsh:value とする 検証結果が存在する。

7.7 論理制約コンポーネント

この節の制約コンポーネントは、一般的な論理演算子 andornot、および 排他的論理和 の変種を実装する。

7.7.1 sh:not

sh:not は、各値ノードが、与えられた形状適合できない、という条件を指定する。 これは否定および論理的な "not" 演算子に相当する。

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

パラメーター:
プロパティ 要約と構文規則
sh:not 否定する形状。 形状内の sh:not の値は、正形式形状でなければならない。
テキスト定義
$notsh:notとする。 各値ノード v について: 形状 $not に対する v適合性チェック失敗を生成する場合、失敗が報告されなければならない(MUST)。 そうでなく、v が形状 $not適合する場合、 vsh:value とする検証結果が存在する。

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

次の例は、特定のフォーカスノードが ex:property のいかなる値も持てないという条件を 指定するために、形状内で sh:not を使用することを示している。

7.7.2 sh:and

sh:and は、各値ノードが、提供されたすべての 形状に適合する、という条件を指定する。 これは論理積および論理的な "and" 演算子に相当する。

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

パラメーター:
プロパティ 要約と構文規則
sh:and 値ノードを検証する対象となる形状のSHACL リスト形状内の sh:and の各値は、SHACL リストである。 そのようなリストの各メンバーは、正形式形状でなければならない。
テキスト定義
$andsh:andとする。 各値ノード v について: $andメンバーのいずれかに対する v適合性チェック失敗を生成する場合、失敗が生成されなければならない(MUST)。 そうでなく、v$and の各メンバー適合しない場合、 vsh:value とする検証結果が存在する。

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

sh:and は値として形状のSHACL リストを持つが、 それらの形状の順序は検証結果に影響しないことに注意されたい。 ショートカット評価セマンティクスを使用する実装では、その順序が検証の効率に影響する場合がある。 評価しやすい制約、または失敗する可能性が高い制約を、リストの前の方に置くことが推奨される。

次の例は、特定のフォーカスノードが ex:property の値をちょうど1つ持つという条件を 指定するために、形状内で sh:and を使用することを示している。 これは、最小カウントを指定する個別の名前付き形状(ex:SuperShape)と、 追加で最大カウントを指定するプロパティ形状との論理積によって実現される。 ここに示すように、sh:and は形状間の特殊化機構を実装するために使用できる。

7.7.3 sh:or

sh:or は、各値ノードが、提供された形状の少なくとも1つに 適合する、という条件を指定する。 これは論理和および論理的な "or" 演算子に相当する。

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

パラメーター:
プロパティ 要約と構文規則
sh:or 値ノードを検証する対象となる形状のSHACL リスト形状内の sh:or の各値は、SHACL リストである。 そのようなリストの各メンバーは、正形式形状でなければならない。
テキスト定義
$orsh:orとする。 各値ノード v について: いずれかのメンバーに対する v適合性チェック失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、v$orメンバーのいずれにも 適合しない場合、 vsh:value とする検証結果が存在する。

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

sh:or は値として形状のSHACL リストを持つが、 それらの形状の順序は検証結果に影響しないことに注意されたい。 ショートカット評価セマンティクスを使用する実装では、その順序が検証の効率に影響する場合がある。 評価しやすい制約、または成功する可能性が高い制約を、リストの前の方に置くことが推奨される。

次の例は、特定のフォーカスノードが ex:firstName の値を少なくとも1つ、 または ex:givenName の値を少なくとも1つ持つという条件を指定するために、 形状内で sh:or を使用することを示している。

次の例は、所与のプロパティ ex:address の値が、 データ型 xsd:string を持つリテラル、またはクラス ex:AddressSHACL インスタンスのいずれかでよいことを述べるために、 プロパティ形状内で sh:or を使用できることを示している。

SHACL におけるすべての制約は実行時に AND 結合されることに注意されたい。次の例を考える:

正しい解釈は、(shapeA OR shapeB) AND (shapeC OR shapeD) である。 ターゲットノードは shapeA または shapeB に適合し、さらに shapeC または shapeD にも適合する必要がある。

7.7.4 sh:xone

sh:xone は、各値ノードが、提供された形状のうち ちょうど1つに適合する、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:xone 値ノードを検証する対象となる形状のSHACL リスト形状内の sh:xone の各値は、SHACL リストである。 そのようなリストの各メンバーは、正形式形状MUST ある。 そのような 各リストは、少なくとも1つの メンバーを持つべきである (SHOULD)。
テキスト定義
$xonesh:xoneとする。 各値ノード v について、 N を、$xoneメンバーである 形状のうち、 v がその形状に適合するものの数とする。 いずれかのメンバーに対する v適合性チェック失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、N がちょうど 1 でない場合、 vsh:value とする検証結果が存在する。

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

sh:xone は値として形状のSHACL リストを持つが、 それらの形状の順序は検証結果に影響しないことに注意されたい。

次の例は、特定のフォーカスノードが ex:fullName の値を持つか、または ex:firstNameex:lastName の値を持つ必要があるが、 両方であってはならない、という条件を指定するために、形状内で sh:xone を使用することを示している。

7.8 形状ベース制約 コンポーネント

この節の制約コンポーネントは、特定の形状に対して値ノードを検証することにより、 複雑な条件を指定するために使用できる。

7.8.1 sh:node

sh:node は、各値ノードが、与えられたノード形状に適合する、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:node すべての値ノードが適合する必要のあるノード形状形状内の sh:node の値は、正形式ノード 形状でなければならない。
テキスト定義
$nodesh:nodeとする。 各値ノード v について: $node に対する v適合性チェック失敗を生成する場合、失敗が生成されなければならない(MUST)。 そうでなく、v$node適合しない場合、 vsh:value とする検証結果が存在する。

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

次の例は、プロパティ形状内での sh:node の使用を示している。 プロパティ ex:address のすべての値は、 形状 ex:AddressShape によって表現される 制約を満たさなければならない。

次の例は、ノード形状内での sh:node の使用を示している。

SHACL における再帰的な形状の扱いについては、6.5.3 再帰的な形状の扱いを参照。

7.8.2 sh:property

sh:property は、各値ノードが、 与えられたプロパティ形状を持つことを指定するために使用できる。

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

パラメーター:
プロパティ 要約と構文規則
sh:property すべての値ノードが持つ必要のあるプロパティ形状形状内の sh:property の各値は、正形式プロパティ形状でなければならない。
テキスト定義
$propertysh:propertyとする。 各値ノード v について: プロパティ形状 $property に対して、vフォーカスノードとして検証した結果が 失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでない場合、検証結果は、プロパティ形状 $property に対して、vフォーカスノードとして検証する 結果である。

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

sh:propertysh:node の間には重要な違いがあることに注意されたい: 値ノードが制約に違反している場合、sh:node についてはその値ノードに対して 単一の検証結果のみが存在し、 その sh:sourceConstraintComponentsh:NodeConstraintComponent である。 一方、sh:property については任意の数の検証結果が存在し得る。 これらは、プロパティ形状内の 制約の個々の制約コンポーネントを、 sh:sourceConstraintComponent の値として持つ。

他のすべての検証結果と同様に、プロパティ形状sh:property を介して到達されるたびに、 検証エンジンは新しい検証結果ノードを生成しなければならない(MUST)。 これには、同じフォーカスノードが、形状グラフ内の異なるパスを介して 到達されるにもかかわらず、同じプロパティ形状に対して検証される場合が含まれる。

7.8.3 sh:someValue

sh:someValue は、少なくとも1つの値ノードが、 与えられた形状に適合する、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:someValue 値ノードの少なくとも1つが適合する必要のある 形状形状内の sh:someValue の値は、正形式形状でなければならない。
テキスト定義
$someValuesh:someValueとする。 いずれかの値ノードに対する $someValue への適合性チェック失敗を生成する場合、 いずれか1つ以上の値ノード$someValue に適合していない限り、 失敗が生成されなければならない(MUST)。 そうでなく、いずれの値ノード$someValue適合しない場合、 検証結果が存在する。

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

実装は、いずれかの値ノードが適合した時点で値ノードの処理を停止してもよいことに注意されたい。 値ノード集合におけるノードの順序は未定義であるため、失敗を引き起こすノードに 到達する保証はない。 したがって、処理を予測可能にするため、すべての値ノードが成功なしに訪問されない限り、 失敗は暗黙に無視される。

次の例では、ex:DuckFarmerShape に適合する任意のノードは、 ex:tendsAnimal について、ex:DuckSHACL インスタンスである値を 少なくとも1つ持つ必要がある。

sh:someValue は、sh:qualifiedValueShapesh:qualifiedMinCount 1 の組み合わせに対する構文糖衣とみなすことができる。

また、sh:someValue は、プロパティ形状で使用される場合に主に意味を持つことにも注意されたい。 ノード形状では、sh:someValuesh:node または sh:property を使用することと同等である。

7.8.4 sh:qualifiedValueShape, sh:qualifiedMinCount, sh:qualifiedMaxCount

sh:qualifiedValueShape は、指定された数の値ノードが、与えられた形状に適合する、という条件を指定する。 各 sh:qualifiedValueShape は、同じ主語において、sh:qualifiedMinCount の値を1つ、 sh:qualifiedMaxCount の値を1つ、またはそれぞれ1つずつ持つことができる。

パラメーター:
プロパティ 要約と構文規則
sh:qualifiedValueShape 指定された数の値ノードが適合する必要のある形状。 形状内の sh:qualifiedValueShape の値は、正形式形状でなければならない。 ノード 形状sh:qualifiedValueShape についていかなる値も持つことができない。 これは sh:QualifiedMinCountConstraintComponent および sh:QualifiedMaxCountConstraintComponent必須パラメーターである。
sh:qualifiedValueShapesDisjoint これは sh:QualifiedMinCountConstraintComponent および sh:QualifiedMaxCountConstraintComponent任意パラメーターである。 true に設定された場合、(カウントのために)値ノードは 兄弟形状のいずれにも適合してはならない。 形状内の sh:qualifiedValueShapesDisjoint の値は、データ型 xsd:boolean を持つリテラルである。
sh:qualifiedMinCount 形状に適合する値ノードの最小数。 形状内の sh:qualifiedMinCount の値は、データ型 xsd:integer を持つリテラルである。 これは sh:QualifiedMinCountConstraintComponent必須パラメーターである。
sh:qualifiedMaxCount 形状に適合できる値ノードの最大数。 形状内の sh:qualifiedMaxCount の値は、データ型 xsd:integer を持つリテラルである。 これは sh:QualifiedMaxCountConstraintComponent必須パラメーターである。
兄弟形状のテキスト定義
Q を、形状グラフ G 内の 形状であり、限定カーディナリティ制約を宣言しているもの (sh:qualifiedValueShape と、sh:qualifiedMinCount または sh:qualifiedMaxCount の少なくとも一方の値を持つことによって)とする。 ps を、Qsh:propertyとして持つ、G 内の形状の集合とする。 Qsh:qualifiedValueShapesDisjoint について trueとして持つ場合、 Q兄弟形状の集合は、ps 内の任意の 形状について、 SPARQL プロパティパス sh:property/sh:qualifiedValueShape のすべての から、Q 自身の sh:qualifiedValueShapeを除いた集合として定義される。 それ以外の場合、兄弟形状の集合は空である。
sh:qualifiedMinCount のテキスト定義
$qualifiedValueShapesh:qualifiedValueShapeとする。 $qualifiedMinCountsh:qualifiedMinCountパラメーター値とする。 C を、v$qualifiedValueShape適合し、 かつ v現在の形状、すなわち v が検証されていて、 $qualifiedValueShapesh:qualifiedValueShape の値として持つ形状についての 兄弟形状のいずれにも適合しない 値ノード v の数とする。 前述の適合性チェックのいずれかが失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、C$qualifiedMinCount より小さい場合、 検証結果が存在する。 sh:qualifiedMinCount制約コンポーネントsh:QualifiedMinCountConstraintComponent である。
sh:qualifiedMaxCount のテキスト定義
$qualifiedMaxCountsh:qualifiedMaxCountパラメーター値とする。 C を、上記の sh:qualifiedMinCount について定義されたものとする。 前述の適合性チェックのいずれかが失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、C$qualifiedMaxCount より大きい場合、 検証結果が存在する。 sh:qualifiedMaxCount制約コンポーネントsh:QualifiedMaxCountConstraintComponent である。

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

次の例の形状は、プロパティ ex:parent がちょうど2つの値を持ち、 そのうち少なくとも1つが女性であるという条件を指定するために使用できる。

次の例は、片手が ex:digit の値を最大5つ持たなければならないこと (sh:maxCount を用いて表現)、 そのうちちょうど1つが ex:Thumb のインスタンスで、ちょうど4つが ex:Finger のインスタンスでなければならず、 ただし親指と指は互いに素でなければならないことを表現するための sh:qualifiedValueShapesDisjoint の使用を示している。 言い換えると、片手において、どの指も親指として数えられてはならない。

7.8.5 sh:reifierShape, sh:reificationRequired

sh:reifierShape は、プロパティ形状を、1つ以上の ノード形状にリンクするために使用できる。 任意の具象化子は、これらのノード形状に適合しなければならない。

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

パラメーター:
プロパティ 要約と構文規則
sh:reifierShape このトリプルの具象化子が適合しなければならないノード形状 sh:reifierShape の値は、正形式ノード 形状でなければならない。 sh:reifierShape の値が与えられた場合、sh:path の値は IRI に制限される。
sh:reificationRequired これは sh:ReifierShapeConstraintComponent任意パラメーターである。 true に設定された場合、データグラフ内で、 フォーカスノード/パスの組み合わせについて少なくとも1つの具象化値が存在しなければならない。 形状内の sh:reificationRequired の値は、データ型 xsd:boolean を持つリテラルである。
テキスト定義
tトリプル項フォーカスノード, $path, 値ノード)とする。 トリプル項 t の各具象化子について、その 具象化子フォーカスノードとして、 ノード形状 $reifierShape に対してその具象化子を検証した結果が 失敗を生成する場合、失敗が生成されなければならない (MUST)。 $reifierShape に適合しない各具象化子 t について、 tsh:value とする検証結果が存在する。
sh:reificationRequired のテキスト定義
$reificationRequiredtrue に設定されており、データグラフ内にトリプル項 t についての具象化文が存在しない場合、 tsh:value とする検証結果が存在する。

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

7.9 その他の制約コンポーネント

この節では、他のカテゴリに当てはまらない Core 制約コンポーネントを列挙する。

7.9.1 sh:closed, sh:ignoredProperties

RDF データモデルは非常に大きな柔軟性を提供する。 任意のノードは、原則として任意のプロパティについて値を持つことができる。 しかし、場合によっては、どのプロパティをノードに適用できるかについて条件を指定することが 意味を持つ。 SHACL Core 言語には、sh:closed と呼ばれるプロパティが含まれており、 各値ノードが、sh:property を介して形状に指定された プロパティ形状によって 明示的に列挙されたプロパティについてのみを持つ、という条件を指定するために使用できる。

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

パラメーター:
プロパティ 要約と構文規則
sh:closed 形状を閉じるには true に設定する。 形状内の sh:closed の値は、データ型 xsd:boolean を持つリテラル、または IRI sh:ByTypes である。
sh:ignoredProperties sh:property を介して明示的に列挙されたものに加えて許可される プロパティの任意のSHACL リスト形状内の sh:ignoredProperties の値は、SHACL リストでなければならない。 そのようなリストの各メンバーは、 IRIでなければならない。
テキスト定義
$closedsh:closedパラメーター値とする。 $ignoredPropertiessh:ignoredPropertiesとする。

$closedtrue または sh:ByTypes であり、 P が下で定義されるプロパティ集合である場合、 値ノードを その主語とし、 P に含まれない述語を持つ各トリプルについて、 検証結果が存在する。 $ignoredProperties が値を持つ場合、このSHACL リストメンバーとして列挙されたプロパティも、 値ノードについて許可される。 検証結果は、そのトリプルの 述語sh:resultPath として持ち、 そのトリプルの目的語sh:value として持たなければならない(MUST)。

$closedtrue である場合、P は、現在の形状から SPARQL パス sh:property/sh:path を介して到達できる IRI プロパティの集合である。

$closedsh:ByTypes である場合、P は、 次のアルゴリズムを介して値ノードから到達できる IRI プロパティの集合に rdf:type を加えたものである:
function collectProperties(S)
    SPARQL パス sh:property/sh:path を介して S から到達できるすべての
            IRI プロパティを追加する
    S が形状グラフ内で rdfs:Class の SHACL インスタンスである場合 {
        形状グラフ内で (S rdfs:subClassOf ?o) に一致する各トリプルについて
            collectProperties(?o)
        形状グラフ内で (?s sh:targetClass S) に一致する各トリプルについて
            collectProperties(?s)
    }
    S が形状グラフ内で sh:NodeShape の SHACL インスタンスである場合
        形状グラフ内で (S sh:node ?o) に一致する各トリプルについて
            collectProperties(?o)

データグラフ内の値ノードの各 rdf:type T について
    collectProperties(T)
実装は、上記のアルゴリズムで同じ S を2回訪問しないようにすることで、 無限ループを避ける必要があることに注意されたい。

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

次の例は、特定のフォーカスノードが ex:firstNameex:lastName についてのみ値を持つという条件を指定するために、 形状内で sh:closed を使用することを示している。 「無視される」プロパティ rdf:type も許可される。

sh:closed sh:ByTypes のユースケースには、現在の値ノードの型のスーパークラスで 宣言されたプロパティ(rdfs:subClassOf を介する)に加えて、 sh:targetClass を介してそれらの型にリンクされた他の形状、および sh:node を介してあるノード形状から別のノード形状へ到達できる形状が含まれる。 sh:ByTypes の例は、テストケースライブラリーで見つけることができる: closed-003.ttl, closed-004.ttl.

7.9.2 sh:hasValue

sh:hasValue は、少なくとも1つの値ノードが、 与えられた RDF 項と等しい、という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:hasValue 特定の必須値。
テキスト定義
$hasValuesh:hasValueパラメーター値とする。 RDF 項 $hasValue値ノードの中に 含まれない場合、 検証結果が存在する。

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

7.9.3 sh:in

sh:in は、各値ノードが、提供された SHACL リストメンバーである、 という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:in 許可される値をメンバーとして持つ SHACL リスト形状内の sh:in の各値は、SHACL リストである。 形状は sh:in について最大1つの値を持つ。 そのような 各リストは、少なくとも1つのメンバーを持つべきである (SHOULD)。
テキスト定義
$insh:inとする。 $inメンバーではない各値ノードについて、 その値ノードsh:value とする 検証結果が存在する。

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

リテラルの一致は厳密である必要があることに注意されたい。たとえば "04"^^xsd:byte"4"^^xsd:integer と一致しない。

7.9.4 sh:rootClass

sh:rootClass によって指定される条件は、各値ノードが、 与えられたクラス、またはそのクラスの(推移的な)サブクラスであることである。

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

パラメーター:
プロパティ 要約と構文規則
sh:rootClass すべての値ノードが属さなければならないクラス階層のルート。 形状内の sh:rootClass の値は、IRI、 またはすべてのメンバーIRIである 正形式SHACL リストである空白ノードのいずれかである。
テキスト定義
$rootClasssh:rootClassパラメーター値とする。 classesIRIの 集合とし、$rootClassIRI である場合、その集合はちょうどその IRI のみから成り、 $rootClass空白ノードSHACL リストである場合、 その集合はちょうどそのリストのメンバーから成るものとする。

IRIでない、 またはIRIであっても、 データグラフvalueNode rdfs:subClassOf* class を含意するような classes 内の class が存在しない各値ノードについて、 その値ノードsh:value とする 検証結果が存在する。

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

sh:rootClass 制約は通常、値としてクラスを持ち得るプロパティ形状 (たとえば sh:class rdfs:Class を介する)とともに使用され、 値ノードの許可されるサブクラス階層を制限する。 与えられたクラスは、許可されるクラス階層の上限として機能する。

7.9.5 sh:uniqueValuesFor

sh:uniqueValuesFor は、値ノードの1つ以上の指定された プロパティの値が、現在の形状のすべての ターゲットノード内で一意でなければならない、 という条件を指定する。

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

パラメーター:
プロパティ 要約と構文規則
sh:uniqueValuesFor プロパティの IRI、または 各メンバーが プロパティのIRIである SHACL リスト
テキスト定義
$uniqueValuesFor を、シェイプ S における sh:uniqueValuesForとする。 $properties を、次のような集合とする: $uniqueValuesForIRI である場合、 $properties = { uniqueValuesFor } とする。 $uniqueValuesForSHACL リストである場合、 $properties は、そのリストのメンバーの集合である。 $targetNodes を、Sターゲットノードとする。
$targetNodes 内に、V と同じく $properties 内のすべてのプロパティについて完全に同一のを持つ別の ノードが存在する各 値ノード V について、 検証結果が存在する。 V$properties 内のいずれのプロパティについてもを持たない場合、 結果は生成されない。

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

リテラルの一致は厳密である必要があることに注意されたい。たとえば "04"^^xsd:byte"4"^^xsd:integer と一致しない。 また、sh:uniqueValuesFor はこれらの値の存在を規定しないため、 多くの場合 sh:minCount 1 制約と組み合わせられることにも注意されたい。

ターゲットノードの計算は、 形状の定義、たとえば sh:uniqueValuesFor 制約も保持している形状の sh:targetClass 宣言のみに依存することに注意されたい。

8. 検証を行わない形状 特性

この節は非規範的である。

前の節では検証条件を表すプロパティを導入したが、 この節では SHACL プロセッサーによって無視されるプロパティを扱う。 これらのいわゆる 検証を行わない プロパティ の使用は完全に任意であり、形式的な解釈上の契約の対象ではない。 それらは、フォーム構築、コード生成、または RDF ファイルの予測可能な出力などの目的で使用できる。

8.1 sh:name および sh:description

プロパティ形状は、現れるターゲット内でそのプロパティに対する人間可読なラベルを提供するために、 sh:name について1つ以上のを持つことができる。 存在する場合、ツールは rdf:Property 自体においてグローバルに指定されたラベルよりも、 そのようなローカルに指定されたラベルを優先するべきである。 たとえば、フォームが sh:name を持つ所与のプロパティ形状のターゲット内にあるノードを 表示する場合、そのツールは提供された名前を使用するべきである。 sh:nameは、 xsd:stringrdf:dirLangString、または rdf:langStringデータ型を持つ リテラルでなければならない。

同様に、プロパティ形状は、所与の文脈におけるそのプロパティの説明を提供するために、 sh:description について値を持つことができる。 sh:descriptionは、 xsd:stringrdf:dirLangStringrdf:langString、または rdf:HTMLデータ型を持つ リテラルでなければならない。

sh:namesh:description はどちらも 複数のを持つことができるが、言語タグごとに は1つだけであるべきである。

sh:namesh:description は、ノード 形状には使用するべきではない(SHOULD NOT)ことに注意されたい。 それらについては、プロパティ rdfs:labelrdfs:comment が広く確立されており、 クラス定義にもすでに使用されている。

8.2 sh:intent

形状は sh:intent についてを持つことができ、それらの値は xsd:stringrdf:langString または rdf:dirLangStringデータ型を持つ リテラル であるべきである。

プロパティ sh:intent は、形状に関連付けられた1つ以上の意図された 規則、仮定、または制約について、人間可読な説明を提供する。

一般的な文書化や編集上のテキストを含み得る rdfs:comment とは異なり、 またプロパティ値の意味を説明する sh:description とも異なり、 sh:intent は、形状の意図されたセマンティクスを表す個々の規則のような文を 捉えることを特に意図している。

sh:intent の複数の値を提供して、別個の意図された規則を表すことができる。 これらの規則の一部は、SHACL 制約コンポーネントを用いてすでに形式的に表現されている 制約と重複する場合がある。 sh:intent の値が、同じ形状グラフ内で形式的にも表現されているセマンティクスを 表す場合、sh:intent 文の トリプルは、プロパティ値 sh:formalized true によって具象化できる。 しかし、sh:intent の存在または内容は、SHACL 検証または適合性に影響してはならない (MUST NOT)。

8.3 sh:agentInstruction

形状は sh:agentInstruction についてを持つことができ、それらの値は xsd:stringrdf:langString、または rdf:dirLangStringデータ型を持つ リテラル であるべきである。

このプロパティは、自然言語を理解するソフトウェアエージェントに送信できるテキスト指示を表すために使用できる。

このプロパティは、rdfs:commentsh:descriptionrdfs:labelsh:namesh:intent、 および sh:message からの類似のテキスト説明とともに、 形状のセマンティックな解釈についてソフトウェアエージェントに指示するために使用できる。

8.4 sh:codeIdentifier

形状は sh:codeIdentifier について1つのを持つことができ、 API、クエリ言語、および類似のプログラム的アクセスにおける形状の表現に使用できる名前を 提案できる。 sh:codeIdentifier の値は、データ型 xsd:string を持つ リテラルであり、 その文字列は正規表現 ^[a-zA-Z_][a-zA-Z0-9_]*$ に一致する。

典型的なユースケースは、形状から GraphQL クエリスキーマを生成し、 プロパティ形状を GraphQL フィールドに写像することである。 既定では、そのようなスキーマ生成器は sh:path のローカル名を使用できるが、 sh:codeIdentifier が存在する場合はそれを使用するべきである。 複雑なパス式の場合、明示的な sh:codeIdentifier が強く推奨される。 たとえば Java、JavaScript、Python における API 生成器にも同様の要件が存在する。

8.5 sh:unit

形状は、測定単位、通貨、または値ノードに関する類似の情報を示すために、 プロパティ sh:unit についてを持つことができる。 sh:unit の値は、データ型 xsd:stringrdf:langString または rdf:dirLangString を持つ リテラル、または IRIのいずれかでよい。 SHACL 1.2 は、sh:unit の具体的な値を規定しない。なぜなら、執筆時点 (2026年)では、それらを統一的に表す公式の W3C 標準が存在せず、W3C 外部に複数の標準が存在するからである。

SHACL 1.2 では、次の推奨事項が示される:

これらの構文規則は意図的に柔軟なままにされているが、特定のアプリケーションはより具体的な規則を 強制してもよい。 たとえば、sh:unit プロパティに sh:class qudt:Unit 制約を宣言する場合である。

SHACL に基づくユーザーインターフェイスツールは、sh:unit の値を使用して値をレンダリングできる。 ユーザーのロケールによっては、そのようなツールは単位間を自動的に変換することさえでき、 実際の値が保存される単位とは異なる単位でのデータ入力を許可することもできる。

SHACL Core は sh:unit に対する具体的なセマンティクスを指定しないが、 一部の SHACL ベースの拡張は、検証を含む他の目的で単位を使用することがある。 たとえば、プロパティが sh:unit "K" を宣言する任意のリテラルに対して sh:minInclusive 0 制約を強制する形状を定義できる。

上記の例の次の変種は、ノード形状を使用して、 「ユーロ建て価格」の再利用可能な定義をカプセル化する。 それには単位だけでなく、最小値などの制約も含まれる。

8.6 sh:order

プロパティ形状は、フォーム構築などの目的のために、プロパティ形状の相対順序を示すため、 プロパティ sh:order について1つのを持つことができる。 sh:order の値は、xsd:decimal または xsd:integerデータ型を持つ リテラルである。 sh:order は検証目的には使用されず、 任意の型の主語とともに使用できる。 プロパティ形状に存在する場合、sh:order の推奨される使用法は、 プロパティ形状を昇順で並べ替えることである。たとえば、より小さい order を持つプロパティが、 より大きい order を持つプロパティより上、または先頭(左から右へ書く言語では左)に 配置されるようにする。

8.7 sh:group

プロパティ形状は、プロパティ sh:group を使用して、 クラス sh:PropertyGroupSHACL インスタンスへリンクすることにより、 その形状が関連するプロパティ形状のグループに属していることを示すことができる。 各グループは、フォーム構築のための rdfs:label など、 アプリケーション目的に役立つ追加のトリプルを持つことができる。 グループは、同じフォーム内におけるグループの相対順序を示すために、 sh:order プロパティを持つこともできる。

次の例は、これらのさまざまな機能を一緒に使用する方法を示している。

フォーム構築アプリケーションは、上記の情報を使用して、情報を次のように表示してもよい:

Name
first name: John
last name: Doe
Address
street address: 123 Silverado Ave
locality: Cupertino
zip code: 54321

同じ情報は、トリプルの順序を変更するが sh:order の値は変更しない 次の例によっても生成されることに注意されたい:

xsd:stringrdf:langStringrdf:dirLangString、または rdf:HTML 型のリテラルを受け入れる述語について、 利用者は xsd:string を避け、rdf:langString または rdf:dirLangString を使用するべきである。 国際化をサポートし、双方向テキストを正しく扱うために、言語タグと、適切な場合には 方向性マーカーを使用することが推奨される。

付録

A. SHACL 構文規則の要約

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

構文規則 ID 構文規則テキスト
SHACL-list RDF グラフ G における SHACL リストは、 IRI または 空白ノードであり、 rdf:nil(ただし rdf:nilrdf:first または rdf:rest のいずれについてもを持たない場合)、 または G においてプロパティ rdf:first についてちょうど1つの を持ち、 かつ G においてプロパティ rdf:rest について、 G における SHACL リストでもあるちょうど1つのを持ち、 さらにそのリストが G においてプロパティパス rdf:rest+ の値として 自分自身を持たないものである。
entailment-nodeKind プロパティ sh:entailmentは IRI である。
shape 形状は、 IRI または 空白ノード s であり、 形状グラフ内で 次の条件の少なくとも1つを満たすものである:
multiple-parameters sh:PatternConstraintComponent などの一部の 制約コンポーネントは、複数のパラメーターを宣言する。 そのようなコンポーネントのいずれかのパラメーターについて複数の値を持つ形状は 不正形式である。
targetNode-nodeKind 形状内の sh:targetNode の各は、正形式の ノード式である。
targetClass-nodeKind 形状内の sh:targetClass の各値は IRIである。
implicit-targetClass-nodeKind RDF グラフ G において ssh:NodeShape または sh:PropertyShapeSHACL インスタンスであり、 かつ sG において rdfs:ClassSHACL インスタンス でもあり、 かつ sIRIでない場合、 sG における 不正形式の形状である。
targetSubjectsOf-nodeKind 形状内の sh:targetSubjectsOfIRIである。
targetObjectsOf-nodeKind 形状内の sh:targetObjectsOfIRIである。
targetWhere-node 形状内の sh:targetWhere の各値は、正形式形状である。
shape-nodeKind sh:shape の各 IRIである。
severity-maxCount 形状は、形状グラフ内でプロパティ sh:severity について 1つのを指定できる。
severity-nodeKind sh:severity の各値は IRIである。
severity-reifier-maxCount T を、形状内の 制約を表す トリプルの集合とする。 形状グラフは、T 内の トリプル具象化子において、プロパティ sh:severity について最大1つの を指定できる。
message-datatype sh:message の値は、 xsd:stringrdf:dirLangStringrdf:langString、または rdf:HTMLデータ型を持つ リテラルである。 主語は、同じ言語タグを持つ sh:message の値を複数持つべきではなく、 またデータ型 xsd:string を持つ複数の値も持つべきではない。
message-reifier-maxCount T を、形状内の 制約を表す トリプルの集合とする。 形状グラフは、T 内の トリプル具象化子において、プロパティ sh:message について最大1つの を指定できる。
deactivated-maxCount 形状は、プロパティ sh:deactivated について最大1つの値を持つことができる。
deactivated-datatype sh:deactivated の値は ノード式であり、 その(唯一の)出力ノードとして true または false のいずれかを持たなければならない。
deactivated-reified-maxCount トリプル形状主語とし、 sh:minCount などの パラメーター述語として持つ場合、 そのトリプルは、プロパティ sh:deactivated について を持つ 具象化子を最大1つ持つことができる。
NodeShape-path-maxCount sh:NodeShapeSHACL インスタンスは、 プロパティ sh:path について を 持つことができない。
PropertyShape プロパティ形状は、形状グラフ内の 形状であり、 sh:path述語として持つ トリプル主語である。
path-maxCount 形状は sh:path について最大1つの を持つ。
path-node プロパティ形状内の sh:pathは、正形式SHACL プロパティパスである。
PropertyShape-path-minCount sh:PropertyShapeSHACL インスタンスは、 プロパティ sh:path について1つの を持つ。
path-values プロパティ形状は、 プロパティ sh:values について最大1つの を持ち、 この正形式ノード式である。
path-defaultValue プロパティ形状は、 プロパティ sh:defaultValue について最大1つの を持ち、 この正形式ノード式である。
path-values-iri プロパティ形状は、 sh:path述語パスである場合にのみ、 sh:values および/または sh:defaultValue について を持つことができる。
path-metarule RDF グラフ内のノードは、次の小節における構文規則のうちちょうど1つを満たす場合、 正形式SHACL プロパティ パス p である。
path-non-recursive ノード p は、p が空白ノードであり、 p の任意のパスマッピングが直接または推移的に p を参照する場合、 正形式の SHACL プロパティパスではない。
path-sequence シーケンスパスは、 少なくとも2つのメンバーを持つ SHACL リストである 空白ノードであり、 各メンバーは正形式の SHACL プロパティパスである。
path-alternative 代替パスは、 G 内でちょうど1つのトリプルの主語である 空白ノードである。 このトリプルは sh:alternativePath を述語、L を目的語として持ち、 L は少なくとも2つのメンバーを持つ SHACL リストであり、 L の各メンバーは正形式の SHACL プロパティパスである。
path-inverse 逆パスは、G 内のちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:inversePath を述語として持ち、 目的語 v正形式の SHACL プロパティパスである。
path-zero-or-more ゼロ回以上パスは、G 内のちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:zeroOrMorePath述語として持ち、 目的語 v正形式の SHACL プロパティパスである。
path-one-or-more 1回以上パスは、G 内のちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:oneOrMorePath述語として持ち、 目的語 v正形式の SHACL プロパティパスである。
path-zero-or-one ゼロ回または1回パスは、G 内のちょうど1つの トリプル主語である 空白ノードである。 このトリプルは sh:zeroOrOnePath述語として持ち、 目的語 v正形式の SHACL プロパティパスである。
IRIExpression-syntax RDF グラフ内のノードは、それが IRIである場合、 正形式IRI 式である。
LiteralExpression-syntax RDF グラフ内のノードは、それが リテラルである場合、 正形式リテラル 式である。
ShapesGraph sh:ShapesGraph クラスは、通常 形状グラフの役割を果たすグラフの IRIrdf:type として使用してもよい(MAY)。
DataGraph sh:DataGraph クラスは、通常 データグラフとして使用されるグラフの IRIrdf:type として使用してもよい (MAY)。
shapesGraph-nodeKind sh:shapesGraph のすべての IRIである
class-nodeKind 形状内の sh:class の値は、 IRI、 または、すべてのメンバーIRIである 正形式SHACL リストである 空白ノードのいずれかである。
datatype-maxCount 形状は sh:datatype について最大1つの値を持つ。
datatype-nodeKind 形状内の sh:datatype の値は、 IRI、 または、すべてのメンバーIRIである 正形式SHACL リストである 空白ノードのいずれかである。
nodeKind-maxCount 形状は sh:nodeKind について最大1つの値を持つ。
nodeKind-in sh:nodeKind の値が IRI である場合、形状内の sh:nodeKind の値は、 クラス sh:NodeKind の次の7つのインスタンスのいずれかである: sh:BlankNode, sh:IRI, sh:Literal sh:BlankNodeOrIRI, sh:BlankNodeOrLiteral, sh:IRIOrLiteral, および sh:TripleTerm

sh:nodeKind の値が正形式の SHACL リストである場合、形状内のそれらのリストの メンバーは、クラス sh:NodeKind の次の4つのインスタンスのいずれかである: sh:BlankNode, sh:IRI, sh:Literal, および sh:TripleTerm
minCount-scope ノード形状は、 sh:minCount についていかなる値も持つことができない。
minCount-maxCount プロパティ形状sh:minCount について最大1つの値を持つ。
minCount-datatype プロパティ形状内の sh:minCount の値は、データ型 xsd:integer を持つリテラルである。
maxCount-scope ノード形状は、 sh:maxCount についていかなる値も持つことができない。
maxCount-maxCount プロパティ形状sh:maxCount について最大1つの値を持つ。
maxCount-datatype プロパティ形状内の sh:maxCount の値は、データ型 xsd:integer を持つリテラルである。
minExclusive-nodeKind 形状内の sh:minExclusive の値は リテラルである。
minExclusive-maxCount 形状は sh:minExclusive について最大1つの値を持つ。
minInclusive-nodeKind 形状内の sh:minInclusive の値は リテラルである。
minInclusive-maxCount 形状は sh:minInclusive について最大1つの値を持つ。
maxExclusive-nodeKind 形状内の sh:maxExclusive の値は リテラルである。
maxExclusive-maxCount 形状は sh:maxExclusive について最大1つの値を持つ。
maxInclusive-nodeKind 形状内の sh:maxInclusive の値は リテラルである。
maxInclusive-maxCount 形状は sh:maxInclusive について最大1つの値を持つ。
minLength-datatype 形状内の sh:minLength の値は、データ型 xsd:integer を持つリテラルである。
minLength-maxCount 形状は sh:minLength について最大1つの値を持つ。
maxLength-datatype 形状内の sh:maxLength の値は、データ型 xsd:integer を持つリテラルである。
maxLength-maxCount 形状は sh:maxLength について最大1つの値を持つ。
pattern-datatype 形状内の sh:pattern の値は、データ型 xsd:string を持つリテラルである。
pattern-regex 形状内の sh:pattern の値は、 SPARQL REGEX 関数に対する有効な pattern 引数である。
flags-datatype 形状内の sh:flags の値は、データ型 xsd:string を持つリテラルである。
singleLine-datatype 形状内の sh:singleLine の値は、データ型 xsd:boolean を持つリテラルである。
singleLine-maxCount 形状は sh:singleLine について最大1つの値を持つ。
languageIn-node 形状内の sh:languageIn の各値は SHACL リストである。
languageIn-members-datatype そのようなリストの各メンバーは、データ型 xsd:string を持つリテラルである。
languageIn-maxCount 形状は sh:languageIn について最大1つの値を持つ。
uniqueLang-datatype 形状内の sh:uniqueLang の値は、データ型 xsd:boolean を持つリテラルである。
uniqueLang-maxCount プロパティ形状は sh:uniqueLang について最大1つの値を持つ。
uniqueLang-scope ノード形状は、 sh:uniqueLang についていかなる値も持つことができない。
memberShape-node sh:memberShape の値は、 正形式ノード形状でなければならない。
minListLength-datatype 形状内の sh:minListLength の値は、データ型 xsd:integer を持つリテラルである。
minListLength-minInclusive 形状内の sh:minListLength の値は、0 以上の整数である。
maxListLength-datatype 形状内の sh:maxListLength の値は、データ型 xsd:integer を持つリテラルである。
maxListLength-minInclusive 形状内の sh:maxListLength の値は、0 以上の整数である。
uniqueMembers-datatype 形状内の sh:uniqueMembers の値は、データ型 xsd:boolean を持つリテラルである。
equals-nodeKind 形状内の sh:equals の値は、 正形式SHACL プロパティパスである。
disjoint-nodeKind 形状内の sh:disjoint の値は、 正形式SHACL プロパティパスである。
subsetOf-nodeKind 形状内の sh:subsetOf の値は、 正形式SHACL プロパティパスである。
lessThan-nodeKind 形状内の sh:lessThan の値は、 正形式SHACL プロパティパスである。
lessThan-scope ノード形状は、 sh:lessThan についていかなる値も持つことができない。
lessThanOrEquals-nodeKind 形状内の sh:lessThanOrEquals の値は、 正形式SHACL プロパティパスである。
lessThanOrEquals-scope ノード形状は、 sh:lessThanOrEquals についていかなる値も持つことができない。
not-node 形状内の sh:not の値は、 正形式形状でなければならない。
and-node 形状内の sh:and の各値は SHACL リストである。
and-members-node そのようなリストの各メンバーは、 正形式形状で なければならない。
or-node 形状内の sh:or の各値は SHACL リストである。
or-members-node そのようなリストの各メンバーは、 正形式形状で なければならない。
xone-node 形状内の sh:xone の各値は SHACL リストである。
xone-members-node そのようなリストの各メンバーは、 正形式形状MUST ある。
xone-minListLength そのような各リストは、少なくとも1つの メンバーを持つべきである (SHOULD)。
node-node 形状内の sh:node の値は、 正形式ノード形状でなければならない。
property-node 形状内の sh:property の各値は、 正形式プロパティ形状でなければならない。
someValue-shape 形状内の sh:someValue の値は、 正形式形状で なければならない。
qualifiedValueShape-node 形状内の sh:qualifiedValueShape の値は、 正形式形状で なければならない。
qualifiedValueShape-scope ノード形状は、 sh:qualifiedValueShape についていかなる値も持つことができない。
qualifiedValueShapesDisjoint-datatype 形状内の sh:qualifiedValueShapesDisjoint の値は、データ型 xsd:boolean を持つリテラルである。
qualifiedMinCount-datatype 形状内の sh:qualifiedMinCount の値は、データ型 xsd:integer を持つリテラルである。
qualifiedMaxCount-datatype 形状内の sh:qualifiedMaxCount の値は、データ型 xsd:integer を持つリテラルである。
reifierShape-node sh:reifierShape の値は、 正形式ノード形状でなければならない。 sh:reifierShape の値が与えられる場合、sh:path の値は IRI に制限される。
reificationRequired-datatype 形状内の sh:reificationRequired の値は、データ型 xsd:boolean を持つリテラルである。
closed-datatype 形状内の sh:closed の値は、データ型 xsd:boolean を持つリテラル、 または IRI sh:ByTypes である。
ignoredProperties-node 形状内の sh:ignoredProperties の値は SHACL リストでなければならない。
ignoredProperties-members-nodeKind そのようなリストの各メンバーIRIで なければならない。
in-node 形状内の sh:in の各値は SHACL リストである。
in-maxCount 形状は sh:in について最大1つの値を持つ。
in-minListLength そのような各リストは、少なくとも1つの メンバーを持つべきである (SHOULD)。
rootClass-nodeKind 形状内の sh:rootClass の値は、 IRI、 または、すべてのメンバーIRIである 正形式SHACL リストである 空白ノードのいずれかである。
uniqueValuesFor-node プロパティの IRI、または 各メンバーがプロパティの IRIである SHACL リスト

B. 形状グラフを検証するための SHACL 形状

この節は非規範的である。

SHACL 1.2 Overview の SHACL-SHACL 付録では、 他の SHACL 形状グラフを検証するために使用でき、したがって各種 SHACL 仕様への適合を目指す RDF データに 関連する構文上の 制約の多くを強制し得る SHACL グラフについて説明している。

SHACL-SHACL 形状グラフは、仕様ごとに利用可能であり、また Overview の付録に示されているように、 http://www.w3.org/ns/shacl-shacl において バンドルされた「union」としても利用可能である。

C. SHACL Core バリデーターの要約

この節は、SHACL Core のすべての規範的なバリデーターを列挙する。 この節は、この仕様の他の部分から自動的に生成されており、バリデーターの文脈が不明確な場合に 本文へ戻るハイパーリンクが提供されている。

制約コンポーネント別バリデーター
sh:ClassConstraintComponent: $classsh:classパラメーター値とする。 classesIRIの集合とし、 $classIRIである場合、 その集合はちょうどその IRI のみから成り、 $class空白ノードSHACL リストである場合、 その集合は ちょうどそのリストのメンバーから成るものとする。

値ノードごとに、 その値ノードがリテラルであるか、または非リテラルであって データグラフ内で classes のいずれの SHACL インスタンスでもない場合、 その値ノードsh:value とする 検証結果が存在する。
sh:DatatypeConstraintComponent: $datatypesh:datatypeパラメーター値とする。 datatypesIRIの集合とし、 $datatypeIRIである場合、 その集合はちょうどその IRI のみから成り、 $datatype空白ノードSHACL リストである場合、 その集合は ちょうどそのリストのメンバーから成るものとする。

値ノードごとに、 それがリテラルでない場合、または datatypes のいずれにも一致しないデータ型を持つ リテラルである場合、 その値ノードsh:value とする 検証結果が存在する。

リテラルのデータ型は、SPARQL 1.2 の datatype 関数に従って決定される。 リテラルは、リテラルのデータ型が同じ IRIを持ち、 かつ SPARQL 1.2 がサポートするデータ型については不正型リテラルでない場合に、データ型に一致する。
sh:NodeKindConstraintComponent: $nodeKindsh:nodeKindパラメーター値とする。 $nodeKindsIRIの集合とし、 $nodeKindIRIである場合、 その集合はちょうどその IRI のみから成り、 $nodeKind空白ノードSHACL リストである場合、 その集合は ちょうどそのリストのメンバーから成るものとする。

値ノードごとに、 $nodeKinds のいずれにも一致しない場合、 その値ノードsh:value とする 検証結果が存在する。 任意のIRIは、sh:IRIsh:BlankNodeOrIRI および sh:IRIOrLiteral にのみ一致する。 任意の空白ノードは、sh:BlankNodesh:BlankNodeOrIRI および sh:BlankNodeOrLiteral にのみ一致する。 任意のリテラルは、sh:Literalsh:BlankNodeOrLiteral および sh:IRIOrLiteral にのみ一致する。 任意のトリプル項は、sh:TripleTerm にのみ一致する。
sh:MinCountConstraintComponent: $minCountsh:minCountパラメーター値とする。 値ノードの数が $minCount より少ない場合、 検証結果が存在する。
sh:MaxCountConstraintComponent: $maxCountsh:maxCountパラメーター値とする。 値ノードの数が $maxCount より多い場合、 検証結果が存在する。
sh:MinExclusiveConstraintComponent: $minExclusivesh:minExclusiveパラメーター値とする。 SPARQL 式 $minExclusive < vtrue を返さない 各値ノード v について、 vsh:value とする検証結果が存在する。
sh:MinInclusiveConstraintComponent: $minInclusivesh:minInclusiveパラメーター値とする。 SPARQL 式 $minInclusive <= vtrue を返さない 各値ノード v について、 vsh:value とする検証結果が存在する。
sh:MaxExclusiveConstraintComponent: $maxExclusivesh:maxExclusiveパラメーター値とする。 SPARQL 式 $maxExclusive > vtrue を返さない 各値ノード v について、 vsh:value とする検証結果が存在する。
sh:MaxInclusiveConstraintComponent: $maxInclusivesh:maxInclusiveパラメーター値とする。 SPARQL 式 $maxInclusive >= vtrue を返さない 各値ノード v について、 vsh:value とする検証結果が存在する。
sh:MinLengthConstraintComponent: $minLengthsh:minLengthパラメーター値とする。 各値ノード v について、 v の文字列表現(SPARQL str 関数によって定義される)の長さ (SPARQL STRLEN 関数によって定義される)が $minLength より小さい場合、または v空白ノードである場合、 vsh:value とする検証結果が存在する。
sh:MaxLengthConstraintComponent: $maxLengthsh:maxLengthパラメーター値とする。 各値ノード v について、 v の文字列表現(SPARQL str 関数によって定義される)の長さ (SPARQL STRLEN 関数によって定義される)が $maxLength より大きい場合、または v空白ノードである場合、 vsh:value とする検証結果が存在する。
sh:PatternConstraintComponent: $patternsh:patternパラメーター値とする。 $flagssh:flagsパラメーター値とする。 各値ノードについて、 それが空白ノードである場合、または (SPARQL str 関数によって定義される) 文字列表現が(SPARQL REGEX 関数によって定義される) 正規表現 $pattern に一致しない場合、 その値ノードsh:value とする 検証結果が存在する。 $flags が値を持つ場合、一致処理は $flags を第3引数として使用し、 SPARQL REGEX 関数の3引数版の定義に従わなければならない(MUST)。
sh:SingleLineConstraintComponent: $singleLinesh:singleLineパラメーター値とする。 $singleLinetrue である場合、字句形式が (SPARQL REGEX 関数によって定義される) 正規表現 [\f\r\n\v] に一致するリテラルである各値ノードについて、 検証結果が存在する。
sh:LanguageInConstraintComponent: $languageInsh:languageInとする。 各値ノードについて、 それがリテラルでない場合、または SPARQL langMatches 関数によって定義される フィルタリングスキーマに従って、$languageInメンバーである基本言語範囲のいずれにも 一致する言語タグを持たない場合、 その値ノードsh:value とする 検証結果が存在する。
sh:UniqueLangConstraintComponent: $uniqueLangsh:uniqueLangパラメーター値とする。 $uniqueLangtrue である場合、 少なくとも2つの値ノードによって 使用される空でない各言語タグについて、 検証結果が存在する。 データ型値ノードデータ型rdf:dirLangString である場合、 一意性条件には基底方向が含まれる。 たとえば、"1"@ar--rtl"1"@ar-ltr は異なり、 "1"@ar--rtl"1"@ar の組も同様に異なる。
sh:MemberShapeConstraintComponent: $memberShapesh:memberShapeパラメーター値とする。 各値ノード vSHACL リストでなければならない - v が SHACL リストでない場合、 検証結果が存在する。 SHACL リスト v の任意のメンバー m$memberShape適合しない場合、検証結果が存在する。
sh:MinListLengthConstraintComponent: $minListLengthsh:minListLengthパラメーター値とする。 各値ノード vSHACL リストでなければならない - v が SHACL リストでない場合、 検証結果が存在する。 リスト v 内のメンバー数が $minListLength より少ない場合、 検証結果が存在する。
sh:MaxListLengthConstraintComponent: $maxListLengthsh:maxListLengthパラメーター値とする。 各値ノード vSHACL リストでなければならない - v が SHACL リストでない場合、 検証結果が存在する。 リスト v 内のメンバー数が $maxListLength より多い場合、 検証結果が存在する。
sh:UniqueMembersConstraintComponent: $uniqueMemberssh:uniqueMembersパラメーター値とする。 各値ノード vSHACL リストでなければならない - v が SHACL リストでない場合、 検証結果が存在する。 $uniqueMemberstrue であり、リスト v に重複メンバーが ある場合、 検証結果が存在する。
sh:EqualsConstraintComponent: $equalssh:equalsとし、$path形状グラフ内で $equals によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 $otherNodes 内に存在しない 値ノードごとに、 その値ノードsh:value とする 検証結果が存在する。 $otherNodes 内のノードであって、 値ノードの1つでないものごとに、 そのsh:value とする 検証結果が存在する。
sh:DisjointConstraintComponent: $disjointsh:disjointパラメーター値とし、 $path形状グラフ内で $disjoint によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 $otherNodes にも含まれる 値ノードごとに、 その値ノードsh:value とする 検証結果が存在する。
sh:SubsetOfConstraintComponent: $subsetOfsh:subsetOfとし、$path形状グラフ内で $subsetOf によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 $otherNodes 内に存在しない 値ノードごとに、 その値ノードsh:value とする 検証結果が存在する。
sh:LessThanConstraintComponent: $lessThansh:lessThanとし、$path形状グラフ内で $lessThan によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 値ノード$otherNodes のメンバーとの各ペアについて、 最初のが2番目のより小さくない場合 (SPARQL の < 演算子に基づく)、 または2つの値を比較できない場合、 その値ノードsh:value とする 検証結果が存在する。
sh:LessThanOrEqualsConstraintComponent: $lessThanOrEqualssh:lessThanOrEqualsとし、 $path形状グラフ内で $lessThanOrEquals によって表される SHACL プロパティパスとする。 $otherNodes を、フォーカスノードから $path を介して到達できる ノードの集合とする。 値ノード$otherNodes のメンバーとの各ペアについて、 最初のが2番目の 以下でない場合 (SPARQL の <= 演算子に基づく)、 または2つの値を比較できない場合、 その値ノードsh:value とする 検証結果が存在する。
sh:NotConstraintComponent: $notsh:notとする。 各値ノード v について: 形状 $not に対する v適合性チェック失敗を生成する場合、 失敗が報告されなければならない(MUST)。 そうでなく、v が形状 $not適合する場合、 vsh:value とする検証結果が存在する。
sh:AndConstraintComponent: $andsh:andとする。 各値ノード v について: $andメンバーのいずれかに対する v適合性チェック失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、v$and の各メンバー適合しない場合、 vsh:value とする検証結果が存在する。
sh:OrConstraintComponent: $orsh:orとする。 各値ノード v について: いずれかのメンバーに対する v適合性チェック失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、v$orメンバーのいずれにも 適合しない場合、 vsh:value とする検証結果が存在する。
sh:XoneConstraintComponent: $xonesh:xoneとする。 各値ノード v について、 N を、$xoneメンバーである 形状のうち、 v がその形状に適合するものの数とする。 いずれかのメンバーに対する v適合性チェック失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、N がちょうど 1 でない場合、 vsh:value とする検証結果が存在する。
sh:NodeConstraintComponent: $nodesh:nodeとする。 各値ノード v について: $node に対する v適合性チェック失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、v$node適合しない場合、 vsh:value とする検証結果が存在する。
sh:PropertyConstraintComponent: $propertysh:propertyとする。 各値ノード v について: プロパティ形状 $property に対して、vフォーカスノードとして検証した結果が 失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでない場合、検証結果は、プロパティ形状 $property に対して vフォーカスノードとして検証する結果である。
sh:SomeValueConstraintComponent: $someValuesh:someValueとする。 任意の値ノードに対する $someValue への適合性チェック失敗を生成する場合、 いずれか1つ以上の値ノード$someValue に適合していない限り、 失敗が生成されなければならない(MUST)。 そうでなく、いずれの値ノード$someValue適合しない場合、 検証結果が存在する。
sh:QualifiedMinCountConstraintComponent: $qualifiedValueShapesh:qualifiedValueShapeとする。 $qualifiedMinCountsh:qualifiedMinCountパラメーター値とする。 C を、v$qualifiedValueShape適合し、 かつ v現在の形状、すなわち v が検証されていて、 $qualifiedValueShapesh:qualifiedValueShape の値として持つ形状についての 兄弟形状のいずれにも 適合しない 値ノード v の数とする。 前述の適合性チェックのいずれかが失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、C$qualifiedMinCount より小さい場合、 検証結果が存在する。 sh:qualifiedMinCount制約コンポーネントsh:QualifiedMinCountConstraintComponent である。
sh:QualifiedMaxCountConstraintComponent: $qualifiedMaxCountsh:qualifiedMaxCountパラメーター値とする。 C を、上記の sh:qualifiedMinCount について定義されたものとする。 前述の適合性チェックのいずれかが失敗を生成する場合、 失敗が生成されなければならない(MUST)。 そうでなく、C$qualifiedMaxCount より大きい場合、 検証結果が存在する。 sh:qualifiedMaxCount制約コンポーネントsh:QualifiedMaxCountConstraintComponent である。
sh:ReifierShapeConstraintComponent: tトリプル項フォーカスノード, $path, 値ノード)とする。 トリプル項 t の各具象化子について、その 具象化子フォーカスノードとして、 ノード形状 $reifierShape に対してその具象化子を検証した結果が 失敗を生成する場合、失敗が生成されなければならない (MUST)。 $reifierShape に適合しない各具象化子 t について、 tsh:value とする検証結果が存在する。
sh:ReificationRequiredConstraintComponent: $reificationRequiredtrue に設定されており、 データグラフ内にトリプル項 t についての具象化文が存在しない場合、 tsh:value とする検証結果が存在する。
sh:ClosedConstraintComponent: $closedsh:closedパラメーター値とする。 $ignoredPropertiessh:ignoredPropertiesとする。

$closedtrue または sh:ByTypes であり、 P が下で定義されるプロパティ集合である場合、 値ノード主語とし、 P に含まれない 述語を持つ各トリプルについて、 検証結果が存在する。 $ignoredProperties が値を持つ場合、このSHACL リストメンバーとして列挙されたプロパティも、 値ノードについて許可される。 検証結果は、そのトリプルの 述語sh:resultPath として持ち、 そのトリプルの目的語sh:value として 持たなければならない(MUST)。

$closedtrue である場合、P は、現在の形状から SPARQL パス sh:property/sh:path を介して到達できる IRI プロパティの集合である。

$closedsh:ByTypes である場合、P は、 次のアルゴリズムを介して値ノードから到達できる IRI プロパティの集合に rdf:type を加えたものである:
function collectProperties(S)
    SPARQL パス sh:property/sh:path を介して S から到達できるすべての
            IRI プロパティを追加する
    S が形状グラフ内で rdfs:Class の SHACL インスタンスである場合 {
        形状グラフ内で (S rdfs:subClassOf ?o) に一致する各トリプルについて
            collectProperties(?o)
        形状グラフ内で (?s sh:targetClass S) に一致する各トリプルについて
            collectProperties(?s)
    }
    S が形状グラフ内で sh:NodeShape の SHACL インスタンスである場合
        形状グラフ内で (S sh:node ?o) に一致する各トリプルについて
            collectProperties(?o)

データグラフ内の値ノードの各 rdf:type T について
    collectProperties(T)
実装は、上記のアルゴリズムで同じ S を2回訪問しないようにすることで、 無限ループを避ける必要があることに注意されたい。
sh:HasValueConstraintComponent: $hasValuesh:hasValueパラメーター値とする。 RDF 項 $hasValue値ノードの中に 含まれない場合、 検証結果が存在する。
sh:InConstraintComponent: $insh:inとする。 $inメンバーではない 各値ノードについて、 その値ノードsh:value とする 検証結果が存在する。
sh:RootClassConstraintComponent: $rootClasssh:rootClassパラメーター値とする。 classesIRIの集合とし、 $rootClassIRIである場合、 その集合はちょうどその IRI のみから成り、 $rootClass空白ノードSHACL リストである場合、 その集合は ちょうどそのリストのメンバーから成るものとする。

値ノードについて、 それがIRIでない場合、または IRIであっても、 データグラフvalueNode rdfs:subClassOf* class を含意するような classes 内の class が存在しない場合、 その値ノードsh:value とする 検証結果が存在する。
sh:UniqueValuesForConstraintComponent: $uniqueValuesFor を、シェイプ S における sh:uniqueValuesForとする。 $properties を、次のような集合とする: $uniqueValuesForIRI である場合、 $properties = { uniqueValuesFor } とする。 $uniqueValuesForSHACL リストである場合、 $properties は、そのリストのメンバーの集合である。 $targetNodes を、Sターゲットノードとする。
$targetNodes 内に、V と同じく ノード が存在し、そのノードが $properties 内のすべてのプロパティについて V と完全に同一のを持つ各 値ノード V について、 検証結果が存在する。 V$properties 内のいずれのプロパティについてもを持たない場合、 結果は生成されない。

D. セキュリティとプライバシーの 考慮事項

この節は非規範的である。

ほとんどの RDF ベースの技術と同様に、SHACL プロセッサーは、さまざまなソースから 結合されたグラフに対して動作することがある。一部のアプリケーションは、オープンな 「リンクトデータ」アーキテクチャを持ち、組織の信頼ネットワークの外部にあるソースから RDF トリプルを動的に組み立てることがある。 RDF では誰でも任意のリソースについて文を追加できるため、トリプルは形状定義または データグラフ内のノードの本来意図されたセマンティクスを変更し、誤解を招く結果につながる可能性がある。 これ(および以下)のシナリオからの保護は、信頼され検証済みの RDF ソースのみを使用し、 owl:imports および sh:shapesGraph を介してグラフが動的に追加される 可能性を排除することで実現できる。

E. 索引

E.1 この仕様で定義される 用語

E.2 参照により定義される用語

F. 謝辞

この節は非規範的である。

元の SHACL core 仕様は RDF Data Shapes Working Group によって作成された。 その 謝辞の節を参照。

G. 元の SHACL Core と SHACL 1.2 Core の間の変更点

この節は非規範的である。

H. 参考文献

H.1 規範的参考文献

[BCP47]
言語を識別するためのタグ。 A. Phillips, 編; M. Davis, 編。IETF。2009年9月。現行ベストプラクティス。URL: https://www.rfc-editor.org/info/rfc5646/
[owl2-syntax]
OWL 2 Web オントロジー言語 構造仕様および 関数形式構文(第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/
[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/
[shacl-ucr]
SHACL ユースケースと要件。Simon Steyskal; Karen Coyle。W3C。2017年7月20日。W3C 作業グループノート。URL: https://www.w3.org/TR/shacl-ucr/
[shacl12-node-expr]
SHACL 1.2 ノード式。 Holger Knublauch; Simon Steyskal; Robert David; David Habgood。W3C。2026年1月8日。FPWD。URL: https://www.w3.org/TR/shacl12-node-expr/
[shacl12-sparql]
SHACL 1.2 SPARQL 拡張。Holger Knublauch; Ashley Sommer。W3C。2026年1月30日。W3C 作業草案。URL: https://www.w3.org/TR/shacl12-sparql/
[sparql12-entailment]
SPARQL 1.2 論理含意レジーム。 Peter Patel-Schneider。W3C。2026年4月9日。W3C 作業草案。URL: https://www.w3.org/TR/sparql12-entailment/
[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/

H.2 参考情報としての参考文献

[json-ld]
JSON-LD 1.0。Manu Sporny; Gregg Kellogg; Markus Lanthaler。W3C。2020年11月3日。W3C 勧告。URL: https://www.w3.org/TR/json-ld/
[owl2-mapping-to-rdf]
OWL 2 Web オントロジー言語の RDF グラフへのマッピング(第2版)。Peter Patel-Schneider; Boris Motik。W3C。2012年12月 11日。W3C 勧告。URL: https://www.w3.org/TR/owl2-mapping-to-rdf/
[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/