Как извлечь субъект (Имя) в сравнении с предикатом из 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" |
-----------------------------------------
Другие вопросы по тегам