2

私は Dotnetrdf の sparql エンジンでいくつか遊んでいますが、まだ成功していないパラメーター化されたクエリを作成しようとしています。

コードで _:1690 として識別される空白ノードを持つグラフ g に取り組んでいるとします。

Dim queryString As SparqlParameterizedString = New SparqlParameterizedString()
queryString.Namespaces.AddNamespace("rdfs", UriFactory.Create("http://www.w3.org/2000/01/rdf-schema#"))

queryString.CommandText = "SELECT ?label { @context rdfs:label ?label } "
queryString.SetParameter("context", g.GetBlankNode("1690"))

Dim result As VDS.RDF.Query.SparqlResultSet = g.ExecuteQuery(New SparqlQueryParser().ParseFromString(queryString))

これを実行すると、空のノードのみで結果をフィルタリングするのではなく、rdfs:label プロパティを持つすべてのノードが取得されます。

パラメータの値を適切に設定して、結果に 1 つの項目のみを取得する方法を教えてください。

前もってありがとう、マックス。

4

1 に答える 1

0

SPARQL クエリの空白ノードは、RDF グラフの空白ノードとは異なります

SPARQL クエリでは、空白ノードはスコープが制限された一時変数として扱われ、特定の空白ノードとは一致しないため、空白ノード識別子で選択する SPARQL クエリを作成することはできません。

@contextしたがって、クエリを作成するコードは、変数に置き換えた場合と同じ結果を返します。?s

特定の空白ノードに関連付けられた値を見つける必要がある場合は、参加するトリプルに基づいてその空白ノードを一意に選択するクエリを作成する必要があります。それができない場合は、データを再考する必要があります。この場合、空のノードの代わりに URI を使用する必要があるためです。


dotNetRDF を使用していて、クエリを実行している元のグラフがあるため、回避策として、IGraph代わりに APIを使用できます。

INode label = g.GetTriplesWithSubjectPredicate(g.GetBlankNode("1690"), g.CreateUriNode("rdfs:label")).Select(t => t.Object).FirstOrDefault();

label探しているトリプルが存在しない場合は、常に null になる可能性があることを覚えておいてください

于 2013-04-17T18:51:52.447 に答える