【问题标题】:Regions of adjacent line portions with the same dataproperties in Protégé 5Protégé 5 中具有相同数据属性的相邻线段区域
【发布时间】:2020-06-26 12:17:07
【问题描述】:

我尝试使用 protege 5 处理基于线的数据并描绘曲线的类似“区域”。

所以我有一条曲线,它在我的本体中被解构为等长的部分(类部分,实例p_1,...,p_n)。这些部分由它们的起点和终点定义(point_1, ... ,point_n+1),此外,曲线的半径作为实例的数据属性存储在本体中(p_1, ... ,p_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) 创建一个类 Set 的 i 个实例。

这是我要处理的示例数据:data I want to process

换句话说:如果半径在给定线上出现两次,并且该半径的部分不相邻,则它们不应属于同一区域。此外,在添加不同半径的部分时,应自动创建区域。我唯一的想法是通过 isNext 三元组上的循环以某种方式遍历这组部分,我猜这需要一些编码,但我在这里找不到任何类似的东西......

我希望,我的问题很清楚,如果有人对此有任何想法,我很乐意阅读。

提前谢谢你

朱利安

【问题讨论】:

    标签: sparql owl protege owl-api


    【解决方案1】:

    从 owl-api 标签,我推断您正在寻找使用 OWL API 来实现目标的代码(您没有提到您在 Protege 中使用的推理器 - 您需要使用在您的代码中使用相同的推理器来推断hasNext 关系)。

    在 OWL API 中,我会执行以下操作:

    • 推断 hasNext 三元组(如果它们尚未存储在本体文件中)
    • 对于每个定义的类以相同的半径分隔实例
      • 检索该类的所有个体
      • 使用hasNext 检索所有属性断言
      • 将这些实例聚合到区域中 - 例如,为每个属性断言播种一个区域,然后如果两个区域的实例都属于同一个定义的类并且一个区域中的端点是另一个区域的起点,则合并两个区域。重复直到只剩下一个区域用于定义的类(我相信,根据您的问题描述,这些区域不能跨越具有相同半径的实例之外)或直到不再发生合并。

    就 OWLAPI 实现而言,一旦您将本体加载到 OWLOntology 对象中,您将创建一个带有 OWLReasonerFactory 实现的 OWLReasoner,供您选择的推理器使用(这方面的示例存在于OWLAPI wiki),那么有很多方法可以派上用场: (这里引用 OWLAPI 4,因为这是 Protege 使用的)

    • 获取一个类的所有个体:OWLOntology::getClassAssertionAxioms(OWLClassExpression) 给出了所有的公理,说明个体属于一个类,对于检索您定义的类的实例很有用。通过OWLReasoner,你可以使用OWLreasoner::getInstances(OWLClass)
    • 获取个人的所有对象属性断言:OWLOntology::getObjectPropertyAssertionAxioms(OWLIndividual)。用于获取 hasNext 值。通过推理器,这将是 OWLReasoner::getObjectPropertyValues(OWLNamedIndividual, OWLObjectPropertyExpression)

    我相信算法的其余部分可以在没有 OWLAPI 特定代码的情况下实现。

    【讨论】:

    • 感谢您的回复。我正在使用 owlapi v4 和隐士 v1.4.3.456。我设法得到Point2d 的个人以及使用推理器提到的定义的类。我使用了r.precomputeInferences(InferenceType.CLASS_HIERARCHY); r.precomputeInferences(InferenceType.OBJECT_PROPERTY_ASSERTIONS); 我无法推断hasNext 三元组,我为每个人尝试了OWLObjectPropertyExpression ex = df.getOWLObjectProperty(IRI.create(IOR+"#hasNext")); Set<OWLNamedIndividual> next = r.getObjectPropertyValues(ind, ex).getFlattened();。你有什么解决办法吗?
    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多