假设我有以下Turtle声明:
@prefix : <http://example.org#> .
:ls :list (:a :b :c)
Run Code Online (Sandbox Code Playgroud)
有没有办法获得集合中元素的位置?
例如,使用此查询:
PREFIX : <http://example.org#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?elem WHERE {
?x :list ?ls .
?ls rdf:rest*/rdf:first ?elem .
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
--------
| elem |
========
| :a |
| :b |
| :c |
--------
Run Code Online (Sandbox Code Playgroud)
但我想要一个查询来获取:
--------------
| elem | pos |
==============
| :a | 0 |
| :b | 1 |
| :c | 2 |
--------------
Run Code Online (Sandbox Code Playgroud)
可能吗?
如何检索两个节点之间的路径长度?例如,给定组织层次结构,如何确定父组织和后代组织分离的距离?请考虑以下方案:
OrgA -hasSubOrganization-> OrgB, OrgC
这是一个非常简单的情况,我希望得到一个实体的所有直接子组织.因此路径长度为1.
OrgA -> OrgB -> OrgC
或一般情况
OrgA -> OrgB - - - - - - - - OrgZ
Run Code Online (Sandbox Code Playgroud)我想以递归方式遍历图表,并通过该hasSubOrganization属性查找属于另一个组织的每个组织.为了让所有子组织递归,我可以使用属性路径,例如+运算符:
OrgA hasSubOrganization+ ?subOrg
Run Code Online (Sandbox Code Playgroud)
这将为我提供所有子组织,直到叶节点.但我的最终目标是构建组织层次结构,但有关"节点/步骤/级别/跳过子组织的数量"的信息将丢失.这意味着我无法为可视化重新创建组织结构.
除了子组织的名称之外,我如何捕获"节点数"信息?
我想查询Nicotine(产品)的所有子类.
结果必须是(鼻形式尼古丁,Orophangengeal来自ni ..(4项)..见图)我尝试通过rdfs查询:subClassOf +和owl:equivalentClass +但是没有工作试试这个例子
这里的代码相同.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE
{
?s owl:equivalentClass+ ?o . # and try ?s rdfs:subClassOf ?o
filter(?s=<http://snomed.info/id/323283001>)
}
Run Code Online (Sandbox Code Playgroud)
来自protege的这张图片 谢谢.
第一个查询很难解释和做,因为这么大的文件有些IRI不是subClass而不是等价的类,我改变了从这里查询的方式
<owl:Class rdf:about="http://snomed.info/id/323283001">
<rdfs:label xml:lang="en">Nicotine (product)</rdfs:label>
<rdfs:subClassOf>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://snomed.info/id/420383004"/>
<rdf:Description rdf:about="http://snomed.info/id/425288007"/>
<owl:Restriction>
<owl:onProperty rdf:resource="http://snomed.info/id/127489000"/>
<owl:someValuesFrom rdf:resource="http://snomed.info/id/68540007"/>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</rdfs:subClassOf>
</owl:Class>
Run Code Online (Sandbox Code Playgroud)
我想查询所有id(id/420383004,id/425288007,id/127489000和id/68540007)
来自owl:Class rdf:about ="http://snomed.info/id/323283001"请告诉我一些想法.谢谢
我正在寻找一个 SPARQL 查询,它可以返回 OWL 层次结构中指定子类的位置。我研究了几个例子,但我能达到的最好结果是计算指定超类与其子类之间的相对路径(感谢 Joshua Taylor)。相反,我需要计算给定子类的“绝对”深度。
我的本体包含几个顶级类,每个类后面都有一个单独的子类树。这是我的 OWL 的一部分(使用 rdfcat 实用程序转换为 TTL):
@prefix : <http://www.semanticweb.org/administrator/ontologies/2014/7/untitled-ontology-9#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:depression a owl:Class ;
rdfs:subClassOf :pit .
:pit a owl:Class ;
rdfs:subClassOf :on_the_road .
:on_the_road a owl:Class ;
rdfs:subClassOf :traffic_accident .
:traffic_accident a owl:Class .
Run Code Online (Sandbox Code Playgroud)
在这种情况下,对于给定的depression类,我期望得到3,pit-> 2,on_the_road-> 1,traffc_accident(顶级类) -> 0 。