Properties 特定类型的所有属性的SPARQL属性路径

Properties 特定类型的所有属性的SPARQL属性路径,properties,sparql,semantic-web,Properties,Sparql,Semantic Web,我想创建一个查询来加载资源并自动加载由“DependencyProperty”连接的所有资源 下面的查询达到了我想要的3级深度。我想知道它是否可以改变-可能是通过属性路径以这样一种方式,它的深度是无限的 SELECT * WHERE { :resourceToLoad ?p ?o. OPTIONAL { ?p rdf:type :DependencyProperty. ?o ?p2 ?o2. OPTIONAL {

我想创建一个查询来加载资源并自动加载由“DependencyProperty”连接的所有资源

下面的查询达到了我想要的3级深度。我想知道它是否可以改变-可能是通过属性路径以这样一种方式,它的深度是无限的

SELECT * WHERE { 
    :resourceToLoad ?p ?o.
    OPTIONAL { 
        ?p rdf:type :DependencyProperty.
        ?o ?p2 ?o2.
        OPTIONAL { 
            ?p2 rdf:type :DependencyProperty.
            ?o2 ?p3 ?o3.
            OPTIONAL { 
                ?p3 rdf:type :DependencyProperty.
                ?o3 ?p4 ?o4.
            }
        }
    }
}

所以现在我自己找到了解决办法。我补充说

:DependencyProperty rdfs:subClassOf [
    a owl:Restriction;
    owl:onProperty rdfs:subPropertyOf;
    owl:hasValue :dependency;
]
现在,作为
:DependencyProperty
的每个属性都是
:dependency
的子属性,因此每当一个dependency属性作为谓词出现在三元组中时,就会创建另一个三元组:dependency作为谓词

现在我可以这样查询:

SELECT * WHERE { {
    ?s?p ?o
    FILTER(?s= :resourceToLoad)
} UNION {
    :resourceToLoad :dependency+ ?s.
    ?s?p ?o.
}}

所以现在我自己找到了解决办法。我补充说

:DependencyProperty rdfs:subClassOf [
    a owl:Restriction;
    owl:onProperty rdfs:subPropertyOf;
    owl:hasValue :dependency;
]
现在,作为
:DependencyProperty
的每个属性都是
:dependency
的子属性,因此每当一个dependency属性作为谓词出现在三元组中时,就会创建另一个三元组:dependency作为谓词

现在我可以这样查询:

SELECT * WHERE { {
    ?s?p ?o
    FILTER(?s= :resourceToLoad)
} UNION {
    :resourceToLoad :dependency+ ?s.
    ?s?p ?o.
}}

从开始,然后继续到链接的…无法使用属性路径,因为属性路径中不允许使用变量。因此,单次查询无法解决您的问题根据答案,您使用的是推断,然后请添加与您的triplestore对应的标记。从开始,然后继续到链接的标记…这些标记无法处理属性路径,因为属性路径中不允许有变量。因此,单个查询无法解决问题根据答案,您使用的是推断,然后请添加与triplestore对应的标记。这仅适用于谓词为
:DependencyProperty
本身的triples,但对于类型为
:dependencProperty
的属性,则不是您在问题中要求的属性-还是我错了?
:a:dependencProperty:b。->:b rdfs:subpertyof:dependency-这是范围公理。啊,你说得对,打字错误。。它应该是rdfs:subassof,而不是rdfs:range。这就是它的工作方式(对我来说也是如此)<代码>:a:p:b
&
:p rdf:type:DependencyProperty
=>
:a:dependency:b
。这只适用于谓词为
:DependencyProperty
本身的三元组,但对于类型为
:dependencProperty
的属性,则不是您在问题中要求的属性-还是我错了?
:a:dependencProperty:b。->:b rdfs:subpertyof:dependency-这是范围公理。啊,你说得对,打字错误。。它应该是rdfs:subassof,而不是rdfs:range。这就是它的工作方式(对我来说也是如此)<代码>:a:p:b
&
:p rdf:type:DependencyProperty
=>
:a:dependency:b