Sparql Proté中具有相同数据属性的相邻线路部分的区域;gé;5.
我尝试使用Protege5处理基于线的数据,并绘制曲线的类似“区域” 所以我有一条曲线,它在我的本体中被解构成等长的部分(类部分,实例p_1,…,p_n)。这些部分由它们的起点和终点(点_1,…,点_n+1)定义,此外,曲线的半径作为实例(点_1,…,点_n)的数据属性存储在本体中。我设法推断出不同部分之间的邻接关系Sparql Proté中具有相同数据属性的相邻线路部分的区域;gé;5.,sparql,owl,protege,owl-api,Sparql,Owl,Protege,Owl Api,我尝试使用Protege5处理基于线的数据,并绘制曲线的类似“区域” 所以我有一条曲线,它在我的本体中被解构成等长的部分(类部分,实例p_1,…,p_n)。这些部分由它们的起点和终点(点_1,…,点_n+1)定义,此外,曲线的半径作为实例(点_1,…,点_n)的数据属性存储在本体中。我设法推断出不同部分之间的邻接关系 hasStartPoint(p_2,point_2) o isEndpointOf(point_2,p_1) => isNextOf(p_2, p_1) hasEndPoin
hasStartPoint(p_2,point_2) o isEndpointOf(point_2,p_1) => isNextOf(p_2, p_1)
hasEndPoint(p_1,point_2) o isStartpointOf(point_2,p_2) => hasNext(p_1, p_2)
我还设法创建定义的类,存储具有相同半径的部分
这就是我的问题:我想对相邻且共享相同曲线半径的部分(区域)集合进行推理。然后,应该为i个不同半径和非邻接集、个体(region1,…,regioni)创建类集的i个实例
以下是我要处理的示例性数据:
换句话说:如果一个半径在给定的直线上出现两次,并且该半径的部分不相邻,则它们不应是同一区域的一部分。此外,当添加不同半径的部分时,应自动创建区域。我唯一的想法是,在isNext三元组上用一个循环遍历一组部分,我想这需要一些编码,但我在这里找不到类似的东西
我希望,我的问题很清楚,如果有人对此有想法,我很乐意阅读
先谢谢你
Julian根据owl api标记,我推断您希望编写使用owl api实现目标的代码(您没有提到在Protege中使用的是哪个推理器-您需要在代码中使用相同的推理器来获得类似于
hasNext
关系的推理)
在OWL API中,我将执行以下操作:
- 推断
三元组,如果它们尚未存储在本体文件中hasNext
- 对于使用相同半径分隔实例的每个已定义类
- 检索该类的所有个人
- 使用
hasNext
- 将这些实例聚合到区域中—例如,为每个属性断言种子一个区域,然后合并两个区域(如果它们的实例都属于同一个定义的类,并且一个区域中的端点是另一个区域中的起始点)。重复此操作,直到定义的类只剩下一个区域(我相信,从您的问题描述来看,该区域不能跨越具有相同半径的实例之外),或者直到不能发生进一步的合并
OWLOntology
对象中,您将创建一个OWLReasoner
,其中OWLReasonerFactory
实现可供您选择的推理机使用(OWLAPI wiki中有这方面的示例),还有很多方法可以派上用场:
(此处引用OWLAPI 4,因为这是Protege使用的)
- 获取一个类的所有个体:OWLOntology::GetClassAssertionAxiom(OWLClassExpression)提供了声明个体属于某个类的所有公理,可用于检索已定义类的实例。通过OWLReasoner,您可以使用OWLReasoner::getInstances(OWLClass)
- 获取单个对象的所有对象属性断言:OWLOntology::getObjectPropertyAssertionAxioms(OWLIndividual)。用于获取
值。通过推理器,这将是OWLReasoner::getObjectPropertyValues(OWLNamedIndividual,OWLObjectPropertyExpression)hasNext
我相信算法的其余部分可以在不使用OWLAPI特定代码的情况下实现。谢谢您的回复。我使用的是owlapi v4和hermit v1.4.3.456。我使用推理机成功地获得了
Point2d
的个体以及所提到的定义类。我使用了r.precomputer推断(推断类型.CLASS_层次结构);r、 预计算推断(推断类型.对象\属性\断言)代码>我无法推断hasNext三元组,我尝试了OWLObjectPropertyExpression ex=df.getOWLObjectProperty(IRI.create(IOR+“#hasNext”);Set next=r.getObjectPropertyValues(ind,ex).getFlatten()代码>针对每个人。你有什么解决办法吗?