2016-02-17 8 views
1

Я создаю график RDF, используя оператор SPARQL CONSTRUCT. Ниже мой запрос:SPARQL CONCAT() и STR() с CONSTRUCT

prefix map: <#> 
prefix db: <> 
prefix vocab: <vocab/> 
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
prefix xsd: <http://www.w3.org/2001/XMLSchema#> 
prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> 
prefix jdbc: <http://d2rq.org/terms/jdbc/> 
prefix fn: <http://www.w3.org/2005/xpath-functions#> 

CONSTRUCT { 
map:database a fn:concat('d2rq:Database', ';'). 
map:database d2rq:jdbcDriver str(?o1). 
map:database d2rq:jdbcDSN ?o2. 
map:database d2rq:username ?o3. 
map:database d2rq:password ?o4. 
} 
FROM <http://www.ndssl.vbi.vt.edu/epidl> 
WHERE 
{ 
<http://www.ndssl.vbi.vt.edu/epidl#NDSSLDB> <http://www.ndssl.vbi.vt.edu/epidl#driver> ?o1. 
<http://www.ndssl.vbi.vt.edu/epidl#NDSSLDB> <http://www.ndssl.vbi.vt.edu/epidl#dsn> ?o2. 
<http://www.ndssl.vbi.vt.edu/epidl#NDSSLDB> <http://www.ndssl.vbi.vt.edu/epidl#username> ?o3. 
<http://www.ndssl.vbi.vt.edu/epidl#NDSSLDB> <http://www.ndssl.vbi.vt.edu/epidl#password> ?o4. 

} 

}

Я обнаружил, что сноска: CONCAT() и STR() функция не работает с SPARQL конструктом. Запрос дает мне ошибку. Однако вышеупомянутые функции работает должным образом с отдельным отборным заявлением, как следующие:

сноска: Concat()

prefix fn: <http://www.w3.org/2005/xpath-functions#> 
select (fn:concat('d2rq:jdbcDriver', ';') AS ?p) where {?s ?p ?o} LIMIT 1 

ул()

select str(?o) from <http://www.ndssl.vbi.vt.edu/epidl> 
where {<http://www.ndssl.vbi.vt.edu/epidl#NDSSLDB> <http://www.ndssl.vbi.vt.edu/epidl#dsn> ?o} 

Пожалуйста, дай мне знать, как я могу использовать сноску: CONCAT() и str() с SPARQL CONSTRUCT.

+0

Почему вы делаете Fn: CONCAT? Это должно быть просто concat. И обычный способ сделать это - построить запрос с подзапросом select. Есть и другие вопросы, которые имеют полезные примеры. –

+1

Например, см. Http://stackoverflow.com/questions/33475950/use-aggregates-min-max-avg-in-construct-query –

+0

Конструкция с подзапросом select не работает для меня. Не могли бы вы привести мне пример? –

ответ

3

Предложение CONSTRUCT в запросе SPARQL может содержать только шаблоны графа. Фильтры или функции могут быть включены не.

Чтобы включить вывод некоторой функции вашего результата запроса CONSTRUCT, вам нужно использовать BIND операции в вашем предложении WHERE, который присваивает вывод функции новой переменной, а затем вы можете использовать эту новую переменную в вашей статье CONSTRUCT ,

Например, чтобы использовать выход функции STR(), вы могли бы сделать что-то вроде этого:

CONSTRUCT { ?s ?p ?string } 
WHERE { 
     ?s ?p ?o . 
     BIND(STR(?o) as ?string) 
} 
+0

Если это отвечает на вопрос ПП, то я действительно думаю, что это дубликат одного из других вопросов. –

+0

Возможно, но я не заметил, где ответ показал решение с BIND. У меня есть дубликат, который я пропустил, не стесняйтесь голосовать, чтобы закрыть. –