从 RDF 数据集中检索属性基数

问题描述 投票:0回答:1

您将如何在 SPARQL 中处理此问题:列出数据集中使用的属性及其各自的最小/最大基数

例如,给定这个示例 RDF 数据集:

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<https://www.w3.org/People/Berners-Lee/card#i> foaf:familyName "Berners-Lee" ;
  foaf:knows <http://danbri.org/foaf#danbri> ,
    <http://dig.csail.mit.edu/2008/webdav/timbl/foaf.rdf#libby> .

<http://danbri.org/foaf#danbri> foaf:familyName "Brickley" ;
  foaf:knows <http://dig.csail.mit.edu/2008/webdav/timbl/foaf.rdf#libby> .

<http://dig.csail.mit.edu/2008/webdav/timbl/foaf.rdf#libby> foaf:familyName "Miller" .

结果应该是这样的:

财产 最小基数 最大基数
http://xmlns.com/foaf/0.1/familyName 1 1
http://xmlns.com/foaf/0.1/knows 0 2
sparql rdf
1个回答
0
投票

此查询:

SELECT (?p AS ?property) (MIN(?c) AS ?minCardinality) (MAX(?c) AS ?maxCardinality) 
{
  SELECT ?s ?p (count(?o) AS ?c) {
    { SELECT DISTINCT ?p { [] ?p [] }}
    { SELECT DISTINCT ?s { ?s ?p [] }}
    OPTIONAL { ?s ?p ?o }
  }
  GROUP BY ?s ?p
}
GROUP BY ?p

给出这个结果(使用 Jena):

----------------------------------------------------------------------------
| property                               | minCardinality | maxCardinality |
============================================================================
| <http://xmlns.com/foaf/0.1/familyName> | 1              | 1              |
| <http://xmlns.com/foaf/0.1/knows>      | 0              | 2              |
----------------------------------------------------------------------------
© www.soinside.com 2019 - 2024. All rights reserved.