0

この RDF を考えると:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rdf:RDF [<!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
<!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'>]>
<rdf:RDF xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:dnr="http://www.dotnetrdf.org/configuration#"
         xml:base="http://www.example.org/"
         xmlns:ns1="http://www.example.org/startTime"
     xmlns:ns2="http://www.example.org/endTime">

  <rdf:Description rdf:about="Fadi">
    <ns0:eat xmlns:ns0="http://example.org/">Apple</ns0:eat>
    <ns1:startTime>00:01:38</ns1:startTime>
    <ns2:endTime>00:01:39</ns2:endTime>
  </rdf:Description>
</rdf:RDF>

私はsparqlクエリを作成しようとしていますが、このクエリを作成すると:

SELECT * WHERE { { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o } } }

私は答えを得る。しかし、私がこれを試したとき:

SELECT * WHERE { ?s ?p ?o . FILTER (regex(?o, 'Apple','i')) }

私はノーを得ます。

クエリで startTime と endTime を取得する必要があります。どのように記述すればよいですか?!

OP コメントからのコードを含める

Graph myGraph = new Graph();
FileLoader.Load(myGraph, "C:\\Users\\hasoOn\\Desktop\\tt.RDF");
TripleStore store = new TripleStore();
store.Add(myGraph);
SparqlQueryParser parser = new SparqlQueryParser();
SparqlQuery q = parser.ParseFromString("PREFIX ex: <example.org/>; SELECT * WHERE { ex:Fadi ?p ?o }");
SparqlResultSet results = (SparqlResultSet)store.ExecuteQuery(q);
4

1 に答える 1

2

以前の質問に基づいて、これも dotNetRDF に関連していると仮定すると、SPARQL によるクエリのドキュメントから引用すると、自分が考えているデータをクエリしていません。

クエリを作成する際の一般的なエラーは、通常、既定ではクエリがストア内の名前のない既定のグラフに対してのみ動作することです (クエリ プロセッサによって異なります)。したがって、クエリを実行しても、データが含まれるグラフや、データセットを正しく構成したかどうかによっては、結果が得られない場合があります。 さまざまな種類のデータセットの構成に関する議論については、 SPARQL データセットページを参照してください。インメモリ SPARQL エンジンを使用しているときにクエリで何が起こっているかをデバッグする方法については、SPARQL クエリのデバッグを参照することもできます。

あなたが言及した最初のクエリは、それがどのグラフにあるかに関係なくすべてを選択するため、結果を返す理由を強調しました。

2 番目のクエリは、データを含まない可能性が高いデフォルト グラフのみをクエリしているため、何も返されません。データセットを適切に構成する方法の詳細については、リンクされたドキュメントを参照してください。

句を使用するようにクエリを変更してGRAPH、データ内の名前付きグラフに実際にアクセスするか、クエリを作成するために使用するコードを表示して、2 番目のクエリが機能するように適切に変更する方法を示します。

編集

コードを確認したので、実際にデータをクエリしていません.SPARQLTripleStoreクエリを使用する場合、クエリしているデフォルトのグラフである名前のない暗黙のグラフがあります. データをクエリするには、いくつかの方法でコードを変更できます。

  1. データがデフォルトのグラフとして扱われるようg.BaseUri = null;に、グラフをインスタンスに追加する前に設定しますTripleStore
  2. ISparqlDatasetドキュメントに従ってとを使用してLeviathanQueryProcessor、データセットを構成してグラフをより柔軟にデフォルトのグラフにすることができます
  3. すでに提案されているように、GRAPH句を使用するようにクエリを変更して、デフォルトのグラフではなく、ストア内の名前付きグラフをクエリするようにします
于 2013-04-29T22:14:20.360 に答える