2016-03-02 18 views
1

這是我的查詢SPARQL是否可以使用靜態文本將兩個變量與它們的標籤綁定?

PREFIX : <http://example.org/rs#> 

select ?item (SUM(?similarity) as ?summedSimilarity) 
(group_concat(distinct ?becauseOf ; separator = " , ") as ?reason) where 
{ 
    values ?x {:instance1} 
    { 
    ?x ?p ?instance. 
    ?item ?p ?instance. 
    ?p :hasSimilarityValue ?similarity 
     bind (?p as ?becauseOf) 
    } 
    union 
    { 
    ?x a ?class. 
    ?item a ?class. 
    ?class :hasSimilarityValue ?similarity 
     bind (?class as ?becauseOf) 
    } 
    filter (?x != ?item) 
} 
group by ?item 

在我的第一bind條款,我想不只是綁定變量?p,而且變量?instance。另外,添加一個文本,如that is why

所以第一個綁定應該導致以下結果: ?p that is why ?instance

是可能的SPARQL?

請不要在意,如果數據使得SENCE與否,它只是一個查詢向你展示我的問題

+0

我可以問你爲什麼在工會的一部分作爲外部查詢的變量綁定變量?那麼僅僅使用變量名'becauseOf'並不容易? – AKSW

+0

@AKSW顯然是因爲我現在問的問題,我不想要變量?因爲我只想綁定到變量?p或變量?類,我想做我要求的東西在這個問題中,我將綁定兩個變量和一個靜態文本到我的firstbind子句中的?因爲變量 –

+0

**,我不想只綁定變量?p,而是綁定變量?實例。像這樣的文本就是爲什麼。「**你沒有綁定變量?p,你綁定變量?因爲對於?p的值。根據你的指令,我並不擔心數據是否有意義,但我不完全清楚你在問什麼,你是否想要像bind(concat(str(?p))這樣的東西,是什麼「,str(?instance))as?因爲)?? –

回答

4

如果我理解正確的話,你只是在尋找concat功能。正如我之前提到的,你至少應該通過目錄瀏覽SPARQL 1.1 standard。你不需要記住它,但它會讓你知道什麼是可能的,並且知道在哪裏尋找。此外,如果您提供我們可以使用的示例數據,它的非常有幫助,因爲它使更清晰找出您正在嘗試做什麼。你的標題的措辭不是特別清楚,這個問題並沒有真正提供你想要完成的事情的例子。只是因爲我看過你的一些過去的問題,才知道你的目標是什麼。無論如何,這裏有一些數據:

@prefix : <urn:ex:> 

:p :hasSimilarity 0.3 . 
:A :hasSimilarity 0.6 . 

:a :p :b ; #-- is is related to :b 
    a :A . #-- and is an :A . 

:c :p :b . #-- :c is also related to :b 

:d a :A . #-- :d is also an :A . 

:e :p :b ; #-- :e is related to :b 
    a :A . #-- and is also an :A . 

這裏是查詢及其結果。您只需使用concat加入str表單變量與適當的字符串,然後結果綁定到變量。

prefix : <urn:ex:> 

select ?item 
     (sum(?factor_) as ?factor) 
     (group_concat(distinct ?reason_; separator=", ") as ?reason) 
{ 
    values ?x { :a } 

    { ?x ?p ?instance . 
    ?item ?p ?instance . 
    ?p :hasSimilarity ?factor_ . 
    bind(concat("has common ",str(?p)," value ",str(?instance)) as ?reason_) } 
    union 
    { ?x  a ?class. 
    ?item a ?class. 
    ?class :hasSimilarity ?factor_ . 
    bind(concat("has common class ",str(?class)) as ?reason_) 
    } 
    filter (?x != ?item) 
} 
group by ?item 
----------------------------------------------------------------------------------- 
| item | factor | reason               | 
=================================================================================== 
| :c | 0.3 | "has common urn:ex:p value urn:ex:b"       | 
| :d | 0.6 | "has common class urn:ex:A"          | 
| :e | 0.9 | "has common urn:ex:p value urn:ex:b, has common class urn:ex:A" | 
----------------------------------------------------------------------------------- 
相關問題