2016-02-17 30 views
1

我正在使用SPARQL CONSTRUCT語句創建RDF圖。以下是我的查詢:SPARQL CONCAT()和STR()with 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. 

} 

}

我發現,FN:CONCAT()和STR()函數不與SPARQL CONSTRUCT工作。查詢給我一個錯誤。

FN:但是上述功能與獨立select語句像以下正常工作()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} 

請讓我知道我可以使用FN:CONCAT ()和str()函數與SPARQL構造。

+0

你爲什麼要這麼做FN:CONCAT?它應該是concat。通常的做法是使用select子查詢構造查詢。還有一些其他問題有很好的例子。 –

+1

例如,請參閱http://stackoverflow.com/questions/33475950/use-aggregates-min-max-avg-in-construct-query –

+0

構建select select子查詢不適用於我。你能否給我舉個例子? –

回答

3

SPARQL查詢中的CONSTRUCT子句只能包含圖模式。過濾器或函數可以包含而不是

爲了在你構造查詢結果的一些函數的輸出,需要在指定的輸出功能,以一個新的變量您WHERE子句中使用一個BIND操作,然後你可以使用新的變量在您的CONSTRUCT條款。

例如,使用STR()函數的輸出,你會做這樣的事情:

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

如果這回答OP的問題,那麼我真的認爲這是其他問題之一的重複。 –

+0

可能,但我沒有發現答案顯示BIND解決方案的地方。我有一個我忽略的重複,隨時可以投票結束。 –