Составные части Semantic Web

Материал из Российская школа по Semantic Web
Перейти к: навигация, поиск
Составные части Semantic Web
Номер 3
Лектор Катков Ю.В.
Prerequisites минимум информатического образования
Замечание надо меньше вдаваться в детали отдельных стандартов и охватить Rules, Crypto, Provenance и Trust. Не завершен конспект.
Аннотация все уровни стека Semantic Web рассматриваются один за другим

Содержание

План лекции

  1. Стек Тима и дирижабль Semantic Web Programming team
  2. Именование: URI
  3. Описание ресурсов: RDF, RDFa, microformats
  4. Поиск и запросы: SPARQL
  5. Описание понятий и связей между ними в онтологиях: RDFS, OWL, RIF
  6. Прикладные онтологии: FOAF, DC, SKOS, DOLCE
  7. Открытые вопросы SW

Стек Тима и дирижабль Semantic Web Programming team

Semantic web принято изображать по-разному:

Каноническая картина от создателя, Тима Бернерса-Ли:

Semantic web stack.png

Чуть более честная картинка - вариация на тему:

Semantic web 3d stack.png

Облако ресурсов Linked Data:

Linked data cloud.png

И Semantic Web с точки зрения программиста (взято из книги Semantic Web Programming)

SWP zeppelin.png

Каждая из этих картинок рисует Semantic Web с разных точек зрения. Для того, чтобы обозреть составные части Semantic Web, мы можем пользоваться всеми этими картинками, объясняя как изображенные на них элементы взаимодействуют друг с другом.

Начнем мы с оригинальной картины Тима и её трехмерной версии - слоеный пирог Semantic Web.

Именование: URI

Внизу пирога находятся уникальные идентификаторы ресуров (URI). Предназначение URI:

  1. Создать пространство имён виртуальных ресурсов, достаточное для представления в web всех важных объектов реального мира.
  2. Избежать неоднозначности в именовании ресурсов в web.

Semantic Web предоставляет средства для того, чтобы говорить об объектах. Возьмем, к примеру, следующее высказывание: Иванов Павел Сергеевич знает Губанову Марфу Андреевну. Данное высказывание можно интерпретировать по-разному, ведь никто не гарантирует уникальность имен объектов (Павел и Марфа) и отношений между ними (знать). URI нужны именно для такой гарантии.

http://ivanovpavel.spb.ru http://xmlns.com/foaf/0.1/knows http://marphaemc.com

Делится на два семейства:

  1. URN (Uniform Resource Name) - позволяет идентифицировать ресурс, но не указывает на его местоположение. Например идентификатор URN стандарта RFC 2549, описывающий перенос IP-датаграмм с помощью почтовых голубей выглядит так urn:ietf:rfc:2549
  2. URL (Uniform Resource Locator) - указывает на способ получения доступа к ресурсу. Пример: URL для того же самого стандарта выгдядит вот так: http://tools.ietf.org/html/rfc2549

XML

XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных форматов обмена данными. На сегодня в семействе XML есть целая куча форматов, предназначенных для различных целей.

Описание ресурсов: RDF

Для описания ресурсов в SW необходим максимально гибкий механизм выражения связей и свойств. Таким механизмом являются направленные графы, удобные для описания многих вещей.

Для записи таких графов был разработан специальный язык: RDF. Основная идея языка записывать граф в виде троек субъект-связь-объект. Давайте для начала попробуем описать самих себя. Для этого можно зайти вКонтакт и пройти по ссылке http://vkontakte.ru/foaf.php?id=79863 . Там есть некоторая информация, но далеко не вся.


<rdf:RDF
   xml:lang="ru"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:foaf="http://xmlns.com/foaf/0.1/"
   xmlns:ya="http://blogs.yandex.ru/schema/foaf/"
   xmlns:dc="http://purl.org/dc/elements/1.1/">
 <foaf:Person>
   <ya:firstName>Юрий</ya:firstName>
   <ya:secondName>Катков</ya:secondName>
   <foaf:name>Юрий Катков</foaf:name>
   <foaf:gender>male</foaf:gender>
   <foaf:birthday>12-25</foaf:birthday>
   <foaf:dateOfBirth>1987-12-25</foaf:dateOfBirth>
   <foaf:img
       rdf:resource="http://cs690.vkontakte.ru/u79863/a_d7e07143.jpg"/>
   <ya:city
       dc:title="Санкт-Петербург"
       rdf:resource="http://maps.yandex.ru/?text=Санкт-Петербург"/>
   <ya:school
       ya:dateStart="1995-09"
       ya:dateFinish="2004-05"
       dc:title="Гимназия № 1, Воркута"
       rdf:resource="http://yandex.ru/yandsearch?text=Гимназия № 1, Воркута"/>
   <ya:school
       ya:dateFinish="2010-06"
       dc:title="СПбГЭТУ (ЛЭТИ), факультет компьютерных технологий и информатики (фкти, фавт)"
       rdf:resource="http://yandex.ru/yandsearch?text=СПбГЭТУ (ЛЭТИ), факультет компьютерных технологий и информатики (фкти, фавт)"/>
 </foaf:Person>
