2010-06-09 19 views
1

J'essaie sparql et l'utilisation de l'implication.Iéna Effets de différents régimes d'implication

A titre d'exemple i utilisé http://www.w3.org/TR/2010/WD-sparql11-entailment-20100126/#t112

je tente de les mettre en jena.

 
 OntClass book1= model.createClass(NS+"book1"); 
    OntClass book2=model.createClass(NS+"book2"); 
    OntClass book3=model.createClass(NS+"book3"); 
    OntClass publication=model.createClass(NS+"publication"); 
    OntClass article=model.createClass(NS+"article"); 
    OntClass mit=model.createClass(NS+"MIT"); 

    ObjectProperty a = model.createObjectProperty(NS+"a"); 
    ObjectProperty publishes = model.createObjectProperty(NS+"publishes"); 

    book1.addProperty(a, publication); 
    book2.addProperty(a, article); 
    publication.addSubClass(article); 

    publishes.addRange(publication); 
    mit.addProperty(publishes, book3); 

où le modèle est de type OntModel.

et je l'ai utilisé la requête similaire au problème

 "PREFIX table: "I have correct namespace here"+ 
    "SELECT *"+ 
    "WHERE"+ 
    "{"+ 
    " ?x ?y table:publication ."+ 
    "}";

Le modèle a été créé comme celui-ci. Hope OntModelSpec est ok.

OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RDFS_INF, null);

i obtenir que les résultats de recherche


x               y    
| http://www.example.com/ontologies/sample.owl#publishes | rdfs:range          | 
| http://www.example.com/ontologies/sample.owl#article  | rdfs:subClassOf         | 
| http://www.example.com/ontologies/sample.owl#book1  | http://www.example.com/ontologies/sample.owl#a | 
| http://www.example.com/ontologies/sample.owl#publication | rdfs:subClassOf         | 
| http://www.example.com/ontologies/sample.owl#book3  | rdf:type           | 

Quelqu'un peut-il me donner un exemple, avec et sans entailment, donc un code de dévers essayer, peut obtenir les bons résultats.

Répondre

2

Votre ontologie semble un peu louche.

book1, book2, book3 et mit ne sont pas des classes, ce sont des individus. Vous devez utiliser model.createIndividual(NS + "bookX", publication) pour les livres et créer une classe pour «organisation» ou similaire, puis créer mit en tant qu'individu de cette classe. Notez que createIndividual prend déjà soin d'assigner le type à l'individu, donc vous n'avez pas besoin de jouer avec votre propriété "a". Vous devez d'abord résoudre ces problèmes, puis réessayer et mettre à jour votre question. A propos de l'implication: Regardez la dernière ligne du résultat de votre requête. Vous n'avez dit nulle part que book3 est un livre, mais la déclaration est là de toute façon. En effet, cela était dû aux autres instructions, et c'est pourquoi le moteur d'inférence RDFS rend l'instruction visible lorsque vous interrogez le modèle. L'instruction est impliquée en raison de la plage sur publishes: Tout ce qui est publié est censé être de type publication.

+0

thx, a bien fonctionné. J'ai changé de modèle, suivant votre idée. Sans inférence retourné book1 (plus publie et article), avec inférence, les 3 livres. THX. y les livres que les classes étaient une grave erreur, mais j'étais fou je na pas obtenir les résultats mêmes, je ne l'ai pas même vérifier book3 – blueomega

+0

heureux d'avoir pu aider! – cygri