SPARQL en utilisant une sous-requête avec limite

Je développe une application java qui utilise ARQ pour exécuter des requêtes SPARQL à l'aide d'un Fuseki extrémité TDB.

Des besoins de l'application d'une requête qui retourne le lieu de naissance de chaque personne et une autre personne qui est né dans le même endroit.

Pour commencer, j'ai écrit cette requête SPARQL qui renvoie person_ids et le lieu de naissance de chaque personne.

prefix fb: <http://rdf.freebase.com/ns/>
prefix fn: <http://www.w3.org/2005/xpath-functions#>
select ?person_id ?place_of_birth 
where {
    ?person_id fb:type.object.type fb:people.person .
    ?person_id fb:people.person.place_of_birth ?place_of_birth_id .
    ?place_of_birth_id fb:type.object.name ?place_of_birth .
     FILTER (langMatches(lang(?place_of_birth),"en"))
}
LIMIT 10

----------------------------------
| person_id    | place_of_birth  |
==================================
| fb:m.01vtj38 | "El Centro"@en  |
| fb:m.01vsy7t | "Brixton"@en    |
| fb:m.09prqv  | "Pittsburgh"@en |
----------------------------------

Après cela, j'ai ajouté une sous-requête (https://jena.apache.org/documentation/query/sub-select.html) l'ajout d'une autre personne qui y est né, mais je reçois plus d'une personne qui lui est liée et j'ai seulement besoin d'une.

prefix fb: <http://rdf.freebase.com/ns/>
prefix fn: <http://www.w3.org/2005/xpath-functions#>
select ?person_id ?place_of_birth ?other_person_id
where {
    ?person_id fb:type.object.type fb:people.person .
    ?person_id fb:people.person.place_of_birth ?place_of_birth_id .
    ?place_of_birth_id fb:type.object.name ?place_of_birth .
    {
       select  ?other_person_id
       where {
       ?place_of_birth_id fb:location.location.people_born_here ?other_person_id .
       }
     }
     FILTER (langMatches(lang(?place_of_birth),"en"))
}
LIMIT 10

---------------------------------------------------
| person_id    | place_of_birth | other_person_id |
===================================================
| fb:m.01vtj38 | "El Centro"@en | fb:m.01vtj38    |
| fb:m.01vtj38 | "El Centro"@en | fb:m.01vsy7t    |
| fb:m.01vtj38 | "El Centro"@en | fb:m.09prqv     |
---------------------------------------------------

J'ai essayé d'ajouter une LIMITE de 1 sous-requête, mais il semble que cela ne fonctionne pas ( la requête est exécutée, mais ne se termine jamais )

prefix fb: <http://rdf.freebase.com/ns/>
prefix fn: <http://www.w3.org/2005/xpath-functions#>
select ?person_id ?place_of_birth ?other_person_id
where {
    ?person_id fb:type.object.type fb:people.person .
    ?person_id fb:people.person.place_of_birth ?place_of_birth_id .
    ?place_of_birth_id fb:type.object.name ?place_of_birth .
    {
       select  ?other_person_id
       where {
       ?place_of_birth_id fb:location.location.people_born_here ?other_person_id .
       }
       LIMIT 1
     }
     FILTER (langMatches(lang(?place_of_birth),"en"))
}
LIMIT 3

Est-il un moyen de retourner qu'un seul résultat dans la sous-requête, ou puis-je pas le faire à l'aide de SPARQL.

Cette question sur answer.semanticweb.com est similaire à ce que vous recherchez pour le cas de 1-par... Requête SPARQL 1 ligne par distinctes valeur de la variable. Pour obtenir plus de 1%, vous voulez quelque chose comme ce qui est décrit dans la Comment faire pour limiter SPARQL solution de la taille du groupe? (même si il n'y a pas une solution définitive).
Pour la n-par question, je pense que cette question peut être un doublon de les requêtes Imbriquées dans sparql avec des limites, mais malheureusement qui n'a pas de réponse.

OriginalL'auteur Diego | 2014-11-21