2016-03-02 3 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

Могу ли я спросить, почему вы связываете переменную в части союза в качестве переменной внешнего запроса? Не проще ли просто использовать имя переменной 'потомуOf'? – AKSW

+0

@AKSW, очевидно, из-за вопроса, который я задаю сейчас, мне не нужна переменная? Потому что для того, чтобы быть привязанным только к varaible? P или классу переменных?, Я хочу делать то, что я прошу в этом вопросе, который связывает две переменные и статический текст с переменной? потому что переменная –

+0

** "в моем предложении firstbind, я бы хотел не просто привязать переменную? p, но также экземпляр переменной. Кроме того, добавление поэтому текст такой ». ** Вы не привязываете переменную? p, вы привязываете переменную? потому что к значению? p. В соответствии с вашей инструкцией я не беспокоюсь о том, имеют ли данные смысл, но я не совсем понимаю, о чем вы спрашиваете. Или вы просто хотите что-то вроде «bind (concat (str (? P)», «почему», str (? instance)) как? потому что Of) '? –

ответ

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" | 
----------------------------------------------------------------------------------- 

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

  • Нет связанных вопросов^_^