2016-11-22 15 views
1

В настоящее время я строю/модифицирую большую онтологию. Как у меня были проблемы, чтобы определить ограничения я построить очень короткий пример: У меня есть EuropeanCountry как класс и IslandCountry как класс: Reasoner in Protege не работает с ограничениями/величинами

<owl:Class rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"> 
    <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Country"/> 
</owl:Class> 



<!-- http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry --> 

<owl:Class rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"> 
    <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Country"/> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#borders"/> 
      <owl:maxQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">0</owl:maxQualifiedCardinality> 
      <owl:onClass rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"/> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
</owl:Class> 

Как вы можете видеть, что я установил ограничение «maxQualifiedCardinality» в Protege. Если я создаю некоторых людей и (C1, C2 и Германия EuropeanCountry, остров IslandCountry) и связать их с собственностью границы:

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Island"> 
    <rdf:type rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"/> 
    <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C1"/> 
    <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C2"/> 
    <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Germany"/> 
</owl:NamedIndividual> 

Я получаю сообщение об ошибке, брошенную Отшельник мыслителя, что не позволило установить 3 соседи на остров. Если я теперь изменить строку

<owl:maxQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:maxQualifiedCardinality> 

к мощности 1 Я не получаю сообщение об ошибке, если я установил три соседей, как показано в примере. Может ли кто-нибудь объяснить это и, надеюсь, предоставить мне решение, как я могу написать ограничение на то, что один класс должен иметь x других классов (в этом случае, как писать, что на острове должно быть 2 соседа, а третье - на ошибку) ?

Спасибо за вашу помощь и Уважения,

tanktoo

Edit: Я теперь добавил все лица к AllDifferent:

<rdf:Description> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#AllDifferent"/> 
    <owl:distinctMembers rdf:parseType="Collection"> 
     <rdf:Description rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C1"/> 
     <rdf:Description rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C2"/> 
     <rdf:Description rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Germany"/> 
    </owl:distinctMembers> 
</rdf:Description> 

Он теперь работает с ограничением выше и рассудитель говорит мне, что мне не разрешено устанавливать 3 граничных страны, так как максимальная кардинальность равна 1. Я изменил свое ограничение на следующее:

<owl:Class rdf:about="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"> 
    <rdfs:subClassOf rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Country"/> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#borders"/> 
      <owl:minQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:minQualifiedCardinality> 
      <owl:onClass rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"/> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
    <rdfs:subClassOf> 
     <owl:Restriction> 
      <owl:onProperty rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#borders"/> 
      <owl:maxQualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">2</owl:maxQualifiedCardinality> 
      <owl:onClass rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#EuropeanCountry"/> 
     </owl:Restriction> 
    </rdfs:subClassOf> 
</owl:Class> 

Теперь я бы ожидать, что рассуждающий обнаруживает ошибку, если я изложу меньше, чем 1 или более 2-х соседей:

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/tanktoo 
/ontologies/2016/10/untitled-ontology-81#Island"> 
     <rdf:type rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#IslandCountry"/> 
     <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C1"/> 
     <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#C2"/> 
     <borders rdf:resource="http://www.semanticweb.org/tanktoo/ontologies/2016/10/untitled-ontology-81#Germany"/> 
    </owl:NamedIndividual> 

В этом случае рассуждающий детектирует errro, потому что есть 3 соседей. Если я сейчас удалю всех соседей, так что остров, граничащий с 0 странами, аргумент не дает мне ошибку. Может кто-нибудь объяснить мне, почему?

Спасибо за вашу помощь :)

+0

Было бы хорошо видеть полное исключение. Я не думаю, что HermiT будет/может ошибаться с помощью онтологии, которую вы предоставили. – AKSW

+0

Если я установил maxQualifiedCardinality в 0, я получил сообщение (я не имею в виду сообщение об ошибке, которое Hermit не работает), что мне не разрешено это делать. – tanktoo

ответ

4

Я получаю сообщение об ошибке, брошенную Отшельник мыслителя, что не позволило установить 3 соседей на остров

Если это то, что говорит этот инструмент, то это ошибка. Конечно, вы даете 3 названия граничащих стран. Но ничто не говорит, что это имена трех разных стран. Они могут быть несколькими именами той же страны, как «Франция», «Республика Франция», «République française».

Поскольку разумный субъект не знает, являются ли они именами того же или нет, он не может обнаружить несоответствие во втором случае. Однако в первом случае наличие хотя бы названия для чего-то означает, что существует строго больше нуля, поэтому имеет смысл выявить несогласованность.

Если вы хотите, чтобы убедиться, рассуждающий обнаруживает, когда страна имеет более 2-х соседей, то вы должны явно сказать, что страны разные:

ex:C1 owl:differentFrom ex:C2, ex:Germany . 
ex:C2 owl:differentFrom ex:Germany . 

или:

[] a owl:AllDifferent; 
    owl:members (ex:C1 ex:C2 ex:Germany) . 

В Protégé на вкладке «Индивидуальный» вы можете указать, от какого человека отличается.

+0

Привет, спасибо за ваш ответ. Я ожидал, что все с другим именем будет отличаться (это потребовало бы, чтобы я прямо сказал, что новый человек отличается от всего существующего, что может быть большой работой). Теперь у меня есть пример работы с AllDifferent и maxCardinality, но если я установил дополнительную minCardinality 1 и изменил значение maxCardinality на 2, то рассудитель определит случай, если я установил более трех стран границы. Если я не установил ни одну пограничную страну, она ничего не обнаружит, почему? У вас есть идея? Благодаря! – tanktoo

+0

В OWL нет уникальных предположений об именах, поэтому разные имена не означают разные сущности. – AKSW

+0

Ok по этому ключевому слову. Поэтому мне придется добавить все мои экземпляры в AllDifferent. – tanktoo