2014-02-04 3 views
1

Я создал эту онтологию, которая содержит два класса: Blood-Sugar и Услуги. Blood-Sugar имеет два свойства: hasValu с диапазоном xsd: int и hasStatut с диапазоном xsd: string. Свойство объекта triggerService имеет Blood-Sugar как домен и Обслуживание как диапазон.Правила SWRL не вызывают новые утверждения свойств объектов и данных

Я хочу, чтобы вывести свойство данных утверждение с этим правилом:

Blood_Sugar ∧ HasValue (х, у?) ∧ swrlb (х?): GreaterThan (? У, 126) ∧ swrlb: LessThan → hasStatut (х, "High"?)

Тогда я хочу, чтобы вывести новое свойство объекта с этим правилом (у, 500?):

Blood_Sugar (? х) ∧ hasStatut (? x, «Высокий») ∧ Сервис (? s) → triggerService (? x,? s)

Однако, рассудитель не дает мне результата, который я хочу, когда создаю людей, которым должны применяться правила. Вот онтология, которая демонстрирует такое поведение:

<?xml version="1.0"?> 


<!DOCTYPE rdf:RDF [ 
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" > 
    <!ENTITY swrl "http://www.w3.org/2003/11/swrl#" > 
    <!ENTITY swrlb "http://www.w3.org/2003/11/swrlb#" > 
    <!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#" > 
    <!ENTITY protege "http://protege.stanford.edu/plugins/owl/protege#" > 
    <!ENTITY xsp "http://www.owl-ontologies.com/2005/08/07/xsp.owl#" > 
    <!ENTITY swrla "http://swrl.stanford.edu/ontologies/3.3/swrla.owl#" > 
    <!ENTITY sqwrl "http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl#" > 
]> 