</rdf:RDF>


При этом субъектом и связью может являться любой ресурс, а объектом любой ресурс или литерал. Одна запись соответствует одному ребру графа.

Поиск и запросы: SPARQL

SPARQL определяет протокол и язык запросов к RDF-графам. По сути в SPARQL составитель запроса делает следующее: он предъявляет движку запросов RDF граф, где неизвестные ему узлы заменяет переменными. В эти переменные подставляются значения, соответствующие графу, к которому мы делаем запрос.

Таким образом, если RDF позволяется сказать что-то вроде

"Я съел печеньку моего друга Педро"<

или более формально:

<http://aialab.ifmo.ru/katkov> <http://example.com/eats> <http://store.com/coockie> .
<http://aialab.ifmo.ru/katkov> <http://xmlns.com/foaf/0.1/knows> <http://exampleperson.org/pedro> .
<http://exampleperson.org/pedro> <http://example.com#isOwner> <http://store.com/coockie> .

ну или же совсем серьёзно

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:examplecom="http://example.com/" xmlns:ns="http://xmlns.com/foaf/0.1/" xmlns:examplecom1="http://example.com#">
 	<rdf:Description rdf:about="http://aialab.ifmo.ru/katkov">
 		<examplecom:eats rdf:resource="http://store.com/coockie" />
		 <ns:knows>
			<rdf:Description rdf:about="http://exampleperson.org/pedro">
				<examplecom1:isOwner rdf:resource="http://store.com/coockie" />
                   </rdf:Description>
		</ns:knows>
         </rdf:Description>
</rdf:RDF>

то в SPARQL мы можем спросить: это ты съел печеньку твоего друга Педро?

ASK 
WHERE { <http://aialab.ifmo.ru/katkov> <http://example.com/eats> <http://store.com/coockie>
<http://aialab.ifmo.ru/katkov> <http://xmlns.com/foaf/0.1/knows> <http://exampleperson.org/pedro>
<http://exampleperson.org/pedro> <http://example.com#isOwner> <http://store.com/coockie>
}

Запрос такого рода ( со словом ASK) возвращает истину или ложь в зависимости от того, встречается ли заданные подграф в графе, к которому идет запрос. Чью печеньку ты съел? на SPARQL: или

Что и кто что-то сделал с печенькой Педро

или даже

Что тут происходит? Кто, что и с кем сделал? 

Описание понятий и связей между ними в онтологиях: RDFS, OWL, SWRL

С помощью RDF удобно записывать т.н. тезисные знания (ABox, Assertion component), то есть знания о том, что два объекта связаны связью и знание что объект относится к какой-либо группе (классу). RDFS и Co созданы для того, чтобы помочь описывать терминологическое знание - структуру классов, информацию о свойствах и пр.

Зачем описывать какое-либо терминологическое знание? Просто потому, что я хочу, чтобы моя система была посообразительнее, чем она есть сейчас! Например,

Я дружу с Ириной и записываю это в RDF-файле. Пусть система, которая обрабатывает мое RDF-описание, умеет показывать мне список людей, с которыми я знаком. Умная система в моем случае выведет Ирину среди прочих моих знакомств даже если я явно не вписал её в список своих знакомых. Почему? Да потому что в этой системе будет находится знание о том, что связь "быть другом" является рановидностью связи "быть знакомым".

Подобную информацию хранят в онтологиях или семантических словарях. Если проводить аналогию с базами данных, онтология будет ссответствовать схеме данных (набору таблиц, столбцов в них и ссылок с помощью внешних ключей). RDFS, OWL и RIF позволяют выражать отношения между классами и свойствами со все нарастающей выразительностью. Ну и созданы для того, чтобы те, кто описывают данные в качестве RDF, могли создавать словари терминов, которыми они будут пользоваться.

Понятие класса знакомо многим из объектно-ориентированного программирования. Например Jethro Tull и Beatles можно объединить в класс Музыкальные группы. Для этого мы просто скажем в нашем RDF-документе, что тип ресурса (помните, в RDF у нас все является ресурсом!) Jethro Tull это Musical Band, а тип Musical Band rdfs:class. Итак, классами называются группы объектов, объединенные какими-либо общими признаками.


RDFS

Для того, чтобы описывать простейшие связи между объектами создан стандарт RDFS. Выразительные средства RDFS позволяют нам выразить отношение "класс-подкласс" для классов объектов и "свойство-подсвойство" для предикатов.

