Я настроил сервер Sesame (openrdf.org) и попытался получить к нему доступ через API Java.
Для тестирования я использовал очень простой пример из Википедии:
<?xml version="1.0" encoding="UTF-8" ?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://de.wikipedia.org/wiki/Resource_Description_Framework"> <dc:title>Resource Description Framework</dc:title> <dc:publisher>Wikipedia - Die freie Enzyklopädie</dc:publisher> </rdf:Description> </rdf:RDF>
и
<?xml version="1.0" encoding="UTF-8" ?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://de.wikipedia.org/wiki/Resource_Description_Framework"> <dc:title>Resource Description Framework 2</dc:title> <dc:publisher>Wikipedia - Die freie Enzyklopädie</dc:publisher> </rdf:Description> </rdf:RDF>
Запрос SPARQL в рабочей среде Sesame работает как положено:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?title WHERE{ ?res dc:publisher ?pub . ?res dc:title ?title FILTER ( sameTerm(?pub, "Wikipedia - Die freie Enzyklopädie") ) }
возвращает весь заголовок от издателя "Wikipedia - Die freie Enzyklopädie".
Теперь для Java API я пытаюсь перевести этот пример на SERQL.
Я пробовал следующий запрос:
SELECT title FROM {title} dc:publisher {"Wikipedia - Die freie Enzyklopädie"} USING NAMESPACE rdf = <http://www.w3.org/1999/02/22-rdf-syntax-ns#>, dc = <http://purl.org/dc/elements/1.1/>
Но это возвращает все данные и не заголовок, а URL из rdf: about. Я также пробовал разные варианты, такие как «dc: title» вместо «title», но я не получил никакого результата.
Я уже искал в сети и прочитал много документации. Но почему-то я не совсем понимаю синтаксис SERQL.
У вас есть какой-то указатель для меня? Как я могу получить все названия от определенного издателя в результате?
Большое спасибо!
Прежде всего, есть полная инструкция по SeRQL , доступная в пользовательской документации Sesame , так что она должна помочь вам понять синтаксис SeRQL.
Что касается вашего конкретного запроса, проблема в том, что ваш запрос SeRQL запрашивает что-то отличное от запроса SPARQL, который вы давали ранее. Я не буду вдаваться в подробности, но SeRQL-эквивалент вашего SPARQL-запроса будет:
SELECT title FROM {res} dc:publisher {"Wikipedia - Die freie Enzyklopädie"}; dc:title {title} USING NAMESPACE rdf = <http://www.w3.org/1999/02/22-rdf-syntax-ns#>, dc = <http://purl.org/dc/elements/1.1/>
SeRQL представляет тройные шаблоны в форме {subject} predicate {object}.
{subject} predicate {object}