2010-05-03 4 views
2

Cela m'a semblé trivial au début mais je n'ai pas encore réussi à obtenir l'identifiant unique pour une ressource donnée en utilisant SPARQL. Ce que je veux dire est donné, par exemple, rdf:Description rdf:about="http://..." et puis certaines propriétés identifiant cette ressource, ce que je veux faire est de trouver d'abord cette ressource très et ensuite récupérer tous les triplets donnés certains URI.Comment extraire les propriétés rdf: about ou rdf: ID des triplets en utilisant SPARQL?

J'ai essayé des approches naïves par des déclarations écrit dans une clause WHERE tels que:

?x rdf:about ?y and ?x rdfs:about ?y 

J'espère que je suis être précis.

+0

C'est SPARQL, pas SPARKQL. Cela pourrait vous aider à googler ... –

Répondre

7

Vous faites une erreur classique: confusion RDF (qui est ce que SPARQL interroge) avec (une de) sa sérialisation, à savoir RDF/XML. rdf:about (et rdf:ID, rdf:Description, rdf:resource) font partie de RDF/XML, une façon dont RDF est écrit. Vous pouvez jouer avec le RDF Validator pour voir ce que les triplets RDF résultent d'un morceau de RDF/XML.

Dans votre cas, commençons par:

<?xml version="1.0"?> 
<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:dc="http://purl.org/dc/terms/"> 
    <rdf:Description rdf:about="http://www.example.org/"> 
    <dc:title>Example for Donal Fellows</dc:title> 
    </rdf:Description> 
</rdf:RDF> 

PLUG dans the validator et vous obtenez:

Number  Subject      Predicate      Object 
1   http://www.example.org/  http://purl.org/dc/terms/title "Example for Donal Fellows" 

(vous pouvez aussi demander une représentation graphique)

Notez que rdf:about n'est pas présent: sa valeur fournit le sujet du triple.

Comment effectuer une recherche pour trouver les propriétés associées à http://www.example.org? Comme ceci:

select * { 
    <http://www.example.org/> ?predicate ?object 
} 

Vous obtiendrez:

?predicate      ?object 
<http://purl.org/dc/terms/title> "Example for Donal Fellows" 

Vous remarquerez que la requête est un match triple avec les variables (?v) dans les endroits où l'on veut trouver des valeurs. On pourrait aussi demander ce prédicat liens http://www.example.org/ avec "Example for..." en demandant:

select * { 
    <http://www.example.org/> ?predicate "Example for Donal Fellows" 
} 

Cette correspondance de motif est le coeur de SPARQL.

RDF/XML est une bête difficile, et vous trouverez peut-être plus facile de travailler avec N-Triples, ce qui est très bavard mais clair ou turtle, qui est comme N-Triples avec un grand nombre de sténographies et abréviations. La tortue est souvent préférée par la communauté rdf.

P.S. rdfs:about n'existe nulle part.

+1

Tout est vrai, mais vous pouvez également essayer des questions Web sémantique à http://www.semanticoverflow.com/ où plus de gens experts se détendre. – dajobe