2017-05-11 2 views
0

je les données suivantes définies dans mon serveur fuseki:SPARQL Sélectionnez les données spécifiques

<http://person/Mark-John> <http://purl.org/dc/elements/1.1/name> 
       "Mark John" ; 
     <http://purl.org/dc/elements/1.1/nationality> 
       "American" . 

<http://person/Elizabeth-Mary> 
     <http://purl.org/dc/elements/1.1/name> 
       "Elizabeth Mary" ; 
     <http://purl.org/dc/elements/1.1/nationality> 
       "American" . 

Comment puis-je obtenir les données que pour l'entrée qui a name = « Mark John »?

C'est ce que j'ai essayé:

public static void main(String[] argv) throws IOException { 
    execSelectAndPrint(
      "http://localhost:3030/Date/query", 
      "PREFIX dc: <http://purl.org/dc/elements/1.1/> " + "SELECT * WHERE { ?name dc:name 'Mark John' }" 
      ); 
} 

Mais il retourne ceci:

Nom
http://person/Mark-John

au lieu de Mark John et American

Fondamentalement, je veux sortir toutes les données disponibles pour une personne ... dans mon cas, name et nationality

Répondre

1

Votre requête renvoie exactement ce que le triplet de la requête correspond. Vous demandez des ressources portant le nom "Mark John" - et les ressources RDF sont représentées par des URI. En effet, votre nom de variable est source de confusion puisque le nom serait dans la position de l'objet du triple ...

Si vous voulez avoir le nom à nouveau, vous devez utiliser une variable:

PREFIX dc: <http://purl.org/dc/elements/1.1/> 
SELECT ?name WHERE { 
VALUES ?name {"Mark John"} 
?s dc:name ?name . 
} 

Et vous ne sélectionnez pas la nationalité dans votre requête. Comment vous attendez-vous à ce que ce soit retourné alors?

PREFIX dc: <http://purl.org/dc/elements/1.1/> 
SELECT ?name ?ǹationality WHERE { 
VALUES ?name {"Mark John"} 
?s dc:name ?name ; 
    dc:nationality ?nationality . 
}