Как извлечь субъект (Имя) в сравнении с предикатом из RDF Triple, используя sparql
http://www.example.com/teach.rdfs/John http://www.example.com/teach.rdfs#position "Full Professor"
http://www.example.com/teach.rdfs/John http://www.example.com/teach.rdfs#course"Math"
http://www.example.com/teach.rdfs/John http://www.example.com/teach.rdfs#student"Undergraduate"
http://www.example.com/teach.rdfs/Arthur http://www.example.com/teach.rdfs#position "Assistant Professor"
http://www.example.com/teach.rdfs/Arthur http://www.example.com/teach.rdfs#course"Web Engineering"
http://www.example.com/teach.rdfs/Arthur http://www.example.com/teach.rdfs#student"Graduate"
Если это тройки, и я хочу найти доцентов, которые преподают выпускников
Lecturer Position
Arthur Assistant Professor
как можно извлечь вышеуказанную дату с помощью SPARQL
1 ответ
Ваши данные не находятся ни в одной из известных мне сериализаций 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"
, Имея данные и запрос, мы можем выполнить запрос к данным, используя инструменты командной строки ARQ Jena:
$ arq --query query.sparql --data data.n3
-----------------------------------------
| lecturer | position |
=========================================
| teach1:Arthur | "Assistant Professor" |
-----------------------------------------