

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# DESCRIBE で使用される SPARQL クエリヒント
<a name="sparql-query-hints-for-describe"></a>

SPARQL `DESCRIBE` クエリは、リソースの説明をリクエストするための柔軟なメカニズムを提供します。ただし、SPARQL 仕様では、`DESCRIBE` の正確なセマンティクスは定義されていません。

[エンジンリリース 1.2.0.2](engine-releases-1.2.0.2.md) 以降、Neptune はさまざまな状況に適したいくつかの異なる `DESCRIBE` モードとアルゴリズムをサポートしています。

このサンプルデータセットは、さまざまなモードを説明するのに役立ちます。

```
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <https://example.com/> .

:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JohnDoe :firstName "John" .
:JaneDoe :knows _:b1 .
_:b1 :knows :RichardRoe .

:RichardRoe :knows :JaneDoe .
:RichardRoe :firstName "Richard" .

_:s1 rdf:type rdf:Statement .
_:s1 rdf:subject :JaneDoe .
_:s1 rdf:predicate :knows .
_:s1 rdf:object :JohnDoe .
_:s1 :knowsFrom "Berlin" .

:ref_s2 rdf:type rdf:Statement .
:ref_s2 rdf:subject :JaneDoe .
:ref_s2 rdf:predicate :knows .
:ref_s2 rdf:object :JohnDoe .
:ref_s2 :knowsSince 1988 .
```

以下の例では、以下のような SPARQL クエリを使用してリソース `:JaneDoe` の説明が要求されていることを前提としています。

```
DESCRIBE <https://example.com/JaneDoe>
```

## `describeMode` SPARQL クエリヒント
<a name="sparql-query-hints-describeMode"></a>

`hint:describeMode` SPARQL クエリヒントは、Neptune によってサポートされる次の SPARQL `DESCRIBE` モードのいずれかを選択するために使用されます。

### `ForwardOneStep` DESCRIBE モード
<a name="sparql-query-hints-describeMode-ForwardOneStep"></a>

次のような `describeMode` クエリヒントで `ForwardOneStep` モードを呼び出します。

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "ForwardOneStep"
}
```

`ForwardOneStep` モードは、記述されるリソースの属性と転送リンクのみを返します。この例では、これは、記述されるリソース `:JaneDoe` をサブジェクトとして持つトリプルを返すことを意味します。

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b301990159 .
```

DESCRIBE クエリは、入力データセットと比較して、`_:b301990159` など、毎回異なる ID を持つ空白のノードのトリプルを返す場合があることに注意してください。

### `SymmetricOneStep` DESCRIBE モード
<a name="sparql-query-hints-describeMode-SymmetricOneStep"></a>

`SymmetricOneStep` は、クエリヒントを指定しなかった場合のデフォルトの DESCRIBE モードです。また、次のような `describeMode` クエリヒントを使って明示的に呼び出すこともできます。

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "SymmetricOneStep"
}
```

`SymmetricOneStep` セマンティクスでは、`DESCRIBE` は、記述されるリソースの属性、送信リンク、逆リンクを返します。

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b318767375 .

_:b318767631 rdf:subject :JaneDoe .

:RichardRoe :knows :JaneDoe .

:ref_s2 rdf:subject :JaneDoe .
```

### Concise Bounded Description (`CBD`) DESCRIBE モード
<a name="sparql-query-hints-describeMode-CBD"></a>

Concise Bounded Description (`CBD`) モードは、次のような `describeMode` クエリヒントを使用して呼び出されます。

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "CBD"
}
```

`CBD` セマンティクスでは、`DESCRIBE` は、記述されるリソースの Concise Bounded Description ([W3C によって定義](http://www.w3.org/Submission/CBD)) を返します。

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b285212943 .
_:b285212943 :knows :RichardRoe .

_:b285213199 rdf:subject :JaneDoe .
_:b285213199 rdf:type rdf:Statement .
_:b285213199 rdf:predicate :knows .
_:b285213199 rdf:object :JohnDoe .
_:b285213199 :knowsFrom "Berlin" .

:ref_s2 rdf:subject :JaneDoe .
```

RDF リソース (つまり RDF グラフ内のノード) の Concise Bounded Description は、そのノードを中心として独立できる最小のサブグラフです。実際には、このグラフを、指定されたノードをルートとするツリーと考えると、そのツリーの葉のような空白のノード (bnode) は存在しないということです。bnode は外部からアドレス指定することも、後続のクエリで使用することもできないため、現在のノードから次のシングルホップを見つけるには、グラフをブラウズするだけでは不十分です。また、後続のクエリで使用できるもの (つまり、bnode 以外のもの) を見つけるにも、十分に調査する必要があります。