<rdf:RDF xmlns="http://www.owl-ontologies.com/Ontology1391620136.owl#" 
    xml:base="http://www.owl-ontologies.com/Ontology1391620136.owl" 
    xmlns:swrla="http://swrl.stanford.edu/ontologies/3.3/swrla.owl#" 
    xmlns:sqwrl="http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#" 
    xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
    xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#" 
    xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" 
    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#"> 
    <owl:Ontology rdf:about=""> 
     <owl:imports rdf:resource="http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl"/> 
     <owl:imports rdf:resource="http://swrl.stanford.edu/ontologies/3.3/swrla.owl"/> 
    </owl:Ontology> 
    <swrl:Variable rdf:ID="s"/> 
    <swrl:Variable rdf:ID="x"/> 
    <swrl:Variable rdf:ID="y"/> 
    <owl:Class rdf:ID="Blood_Sugar"/> 
    <swrl:Imp rdf:ID="Rule-2"> 
     <swrl:body> 
      <swrl:AtomList> 
       <rdf:first> 
        <rdf:Description> 
         <rdf:type rdf:resource="&swrl;ClassAtom"/> 
         <swrl:argument1> 
          <rdf:Description rdf:about="#x"/> 
         </swrl:argument1> 
         <swrl:classPredicate rdf:resource="#Blood_Sugar"/> 
        </rdf:Description> 
       </rdf:first> 
       <rdf:rest> 
        <swrl:AtomList> 
         <rdf:first> 
          <rdf:Description> 
           <rdf:type rdf:resource="&swrl;DatavaluedPropertyAtom"/> 
           <swrl:argument2 rdf:datatype="&xsd;string">High</swrl:argument2> 
           <swrl:argument1> 
            <rdf:Description rdf:about="#x"/> 
           </swrl:argument1> 
           <swrl:propertyPredicate rdf:resource="#hasStatut"/> 
          </rdf:Description> 
         </rdf:first> 
         <rdf:rest> 
          <swrl:AtomList> 
           <rdf:first> 
            <rdf:Description> 
             <rdf:type rdf:resource="&swrl;ClassAtom"/> 
             <swrl:argument1> 
              <rdf:Description rdf:about="#s"/> 
             </swrl:argument1> 
             <swrl:classPredicate rdf:resource="#Service"/> 
            </rdf:Description> 
           </rdf:first> 
           <rdf:rest rdf:resource="&rdf;nil"/> 
          </swrl:AtomList> 
         </rdf:rest> 
        </swrl:AtomList> 
       </rdf:rest> 
      </swrl:AtomList> 
     </swrl:body> 
     <swrl:head> 
      <swrl:AtomList> 
       <rdf:first> 
        <rdf:Description> 
         <rdf:type rdf:resource="&swrl;IndividualPropertyAtom"/> 
         <swrl:argument2> 
          <rdf:Description rdf:about="#s"/> 
         </swrl:argument2> 
         <swrl:argument1> 
          <rdf:Description rdf:about="#x"/> 
         </swrl:argument1> 
         <swrl:propertyPredicate rdf:resource="#triggerService"/> 
        </rdf:Description> 
       </rdf:first> 
       <rdf:rest rdf:resource="&rdf;nil"/> 
      </swrl:AtomList> 
     </swrl:head> 
    </swrl:Imp> 
    <swrl:Imp rdf:ID="Rule-1"> 
     <swrl:body> 
      <swrl:AtomList> 
       <rdf:first> 
        <rdf:Description> 
         <rdf:type rdf:resource="&swrl;ClassAtom"/> 
         <swrl:argument1> 
          <rdf:Description rdf:about="#x"/> 
         </swrl:argument1> 
         <swrl:classPredicate rdf:resource="#Blood_Sugar"/> 
        </rdf:Description> 
       </rdf:first> 
       <rdf:rest> 
        <swrl:AtomList> 
         <rdf:first> 
          <rdf:Description> 
           <rdf:type rdf:resource="&swrl;DatavaluedPropertyAtom"/> 
           <swrl:argument2> 
            <rdf:Description rdf:about="#y"/> 
           </swrl:argument2> 
           <swrl:argument1> 
            <rdf:Description rdf:about="#x"/> 
           </swrl:argument1> 
           <swrl:propertyPredicate rdf:resource="#hasValue"/> 
          </rdf:Description> 
         </rdf:first> 
         <rdf:rest> 
          <swrl:AtomList> 
           <rdf:first> 
            <rdf:Description> 
             <rdf:type rdf:resource="&swrl;BuiltinAtom"/> 
             <swrl:arguments> 
              <rdf:List> 
               <rdf:first> 
                <rdf:Description rdf:about="#y"/> 
               </rdf:first> 
               <rdf:rest> 
                <rdf:List> 
                 <rdf:first rdf:datatype="&xsd;long">126</rdf:first> 
                 <rdf:rest rdf:resource="&rdf;nil"/> 
                </rdf:List> 
               </rdf:rest> 
              </rdf:List> 
             </swrl:arguments> 
             <swrl:builtin> 
              <rdf:Description rdf:about="&swrlb;greaterThan"/> 
             </swrl:builtin> 
            </rdf:Description> 
           </rdf:first> 
           <rdf:rest> 
            <swrl:AtomList> 
             <rdf:first> 
              <rdf:Description> 
               <rdf:type rdf:resource="&swrl;BuiltinAtom"/> 
               <swrl:arguments> 
                <rdf:List> 
                 <rdf:first> 
                  <rdf:Description rdf:about="#y"/> 
                 </rdf:first> 
                 <rdf:rest> 
                  <rdf:List> 
                   <rdf:first rdf:datatype="&xsd;long">500</rdf:first> 
                   <rdf:rest rdf:resource="&rdf;nil"/> 
                  </rdf:List> 
                 </rdf:rest> 
                </rdf:List> 
               </swrl:arguments> 
               <swrl:builtin> 
                <rdf:Description rdf:about="&swrlb;lessThan"/> 
               </swrl:builtin> 
              </rdf:Description> 
             </rdf:first> 
             <rdf:rest rdf:resource="&rdf;nil"/> 
            </swrl:AtomList> 
           </rdf:rest> 
          </swrl:AtomList> 
         </rdf:rest> 
        </swrl:AtomList> 
       </rdf:rest> 
      </swrl:AtomList> 
     </swrl:body> 
     <swrl:head> 
      <swrl:AtomList> 
       <rdf:first> 
        <rdf:Description> 
         <rdf:type rdf:resource="&swrl;DatavaluedPropertyAtom"/> 
         <swrl:argument2 rdf:datatype="&xsd;string">High</swrl:argument2> 
         <swrl:argument1> 
          <rdf:Description rdf:about="#x"/> 
         </swrl:argument1> 
         <swrl:propertyPredicate rdf:resource="#hasStatut"/> 
        </rdf:Description> 
       </rdf:first> 
       <rdf:rest rdf:resource="&rdf;nil"/> 
      </swrl:AtomList> 
     </swrl:head> 
    </swrl:Imp> 
    <Blood_Sugar rdf:ID="Blood_Sugar_1"> 
     <hasValue rdf:datatype="&xsd;int">150</hasValue> 
    </Blood_Sugar> 
    <owl:DatatypeProperty rdf:ID="hasStatut"> 
     <rdfs:domain rdf:resource="#Blood_Sugar"/> 
     <rdfs:range rdf:resource="&xsd;string"/> 
    </owl:DatatypeProperty> 
    <owl:DatatypeProperty rdf:ID="hasValue"> 
     <rdfs:domain rdf:resource="#Blood_Sugar"/> 
     <rdfs:range rdf:resource="&xsd;int"/> 
    </owl:DatatypeProperty> 
    <owl:Class rdf:ID="Service"/> 
    <Service rdf:ID="Service_1"/> 
    <owl:ObjectProperty rdf:ID="triggerService"> 
     <rdfs:domain rdf:resource="#Blood_Sugar"/> 
     <rdfs:range rdf:resource="#Service"/> 
    </owl:ObjectProperty> 
</rdf:RDF> 
+1

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

+0

