2012-03-19 5 views

答えて

4

質問が面白いと思うが、質問を正しく表現するのは難しいです。 William Greenly's answerはあなたが望むものを提供していませんが、彼は彼の説明に完全に忠実であり、正しくはproperty pathを使用しています。あなたの質問に答える適切な質問を正しく聞くためには、すべてのリストが整形式であると仮定しなければなりません(最初の要素が1つあり、残りが1つしかなく、無限で終わります)。

クエリの問題は、データセット内のすべてのリストのすべてのメンバーをカウントすることです。 rdf:firstと1つのリストの要素だけを関連付ける必要があります。

あなたが興味を持っているのリストを特定するURIを持っている場合は、次のことができます。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX ex: <http://www.example.org/#> 
SELECT (COUNT(?member) AS ?count) 
WHERE { 
    ex:uriOfTheList rdf:rest*/rdf:first ?member 
} 

しかし、多くの場合、リストはURIで識別されていません。この場合、他のプロパティを使用して特定のリストを識別することは可能です。たとえば、あなたがex:listOfAuthors性質を持っている想像して、あなたが行うことができます:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX ex: <http://www.example.org/#> 
SELECT (COUNT(?member) AS ?count) 
WHERE { 
    ex:publication ex:listOfAuthors ?list . 
    ?list rdf:rest*/rdf:first ?member . 
} 

あなたは、単に行う場合ことに注意してください:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT (COUNT(?member) AS ?count) 
WHERE { 
    ?list rdf:rest*/rdf:first ?member . 
} 

あなたがリストとサブリストのすべてのサイズを追加します。 リストを添付できる述語がなく、URIを持たず、リストごとにすべてのリストの数を取得したい場合は、複雑になります。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT (COUNT(?c) AS ?count) 
WHERE { 
    ?thing !rdf:rest ?list . 
    ?list rdf:rest*/rdf:first ?member . 
} 

これが何を言っていることは、我々はリストに接続する何かを見つけたいということですが、ない述語rdf:restで:動作するはずです一つの方法があります。原則として、リストの開始点のみが、エンティティがリスト自体でなく、述語がrdf:restでない場合、述語を介して他のエンティティに接続されます。さらに、リストは、他のものとは独立してリストを記述することに意味がないため、通常は常に他のエンティティに何らかの形で接続されています。

+0

ありがとうございますアントワーヌ、あなたは何かに接続されている非常に重要なポイントを特定しました。 1つのリストしか持たないデータセットに対してクエリを試したとき、私はそれについて考えなかった。 – user1278577

3

これのない、特に簡単な解決策ので、実際には本当に良い質問です。 RDFリストの

重要な用語は、以下のとおりです。

a:a rdf:first a:b; 
    rdf:rest [ 
     rdf:first a:c; 
     rdf:rest rdf:nil. 
    ]. 

RDF使用:示すためにnilを次のように

rdf:first 
rdf:rest 
rdf:nil 

つ以上の項目のリストについては、あなたがモデル化することをお勧めしますリストにはもうアイテムがありません(本質的にリストのリストです)。最初interderterminantly次のように:しかし、それはまた、あなたがRDFを使用することができると述べている

a:a rdf:first a:b; 
    rdf:first a:c; 
    rdf:rest rdf:nil. 

RDFのポイント:nilのリストは、もはや任意のアイテムを持っていることを指定しないことです。セマンティックWebはOpen Worldの前提に基づいていることを覚えておいてください。そうでない限り、リストにはこれ以上のアイテムがないと仮定できないため、個人が必要としないため、rdf:nilが必要です。

上記の例では、SPARQL 1.1をサポートしているプロセッサに依存する両方のクエリが1つしかありません。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
SELECT (COUNT(?a) AS ?count) 
WHERE {?a rdf:first+ ?c} 

リストは、RDF含まれていない限り、そのかかわらず、覚えておいてください:nilを、それが完全であることを前提としていません。

+0

ウィリアムありがとうございます。 – user1278577

関連する問題