Например, используя RDFS можно сказать, что птицы являются животными, а свойство "являться папой" является подсвойством "состоять в родственных отношениях".

Для предикатов можно задать области определения и значения - сказать, что субъектом в свойстве "совершить преступление" может быть представитель объединения классов "физическое лицо" и "юридическое лицо" (задание области определения), а объектом может выступать любой представитель класса "Преступление".

Кроме этого RDFS предоставляет нам набор контейнеров для группировки графов: Sequence, Bag, Alt.


OWL

Web ontology language - это очень выразительный язык, позволяющий сказать о классах и свойствах очень многое. Синтаксически он базируется на rdfs.

Используя OWL мы можем сказать, например, что свойство "состоять в супружеских онтошениях" является симметричным, а потому для случая когда

ПетрВасильевичШварц состоит_в_супружеских_отношениях МарфаБорисовнаЗильберман

можно заключить обратное:

МарфаБорисовнаЗильберман состоит_в_супружеских_отношениях ПетрВасильевичШварц

Помимо атрибутов свойств с помощью OWL мы можем также представлять различные типы знаний о класах. К примеру мы можем сказать, что классы Безработных людей и Людей, имеющих работу, не пересекаются - это называется дизъюнктивные классы.

OWL позволяет задавать классы с помощью ограничений на их значения. К примеру мы можем сказать, что тип "класс Собака" имеют все индивиды, имеющие тип "класс Домашнее Животное" и содержащие свойство "издавать звук" со значением "Лай".

Очень часто используется конструция EquivalentClass, полезная для того, чтобы уравнивать данные, полученные из нескольних источников.

Важно отметить, что OWL базируется на дескрипционной логике. За каждой конструкцией в стандарте OWL закреплена строго определенная семантика, что позволяет делать программы, выводящие из имеющихся фактов новые, причем всегда можно будет доказать, что выведенные факты логически следуют из имеющихся.

Linked Data

Linked Open Data - это огромный проектище, запущенный с целью сделать веб большой распределенной базой данных. Участники проекта занимаются в основном тем, что публикуют в открытый доступ миллиарды RDF-троек и организуют на базе этих данных свои сервисы.

Сообщество Linked Data разработало вагон утилит, помогающих в преобразованию данных саммых различных форматов в RDF, они ведут исследования по преобразованию баз данных в RDF, они создают реализации удобных методов доступа к RDF-данным.

Как видно на объемной диаграмме, Linked Data использует малую часть мощи технологий стека семантик веб. Нет там, к примеру, уровня логики - ребята из Linked Data редко решают задачи автоматической классификации и редко не применяют логический вывод.

Зато они создают свои словари-онтологии, которыми можно и нужно свободно пользоваться. Например,

Если вы описываете свою собаку, можно взять термин для её породы из DBPedia - проект википедии 3.0 с полностью формальным представлением данных. Это позволит тем, кто будет использовать ваши данные, например, вывести всех владельцев Ротвеллеров, которым больше двух лет

Логика

Рассказ об OWL приводит нас к следующему элемента слоеного пирога Semantic Web. Когда мы говорим о представлении знаний и разрабатываем языки представления, надеясь, что из одних фактов мы будем получать другие, нам недостаточно неформальных определений семантики. Логический слой семантического веб служит именно для того, чтобы предоставить однозначную трактовку для языков представления знаний.

Здесь была выбрана так дескрипционная логика - формализм, позволяющий описывать объекты в терминах объектов, свойств объектов и их классов. OWL базируется именно на этом формализме, а уровень Logic представлен программами, позволяющими осуществлять логический вывод одних фактов из других.

Цифровые подписи

Для того, чтобы контролировать целостность передаваемых документов, защищаться от подделки данных, доказывать авторство документа в семантическом вебе существует слой цифровых подписей. Мы не будем про него много говорить, так как здесь пользователи семантик веба удовлетворяются уже существующими алгоритмами и ПО.

Верхние уровни

На уровне Proof должны находиться средства, позволяющие дать объяснения выведенных фактов на RDF. На уровне Trust должны находиться средства, позволяющие для пользователя доверять одним источникам и не верить другим.

В данный момент, к уровню Trust принято относить именованные графы в RDF, позволяющие разделять информацию, представленную в хранилище данных и привязывать к ней метаданные, служащие основой для алгоритмов вычисления степени доверия. Также к этому вровню относят словари для описания источников данных, например словарь VoiD.

Уровень Application принадлежит всем создателям приложений - здесь находятся как вспомогательные приложения для разработчиков (поисковики, RDF-браузеры), так и веб-приложения, рассчитанные на широкую публику (например, BBC Wildlife finder).

Семантический веб с точки зрения программиста

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

Акценты тут смещены в сторону того, что можно делать с данными.

Ссылки для прочтения

На русском:

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