在owl“Dl query”中如何使用高级值查询进行保护

时间:2009-05-09 03:18:41

标签: semantic-web owl protege4 dlquery manchester-syntax

我正在开发本体,我的Dl查询存在问题

有一个名为“花”的课程

并且此类具有子类,这些子类是一些花名称

还有另一个名为“flowersColor”的类

并且它具有这些值(“红色”,“绿色”和“蓝色”)作为个体 - 而不是子类 -

每朵花都有一种或多种颜色

我想搜寻一朵红色且只有红色的花

我的DL查询是:

“花和hasColor值红色”

这个查询会给我所有鲜红色的鲜花,即使它有其他颜色

但是我希望所有鲜花只有红色

我想写这样的东西

“flower and hasColor only value red”< - 这在语法上是不正确的

我主要是如果颜色有“红色”和“绿色”的组合,那么我不想在我的结果中看到它

我希望你能在我的查询中帮助我

由于

2 个答案:

答案 0 :(得分:3)

请记住,OWL使用开放世界的假设,因此您可以通过描述逻辑推断出有限的内容。

因此,Kaarel提到的“查询”可能是:

flower and (hasColor only {red})

然而,这在开放世界的假设中是无法证明的。在宇宙的某个地方可能有声明,声称:

<RedRose> :hasColor :StackOverflow .

当与您的断言(您试图查询)结合使用时:

<RedRose> :hasColor :Red .
<RedRose> a :Flower .

将导致DL查询不返回任何结果。因此,由于开放的世界假设,以及狂野的,不准确的和无关的断言的理论存在(至少从你的角度来看),DL查询将失败,因为它只能推断它可以证明为真的语句。

但是,您的示例查询可以在OWL限制中使用,以确定某些内容是否。例如,如果你有一个类(:OnlyRedFlower),它必须只有红色,但它的颜色为蓝色(你已声明这个额外的颜色),那么你可以推断这个新花是<在:OnlyRedFlower

的集合中,em> not

更新:对于那些有兴趣自己尝试的人来说,这是我根据这个问题创建的本体:

<?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 owl2xml "http://www.w3.org/2006/12/owl2-xml#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
    <!ENTITY onto "http://www.elastra.com/onto/2009/5/30/onto.owl#" >
]>
<rdf:RDF xmlns="http://stackoverflow.com/users/64881/ontology_842588.rdf#"
     xml:base="http://stackoverflow.com/users/64881/ontology_842588.rdf"
     xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:onto="http://www.elastra.com/onto/2009/5/30/onto.owl#">
    <owl:Ontology rdf:about="">
        <rdfs:comment xml:lang="en"
            >Example for http://stackoverflow.com/questions/842588/in-owl-dl-query-how-to-use-advanced-valu-query-in-protege</rdfs:comment>
    </owl:Ontology>
    <owl:ObjectProperty rdf:about="&onto;hasColor"/>
    <owl:Class rdf:about="&onto;Color"/>
    <owl:Class rdf:about="&onto;ExampleFlower">
        <rdfs:subClassOf rdf:resource="&onto;Flower"/>
    </owl:Class>
    <owl:Class rdf:about="&onto;Flower"/>
    <owl:Class rdf:about="&onto;OnlyRedFlower">
        <owl:equivalentClass>
            <owl:Class>
                <owl:intersectionOf rdf:parseType="Collection">
                    <rdf:Description rdf:about="&onto;Flower"/>
                    <owl:Restriction>
                        <owl:onProperty rdf:resource="&onto;hasColor"/>
                        <owl:allValuesFrom>
                            <owl:Class>
                                <owl:oneOf rdf:parseType="Collection">
                                    <rdf:Description rdf:about="&onto;Red"/>
                                </owl:oneOf>
                            </owl:Class>
                        </owl:allValuesFrom>
                    </owl:Restriction>
                </owl:intersectionOf>
            </owl:Class>
        </owl:equivalentClass>
        <rdfs:subClassOf rdf:resource="&onto;Flower"/>
    </owl:Class>
    <owl:Class rdf:about="&onto;OtherFlower">
        <rdfs:subClassOf rdf:resource="&onto;Flower"/>
    </owl:Class>
    <onto:Color rdf:about="&onto;Blue">
        <rdf:type rdf:resource="&owl;Thing"/>
    </onto:Color>
    <onto:Flower rdf:about="&onto;BlueOrchid">
        <rdf:type rdf:resource="&owl;Thing"/>
        <onto:hasColor rdf:resource="&onto;Blue"/>
    </onto:Flower>
    <onto:Color rdf:about="&onto;Red">
        <rdf:type rdf:resource="&owl;Thing"/>
    </onto:Color>
    <onto:Flower rdf:about="&onto;RedRose">
        <rdf:type rdf:resource="&owl;Thing"/>
        <onto:hasColor rdf:resource="&onto;Red"/>
    </onto:Flower>
</rdf:RDF>

答案 1 :(得分:1)

您所追求的问题是:

flower and (hasColor only {red})

请注意,{.}构造函数从个人或个人列表中创建一个类。因此,您可以在语法上需要类的任何地方使用它,例如

(not {blue}) subClassOf
             {red} and {green,blue} or (hasColor max 10 ({red} or {blue}))