Ваши данные не находятся в какой-либо законной сериализации RDF, о которой я знаю, но довольно легко получить их в сериализации N3. Довольно необычно видеть, что http://.../teach.rdfs#
и http://.../teach.rdfs/
используются в качестве префиксов в одном и том же документе. Обычно можно увидеть одно или другое, но не то и другое одновременно. Однако это не незаконно, поэтому мы можем с этим работать. В формате N3 это ваши данные в виде файла data.n3
:
@prefix teach1: <http://www.example.com/teach.rdfs/> .
@prefix teach2: <http://www.example.com/teach.rdfs#> .
teach1:John teach2:position "Full Professor" .
teach1:John teach2:course "Math" .
teach1:John teach2:student "Undergraduate" .
teach1:Arthur teach2:position "Assistant Professor" .
teach1:Arthur teach2:course "Web Engineering" .
teach1:Arthur teach2:student "Graduate" .
Запрос тоже довольно простой. Вот как, как файл с именем query.sparql
:
PREFIX teach1: <http://www.example.com/teach.rdfs/>
PREFIX teach2: <http://www.example.com/teach.rdfs#>
SELECT ?lecturer ?position WHERE {
VALUES ?position { "Assistant Professor" }
?lecturer teach2:position ?position ;
teach2:student "Graduate" .
}
Единственное, что немного необычно в этом запросе, - это использование VALUES ?position { "Assistant Professor" }
. Причина, по которой я использовал форму VALUES
, заключается в том, что желаемые результаты включали "Assistant Professor"
на выходе. Если мы исключим часть VALUES ...
, мы можем переписать шаблон как
?lecturer teach2:position "Assistant Professor" ;
teach2:student "Graduate" .
и по-прежнему находите те же ?lecturer
s, но нет переменной, привязанной к "Assistant Professor"
. Имея под рукой данные и запрос, мы можем выполнить запрос к данным с помощью инструментов командной строки Jena ARQ:
$ arq --query query.sparql --data data.n3
-----------------------------------------
| lecturer | position |
=========================================
| teach1:Arthur | "Assistant Professor" |
-----------------------------------------
person
Joshua Taylor
schedule
20.06.2013