2015-07-06 2 views
1

Я пытаюсь захватить некоторое определение в dbpedia внутри моего тезауруса.Как использовать Sparql Содержит в соответствии с аналогичной строкой?

Хотя может найти страну, у которой есть метка, соответствующая моей стране, я не получаю все из них. Поэтому я пытаюсь сопоставить подобный ярлык с содержимым, но он не работает.

Любая идея, почему.

SELECT distinct ?idbcountry ?label ?labelDb ?def 

WHERE { 

      ?idbcountry a skos:Concept . 
      ?idbcountry rdfs:label ?label . 
      ?idbcountry skos:inScheme iadb:IdBCountries . 
      FILTER(lang(?label) = "en") 

    Service <http://dbpedia.org/sparql> { 
       ?s a <http://dbpedia.org/ontology/Country> . 
       ?s rdfs:label ?labelDb . 
       FILTER(CONTAINS (?labelDb, ?label)). 
       ?s rdfs:comment ?def . 
       FILTER(lang(?def) = "en") . 
       FILTER(lang(?labelDb) = "en") . 
    }} 

Точный запрос соответствия, который работает следующим образом:

Образцы
SELECT distinct ?idbcountry ?label ?def 

WHERE { 

      ?idbcountry a skos:Concept . 
      ?idbcountry rdfs:label ?label . 
      ?idbcountry skos:inScheme iadb:IdBCountries . 
      FILTER(lang(?label) = "en") 

    Service <http://dbpedia.org/sparql> { 
       ?s a <http://dbpedia.org/ontology/Country> . 
       ?s rdfs:label ?label . 
       ?s rdfs:comment ?def 
       FILTER(lang(?def) = "en") 
    } 
} 

EDIT1

данных:

<http://thesaurus.iadb.org/publicthesauri/10157002136735779158437> 
    rdf:type skos:Concept ; 
    dct:created "2015-03-27T16:43:48.052-04:00"^^xsd:dateTime ; 
    rdfs:label "BO"@en ; 
    rdfs:label "Bolivia"@en ; 
    rdfs:label "Bolivia"@es ; 
    rdfs:label "Bolivie"@fr ; 
    rdfs:label "Bolívia"@pt ; 
    skos:altLabel "BO"@en ; 
    skos:definition "Bolivia (/bəˈlɪviə/, Spanish: [boˈliβja], Quechua: Buliwya, Aymara: Wuliwya), officially known as the Plurinational State of Bolivia (Spanish: Estado Plurinacional de Bolivia locally: [esˈtaðo pluɾinasjoˈnal de βoˈliβja]), is a landlocked country located in western-central South America."@en ; 
    skos:inScheme :IdBCountries ; 
    skos:prefLabel "Bolivia"@en ; 
    skos:prefLabel "Bolivia"@es ; 
    skos:prefLabel "Bolivie"@fr ; 
    skos:prefLabel "Bolívia"@pt ; 
    skos:topConceptOf :IdBCountries ; 
    <http://xmlns.com/foaf/0.1/focus> <http://dbpedia.org/resource/Bolivia> ; 
+0

Предположительно, запрос не работает, потому что значение '? labelDB' фактически не содержит значения'? label' в качестве подстроки. Но поскольку вы не указали нам свои данные, вы не можете быть уверены. –

+0

@JeenBroekstra Я знаю, что запросы на подвыборку сначала оцениваются (самые внутренние по отношению к внешним); знаете ли вы, относится ли это также к формам обслуживания? Если это так, то? Label может даже не иметь значения внутри служебного блока. –

+0

@JoshuaTaylor Я не уверен на 100% сам, не глядя на спецификацию, но вы можете быть правы. Если это так, исправление будет состоять в том, чтобы переместить предложение FILTER из предложения SERVICE в _behind_ it - хотя предположительно это сделает запрос намного менее эффективным. –

ответ

3

Не видя ваши данные, мы не можем знать, почему ваш запрос не работает. Однако использование содержит довольно просто. Это всего лишь вопрос содержит (строка, подстрока). Как сказал Jeen, мы не можем воспроизвести вашу проблему, не зная, что выглядит ваши данные, как, но вот пример содержит в действии:

select distinct ?country ?label { 
    ?country a dbpedia-owl:Country ;  #-- select countries 
      rdfs:label ?label .   #-- and get labels 
    filter langMatches(lang(?label),"en") #-- but only English labels 
    filter contains(?label,"land")   #-- containing "land" 
} 

SPARQL results

+0

Ошибка Virtuoso 37000 SP030: компилятор SPARQL, строка 4: префикс неопределенного пространства имен в 'dbpedia-owl' before ';' – hitmaneidos

+1

@hitmaneidos да, изменил предопределенные префиксы пространства имен. Замените dbpedia-owl на dbo, и все будет готово. –

Смежные вопросы