Sesame + Bigdata + OpenSahara, получение значения вызова процедуры в SPARQL

19 views
Skip to first unread message

Dimous

unread,
Jul 25, 2011, 8:21:27 AM7/25/11
to веб данных
Здравствуйте, я начинающий SW-разработчик (поэтому даже не знаю,
возможно ли подобное/правильно ли делаю), суть такова:
Есть два контекста, в один складываются данные о людях, в другой - об
организациях. Люди и организации имеют координаты, заданные термином
position - <http://ololo.net/geo#position> "POINT(12 34)"^^<http://
rdf.opensahara.com/type/geo/wkt>. Для получения расстояния между
точками использую - <http://rdf.opensahara.com/search#distance>(?
human_position, ?organization_position). Процедура работает в фильтрах
и параметрах упорядочивания (вызов делается непосредственно в них). Я
бы хотел получать значение. В одной из презентаций по SW были примеры
с использованием Virtuoso, в которых задавались синонимы, попробовал в
Sesame: (TupleQueryResult, QueryLanguage.SPARQL) "SELECT *, <http://
rdf.opensahara.com/search#distance>(?human_position, ?
organization_position) AS ?distance WHERE { GRAPH <" +
this.__human_context_uri + "> { ?person a foaf:Person,
gr:BusinessEntity ; foaf:name ?human_name ; geo:position ?
human_position} . GRAPH <" + this.__organization_context_uri + "> { [a
org:Organization, gr:BusinessEntity ; gr:legalName ?
organization_name ; geo:position ?organization_position] } }", выдало
ошибку: Exception in thread "main"
org.openrdf.query.MalformedQueryException: Encountered "," at line 1,
column 663.
Was expecting one of:
"{" ...
"from" ...
"where" ...

Та же ошибка без задания синонима, прямого указания выбираемых
переменных и просто вызова. Как получить значение distance?

Lomov Pavel

unread,
Jul 26, 2011, 2:43:34 AM7/26/11
to webofdat...@googlegroups.com
25.07.2011 16:21, Dimous О©╫О©╫О©╫О©╫О©╫:
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫:

Encountered "," at line 1,
column 663.
Was expecting one of:
    "{" ...
    "from" ...
    "where" ...

О©╫О©╫О©╫О©╫
<http://rdf.opensahara.com/search#distance> - О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ from О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

    

-- 
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
email:lo...@arctisu.ru
http://crider.rork.ru
xmmp:pala...@gmail.com

Дмитрий

unread,
Jul 26, 2011, 5:56:01 AM7/26/11
to webofdat...@googlegroups.com
"SELECT ?distance FROM
<http://rdf.opensahara.com/search#distance>(?human_position,
?organization_position) WHERE { " и "SELECT * FROM
<http://rdf.opensahara.com/search#distance>(?human_position,
?organization_position) AS ?distance WHERE { " возвращают: Exception
in thread "main" org.openrdf.query.MalformedQueryException:
Encountered "(" at line 1, column 720.

Was expecting one of:
"{" ...
"from" ...
"where" ...
я правильно написал?

Если что, <http://rdf.opensahara.com/search#distance> имеет реализацию
в Java (com.opensahara.sesame.geosparql.Distance, метод evaluate
возвращает значение типа org.openrdf.model.Value).

Pavel Lomov

unread,
Jul 26, 2011, 6:58:53 AM7/26/11
to webofdat...@googlegroups.com
Дмитрий <kasim...@gmail.com> писал(а) в своём письме Tue, 26 Jul 2011
13:56:01 +0400:

> "SELECT ?distance FROM
> <http://rdf.opensahara.com/search#distance>(?human_position,
> ?organization_position) WHERE { " и "SELECT * FROM
> <http://rdf.opensahara.com/search#distance>(?human_position,
> ?organization_position) AS ?distance WHERE { " возвращают: Exception
> in thread "main" org.openrdf.query.MalformedQueryException:
> Encountered "(" at line 1, column 720.
> Was expecting one of:
> "{" ...
> "from" ...
> "where" ...
> я правильно написал?
>
Нет - на скобку ругается в:
(?human_position,> ?organization_position)

Я SPARQL запросы с AS не делал - поэтому тут сказать не могу можно ли ее
пользовать и как?

Если рассмотреть простой запрос запрос:

//Человек по имени name-ivan

select ?name ?sur ?mid
from <http://data/resp1-rdf.owl>
where
{
?per rdf:type SocialUnits:natural-person.
?per DOLCE-Lite:has-quality ?name.
?name rdf:type :atomic-atribute-of-person.
?name DOLCE-Lite:q-location ?val.
?val rdfs:label "Иван"^^xsd:string
}

то после from надо where объявлять, т.е. (?human_position,>
?organization_position) быть не должно.


> Если что, <http://rdf.opensahara.com/search#distance> имеет реализацию
> в Java (com.opensahara.sesame.geosparql.Distance, метод evaluate
> возвращает значение типа org.openrdf.model.Value).
>


--
Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/

Катков Юрий

unread,
Jul 26, 2011, 6:48:49 PM7/26/11
to веб данных
Добрый день!

По-моему, тоже в этом дело. Для знакомства со SPARQL рекомендую SPARQL
by example [1] . Если вам нужно много примеров, можете зайти вот сюда
к нам в гости [2]- тут окоо сотни различных запросов.

Юра

[1] www.cambridgesemantics.com/2008/09/sparql-by-example/
[2] http://ailab.ifmo.ru/compmath/index.php/%D0%AD%D0%A1_%D0%B8_%D0%9B%D0%9F

On 26 июл, 14:58, "Pavel Lomov" <paland...@gmail.com> wrote:
> Дмитрий <kasimow...@gmail.com> писал(а) в своём письме Tue, 26 Jul 2011  

Дмитрий

unread,
Jul 27, 2011, 7:12:22 AM7/27/11
to webofdat...@googlegroups.com
Спасибо за ответы, решение найдено.
Попутно задал вопрос на форуме сахары -
https://dev.opensahara.com/boards/1/topics/8

Ответ таков:
Синтаксис запроса верный, но только для SPARQL 1.1, который пока не
поддерживается в используемой версии Sesame и Bigdata, есть решение в
обход (вызвать функцию в Java):

Value humanPosition = resultBindings.getValue("human_position");
Value organizationPosition = resultBindings.getValue("organization_position");
Value distance = new Distance(valueFactory, humanPosition,
organizationPosition);

Такие дела.

Reply all
Reply to author
Forward
0 new messages