#### CBD の計算
<a name="sparql-query-hints-describeMode-CBD-computing"></a>

ソース RDF グラフ内の特定のノード (開始ノードまたはルート) が指定されると、そのノードの CBD は次のように計算されます。

1. ステートメントの*サブジェクト*が開始ノードであるソースグラフ内のすべてのステートメントをサブグラフに含めます。

1. 再帰的に、サブグラフ内のこれまでに空白のノード*オブジェクト*を持つすべてのステートメントについて、ソースグラフ内の、ステートメントの*サブジェクト*がその空白のノードであり、サブグラフにまだ含まれていないすべてのステートメントをサブグラフに含めます。

1. 再帰的に、それまでにサブグラフに含まれていたすべてのステートメントについて、ソースグラフ内のこれらのステートメントのすべての具象化について、各具象化の `rdf:Statement` ノードから始まる CBD を含めます。

その結果、*オブジェクト*ノードが IRI 参照またはリテラルのいずれかであるサブグラフ、または空白のノードがグラフ内のどのステートメントの*サブジェクト*にもなっていないサブグラフになります。CBD は、単一の SPARQL SELECT または CONSTRUCT クエリーでは計算できないことに注意してください。

### Symmetric Concise Bounded Description (`SCBD`) DESCRIBE モード
<a name="sparql-query-hints-describeMode-SCBD"></a>

Symmetric Concise Bounded Description (`SCBD`) モードは、次のような `describeMode` クエリヒントを使用して呼び出されます。

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "SCBD"
}
```

`SCBD` セマンティクスでは、`DESCRIBE` は、リソースの Symmetric Concise Bounded Description (W3C によって「[リンクされたデータセットを VoID ボキャブラリで記述する](http://www.w3.org/TR/void/)」で定義) を返します 。

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b335544591 .
_:b335544591 :knows :RichardRoe .

:RichardRoe :knows :JaneDoe .

_:b335544847 rdf:subject :JaneDoe .
_:b335544847 rdf:type rdf:Statement .
_:b335544847 rdf:predicate :knows .
_:b335544847 rdf:object :JohnDoe .
_:b335544847 :knowsFrom "Berlin" .

:ref_s2 rdf:subject :JaneDoe .
```

CBD と SCBD が `ForwardOneStep` および `SymmetricOneStep` モードより優れている点は、空白のノードが常にその表現を含むように拡張される点です。SPARQL を使用して空白のノードをクエリすることはできないため、これは重要な利点かもしれません。さらに、CBD モードと SCBD モードでは具象化も考慮されます。

`describeMode` クエリヒントは `WHERE` 句の一部にもなることに注意してください。

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE ?s
WHERE {
  hint:Query hint:describeMode "CBD" .
  ?s rdf:type <https://example.com/Person>
}
```

## `describeIterationLimit` SPARQL クエリヒント
<a name="sparql-query-hints-describeIterationLimit"></a>

`hint:describeIterationLimit` SPARQL クエリヒントは、CBD や SCBD などの反復的な DESCRIBE アルゴリズムで実行される反復拡張の最大回数に関する**オプション**制約となります。

DESCRIBE 制限は AND 処理されます。したがって、反復制限とステートメント制限の両方が指定された場合、DESCRIBE クエリを切断する前に両方の制限を満たす必要があります。

この値のデフォルトは 5 です。ゼロ (0) に設定すると、反復拡張の回数に制限がないように指定できます。

## `describeStatementLimit` SPARQL クエリヒント
<a name="sparql-query-hints-describeStatementLimit"></a>

`hint:describeStatementLimit` SPARQL クエリヒントは、DESCRIBE クエリレスポンスに含めることができるステートメントの最大数を**オプションで**制限できます。CBD や SCBD のような反復的な DESCRIBE アルゴリズムにのみ適用されます。

DESCRIBE 制限は AND 処理されます。したがって、反復制限とステートメント制限の両方が指定された場合、DESCRIBE クエリを切断する前に両方の制限を満たす必要があります。

この値のデフォルトは 5000 です。ゼロ (0) に設定すると、返されるステートメントの数に制限がないように指定できます。