2016-05-23 11 views
0

これは私のクエリdbpediaでシンフォニーの作曲者を取得するには?

select * 
{ 
?symphonies_by_composer <http://www.w3.org/2004/02/skos/core#broader> <http://dbpedia.org/resource/Category:Symphonies_by_composer> . 
?symphony <http://purl.org/dc/terms/subject> ?symphonies_by_composer . 
} 

である私はそれは私に多くの交響曲を与えるhttp://dbpedia.org/sparql/

DBpediaのエンドポイント上でそれを実行します。このようcomposedBy:私はカ月である私自身の財産を、追加、私のトリプルを構築したい

PREFIX mo: <http:blablabla.com/mo#> 

construct 
{ 
?symphony mo:composedBy ?composer . 
?symphony a mo:Symphony 
} 
{ 
?symphonies_by_composer <http://www.w3.org/2004/02/skos/core#broader> <http://dbpedia.org/resource/Category:Symphonies_by_composer> . 
?symphony <http://purl.org/dc/terms/subject> ?symphonies_by_composer . 
} 

しかし、私は?composer変数のバインディングを取得する方法がわかりません。

あなたは知っていますか?

する

+0

CONSTRUCTクエリの2番目の部分は、基本的にはSELECTクエリを記述する場合に実行します。また、DBpediaにあるデータのみを照会することもできます。たとえば、プロパティ「http:// dbpedia.org/property/composer'」と「http:// dbpedia.org/ontology/composer'」がありますが、すでに知っているように、すべての音楽に情報があります。 – AKSW

答えて

2

あるようです(私はあなたが方法がないと思われる場合は、親切に私だけが知っていると私は、残念ながら、それらのデータを渡します、それを取得する方法がないかもしれないことを承知しています)これらの交響曲を作曲家を表す実際のリソースに接続するDBPediaの明示的な関係はありません。

可能な回避策は、最初のビット(「によって交響曲」)をオフつむことで、カテゴリのprefLabelから作曲の名前を抽出することである。

PREFIX mo: <http://example.com/mo#> 
PREFIX dct: <http://purl.org/dc/terms/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
CONSTRUCT 
{ 
     ?symphony mo:composedBy ?composer_name . 
     ?symphony a mo:Symphony 
} 
    WHERE 
{ 
    ?symphonies_by_composer skos:broader <http://dbpedia.org/resource/Category:Symphonies_by_composer> ; 
          skos:prefLabel ?label . 
    ?symphony dct:subject ?symphonies_by_composer . 
    BIND(SUBSTR(STR(?label), (STRLEN("Symphonies by ") + 1)) AS ?composer_name) 
} 

これはの名前をあなたにお返しします各コンポーザーはリテラル値として扱われます。

2番目に可能なステップは、名前から作曲者を識別するリソースの実際のIRIを再構築することです。たとえば、 "Hans Werner Henze"の場合、人物を特定する実際のリソースはhttp://dbpedia.org/resource/Hans_Werner_Henzeです。したがって、単純な文字列操作または2つの単純な文字列操作が、スペースを置き換えてdbpediaベースIRIと連結することで解決します。しかし、リソースが存在するという保証はなく、たとえそれがあっても、実際にが作者を特定している(例えば、複数のHans Werner Henzeが存在する可能性がある)ので、これは脆弱です。

にリソースが存在し、正しいものであることを確認するための追加クエリを実行することで、これをさらに拡張できますが、追加の試行錯誤が必要です。目標が単に作曲家の名前である場合、最初の例のクエリはほとんどのインスタンスで正常に動作するはずです。

+0

それは本当に私がやったことです、最初のアプローチ。私はリール値が気に入らなかったので、IRIに変更しました –

関連する問題