Всоответствии с концепцией Всемирной паутины каждый ресурс должен иметь унифицированный идентификатор ресурса (англ. Uniform Resource Identifier, URI) или интернационализированный идентификатор ресурса (англ. Internationalized Resource Identifier, IRI). В терминах семантической паутины под ресурсом понимается реальная (машина, дом, Вася) или абстрактная (любовь, отношение, тип) сущность, включая информационные объекты (сайт, файл, ящик электронной почты).

Вобщем виде онтология представляет собой набор элементов четырех типов:

понятия (классы) – концептуальные сущности (машина, дом, любовь);

экземпляры (индивиды) – конкретные представители понятий (Вася, www.google.com, 123);

отношения (предикаты) – связи между понятиями или экземплярами (таксономические, родственные, производственные), а также свойства сущности (цвет, длина, вкус);

аксиомы – очевидные утверждения, связывающие понятия, экземпляры и отношения.

В качестве синтаксических конструкций для онтологического описания и обмена знаниями в виде RDF, RDFS и OWL могут использоваться спецификации (нотации):

адаптированные:

XML (англ. eXtensible Markup Language) – расширяемый язык разметки (www.w3.org/TR/rdf-syntax-grammar);

JSON-LD (англ. JavaScript Object Notation for Linked Data) – объектная нотация JavaScript для связывания данных (www.w3.org/TR/rdf-json);

специализированные:

N-Triples – RDF-тройки (www.w3.org/TR/n-triples);

Turtle (англ. Terse RDF Triple Language) – краткий язык RDF-троек (www.w3.org/TR/turtle). Расширение нотации N-Triples;

TriG – TriG (www.w3.org/TR/trig). Расширение нотации Turtle;

N-Quads – RDF-четверки (www.w3.org/TR/n-quads). Дополнение к нотации N-Triples.

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

Декларативная обработка знаний в стиле SQL-запросов к базам данных осуществляется посредством SPARQL.

RDF и OWL – языки представления информации (знаний), которые могут использоваться для описания онтологий как в семантической паутине, так и в различных прикладных информационных системах. RDFS является надстройкой над RDF и определяет его базовые конструкции (ресурс, класс, подкласс, тип данных, домен и т.п.).

Если проводить аналогию с базами данных, то RDFS позволяет задать структуру БД, а RDF наполнить ее содержимым. OWL полностью включает в себя RDF и расширяет его возможности. В прикладных OWL-онтологиях значительная часть описания выполнена с помощью конструкций RDF и RDFS.

В качестве синтаксических конструкций для описания RDF- и OWL-онтологий используются различные способы. Наиболее распространенным является XMLописание в связи с широким распространением и поддержкой XML в большинстве современных языков программирования. В то же время оно является наиболее громоздким и трудночитаемым для человека.

Более компактным и читабельным является формат JSON-LD. JSON стремительно набирает популярность и уже сейчас составляет серьезную конкуренцию XML. Другие способы описаний онтологий (Turtle, N-Triples, N-Quads и TriG), несмотря компактность и читабельность, значительно проигрывают в популярности и поддержке со стороны разработчиков программного обеспечения.

Базовым элементом языка RDF является тройка (триплет, аксиома), которая состоит из субъекта, предиката и объекта.

Предикат (свойство) представляет собой бинарное отношение между субъектом и объектом. В зависимости от контекста одна и та же сущность онтологии может выступать в любом из перечисленных качеств. Т.е. в одной тройке сущность может быть субъектом, в другой – предикатом, а в третьей – объектом.

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

Примеры определения RDF-троек для онтологии с пространством имен learning (нотация

Turtle):

определение класса:

learning:человек

rdf:type

rdfs:Class .

определение подкласса:

learning:студент

rdfs:subClassOf

learning:человек .

определение свойств:

learning:имя

rdf:type

owl:DatatypeProperty .

 

learning:фамилия

rdf:type

owl:DatatypeProperty .

создание экземпляра подкласса (индивида):

learning:студент1

rdf:type

learning:студент .

связывание свойств с индивидами и указание их значений:

learning:студент1 learning:имя "Вася" ; learning:фамилия "Иванов" .

В последнем примере использовано объединение RDF-троек для случая совпадения субъектов.

Несмотря на очевидные аналогии между RDF и объектно-ориентированным программированием (ООП), между ними имеется одно принципиальное различие. В ООП свойство (атрибут) определяется внутри класса и является его неотъемлемой составляющей. В RDF свойства определяются независимо от классов и могут связываться с ними с помощью RDF-троек в произвольном, но не лишенном смысла порядке. Так, одно и то же свойство («Возраст») может быть связано с различными классами или их экземплярами («Человек», «Автомобиль», «Семья»). Более того, экземпляры одного и того же класса могут обладать разными наборами свойств. Это предоставляет более гибкие возможности при определении классов по сравнению с ООП, но при этом может привести к «размыванию» самого понятия «класс».

Примеры онтологий

Учебная и научная деятельность

SPARQL

Вероятно, сами по себе языки представления онтологий не были бы так сильно востребованы, если бы не возникало необходимости автоматически обрабатывать онтологии, наполнять их содержимым и выполнять к ним запросы. Наиболее популярными среди языков запросов к RDF-хранилищам на сегодняшний день являются языки RDQL и SPARQL.

SPARQL (рекурсивный акроним от англ. SPARQL Protocol and RDF Query Language) — язык запросов к данным, представленным по модели RDF, а также протокол для передачи этих запросов и ответов на них. SPARQL является рекомендацией консорциума W3C и одной из технологий семантической паутины. Предоставление SPARQL-точек доступа (SPARQLendpoint) является рекомендованной практикой при публикации данных во всемирной паутине.

Рассмотрим несколько упрощенный синтаксис SPARQL-запроса:

• SELECT

<список_перем>

FROM <URI_онтологии>

• WHERE

{ <список_шаблонов>.

FILTER <фильтр>

}

где: список_перем - список имен переменных; URI_онтологии - URI-ссылка на онтологию; список_шаблонов - список шаблонов; фильтр - ограничения на значения переменных.

Допустим, онтология содержит следующие RDF-триплеты:

(Foo1, category, "Total Members")

(Foo1, rdf:value, 199)

(Foo2, category, "Total Members")

(Foo2, rdf:value, 200)

(Foo2, category, "CATEGORY X")

(bar, category, "CATEGORY X")

(bar, rdf:value, 358)

Проследим за ходом выполнения запроса (имена переменных предваряются знаком " ?")

SELECT ?cat ?val

FROM <URI_онтологии>

WHERE { ?x rdf:value ?val.

?x category ?cat.

FILTER (?val>=200)

}

Семантика запроса: "Выдайте все объекты cat предиката category, субъект которого (x) является также субъектом предиката rdf:value со значением объекта val, не меньшим 200. Вместе со значениями cat выдайте соответствующие значения val ".

Ход выполнения запроса:

На место переменной x могут быть подставлены Foo1, Foo2 и bar (из исходной онтологии), причем Foo2 может быть подставлен дважды, поскольку имеет два свойства category.

При подстановке Foo1 значение переменной val не удовлетворяет ограничению в предложении FILTER SPARQL-запроса. Во всех остальных случаях все условия запроса выполнены.

Результат выполнения запроса - 3 пары значений (cat, val):

[

["Total Members", 200],

["CATEGORY X", 200],

["CATEGORY X", 358]

]

Иерархия онтологии вин (верхний уровень)