В сове "Dl запрос", как использовать расширенный запрос стоимости в протеже
Я занимаюсь разработкой онтологии, и у меня возникла проблема с моим запросом Dl
есть класс под названием "цветок"
и этот класс имеет подклассы, которые являются названиями некоторых цветов
а также есть еще один класс под названием "flowersColor"
и он имеет эти значения ("красный", "зеленый" и "синий") как индивидуумы, а не подкласс
каждый цветок имеет один или несколько цветов
Я хочу найти цветок, который имеет красный цвет и только красный
мой DL Query это:
"цветок и имеет значение цвета красный"
этот запрос даст мне все цветы, которые имеют красный цвет, даже если у него есть другие цвета
однако я хочу, чтобы все цветы имели только красный цвет
Я хочу написать что-то вроде этого
"flower and hasColor only value red" <- это неверно грамматически
Я считаю, что если цвет имеет комбинацию "красный" и "зеленый", я не хочу видеть это в своем результате
Я надеюсь, что вы можете помочь мне в моем запросе
Спасибо
2 ответа
Помните, что OWL использует допущение открытого мира, поэтому вы несколько ограничены в том, что можно сделать из логики описания.
Таким образом, ваш "запрос", как упоминает Каарел, может быть:
flower and (hasColor only {red})
И все же это недоказуемо в предположении открытого мира. Где-то во вселенной может быть утверждение, которое утверждает:
<RedRose> :hasColor :Stackru .
Который, в сочетании с вашими утверждениями (которые вы пытаетесь запросить):
<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://stackru.com/users/64881/ontology_842588.rdf#"
xml:base="http://stackru.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://stackru.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>
Запрос, который вы ищете:
flower and (hasColor only {red})
Обратите внимание, что {.}
Конструктор создает класс из индивидуума или из списка индивидов. Таким образом, вы можете использовать его везде, где синтаксически требуется класс, например,
(not {blue}) subClassOf
{red} and {green,blue} or (hasColor max 10 ({red} or {blue}))