我是一个天真的用户,试图复制导致以下类型字符串的查询:
来自某些(上皮细胞和(某些部分)(子宫颈和(某些部分(智人和(患有某些腺癌)))))
我在黑客马拉松,我们没有本体/ SPARQL专家,我们只是试图从这个本体和SOLR中获取这些相关领域。我们绝望了!
这是来自的网页 http://www.ontobee.org/ontology/CLO?iri=http://purl.obolibrary.org/obo/CLO_000368) 有用地提供页面上使用的所有SPARQL查询。我认为这是相关的查询:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT DISTINCT ?ref ?refp ?label ?o FROM <http://purl.obolibrary.org/obo/merged/CLO> WHERE {
?ref ?refp ?o .
FILTER ( ?refp IN ( owl:equivalentClass, rdfs:subClassOf ) ) .
OPTIONAL { ?ref rdfs:label ?label } .
{
{
SELECT ?s ?o FROM <http://purl.obolibrary.org/obo/merged/CLO> WHERE {
?o ?p ?s .
FILTER ( ?p IN ( rdf:first, rdf:rest, owl:intersectionOf, owl:unionOf, owl:someValuesFrom, owl:hasValue, owl:allValuesFrom, owl:complementOf, owl:inverseOf, owl:onClass, owl:onProperty ) )
}
}
OPTION ( TRANSITIVE, t_in( ?s ), t_out( ?o ), t_step( ?s ) as ?link ).
FILTER ( ?s= <http://purl.obolibrary.org/obo/CLO_0003684> )
}
}
ORDER BY ?label
但是,我甚至无法检查,因为我的SPARQL端点不支持Virtuoso。 http://sparql.bioontology.org 因此,它在OPTION(TRANSITIVE)上吐出错误。 谁能告诉我相应的标准途径语言?目标节点之间存在不同的路径长度。
答案 0 :(得分:2)
Virtuoso的传递性运算符比标准SPARQL提供的功能更强大,因此在一般情况下,并不总是可以在单个标准SPARQL查询中表达相同的内容。但是,我认为在这种情况下 是可能的。
以下属性路径将是等效的(免责声明,我没有测试过这个查询,但它应该给你一般的想法):
?o (rdf:first|rdf:rest|owl:intersectionOf|owl:unionOf|owl:someValuesFrom|owl:hasValue|owl:allValuesFrom|owl:complementOf|owl:inverseOf|owl:onClass|owl:onProperty)+ ?s .
完整的查询会变成这样:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT DISTINCT ?ref ?refp ?label ?o FROM <http://purl.obolibrary.org/obo/merged/CLO> WHERE {
?ref ?refp ?o .
FILTER ( ?refp IN ( owl:equivalentClass, rdfs:subClassOf ) ) .
OPTIONAL { ?ref rdfs:label ?label } .
{
{
SELECT ?s ?o FROM <http://purl.obolibrary.org/obo/merged/CLO> WHERE {
?o (rdf:first|rdf:rest|owl:intersectionOf|owl:unionOf|owl:someValuesFrom|owl:hasValue|owl:allValuesFrom|owl:complementOf|owl:inverseOf|owl:onClass|owl:onProperty)+ ?s .
}
}
FILTER ( ?s= <http://purl.obolibrary.org/obo/CLO_0003684> )
}
}
ORDER BY ?label
顺便提一下,请注意,变量FILTER
上的?s
条件在之外子选择,这可能会使此查询有点性能损失。由于您未在查询中的任何其他位置使用?s
,因此可以进一步简化此部分查询,消除FILTER
,如下所示:
{
{
SELECT ?o FROM <http://purl.obolibrary.org/obo/merged/CLO> WHERE {
?o (rdf:first|rdf:rest|owl:intersectionOf|owl:unionOf|owl:someValuesFrom|owl:hasValue|owl:allValuesFrom|owl:complementOf|owl:inverseOf|owl:onClass|owl:onProperty)+ <http://purl.obolibrary.org/obo/CLO_0003684> .
}
}
}