SPARQL查找类

时间:2015-12-27 20:26:11

标签: sparql semantic-web

我有RDF图,其中许多都具有类模式的属性:SoftwareSourceCode我想找到类型schema的所有类:属于该属性的Person。

yaml中转换为RDF的源代码示例。

class: schema:SoftwareSourceCode
schema:publication:
- class: schema:ScholarlyArticle
  id: urn:pmid:24371156
  schema:name: "ALEA: a toolbox for allele-specific epigenomics analysis Bioinformatics (2014) 30 (8): 1172-1174."
  schema:author:
  - class: schema:Person
    schema:name: "Hamid Younesy"
  - class: schema:Person
    schema:name: "Torsten Moller"
  - class: schema:Person
    schema:name: "Alireza Heravi-Moussavi"
  - class: schema:Person
    schema:name: "Jeffrey B. Cheng"
  - class: schema:Person
    schema:name: "Joseph F. Costello"
  - class: schema:Person
    schema:name: "Matthew C. Lorincz"
  - class: schema:Person
    id: mailto:mkarimi@bcgsc.ca
  - class: schema:Person
    schema:name: "Steven J. M. Jones"
  schema:sameAs:
    - http://dx.doi.org/10.1093/bioinformatics/btt744
    - http://bioinformatics.oxfordjournals.org/content/30/8/1172.long

schema:author:
- class: schema:Person
  id: mailto:mkarimi@bcgsc.ca
  schema:name: "Mohammad Karimi"
  schema:email: mailto:mkarimi@bcgsc.ca
  schema:url: http://www.bcgsc.ca/author/mkarimi
  schema:worksFor:
  - class: schema:Organization
    schema:name: "Canada's Michael Smith Genome Sciences Centre, BC Cancer Agency, Vancouver, British Columbia, V5Z 4S6, Canada"
  - class: schema:Organization
    schema:name: "Department of Medical Genetics, Life Sciences Institute, The University of British Columbia, Vancouver, British Columbia, V6T 1Z3, Canada"

我坚持下一个查询。它可以找到类模式:直接属性模式中的人:作者但不在模式中:发布

PREFIX schema: <http://schema.org/>

SELECT ?file ?SC ?name
WHERE {
  graph ?file {
    ?SC a schema:SoftwareSourceCode .
    ?Person a schema:Person;
          schema:name ?name .
    ?SC ?p ?Person .
  }
}
#LIMIT 25

查询的操场是https://sparql-test.commonwl.org/

2 个答案:

答案 0 :(得分:1)

我认为在你可以预测地进行查询之前,你需要更多地理解YAML的翻译。使用一些探索性查询,我猜测软件可能与使用schema:author属性的东西相关。这让我想到了这个问题:

prefix schema: <http://schema.org/>

select * where {
  graph ?file {
    ?s a schema:SoftwareSourceCode ;
       schema:author ?a .
    ?a ?p ?o 
  }
}

?a的值是&#34; mailto:&#34; IRI,您可以在查询结果中看到一些与它一起使用的谓词和值。现在,如果你想要除了作者以外的其他东西,你仍然可以这样做:

prefix schema: <http://schema.org/>

select * where {
  graph ?file {
    ?s a schema:SoftwareSourceCode ;
       ?p ?a .
    ?a ?q ?o ;
       a schema:Person .
  }
}

这会产生很多结果,其中?p是schema:author,还有一些是schema:creator。

答案 1 :(得分:0)

这就是我想出的。我对这个解决方案不满意。然而它做的事情。因此,它选择我拥有的所有图形,然后找到具有类模式的所有对象:Person和具有类模式的所有项目:SoftwareSourceCode。然后我将图形与模式连接起来:SoftwareSourceCode ?file ?x ?SSC现在是?SSC !schema:Thing+ ?P .工作的小技巧,这意味着存在从?SSC到?P的路径。

prefix schema: <http://schema.org/>
SELECT ?file ?SSC ?name
where {
  GRAPH ?file {
   ?P a schema:Person;
        schema:name ?name .
   ?SSC a schema:SoftwareSourceCode .
   ?file ?x ?SSC .
   ?SSC !schema:Thing+ ?P .
  }
}