Благодарим вас за то, что вы обнаружили больше проблем, с которыми вы сталкиваетесь, но вы все еще не предоставили данные, с которыми мы можем работать, а размер вашей иерархии классов показывает, что то, что вы показали нам, - это минимальное воспроизведение проблема. Это поможет всем, кто участвует, если вы начинаете онтологию с нуля, добавьте класс, свойство, некоторые данные экземпляра и правило, и посмотрите, получаете ли вы ожидаемые результаты. Начиная с этой минимальной точки, посмотрите, где вещи сломаются, а затем покажите нам это. Это, как правило, лучший способ diganose этих проблем. Например,. см. http://sscce.org/. –

+0

Thanx, но можете ли вы дать мне пример вывода нового объекта proprety с помощью правила SWRL? – Anima

ответ

3

Но reasonner не дает мне результат, что я хочу, когда я экземпляров !!! создающих

Немного подробнее было бы полезно здесь. Откуда вы знаете, что аргумент (и какой разумный пользователь вы используете, кстати?) Не вывел желаемые свойства? Включили ли вы аргументатора? Вы выполнили запрос, чтобы проверить, присутствовали ли выводы?Вы установили конфигурацию в Protégé на показать все соответствующие выводы?

Во всяком случае, спасибо за предоставление онтологии, чтобы воспроизвести ваши результаты. Я был в состоянии загрузить его в протеже, запустите Reasoner Пелле, и я могу получить следующие выводы:

Blood_Sugar_1 triggerService Service_1 
Blood_Sugar_1 hasStatut "High"^^string 
Blood_Sugar_1 hasStatut "150"^^int 

blood sugar results

Хотя Pellet способен вычислений все эти умозаключения, только Protégé показывает выводы для свойств объекта по умолчанию; вы должны войти в меню Reasoner> Configure ... и убедитесь, что в разделе «Отображаемые индивидуальные выводы» отмечена опция «Утверждения свойств данных». Включение рассуждения Пелле и установка этой опции более подробно описано в my answer - Ontology property definition in Protégé-OWL/SWRL.

reasoner configuration option

+0

Thnk you soooooooooo много, он бежит теперь^_^Но почему это наносит ущерб этому Blood_Sugar_1 hasStatut "150" ^^ int ?????????? – Anima

+0

Разве вы не были бы обеспокоены, если бы не смогли вывести то, что вы конкретно дали? :) Я не знаю, почему это снова появляется в Protégé, но это действительно просто вопрос пользовательского интерфейса; все, что вы утверждали, должно быть бесплодным; это только вопрос Protégé, отображающий его снова. –

+0

Большое спасибо, я очень благодарен :) – Anima

0

Основываясь на your comment, возможно, пример правил SWRL используется, чтобы вывести новое утверждение свойств объекта приведет вас на пути. Некоторые аргументы OWL 2 поддерживают правила SWRL, поэтому я использую Protégé 4.x и Pellet. Правила SWRL могут использоваться для определения утверждений о свойствах нового объекта. Например, в следующей онтологии, есть класс Человек с индивидуумами Алиса, Билл, Карл и Raymond, свойство объекта любит, и правило:

Лицо (? X) & rightarrow; нравится (? x, Raymond)

После включения рассуждения Гранулы (Reasoner> Pellet, then Reasoner> Start Reasoner) мы получим ожидаемые результаты. НАПРИМЕР, Билл любит Раймон:

bill likes raymond

Вот онтология:

@prefix :  <http://example.org/swrl-example#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
@prefix swrl: <http://www.w3.org/2003/11/swrl#> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix swrlb: <http://www.w3.org/2003/11/swrlb#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 

<http://example.org/swrl-example> 
     a  owl:Ontology . 

:Person a  owl:Class . 

:Raymond a  owl:NamedIndividual , :Person . 

:Alice a  owl:NamedIndividual , :Person . 

[ a   swrl:Imp ; 
    swrl:body [ a   swrl:AtomList ; 
       rdf:first [ a     swrl:ClassAtom ; 
          swrl:argument1  <urn:swrl#x> ; 
          swrl:classPredicate :Person 
          ] ; 
       rdf:rest () 

      ] ; 
    swrl:head [ a   swrl:AtomList ; 
       rdf:first [ a      swrl:IndividualPropertyAtom ; 
          swrl:argument1   <urn:swrl#x> ; 
          swrl:argument2   :Raymond ; 
          swrl:propertyPredicate :likes 
          ] ; 
       rdf:rest () 

      ] 
] . 

:Bill a  owl:NamedIndividual , :Person . 

:likes a  owl:ObjectProperty . 

:Carl a  owl:NamedIndividual , :Person . 

<urn:swrl#x> a swrl:Variable . 
+0

Вы определили домен и диапазон пропретов «любит»? – Anima

+0

@ Анима Я этого не сделал, как вы можете видеть в онтологии, которую я предоставил. (Я скопировал и вставил ontology.Это можно скачать и открыть в Protégé.) Объявление доменов и диапазонов свойств не является обязательным, и я пытаюсь продемонстрировать пример _minimal_ использования правил SWRL для вывода утверждений свойств объекта. Добавление доменов и диапазонов было бы ненужным усложнением. –

+0

Я думаю, что у меня есть бред на моем Протеге, я попробовал ваш пример, но доза не запускается снова !! – Anima

Смежные вопросы