Jena/Sparql/Arq: вставка некоторых операторов в модель во время запроса

Я построил небольшую модель RDF: она содержит всего несколько троек, описывающих некоторые элементы генома человека.

Я хочу сохранить только те элементы, которые перекрывают некоторые геномные сегменты (скажем, «ген»), хранящиеся в другой реляционной базе данных. Эта база данных генов слишком велика, чтобы ее можно было включить в мою первоначальную модель RDF.

Есть ли способ расширить ARQ, чтобы ввести некоторые новые операторы (операторы RDF, описывающие единственные гены, перекрывающие элементы) в мою модель во время запроса?

Вход:

uri:object1  my:hasChromosome "chr1" .
uri:object1  my:hasStartPosition "1235689887" .
uri:object1  my:hasEndPosition "2897979879" .
uri:object1  dc:title "my variation" .

выход:

uri:object1  my:hasChromosome "chr1" .
uri:object1  my:hasStartPosition "1235689887" .
uri:object1  my:hasEndPosition "2897979879" .
uri:object1  dc:title "my variation" .
uri:gene1  dc:title "GeneName" .

Я прочитал о http://jena.sourceforge.net/ARQ/arq-query-eval.html, но я теряюсь: какой механизм расширения выбрать? Имущество ? Есть ли более полный пример в Интернете?

Спасибо,


person Pierre    schedule 19.09.2012    source источник
comment
Попробуйте обновить SPARQL (w3.org/TR/sparql11-update) вместо ARQ. .   -  person Alex    schedule 20.09.2012
comment
Кроме того, вы просматриваете старый сайт Jena. Jena теперь является проектом Apache: jena.apache.org/documentation   -  person Alex    schedule 20.09.2012


Ответы (2)


У вас есть два хранилища данных. Один небольшой набор данных в модели Jena in memory и большой набор данных, связанных с генами, в реляционной базе данных. Вы хотите написать sparql-запрос, как если бы большой набор данных был локальным, без фактического его импорта. (Фактическое преобразование данных, которое вы хотите сделать, немного расплывчато.)

В SPARQL 1.1 вы можете сделать это, используя ключевое слово SERVICE между конечными точками sparql. Чтобы иметь возможность использовать вашу реляционную базу данных генов в качестве конечной точки SPARQL, вам нужен транслятор SPARQL в SQL, такой как D2RQ или конвертировать данные в RDF и загружать их в тройное хранилище общего назначения с поддержкой SPARQL.

Как только данные гена станут доступны в конечной точке SPARQL.

PREFIX my: <...>
PREFIX f:  <java:com.example.DBFunctions.>

INSERT { ?missing a my:Gene } # mark a region as a gene
WHERE {
    ?missing my:hasChromosome ?chr ; 
         my:hasStartPosition ?start ;
         my:hasEndPosition ?end .
    SERVICE<http://localhost:????/gene_data/sparql>{
       ?gene a my:Gene .
         my:hasStartPosition ?gStart ;
         my:hasEndPosition ?gEnd .
       #Detect overlap.
       FILTER( !(?start > ?gEnd || ?end < ?gStart) ) .
    }
}

Другой вариант — сделать фильтр, как показывает @user205512, с помощью пользовательской функции. Где код Java фильтра использует JDBC для подключения к реляционной базе данных.

person Jerven    schedule 24.09.2012

Детали здесь немного тонкие. Начните с простого, используя пользовательскую функцию. Это позволит вам выполнять внешний поиск в FILTERs или, используя BIND, извлекать значения .

Для обновления вы можете рассмотреть обновление SPARQL.

Наконец, вы сказали

Я хочу сохранить только те элементы, которые перекрывают некоторые геномные сегменты (скажем, «ген»), хранящиеся в другой реляционной базе данных.

Так что, возможно, что-то вроде:

PREFIX my: <...>
PREFIX f:  <java:com.example.DBFunctions.>

DELETE { ?missing ?p ?o } # Purge the non-overlapping objects
WHERE {
    ?missing my:hasChromosome ?chr ; 
             my:hasStartPosition ?start ;
             my:hasEndPosition ?end .
    FILTER (!f:overlaps(?chr, ?start, ?end)) # true if not overlapping
}

Хорошо, я угадываю здесь, но я надеюсь, что это немного поможет.

person user205512    schedule 19.09.2012
comment
Я знаю о создании пользовательской функции (plindenbaum.blogspot. fr/2008/11/), но это не то, что мне нужно. Как я уже сказал, я хочу ввести некоторые новые операторы, которые не являются частью исходной модели RDF. данные для гена будут храниться в другом месте, а не в хранилище данных RDF. - person Pierre; 20.09.2012
comment
Ах, я думаю, что я совершенно неправильно понял. Когда вы говорите, что вводите некоторые новые операторы, вы имеете в виду, что запрашиваемая модель представляет собой модель rdf + материал в отношении db? - person user205512; 20.09.2012