2015-12-27 1 views
0

У меня есть графики RDF, многие из которых имеют свойство схемы классов: SoftwareSourceCode Я хотел бы найти все классы схемы типов: Person, которые находятся внутри этого свойства.SPARQL Найти определенные классы в классе

Пример источника в 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:[email protected] 
    - 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:[email protected] 
    schema:name: "Mohammad Karimi" 
    schema:email: mailto:[email protected] 
    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/

ответ

1

Я думаю, вы должны понимать перевод с YAML а бит больше, прежде чем вы сможете прогнозировать выполнение запросов. Используя некоторые поисковые запросы, я догадался, что программное обеспечение может быть связано с чем-то, используя свойство schema: author. Это привело меня к этому запросу?

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

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

Значения а является «MAILTO:» ирис, и вы можете увидеть в результатах запроса некоторые из предикатов и значений, используемых с ним. Теперь, если вы хотите что-то другое, чем авторы, вы можете сделать:

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

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

Это поворачивает вверх много результатов, где р является схема: автор, но и некоторые со схемой: творец.

+0

Я просто новый для SPARQL и RDF. Поэтому я сделал несколько примеров с foaf/doap/adms/schema. Теперь, я пытаюсь выяснить, использую ли я схему, насколько гибким может быть все. На schema.org говорят, что схема: автор и схема: создатели одинаковы. Поэтому я просто использовал оба файла в разных файлах. –

+0

Итак, чтобы перевести на язык, я хотел бы найти всех Лица, которые участвуют в SoftwareCodeContribution. Это может быть список авторов, вкладчиков, разработчиков, а также тех, кто участвует в публикации. Таким образом, единственный ключ, чтобы найти все из них - это схема классов: Person используется. –

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 . 
    } 
}