1

私は JENA を使用しており、学習目的でいくつかの簡単なクエリを作成しています。それらの1つは次のとおりです。

PREFIX uni:<http://www.university.fake/university#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>

SELECT ?person
WHERE {
    ?person rdf:type/rdfs:subClassOf <uni:Person>.
    ?person uni:has_name ?name.
    ?person uni:member_of ?dep.
    ?dep uni:dep_city "Patras".
}

4 番目のトリプルがなければ、3 番目のトリプルが?dep引用された値に置き換えられた場合、残りは結果を生成します。ただし、4 番目のトリプルを追加すると、結果はありません。トリプル自体は独自のクエリで結果を生成するので、問題はないと思います。

RDF データの一部:

<rdf:Property rdf:about="uni:member_of">
    <rdfs:domain rdf:resource="uni:Person"/>
    <rdfs:range rdf:resource="uni:Department"/>
</rdf:Property>
<rdf:Property rdf:about="uni:dep_city">
    <rdfs:domain rdf:resource="uni:Department"/>
    <rdfs:range rdf:resource="uni:Literal"/>
</rdf:Property>
<rdf:Description rdf:about="uni:dep1">
    <uni:dep_name>CEID</uni:dep_name>
    <uni:dep_city>Patras</uni:dep_city>
</rdf:Description>
<rdf:Description rdf:about="uni:prof2">
    <uni:has_name>Bob Ross</uni:has_name>
    <uni:has_phone>6981234566</uni:has_phone>
    <uni:has_age>52</uni:has_age>
    <uni:member_of>CEID</uni:member_of>
    <uni:teaches>Painting</uni:teaches>
    <rdf:type rdf:resource="uni:Professor"/>
</rdf:Description>
4

2 に答える 2

4

ああ、データを考えると、見方によっては、クエリが間違っているか、データのモデル化が不適切なようです。

このままで?person uni:member_of ?depはうまくいきません。参加できますuni:dep_name(これらが一意のキーであると仮定します)。

?person uni:member_of ?dep_name .
?dep uni:dep_name ?dep_name ;
     uni:dep_city "Patras" .

しかし、データは実際には make (タートル構文で) に修正する必要があると思いますuni:prof2 uni:member_of uni:dep1

実際、rdf/xml を使用する初心者や経験豊富な人にとっても珍しくありません。

<rdf:Description rdf:about="uni:member_of">
   ...

これはあなたが考えている意味ではありません。属性は省略形ではなく、完全な URL を取りますrdf:about。、またはuni名前空間のURLが何であれ、rdf:resource使用する必要があります。rdf:about="http://example.com/namespace/university#member_of"

この間違いは、あなたが持っている理由です:

?person rdf:type/rdfs:subClassOf <uni:Person>

それよりも:

?person rdf:type/rdfs:subClassOf uni:Person

SPARQL では、turtle<uni:Person>は URL 'uni:Person' (存在しません) に一致しますが、'uni:Person' は uni プレフィックスを使用して展開される省略された URL です。

学習中は、rdf/xml を避けることを強くお勧めします。Turtle は読み書きがはるかに簡単で、SPARQL 構文 (マイナス変数) にかなり一致します。

于 2012-11-24T15:54:02.810 に答える
0

どうやら間違いは に<uni:member_of>CEID</uni:member_of>あり、別のリソースへの参照であったはずです。正しいのは<uni:member_of rdf:resource="uni:dep1"/>

于 2012-11-24T18:45:33.990 に答える