2016-09-30 20 views
2

で私は現在、以下のようないくつかの基本的な要求を起動するhttp://dbpedia.org/snorqlウェブサイトを使用しています:フィルタリングSPARQL結果日と月

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
SELECT ?body ?value WHERE { 
?body a dbpedia0:Person. 
?body dbpedia0:birthDate ?value. 
} 
ORDER BY ?value 

私は唯一の人々ように結果をフィルタリングする方法を見つけるしたいと思いますXYで生まれました(出生年に関係なく)。

1)基本的なフィルタリング:私のような多くのアプローチでそうしようとしている... FILTER(xsd:date(?value) = "2000-01-01"^^xsd:date) しかし、私はどのように正確に私が年を気にしないということになりましたしません

2)MONTH()DAY()の関数を使用して、月と日を表す整数値にする必要があります。しかし、これらの関数は、日付型が無効な入力引数であると考えられています。

3)日付を文字列変数に変換します。そして、この文字列変数の末尾の文字(月と日に対応)が必要な月と日と一致するかどうかをテストします。それは次のようなものになります:FILTER(STRENDS(CONVERT(CHAR, ?value),"01-01") = true)

明らかに、上記の方法のどれも正常に動作していません。 私がSPARQLコマンドを使い始めたばかりのので、私のリクエストの構文が間違っていると非難しないでください。

私は非常にありがとう、または上の任意のヘルプに感謝します!

+0

なぜタグMYSQLとSQLを追加しましたか?そして、なぜ「SQLで始まる」コマンドについて話していますか? SPARQL!= SQL – AKSW

+0

また、質問の書式設定も役に立ちます。http://stackoverflow.com/help/formattingを参照してください。 – AKSW

+0

DBpediaデータは非常に異質です。特に、日付リテラルはxsd:date、xsd:dateTime、xsd:gYear、等それはキャストとフィルタリングを非常に難しくします – AKSW

答えて

2

(私がコメントで述べたように)すべてのリテラルがCASTになるわけではないので、xsd:dateと入力するとエラーになります。

Virtuoso 22003 Error SR586: Incomplete RDF box as argument 0 for year(). 

もう一つはcast ING FILTER引数を任意の順序で実行されているという印象を私をリードし、別のエラーにつながるとしてみてください。そのためfilter

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
SELECT ?body ?value WHERE 
    { 
    ?body a     dbpedia0:Person . 
    ?body dbpedia0:birthDate ?value   . 
      FILTER ( datatype(?value) = xsd:date 
        &&  year(?value) = 2000 
       ) 
    } 
limit 10 

エラー仕事ができます

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 
SELECT ?body ?value 
WHERE 
    { 
    ?body a     dbpedia0:Person . 
    ?body dbpedia0:birthDate ?value   . 
      FILTER (  datatype(?value) = xsd:date 
        && year(xsd:date(?value)) = 2000 
       ) 
    } 
limit 10 

エラー:

それだけが私の作品のサブ SELECT内部 LIMIT

Virtuoso 22003 Error SR586: Incomplete RDF box as argument 1 for xqf_str_parse(). 

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 

SELECT ?body ?value 
WHERE 
    { 
      FILTER (year(xsd:date(?value)) = 2000) 
     { 
     SELECT ?body ?value 
     WHERE 
      { 
      ?body a     dbpedia0:Person . 
      ?body dbpedia0:birthDate ?value   . 
        FILTER (datatype(?value) = xsd:date) 
      } 
     LIMIT 10 
     } 
    } 
LIMIT 10 
サブ SELECT Sを使用して

が動作しているようではなく

PREFIX dbpedia0: <http://dbpedia.org/ontology/> 

SELECT ?body ?value 
WHERE 
    { 
      FILTER (year(xsd:date(?value)) = 2000) 
    { 
     SELECT ?body ?value 
     WHERE 
     { 
      ?body a     dbpedia0:Person . 
      ?body dbpedia0:birthDate ?value   . 
       FILTER (datatype(?value) = xsd:date) 
     } 
    } 
    } 
limit 10 

エラーについて

ここではVirtuosoに何が起こっているのか分かりません。

関連する問題