1

複数の名前付きグラフでトリプルの出現をカウントし、結果をテーブルの行として返すことは可能ですか? そのような:

   ?g    ?count  ?sequence_count
-------- ------- ---------------
 graph1    54          54
 graph2    120         80

これが私が試したクエリです。

SELECT ?g ?count ?sequence_count     
    FROM NAMED <graph1>
    FROM NAMED <graph2>
WHERE {
    { 
       select (COUNT(?identifier) as ?count) (COUNT(?sequence) as ?sequence_count) 
       WHERE { GRAPH ?g { 
           ?identifier a <http://www.w3.org/2000/01/rdf-schema#Resource> . 
           OPTIONAL { ?identifier <urn:sequence> ?sequence } 
       } }
    }
}

しかし、結果は次のとおりでした。

   ?g    ?count  ?sequence_count
-------- ------- ---------------
           174          134

書き出す必要がないようにしています:

select ?count_graph1 ?sequence_count_graph1 ?count_graph2 ...

クエリするグラフが何百もある可能性があるためです。

4

1 に答える 1

1

まず、クエリは非常に近いです。グラフステートメントの内部を移動するだけSELECTです - 基本的に「各グラフについて、これらの集計値を見つけてください」と述べています。第 2 に、いずれかの?identifier一致に複数の値がある場合は、カウント?identifierが重複するため、DISTINCT結果が必要になります。次のことを試してください。

SELECT *
  FROM NAMED <graph1>
  FROM NAMED <graph2>
WHERE {
   GRAPH ?g {
      SELECT (COUNT(DISTINCT ?identifier) as ?count) (COUNT(?sequence) as ?sequence_count)
      WHERE {
         ?identifier a <http://www.w3.org/2000/01/rdf-schema#Resource> . 
         OPTIONAL { ?identifier <urn:sequence> ?sequence }
      }
   }
} 
于 2016-04-25T18:35:33.660 に答える