2017-01-05 1 views
0

SPARQLクエリ内に解決できないURIを含む結果をフィルタリングする可能性はありますか?SPARQLクエリで解決できないURIをフィルタリングする方法はありますか?

例:私は次のクエリを作ってるんだ(エンドポイント:http://linkeddata.systems:8890/sparql):結果で

PREFIX RO: <http://www.obofoundry.org/ro/ro.owl#> 
PREFIX SIO: <http://semanticscience.org/resource/> 
PREFIX EDAM: <http://edamontology.org/> 
PREFIX PHIO: <http://linkeddata.systems/ontologies/SemanticPHIBase#> 
PREFIX PUBMED: <http://linkedlifedata.com/resource/pubmed/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX up: <http://purl.uniprot.org/core/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
SELECT DISTINCT ?disn_1 ?label ?rel ?valor 
WHERE { ?disn_1 ?rel ?valor . ?disn_1 rdfs:label ?label FILTER((?disn_1 = <http://linkeddata.systems/SemanticPHIBase/Resource/host/HOST_00561>))} 

、あなたがそこにある勇気変数解像不可能なURIが含まれているトリプル見ることができるように? (テキスト:/ hostncbitaxid /)。解決できないURIを持つ結果を削除するためにSPARQLクエリに追加できる特定のFILTERがあるかどうかを知りたいと思います。

私はこれらの結果をC#で処理するために使用しているAPIに問題があります。解決できないURIが原因で例外が返されているため、可能であればSPARQLクエリでフィルタリングしたいのです)。

答えて

3

あなたはそれが解決できないことをどのように知っていますか? RDFには「相対URI」という概念はなく、すべてのURIが何らかの理由で解決される(場合によっては実装の詳細になる)ため、絶対URIで終わることになります。そのエンドポイントからのHTML結果では、私はhttp://linkeddata.systems:8890/hostncbitaxid/を得て、それは容易に解決することができます。

つまり、絶対的でないURIを含む結果が出てきて、それらをフィルタリングしたい場合は、ヒューリスティックを使用してそれを行うことができます。たとえば、httpで始まるURIのみが必要な場合は、これを行うことができます。例えば、ここでのための2つの値を返すクエリは、のURI:?

prefix : <urn:ex:> 

select * where { 
    values ?uri { <http://www.example.org/> </foobar> } 
} 
----------------------------- 
| uri      | 
============================= 
| <http://www.example.org/> | 
| <file:///foobar>   | 
----------------------------- 

ファイルとして解決しまった相対URI /foobarのことに注意してください:// URI)することができます

prefix : <urn:ex:> 

select * where { 
    values ?uri { <http://www.example.org/> </foobar> } 
    filter strstarts(str(?uri), "http") 
} 
----------------------------- 
| uri      | 
============================= 
| <http://www.example.org/> | 
----------------------------- 
012: フィルタでのみ のhttp URIを保ちます
+0

こんにちはJoshua、ご返信ありがとうございます。私はすでにそのようなことをしましたが、問題は、URI(具体的には、 "valor"が "Host - null - HOST_00561" @en "であるもの)ではないという結果の1つを除外していることです。あなたが言ったように、http: – alejandrorg

+1

@alejandrorgで始まらない、タイプ "URI"を持つ?valorの値だけをフィルターに掛けてください。フィルターを 'filter(!isURI(?x)|| strstarts(strstarts (?x)、 "http")) 'となります。 –

2

クエリが返す(JSON形式でSPARQL結果):

"valor": { "type": "uri", "value": "/hostncbitaxid/" }} 

これは不正なデータである - それは、RDF内の絶対URIでなければなりません。おそらくデータが悪いです。クエリでそれを削除するには、@joshua-taylor showsと入力します。

関連する問題