属性路径等价于SPARQL中的OPTION(可传递)语句

属性路径等价于SPARQL中的OPTION(可传递)语句,sparql,virtuoso,Sparql,Virtuoso,我是一个天真的用户,试图复制一个查询,结果是以下类型的字符串: 来源于某些(上皮细胞和部分(子宫颈和部分(智人和(患有某些腺癌的疾病))) 我在一个黑客大会上,我们没有本体论/SPARQL专家,我们只是想把这些相关领域从本体论中分离出来,放到SOLR中。我们绝望了 这是来自的网页 ) 有助于提供页面上使用的所有SPARQL查询。我认为这是相关的疑问: PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX r

我是一个天真的用户,试图复制一个查询,结果是以下类型的字符串:

来源于某些(上皮细胞和部分(子宫颈和部分(智人和(患有某些腺癌的疾病)))

我在一个黑客大会上,我们没有本体论/SPARQL专家,我们只是想把这些相关领域从本体论中分离出来,放到SOLR中。我们绝望了

这是来自的网页 ) 有助于提供页面上使用的所有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
前缀rdf:
前缀rdfs:
前缀owl:
从何处选择不同的?ref?refp?标签?o{
?参考?参考?o。
过滤器(?在(owl:等效类,rdfs:子类)中引用p)。
可选{?ref rdfs:label?label}。
{
{
从何处选择?s?o{
o?p?s。
过滤器(?p IN(rdf:first,rdf:rest,owl:intersectionOf,owl:unionOf,owl:someValuesFrom,owl:hasValue,owl:allValuesFrom,owl:complementOf,owl:inverseOf,owl:onClass,owl:onProperty))
}
}
选项(可传递,t_输入(?s),t_输出(?o),t_步骤(?s)作为链接)。
过滤器(?s=)
}
}
按标签订购
然而,我甚至不能运行它来检查,因为我的SPARQL端点不支持Virtuoso。 因此,它在OPTION(TRANSITIVE)上抛出了一个错误。
有人能给我看一下等效的标准路径语言吗?目标节点之间存在不同的路径长度

Virtuoso的传递性操作符比标准SPARQL提供的功能更强大,因此在一般情况下,不可能在单个标准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 (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
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
    {
        {
            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> .
            }
        }
    }