в сове "Dl запрос", как использовать расширенный запрос стоимости в протеже - PullRequest
0 голосов
/ 09 мая 2009

Я занимаюсь разработкой онтологии, и у меня возникла проблема с моим запросом Dl

есть класс под названием "цветок"

и у этого класса есть подклассы, которые являются названиями некоторых цветов

а также есть еще один класс под названием "flowersColor"

и он имеет эти значения ("красный", "зеленый" и "синий") как индивидуум, а не подкласс-

каждый цветок имеет один или несколько цветов

Я хочу найти цветок, который имеет красный цвет и только красный

Мой DL-запрос:

"цветок и цвет hasColor красный"

этот запрос даст мне все цветы, которые имеют красный цвет, даже если он имеет другие цвета

однако я хочу, чтобы все цветы имели ТОЛЬКО красный цвет

Я хочу написать что-то вроде этого

"только значение цветка и hasColor красный" <- грамматически это не правильно </p>

Я считаю, что если цвет имеет комбинацию "красного" и "зеленого", я не хочу видеть его в своем результате

Я надеюсь, что вы можете помочь мне в моем запросе

Спасибо

Ответы [ 2 ]

3 голосов
/ 30 июня 2009

Помните, что OWL использует допущение открытого мира, поэтому вы несколько ограничены в том, что можно сделать из логики описания.

Таким образом, ваш «запрос», как упоминает Каарел, может быть:

flower and (hasColor only {red})

И все же это недоказуемо в предположении открытого мира. Где-то во вселенной может быть утверждение, которое утверждает:

<RedRose> :hasColor :StackOverflow .

Что, в сочетании с вашими утверждениями (которые вы пытаетесь запросить):

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

Приводит к тому, что запрос DL не возвращает результатов. Таким образом, из-за предположения об открытом мире и теоретического существования диких, неточных и нерелевантных утверждений (по крайней мере, с вашей точки зрения) запрос DL не будет выполнен, поскольку он может только сделать выводы, которые он может доказать.

Однако ваш пример запроса может использоваться в ограничении OWL, чтобы определить, является ли что-то не чем-то другим. Например, если у вас есть класс (:OnlyRedFlower), который должен иметь только красный цвет, но синий цвет (вы указали этот дополнительный цвет), то вы можете сделать вывод, что этот новый цветок не в наборе :OnlyRedFlower.

Обновление: для тех, кто хочет попробовать это сами, вот онтология, которую я создал на основе этого вопроса:

<?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 /679359/v-sove-dl-zapros-kak-ispolzovat-rasshirennyi-zapros-stoimosti-v-protezhe</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 голос
/ 10 мая 2009

Ваш запрос:

flower and (hasColor only {red})

Обратите внимание, что конструктор {.} создает класс из отдельного лица или из списка индивидуумов. Таким образом, вы можете использовать его везде, где синтаксически требуется класс, например,

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