2017-09-20 13 views
2

Pour un exercice scolaire, j'ai un fichier RDF et un fichier OWL. Il y a un owl:Class Lecturer et un owl:Class Researcher. L'intersection des deux devrait être un professeur. J'ai mis mon fichier RDF et OWL ci-dessous.Comment puis-je créer un owl: intersectionOf deux owl: Classes?

Problème: quand je fais ma requête, aucune ressource n'est de type Professeur, alors que dans le fichier RDF nous pouvons voir que Laura devrait être professeur.

Version réduite du fichier rdf:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE rdf:RDF [ 
<!ENTITY humans "http://www.inria.fr/2007/09/11/humans.rdfs"> 
<!ENTITY xsd  "http://www.w3.org/2001/XMLSchema#"> ]> 
<rdf:RDF 
    xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:xsd ="&xsd;" 
    xmlns  ="&humans;#" 
    xml:base ="&humans;-instances" > 
    <Person rdf:ID="Laura"> 
     <name>Laura</name> 
    </Person> 
    <Lecturer rdf:about="#Laura"/> 
    <Researcher rdf:about="#Laura"> 
     <name>Laura</name> 
    </Researcher> 
</rdf:RDF> 

Version réduite du fichier hibou:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
xmlns="http://www.w3.org/2000/01/rdf-schema#" 
xml:base="http://www.inria.fr/2007/09/11/humans.rdfs" 
xmlns:owl="http://www.w3.org/2002/07/owl#"> 

    <owl:Class rdf:ID="Person"> 
    </owl:Class> 

    <owl:Class rdf:ID="Lecturer"> 
     <subClassOf rdf:resource="#Person"/> 
    </owl:Class> 

    <owl:Class rdf:ID="Researcher"> 
     <subClassOf rdf:resource="#Person"/> 
    </owl:Class> 

    <owl:Class rdf:id="Professor"> 
     <owl:intersectionOf rdf:parseType="Collection"> 
      <owl:Class rdf:about="#Lecturer"/> 
      <owl:Class rdf:about="#Researcher"/> 
     </owl:intersectionOf> 
    </owl:Class> 

</rdf:RDF> 

La requête j'ai utilisé était la requête defautl:

select * where { 
    ?x ?p ?y 
} 

Mais ce que je fait serait s'attendre à faire est le suivant:

select * where { 
    ?x a <http://www.inria.fr/2007/09/11/humans.rdfs#Professor> 
} 

J'ai regardé cette réponse: Why do we need to use rdf:parseType="Collection" with owl:intersectionOf? mais je ne comprends pas de quelle façon il devrait être utilisé pour mon problème spécifique.

J'espère que quelqu'un peut vous aider. En passant, c'est mon premier article ici, alors laissez-moi savoir s'il manque quelque chose.

+0

J'espère que vous comprenez que SPARQL ne fait que tripler les correspondances sur RDF. Vos données ne contiennent ** pas ** d'individus qui sont utilisés dans un axiome d'assertion triple (ou OWL) indiquant qu'ils appartiennent à la classe «Professor». Tout ce qui va au-delà de la triple correspondance nécessite un soi-disant raisonnement, c'est-à-dire inférer des données implicites. – AKSW

+0

Soit vous utilisez un moteur SPARQL prenant en charge le raisonnement, soit vous utilisez un autre mécanisme de requête comme DL Query. Notez, les deux sont totalement différents en effet. – AKSW

+0

Merci pour votre réponse @AKSW En effet mes données rdf ne disent pas que la ressource est assignée à Professor. Mais il indique que la ressource est un conférencier et un chercheur. Donc en utilisant le schéma owl (qui spécifie qu'un professeur est à la fois chargé de cours et chercheur) en plus des données rdf, j'ai pensé que je devrais être capable de faire une requête pour tous les professeurs et de récupérer ma ressource. J'utilise le moteur SPARQL de Corese (http://wimmics.inria.fr/corese). Êtes-vous en train de dire que cette approche est impossible? –

Répondre

2

paraphrasés de comments par @stanislav-kralin:

utilisation correcte de la capitalisation rdf:ID (non rdf:id), et permettent le raisonnement "OWL-Max" lors du chargement de votre RDF dans GraphDB.