SPARQL-запрос с двоеточием в предикате
Я пытаюсь запросить данные RDF на сайте connectedgeodata.org для государств внутри страны. В RDF это выглядит так:
<http://linkedgeodata.org/triplify/node1055351027> <http://linkedgeodata.org/property/is_in%3Acountry> "LT" .
Как вы могли заметить, предикат содержит экранированную двоеточие, поэтому вместо "%3A" вместо ":" Я не смог найти подходящий SPARQL-запрос для этого, вот некоторые из моих попыток
?node lgdp:is_in "LT".
?node lgdp:is_in:country "LT".
?node lgdp:is_in%3Acountry "LT".
?node lgdp:is_in\u003Acountry "LT".
?node lgdp:is_in"\u003A"country "LT".
В качестве тройного хранилища я использую версию virtuoso с открытым исходным кодом. Это сообщение об ошибке я получаю со всеми, кроме первой формы:
Virtuoso 37000 Error SP030: SPARQL compiler, line 0: Invalid character in SPARQL expression at '\'
SPARQL query:
define sql:big-data-const 0
#output-format:text/html
define input:default-graph-uri PREFIX lgdo:
PREFIX lgdp:
PREFIX lgd:
PREFIX pos:
PREFIX rdf:
SELECT ?node, ?label
Where {
?node a lgdo:State .
?node lgdp:is_in\u003Acountry "LT".
?node rdfs:label ?label .
}
1 ответ
Решение
Символы, закодированные с %
не допускаются при использовании пространств имен, в этом случае вам придется использовать полный предикат напрямую (без пространства имен). Следующий запрос работает:
Prefix lgdo:<http://linkedgeodata.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?node, ?label
Where {
?node a lgdo:State .
?node <http://linkedgeodata.org/property/is_in%3Acountry> "LT".
?node rdfs:label ?label
}
увидеть результаты здесь.