1 year ago

#353857

test-img

loretoparisi

Retrieve Wikidata Item Wiki url with SPARQL

I'm using this approach to retrieve the Wikipedia url for a Wikidata item for multiple languages, using Sparql:

SELECT ?item ?en ?url_en ?es WHERE {
  { ?item wdt:P31 wd:Q6256. }
  UNION
  { ?item wdt:P31 wd:Q1250464. }
  UNION
  { ?item wdt:P31 wd:Q3624078. }
  UNION
  { ?item wdt:P31 wd:Q619610. }
  UNION
  { ?item wdt:P31 wd:Q179164. }
  UNION
  { ?item wdt:P31 wd:Q7270. }
  ?item rdfs:label ?en filter (lang(?en) = "en").
  ?item rdfs:label ?es filter (lang(?es) = "es").
  OPTIONAL {
    ?url_en schema:about ?item .
    ?url_en schema:inLanguage "en" .
    FILTER (SUBSTR(str(?url_en), 1, 25) = "https://en.wikipedia.org/")
  }
  OPTIONAL {
    ?url_es schema:about ?item .
    ?url_es schema:inLanguage "es" .
    FILTER (SUBSTR(str(?url_en), 1, 25) = "https://es.wikipedia.org/")
  }
} LIMIT 1000

I get a limited number of results despite the LIMIT value set, while when retrieving labels only:

 SELECT ?item ?en ?es ?it  WHERE {
  { ?item wdt:P31 wd:Q6256. }
  UNION
  { ?item wdt:P31 wd:Q1250464. }
  UNION
  { ?item wdt:P31 wd:Q3624078. }
  UNION
  { ?item wdt:P31 wd:Q619610. }
  UNION
  { ?item wdt:P31 wd:Q179164. }
  UNION
  { ?item wdt:P31 wd:Q7270. }
  ?item rdfs:label ?en filter (lang(?en) = "en").
  ?item rdfs:label ?es filter (lang(?es) = "es").
  ?item rdfs:label ?it filter (lang(?it) = "it").

} LIMIT 1000

I get more results like the

 OPTIONAL {
    ?url_en schema:about ?item .
    ?url_en schema:inLanguage "en" .
    FILTER (SUBSTR(str(?url_en), 1, 25) = "https://en.wikipedia.org/")
  }

is limiting the results found in some way.

sparql

wikipedia

wikidata

graphdb

blazegraph

0 Answers

Your Answer

Accepted video resources