2016-09-12 1 views
2

Imaginez que vous fassiez quelque chose de fou et que vous stockiez votre modèle orienté objet comme un graphe RDF.SPARQL toutes les paires prédicat-objet du sujet et toutes ses superclasses

RDF Graph

montre un exemple simplifié de la hiérarchie d'héritage et les attributs associés.

En pratique, vous obtenez such graph structure si vous traduisez un diagramme de classes UML dans RDFS.

La question est: quelle requête SPARQL peut fournir toutes les paires prédicat-objet nécessaires pour instancier une ressource particulière de "Classe C". En d'autres termes: comment obtenez-vous toutes les paires de prédicat-objet tout au long de la chaîne d'héritage (seulement un héritage unique).

+0

Est-ce un devoir? – AKSW

+1

hehe .. malheureusement, les devoirs ont disparu depuis longtemps. C'est un vrai problème du monde réel. – Smartgrid

Répondre

3

Avec l'info de @scotthenninger la requête suivante a fait le travail:

SELECT ?p ?o 
WHERE { 
    :ClassC rdfs:subClassOf* ?anySuperClass . 
    ?anySuperClass ?p ?o . 
} 

modifier: requête similaire obtient toutes les propriétés auto-définies et leur gamme le long de la chaîne d'héritage:

SELECT ?prop ?obj 
    WHERE { 
     :ClassC rdfs:subClassOf* ?anySuperClass . 
     ?prop rdfs:domain ?anySuperClass . 
     ?prop rdfs:range ?obj . 
} 

Résultats finaux combinés:

foo:ID   xsd:string 
foo:name  xsd:string 
rdfs:comment xsd:string 
foo:similarTo :ClassD 
+0

Il est bon de voir que vous avez eu de bonnes idées et que vous avez pu résoudre votre problème. Veuillez voter pour la réponse de @scotthenninger UP (si vous l'avez trouvé utile) - alors acceptez votre réponse pour que la question soit répondue. Codage heureux! – ishmaelMakitla

+0

sure, mais besoin de +9 points de réputation pour upvote scottheninger – Smartgrid

+0

Voici votre réputation manquante :) –

4

Compte tenu de ce diagramme, les paires prédicat-objet de tous les membres de la classe :ClassC est simplement:

SELECT ?inst ?p ?o 
WHERE { 
    ?inst a :ClassC . 
    Inst ?p ?o . 

Gardez à l'esprit qu'il n'y a pas l'héritage de la propriété en RDF/FTR. Si vous voulez trouver tous les biens/valeurs paires pour ClassA avec pour les sous-classes puis inférences USEL

SELECT ?inst ?p ?o 
WHERE { 
    ?cls rdfs:subClassOf* :ClassA . 
    ?inst a ?cls . 
    ?inst ?p ?o 
} 

À cet égard, RDFS fonctionne un peu en arrière de ses attentes de l'héritage OO.

+0

il n'y a pas encore de données d'instance, juste le TBox. Mais tu m'as donné une bonne idée. 'rdfs: subClassOf *' a fait le travail. – Smartgrid