2011-12-26 3 views
9

類似のタイトルを持つthis questionに示すように、名前の一部を知ってdbpediaリソースを取得したいと考えています。私はSPARQLなどの初心者ですが、作者が「ルーマニア」を検索し、回答した人がSparqlの仕事を依頼してくれたので、質問の例が私を助けました。それは素晴らしいですが、ここに事があります。例ではDBPediaリソースを文字列名でSPARQLで検索し、その型を知らない

、彼らはすでにWHERE句で

?c a dbpedia-owl:Country ; 

したがって、ルーマニア国であることを「知っていました」。

SELECT ?c 
    WHERE { 
    ?c a dbpedia-owl:Country ; 
    foaf:name "Romania"@en . 
    FILTER NOT EXISTS {?c dbpedia-owl:dissolutionYear ?y} 
    } 

され、完全なSPARQL要求しかし、この質問は非常に完全に「名前」は、リソースの実際の名前、またはの一部である、従ってその名前のすべてのリソースを探して、私たちのニーズに答えていませんそれは、(rdf:)タイプに関係なくです。目標は、名前やその一部を知っているだけで、「何か」を検索することです。

私はあなたにこの質問をする前にいくつかの調査をしてきましたが、私はすでに「名前の一部」の問題はbif関数(sparqlに準拠していないため悪い方法)で解決できることをすでに知っています。 CONTAINS句を使用していましたが、使用方法を示す例は見つかりませんでした。

ここで、dbpediaリソースの中で検索する「単語」があるとします。その単語は、一部のユーザーからの入力になります。それを「INPUT」としましょう。

要求、私は想像が、次のようになります。

SELECT ?something WHERE 
    { 
    ?something a (dbpedia Resource). 
    CONTAINS(?something,"INPUT") 
    } 

私の主な質問は、約2の主要な側面である:

  1. はタイプDBpediaのリソースを記述はありますか?私はそれがオントロジや何かにあるとは思わない。私はすべてのリソースの中から一致するものを見つけるために検索したいと思うことをknwoing ...
  2. 私が提供する特定の名前、またはいくつかの文字列。私はFILTERオプションを考慮しましたが、それはすべてのリソースを取得し、それらがリトライされた後に名前でフィルタリングすることを意味します。

だから誰も、この名前またはその一部を提供することによってリソースを取得するこの「マスタークエリ」を知っていますか? (例として、「Obama」を提供し、BarrackだけでなくMichelleのためにも結果を得ている)。

ありがとうございます。

答えて

15

私はあなたの最初の質問でインスタンスリソースだけを調べたいと思っています。 RDFではすべてがリソースであるため、一般的なケースでインスタンスリソースだけを明示的に求めることができるかどうかはわかりません。 DBpediaデータセットに対してこれが特に必要な場合は、プロパティとしてdcterms:subjectを持つリソースを照会することができます(DBPediaではインスタンスリソースのみがdcterms:subjectを持ちます)。あなたの2番目の質問のために同様に

SELECT DISTINCT ?s ?label WHERE { 
      ?s rdfs:label ?label . 
      FILTER (lang(?label) = 'en'). 
      ?label bif:contains "Obama" . 
      ?s dcterms:subject ?sub 
} 

- あなただけのDBpediaのデータセットを使用している場合は、使用する場合があります。ですから、このようなクエリを持つことができる「BIFを:含まれている」SPARQL準拠していないですが。私はこれを行うための別の最適な方法はないと思うし、FILTERの使用は特にクエリを素早く実行する必要がある場合には最適ではないと言いました。キーワード検索と索引付けは各トリプルストアによって特別に扱われていると思うが、まだ全文検索者に標準化された方法はない。

したがって、dbpediaを使用する場合は、ストアの機能とデータセットの特性を使用して問題を解決してください。

+0

私たちは "トリック"(dcterms:件名)を通過しなければならないのは残念ですが、私の要求はdbpediaリソースのみです。だからあなたの答えは絶対に驚くべきもので、頭痛の負荷が私を救った。どうもありがとうございます。 bif関数に関しては、SPARQLに準拠していないことが分かります。そのため、私はCONTAINSを探しましたが、私はまだこの節を使用する例を探していると思います。あなたの答えをもう一度ありがとう、dbpedia&rdfでの旅は始まったばかりですが、私は必要なスタートを私にくれました。 –

+0

このアプローチにはいくつかの苦しい制限があります。スペースは使用できません。だから、もしあなたが "Barak Obama"(またはプログラムで、あなたが出会った名前の文字列)の正規表現表現を取り出そうとしていたら、bif:containsを使うことはできません。 そして、私はおそらく、URLエンコードの文字列ですか? '?label bif:contains" barak%20obama "。 サイコロはありません。構成部分を取り込むための2つの別々のステートメントでしょうか?いいえ。 : 'Virtuoso 37000エラーSP031:SPARQLコンパイラ:複数のbif:一つのグループの '$ label'変数のためのcontainsまたは類似述語' アイデア? – sands

+3

@sandsできるの?label bif: 'barak obama' 'が含まれています(余分な引用符に注意してください)。 – MrM

関連する問題