2010-01-17 3 views
4

J'essaie de faire en sorte que Pellet propage les propriétés des classes jusqu'aux individus appartenant à ces classes. Par exemple, si j'ai la classe A avec la propriété X et l'individu B avec rdf: type = Classe A, je veux que l'individu B ait la propriété X après avoir exécuté le raisonneur. J'utilise la technique de l'inclusion de la chaîne de propriété référencée sur la page OWL 2 New Features. Cette technique fonctionne parfaitement si j'utilise mes propres propriétés personnalisées dans la chaîne de propriétés, mais cela ne fonctionne pas si j'essaie d'utiliser rdf: type lui-même. Voici quelques coupures pertinentes de mon RDF/XML.Raisonnement de la chaîne de propriétés sur rdf: type

Ontological classe (générée par Jena, notez le « spread » propriété, c'est-ce que je suis en train de se propager aux individus de la classe Person):

<rdf:Description rdf:about="http://family/person"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/> 
    <owl:sameAs rdf:resource="http://family/person"/> 
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/> 
    <owl:equivalentClass rdf:resource="http://family/person"/> 
    <owl:disjointWith rdf:resource="http://www.w3.org/2002/07/owl#Nothing"/> 
    <j.1:spread rdf:resource="http://spread/specificSpread"/> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
</rdf:Description> 

« spread » immobilier (écrit manuellement par moi, pas généré avec Jena depuis l'API Jena ne supporte pas les chaînes de propriétés d'objet): la personne Œdipe regarde

<rdf:Description rdf:about="http://spread/generalSpread"> 
    <owl:propertyChainAxiom rdf:parseType="Collection"> 
     <owl:ObjectProperty rdf:about="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/> 
     <owl:ObjectProperty rdf:about="http://spread/generalSpread"/> 
    </owl:propertyChainAxiom> 
</rdf:Description> 

Avant le raisonnement, comme ceci:

<rdf:Description rdf:about="http://family/Oedipus"> 
    <rdf:type rdf:resource="http://family/person"/> 
</rdf:Description> 

L'idée est que, après le raisonnement, il ressemblerait à quelque chose comme ceci:

<rdf:Description rdf:about="http://family/Oedipus"> 
    <rdf:type rdf:resource="http://family/person"/> 
    <j.1:spread rdf:resource="http://spread/specificSpread"/> 
</rdf:Description> 

J'ai le sentiment que la référence à rdf: type comme rdf: ressource est probablement là où les choses se çela depuis que je Je suis à peu près sûr que ce n'est pas une ressource. Mais je ne suis pas sûr de savoir comment le réparer. Je ainsi il a couru à travers le programme de fibre de ligne de commande Pellet et il ne semble pas avoir un problème avec elle, sauf qu'il a créé une entrée explicite pour rdf: type qui ressemblait à ceci:

<owl:ObjectProperty rdf:about="&rdf;type"/> 

Attend un peu étrange à moi et pourrait aussi être un indice qu'il ne comprend pas ma référence à rdf: type.

Quelqu'un peut-il faire la lumière sur ce qui pourrait se passer? J'apprécierais vraiment toute aide que quelqu'un pourrait fournir.

+0

question parfaite pour semanticoverflow.com – harschware

+0

N'existait pas au moment de poser cette question. –

+1

C'était juste un bébé de seulement 3 mois et pas très connu :-) Mais j'ai fait le commentaire plus pour les lecteurs qui viennent à cette question. Et (+1) pour une bonne question. – harschware

Répondre

2

Very Important Modifier

Il se fait que la propagation de la propriété est possible dans le domaine de OWL DL. Par exemple, si vous voulez propager la propriété spread avec la valeur simpleSpread (si les deux sont déjà définis dans votre RDF), vous pourriez faire quelque chose comme ça (en RDF/XML):

<rdf:Description rdf:about="http://family/person"> 
    <rdfs:subClassOf> 
     <owl:hasValue rdf:resource="http://spread/simpleSpread"/> 
     <owl:onProperty rdf:resource="http://spread/hasSpread"/> 
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Restriction"/> 
    </rdfs:subClassOf> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/> 
    </rdf:Description> 

Pas si important plus

Okay donc pour l'exhaustivité de l'information, je vais poster les informations de réponse pertinentes ici. Ce truc vient de parler aux gens sur la liste de diffusion des utilisateurs de granulés. Le fil est archivé et commence par initial message. Suivez le fil pour savoir ce qui s'est passé en détail.

Essentiellement, OWL DL ne permet pas la "réflexion" sur les propriétés intégrées et les types de données. Permettre cela pourrait violer la décidabilité polynomiale garantie par OWL DL. Pour ce faire, vous devez utiliser le OWL RL profile de OWL Full, qui traite toutes les choses dans OWL également, permettant ainsi l'utilisation d'une inférence sur rdf:type.Le problème majeur avec ceci est de trouver un raisonneur (ou une combinaison de raisonneurs) qui supporte à la fois DL et RL, puisque RL est beaucoup plus léger et moins expressif que DL (pour ne pas mentionner ne pas être décidable en temps polynomial).

Questions connexes