2011-03-01 8 views
13

Estoy tratando de usar una consulta SPARQL para recuperar información sobre un recurso de DBpedia (una Persona). Me gustaría usar la misma consulta para recuperar datos sobre cualquier persona al parametrizar el URI de recursos. Dado que algunos atributos pueden no existir para un recurso en particular, estoy haciendo uso de la declaración OPCIONAL. Aquí está mi consulta:¿Cómo usar SPARQL OPTIONAL correctamente para recuperar los atributos de un recurso que pueda existir?

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    PREFIX dbo: <http://dbpedia.org/ontology/> 
    PREFIX dbpprop: <http://dbpedia.org/property/> 
    PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
    SELECT DISTINCT ?label ?abstract ?placeOfBirth 
     ?birthPlace ?birthDate ?deathDate ?page ?thumbnail 
    WHERE { 
     <http://dbpedia.org/resource/Neil_Simon> rdfs:label ?label ; 
      dbo:abstract ?abstract ; 
      foaf:page ?page . 
     OPTIONAL { 
      <http://dbpedia.org/resource/Neil_Simon> dbpprop:placeOfBirth ?placeOfBirth ; 
       dbpprop:birthPlace ?birthPlace ; 
       dbo:birthDate ?birthDate ; 
       dbo:deathdate ?deathDate ; 
       dbo:thumbnail ?thumbnail . 
     } 
     FILTER (LANG(?label) = 'en')  
     FILTER (LANG(?abstract) = 'en') 
    } 
    LIMIT 1 

He dejado todo salvo la etiqueta, el resumen y la página en OPCIONAL, ya que si uso la misma consulta para otra persona, puede que no tengan esas propiedades. El problema es que ninguno de esos atributos opcionales aparece en los resultados. En el caso de Neil Simon, puede ver que hay valores para birthDate, birthPlace y miniatura: http://dbpedia.org/resource/Neil_Simon. Sin embargo, esos valores no aparecen cuando ejecuto la consulta: DBpedia SPARQL query. ¿Qué estoy haciendo mal y cómo puedo recuperar esas propiedades?

Respuesta

14

Aunque haya utilizado una construcción opcional, el patrón de mapa necesita todos los atributos dentro para que coincida. Entonces, solo si tiene lugar de nacimiento, fecha de nacimiento, fecha de muerte y miniatura, la construcción opcional interna está satisfecha

Sugeriría dividir la construcción opcional en múltiples construcciones opcionales.

+0

Por supuesto, ¡eso tiene tanto sentido! He dividido el constructo OPCIONAL en uno diferente para cada propiedad y funciona perfectamente. –

+0

por favor comparta su código de trabajo con nosotros –

Cuestiones relacionadas