【问题标题】:How to classificate individuals in a class according to its cardinality如何根据基数对类中的个体进行分类
【发布时间】:2015-11-15 00:14:07
【问题描述】:

我创建了这个本体,它包含两个类 Car,Person 和对象属性 hasCar,其中 Person 作为域,Car 作为范围。

我想对 multiCarOwner 和 OnlyCar 人中的个人(Persons)进行分类,这是代表这个的本体:

<?xml version="1.0"?>


<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>


<rdf:RDF xmlns="http://www.owl-ontologies.com/Car.owl#"
 xml:base="http://www.owl-ontologies.com/Car.owl"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:owl="http://www.w3.org/2002/07/owl#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://www.owl-ontologies.com/Car.owl"/>



<!-- 
   ///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- http://www.owl-ontologies.com/Car.owl#hasCar -->

<owl:ObjectProperty rdf:about="http://www.owl-  ontologies.com/Car.owl#hasCar">
    <rdfs:range rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
    <rdfs:domain rdf:resource="http://www.owl-ontologies.com/Car.owl#Person"/>
</owl:ObjectProperty>



<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- http://www.owl-ontologies.com/Car.owl#Car -->

<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#Car"/>



<!-- http://www.owl-ontologies.com/Car.owl#CarOwner -->

<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#CarOwner">
    <owl:equivalentClass>
        <owl:Class>
            <owl:intersectionOf rdf:parseType="Collection">
                <rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#Person"/>
                <owl:Restriction>
                    <owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
                    <owl:allValuesFrom rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
                </owl:Restriction>
                <owl:Restriction>
                    <owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
                    <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:minCardinality>
                </owl:Restriction>
            </owl:intersectionOf>
        </owl:Class>
    </owl:equivalentClass>
</owl:Class>



<!-- http://www.owl-ontologies.com/Car.owl#MultiCarOwner -->

<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#MultiCarOwner">
    <owl:equivalentClass>
        <owl:Class>
            <owl:intersectionOf rdf:parseType="Collection">
                <rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#CarOwner"/>
                <owl:Restriction>
                    <owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
                    <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">2</owl:minCardinality>
                </owl:Restriction>
            </owl:intersectionOf>
        </owl:Class>
    </owl:equivalentClass>
</owl:Class>



<!-- http://www.owl-ontologies.com/Car.owl#OnlyCar -->

<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#OnlyCar">
    <owl:equivalentClass>
        <owl:Class>
            <owl:intersectionOf rdf:parseType="Collection">
                <rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#CarOwner"/>
                <owl:Restriction>
                    <owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
                    <owl:onClass rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
                    <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
                </owl:Restriction>
            </owl:intersectionOf>
        </owl:Class>
    </owl:equivalentClass>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty rdf:resource="http://www.owl-ontologies.com/Car.owl#hasCar"/>
            <owl:onClass rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
            <owl:qualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:qualifiedCardinality>
        </owl:Restriction>
    </rdfs:subClassOf>
</owl:Class>



<!-- http://www.owl-ontologies.com/Car.owl#Person -->

<owl:Class rdf:about="http://www.owl-ontologies.com/Car.owl#Person"/>



<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
 -->




<!-- http://www.owl-ontologies.com/Car.owl#Alice -->

<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Alice">
    <rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Person"/>
    <hasCar rdf:resource="http://www.owl-ontologies.com/Car.owl#Car_2"/>
    <hasCar rdf:resource="http://www.owl-ontologies.com/Car.owl#Car_7"/>
</owl:NamedIndividual>



<!-- http://www.owl-ontologies.com/Car.owl#Bob -->

<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Bob">
    <rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Person"/>
    <hasCar rdf:resource="http://www.owl-ontologies.com/Car.owl#Car_2"/>
</owl:NamedIndividual>



<!-- http://www.owl-ontologies.com/Car.owl#Car_2 -->

<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Car_2">
    <rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
</owl:NamedIndividual>



<!-- http://www.owl-ontologies.com/Car.owl#Car_7 -->

<owl:NamedIndividual rdf:about="http://www.owl-ontologies.com/Car.owl#Car_7">
    <rdf:type rdf:resource="http://www.owl-ontologies.com/Car.owl#Car"/>
</owl:NamedIndividual>



<!-- 
///////////////////////////////////////////////////////////////////////////////////////
//
// General axioms
//
///////////////////////////////////////////////////////////////////////////////////////
 -->

<rdf:Description>
    <rdf:type rdf:resource="&owl;AllDifferent"/>
    <owl:distinctMembers rdf:parseType="Collection">
        <rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#Car_2"/>
        <rdf:Description rdf:about="http://www.owl-ontologies.com/Car.owl#Car_7"/>
    </owl:distinctMembers>
</rdf:Description>

但是,当我创建个人时,推理器没有给我想要的结果,我希望“OnlyCar”类具有作为成员:“具有恰好 1 辆汽车的个人。”

推理的结果是部分的,因为protegé中的个人标签显示如下:

上面的图片显示“Bob”个人作为 CarOwner 成员,但我希望“bob”作为“onlyCar”类的成员。

-我面临 OWA 问题? - 有办法完成我想要的吗?

【问题讨论】:

    标签: owl reasoning protege4 swrl


    【解决方案1】:

    上面的图片显示了“Bob”个人作为 CarOwner 成员,但我希望“bob”作为“onlyCar”类的成员。 -我面临 OWA 问题? -有办法完成我想要的吗?

    你说过 bob 拥有一辆车,但你没有告诉 bob 拥有任何其他汽车。不用说,你不能确定他只有一辆车。您需要向 bob 添加另一个类型断言,即:

    只有汽车 {Car_2}

    那么,既然你知道他拥有 Car_2,而你知道他只拥有 Car_2,你就可以推断出bob 是

    的一个元素

    hasCar 正好 1 辆车

    【讨论】:

    • 嗨 Joshua,感谢您的回复,我有一些问题。为了添加断言“hasCar only {Car_2}”,我认为有必要为 bob 创建一个新类,为 Alice 创建一个新类,这是正确的吗?因为 Alice 可以有很多汽车(在上面的示例中 Alice 很好分类),如果个人属于单个类(人)会很好,有没有办法做到这一点?
    • 对不起,我不太清楚你在那条评论中添加了什么内容。您不需要创建任何额外的(命名的)类来添加该类型断言。
    • 对不起约书亚。我试图在 Person 类中添加断言“hasCar only {Car_2}”,因为“bob”是这个类的一个个体。但是,推理器给了我一个不一致的错误,因为个人“Car_2”和“Car_7”是不同的,而“Alice”拥有这些汽车。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2020-01-08
    • 2022-01-18
    相关资源
    最近更新 更多