如何在 OWL 中表示地图?

How to represent maps in OWL?

这是我的 ontology:

的简化摘录
    <owl:Class rdf:ID="Role" />
    <owl:Class rdf:ID="Location" />
    <owl:Class rdf:ID="SalaryRange">
      <rdfs:subClassOf rdf:resource="#HasLocation" />
    </owl:Class>
    <owl:Class rdf:ID="HasLocation" />
    <owl:ObjectProperty rdf:ID="location">
        <rdfs:domain rdf:resource="#HasLocation" />
        <rdfs:range rdf:resource="#Location" />
    </owl:ObjectProperty>
    <owl:DataProperty rdf:ID="salaryRangeOfRole">
        <rdfs:domain rdf:resource="#Role" />
        <rdfs:range rdf:resource="#SalaryRange" />
    </owl:DataProperty>

我现在如何确保 SalaryRange 中的 Location 每个 Role 都是唯一的?

我已阅读有关 FunctionalProperty 的内容,但不知道如何在这种情况下使用它。

您在这里面临的挑战是您基本上想要对 RoleLocation 以及 SalaryRange 的唯一约束。功能属性实际上是为单个 属性 定义的 - 除非您通过 class 表达式对某些功能 属性 进行建模。

实现此目的的一个简单方法(如果您使用 OWL)是通过键约束。我努力理解你的例子。因此,我进一步简化了您的示例,假设您有一个 SalaryRange,其中 RoleLocation 需要是唯一的。我认为,如果您了解总体思路,您将能够对其进行修改以完全适合您的示例。

我们有您定义的 classes LocationRole

<owl:Class rdf:about="Location"/>
<owl:Class rdf:about="Role"/>

然后我定义对象属性 rolelocation 如下:

<owl:ObjectProperty rdf:about="location">
    <rdfs:domain rdf:resource="SalaryRange"/>
    <rdfs:range rdf:resource="Location"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="role">
    <rdfs:domain rdf:resource="SalaryRange"/>
    <rdfs:range rdf:resource="Role"/>
</owl:ObjectProperty>

然后为了确保 SalaryRange 将具有唯一的角色和位置,您可以强制执行如下:

<owl:Class rdf:about="SalaryRange">
    <owl:hasKey rdf:parseType="Collection">
        <rdf:Description rdf:about="location"/>
        <rdf:Description rdf:about="role"/>
    </owl:hasKey>
</owl:Class>

您可以对以下人员进行测试:

<owl:NamedIndividual rdf:about="location1">
    <owl:sameAs rdf:resource="location2"/>
</owl:NamedIndividual>

<owl:NamedIndividual rdf:about="location2"/>

<owl:NamedIndividual rdf:about="role1">
    <owl:sameAs rdf:resource="role2"/>
</owl:NamedIndividual>

<owl:NamedIndividual rdf:about="role2"/>

<owl:NamedIndividual rdf:about="salaryRange1">
    <location rdf:resource="location1"/>
    <role rdf:resource="role1"/>
</owl:NamedIndividual>

<owl:NamedIndividual rdf:about="salaryRange2">
    <location rdf:resource="location2"/>
    <role rdf:resource="role2"/>
</owl:NamedIndividual>

对于这些人,像 Hermit 这样的推理者会推断出 salaryRange1salaryRange2 是同一个人。但是,如果您声明 salaryRange1salaryRange2 不同的 个个体,您将得到不一致的结果。

<rdf:Description>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#AllDifferent"/>
    <owl:distinctMembers rdf:parseType="Collection">
        <rdf:Description rdf:about="salaryRange1"/>
        <rdf:Description rdf:about="salaryRange2"/>
    </owl:distinctMembers>
</rdf:Description>

要解决不一致,您可以声明 role1role2 是不同的个体,或者 location1location2 是不同的个体。