Sparql Proté中具有相同数据属性的相邻线路部分的区域;gé;5.

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

我尝试使用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)
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
    • 将这些实例聚合到区域中—例如,为每个属性断言种子一个区域,然后合并两个区域(如果它们的实例都属于同一个定义的类,并且一个区域中的端点是另一个区域中的起始点)。重复此操作,直到定义的类只剩下一个区域(我相信,从您的问题描述来看,该区域不能跨越具有相同半径的实例之外),或者直到不能发生进一步的合并
就OWLAPI实现而言,一旦将本体加载到
OWLOntology
对象中,您将创建一个
OWLReasoner
,其中
OWLReasonerFactory
实现可供您选择的推理机使用(OWLAPI wiki中有这方面的示例),还有很多方法可以派上用场: (此处引用OWLAPI 4,因为这是Protege使用的)

  • 获取一个类的所有个体:OWLOntology::GetClassAssertionAxiom(OWLClassExpression)提供了声明个体属于某个类的所有公理,可用于检索已定义类的实例。通过OWLReasoner,您可以使用OWLReasoner::getInstances(OWLClass)
  • 获取单个对象的所有对象属性断言:OWLOntology::getObjectPropertyAssertionAxioms(OWLIndividual)。用于获取
    hasNext
    值。通过推理器,这将是OWLReasoner::getObjectPropertyValues(OWLNamedIndividual,OWLObjectPropertyExpression)

我相信算法的其余部分可以在不使用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()针对每个人。你有什么解决办法吗?