Мастер-класс по программированию приложений

Материал из Российская школа по Semantic Web
Перейти к: навигация, поиск
Мастер-класс по программированию приложений
Номер 8
Лектор Мамонтов И.А.
Prerequisites
Замечание
Аннотация

Содержание

Введение

Задача

Посмотреть видео о животных из страны X, отфильтровать их по признаку Y.

Требуемые инструменты

Для работы потребуются:

  1. Maven - фреймворк для автоматизации сборки проектов
  2. Jena - фреймворк для работы с Semantic Web написанный на Java

Поиск решения

Для поиска ресурсов необходимых для решения поставленной задачи необходимо обратить внимание на диаграмму The Linking Open Data cloud diagram.

  1. http://geospecies.org/ - база знаний о видах животных
  2. http://www.geonames.org/ - база знаний локаций
  3. http://www.bbc.co.uk/wildlifefinder/ - информация о зверях на BBC
  4. http://www.bbc.co.uk/programmes - источник видео

Решение

Теоретический план решения

Практическая реализация

Ресурс http://lod.geospecies.org/ хранит привязки зверей к их местам обитания. Можно импортировать его данные в наше хранилище для простоты использования.

Немного ползаем по сайту, пока не найдём пример RDFки, смотри как там используются данные из geonames. Замечаем, что также даётся альтернативное имя из dbpedia. Дописываем в модуль locatons формирование таких URI.

Ищем в гугле "geospicies SPARQL endpoint". Находим "http://lsd.taxonconcept.org/sparql". И сочиняем запрос:

PREFIX geospecies: <http://rdf.geospecies.org/ont/geospecies#>

CONSTRUCT {?x geospecies:isExpectedIn ?y}
WHERE {?x geospecies:isExpectedIn ?y}

Выполняем, запоминаем URL.

Теперь открываем форму Sesame и импортируем туда данные, в качестве источника выбираем URL и вводим туда сохранённый адрес. В качестве контекста и базового URI указываем http://lsd.taxonconcept.org/sparql.

Теперь нам надо научиться работать с нашим хранилищем, используем модуль pysesame, пишем к нему простой тест.

Пишем модуль animals. В процессе надо сочинить запрос к нашему хранилищу и написать тест к модулю.

Поиск локаций

Ресурс http://www.geonames.org/ позволяет искать локации по именам и вложенные локации по родительским. Мы хотим искать локацию с заданным именем и все вложенные в неё, чтобы не потерять кого-нибудь интересного с узким ареалом обитания.

Обозреваем их API: http://www.geonames.org/export/web-services.html

Нас интересуют:

Изучаем API, исполняем их примеры, подгоняем под наши нужды и получаем:

http://ws.geonames.org/search?name_equals=<???>&maxRows=1&type=json&style=short
http://ws.geonames.org/childrenJSON?geonameId=<???>

Пишем тест для модуля locations.

Получение клипов

Следующая задача - научиться связывать найденных зверей со зверями в http://www.bbc.co.uk/wildlifefinder/. Для начала идём на сайт и находим там пример документа с описанием зверя. Видим, что там есть ссылки на имена из dbpedia и вспоминаем, что к ним также привязаны описания на geospecies.

Ищем с помощью гугла эндпоинт http://api.talis.com/stores/bbc-wildlife/services/sparql. Пробуем написать запрос выбирающий все клипы для данного зверя:

PREFIX po: <http://purl.org/ontology/po/> 
PREFIX wo: <http://purl.org/ontology/wo/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

SELECT ?specie ?clip
WHERE {
  ?clip a po:Clip;
        po:subject ?specie.
  ?specie a wo:Species.
}

Видим, что нашлось очень мало. Думаем и решаем грузить ан прямую документы с сайта. Ещё раз осматриваем систему их именования и понимаем, как она связана с идентификаторами зверей.

Для продолжения работы надо установить мост к данным в geospecies через dbpedia. Для этого пишем запрос к http://api.talis.com/stores/bbc-wildlife/services/sparql для выборки соответствий между именами:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX wo: <http://purl.org/ontology/wo/>

CONSTRUCT {?x owl:sameAs ?y}
WHERE {
  ?x owl:sameAs ?y.
}

Результат аналогично загружаем в sesame, используем контекст http://api.talis.com/stores/bbc-wildlife/services/sparql.

Не хватает связей зверей с geospecies со зверями в dbpedia. Для восполнения этого возвращаемся к http://lsd.taxonconcept.org/sparql и пишем запрос на выборку этих связей:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX geospecies: <http://rdf.geospecies.org/ont/geospecies#>

CONSTRUCT {?x skos:closeMatch ?y}
WHERE {
  ?x skos:closeMatch ?y.
  ?x rdfs:seeAlso ?y.
  ?x a geospecies:SpeciesConcept.
}

Для примера берём результат в виде файла и загружаем его в sesame в конткесте <http://lsd.taxonconcept.org/sparql>.

Теперь осталось решить две задачи:

  1. Сгенерировать имя документа по идентификатору зверя.
  2. Прочитать из документа список клипов.

Для начала пишем запрос, достающий идентификаторы wildlife по идентификаторам из geospecies. Имея его легко получаем адрес документа.

Полученный документ парсим и делаем к нему запрос на выборку клипов.

Пишем простой тест для всего модуля.

Собираем всё вместе

Открываем модуль main и пишем тест для его функции, запускаем радуемся.

TODO

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты