2012-09-11 21 views
7

La siguiente consulta SPARQL no obtiene los resultados que quiero porque están en otros idiomas además del inglés, independientemente de filter lang 'en' (consulte los filtros en la consulta).filtro SPARQL lang 'en' ofrece otros idiomas

Resultados de la consulta:

"Никола́й Ива́нович Буха́рин"@en "Никола́й Буха́рин"@en "Nikolai Bukharin"@en 
"Gamal Abdel Nasser Hussein"@en  "جمال عبد الناصر"@en "Gamal Abdel Nasser"@en 

Miré la página DBpedia y he visto que no es la versión en Inglés de los nombres, pero no veo por qué el filtro no funciona !! !

¿Alguien me puede ayudar con eso?

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbpedia: <http://dbpedia.org/property/> 
SELECT DISTINCT ?person ?birthname ?nameExact ?label 
where { 

    ?person rdf:type dbpedia-owl:Person . 
    ?person rdfs:label ?label . 
    OPTIONAL { ?person dbpedia-owl:birthName ?birthname . } 
    OPTIONAL { ?person dbpprop:name ?nameExact . } 

    FILTER (lang(?birthname) = 'en') 
    FILTER (lang(?label) = 'en') 
    FILTER (lang(?nameExact) = 'en') 

} 
LIMIT 300 

Respuesta

6

La etiqueta de idioma es una anotación en la base de datos. Tu filtro funciona correctamente Algunos de los valores en la base de datos están anotados con en aunque estén en diferentes scripts. Deberá escribir su propia lógica que seleccione la propiedad más apropiada. Probablemente usaría la propiedad rdfs:label y cortaría cualquier cosa entre paréntesis (como en "Black Hawk (Sauk leader)"@en). Eso parece proporcionar resultados decentes.

También tenga en cuenta que usted necesita para poner los FILTER s para ?birthname y ?nameExact en el respectivo bloque de OPTIONAL, de lo contrario van a terminar la eliminación de los partidos que no tienen la propiedad opcional.

+0

Gracias mucho! – Funmatica

+0

@ Funmatica Si esta respuesta funcionó para usted, debe [aceptarla] (http://meta.stackexchange.com/q/5234/225437). –

3

tener cuidado de prefijos debe utilizar la misma en la declaración y consulta (dbo ->dbo, no dbo ->dbpedia-owl)

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbp: <http://dbpedia.org/property/> 

SELECT DISTINCT ?person ?birthname ?nameExact ?label 
where { 

    ?person rdf:type dbo:Person . 
    ?person rdfs:label ?label . 
    OPTIONAL { ?person dbo:birthName ?birthname . } 
    OPTIONAL { ?person dbp:name ?nameExact . } 

    FILTER (lang(?birthname) = 'en') 
    FILTER (lang(?label) = 'en') 
    FILTER (lang(?nameExact) = 'en') 

} 

LIMIT 300