Технологии semantic web. Часть ii. Формат представления...
TRANSCRIPT
Технологии
Semantic Web
Алик КирилловичКазанский Федеральный Университет
http://www.alik.su
OWL SPARQLRDF
Ver. 2.0
Содержание курса
I. Введение в семантику и Semantic Web
II. Формат представления данных RDF
III. Формальные онтологии
IV. Язык описания онтологий OWL
V. Язык запросов SPARQL
VI. Semantic Web в дикой природе:популярные ресурсы, онтологии и сервисы
Ресурс
Ресурс — это любая сущность: электронный документ, объект реального мира или даже абстрактное понятие
RDF позволяет• кому угодно• сказать что угодно• о каком угодно ресурсе.
URI
• RDF позволяет кому угодно сказать что угодно о каком угодно ресурсе.
• Для этого должна быть возможность однозначно идентифицировать любой ресурс.
• В WWW уже существует технология глобальной идентификации ресурсов — URI (Uniform Resource Identifier).
• Решение: присвоить каждому ресурсу URI.
Частным случаем URI является всем известный URL (Uniform Resource Locator).Примеры URL: http://habrahabr.ru, mailto:[email protected]
Триплет
Высказывание о ресурсе представляется в виде триплета.
Триплет состоит из трех частей:• субъект — описываемый ресурс,• предикат — свойство ресурса,• объект — значение свойства.
Субъектпредикат
Объект
имяКазань
http://kzn.ru
Триплет
Высказывание о ресурсе представляется в виде триплета.
Триплет состоит из трех частей:• субъект — описываемый ресурс,• предикат — свойство ресурса,• объект — значение свойства.
Субъектпредикат
Объект
основан-в1005-08-27 ^^xsd:date
http://kzn.ru
Триплет
Высказывание о ресурсе представляется в виде триплета.
Триплет состоит из трех частей:• субъект — описываемый ресурс,• предикат — свойство ресурса,• объект — значение свойства.
Субъектпредикат
Объект
находится-в
http://kzn.ru http://tatar.ru
RDF-граф
Триплеты из RDF-документа объединяются в RDF-граф.
имяКазань
основан-в1005-08-27
находится-в
имяТатарстан
находится-в
имяРоссия
kzn.ru
gov.ru
kzn.ru
kzn.ru
tatar.ru
tatar.ru
gov.ru
tatar.ru
RDF-граф
Триплеты из RDF-документа объединяются в RDF-граф.
Казань
основан-в
1005-08-27
находится-в
Татарстан
находится-в
Россия
имя имя имя
gov.rutatar.ru
kzn.ru
Giant Global Graph
Все существующие RDF графы объединяются в единыйGiant Global Graph (GGG)
Giant Global Graph
World Wide Web (WWW) — объединение всех связанных документов.
Giant Global Graph (GGG) — объединение всех связанных данных. Это новый шаг в развитии WWW.
Вывод триплетов
На основе онтологий с помощью логического вывода в RDF-графе вычисляются не существовавшие до этого триплеты
находится-в находится-в
находится-в
содержит содержит
содержит
Состав триплета
Возможные значения элементов триплета:• ресурс, задаваемый по URI,• анонимный ресурс,• литерал в формате Unicode.
илиURI Анонимный
ресурс
или
или
Литерал
Ресурс с URI
Анонимный ресурс
Ресурс с URI
Субъект(описываемый ресурс)
Предикат(свойство ресурса)
Объект(значение свойства)
• URL ресурса (если этот ресурс — электронный документ)
Проблема: Подходит только для электронных документов
Ресурс, задаваемый по URI
В качестве URI может выступать:
«Хабрахабр» — электронный ресурс. В качестве URI используем его URL:
http://habrahabr.ru
Нужен URI для объектов реального мира
• URN — абстрактный URI, идентифицирующий ресурс, но не указывающий, где он расположен
Проблема 1: Не для всех типов ресурсов есть схема кодирования
Проблема 2: Нельзя перейти по ссылке и получить информацию о ресурсе
Ресурс, задаваемый по URI
В качестве URI может выступать:
URI ресурса «Книга „Капитал. Том I“», определённого по коду ISBN:
urn:isbn:9660313837
URI ресурса «Страна Украина», определённого по коду OID:
urn:oid:2.16.804
Нужен URI объекта, который был бы работающей ссылкой
• URL документа с описанием ресурса
Проблема: Как отличить утверждения об объекте от утверждений о сайте?
Ресурс, задаваемый по URI
В качестве URI может выступать:
Ресурс «Эйфелева башня» — объект реального мира, а не электронный документ, поэтому на него нельзя сослаться напрямую.
В качестве URI используем URL документа с его описанием — официальный сайт башни:
http://www.toureiffel.paris
Как отличить:утверждения о ресурсе «Эйфелева башня» от утверждений о ресурсе «Сайт Эйфелевой башни»?
Нужен URI объекта,который был бы работающей и однозначной ссылкой
• URL фрагмента документа с описанием ресурса
Ресурс, задаваемый по URI
В качестве URI может выступать:
http://www.toureiffel.paris — URI сайта Эйфелевой башни
http://www.toureiffel.paris#about — URI самой Эйфелевой башни
• Специальный URI с переадресацией
Ресурс, задаваемый по URI
В качестве URI может выступать:
http://dbpedia.org/resource/Kazan
http://dbpedia.org/page/Kazan http://dbpedia.org/data/Kazan
Переадресация(303 redirect)
Для человека(text/html)
Для машины(application/rdf+xml)
Анонимный ресурс
• Когда ресурс неизвестен
• Как промежуточный узел в N-арных отношениях
Анонимный ресурс (blank node) — ресурс, который не имеет URI
Варианты использования:
Басаев был убит неизвестным агентом ФСБ.
:basayev URI не задан
foaf:workplaceHomepage:killed
www.fsb.ru
Водка содержит 40% спирта.
:содержит
URI не задан
:ингредиент
:количество
40%:водка
:спирт
Литерал
• Не типизированный литерал — просто строка символов;
• Литерал с меткой языка — текст на каком-то языке;
• Типизированный литерал — некое значение (число, дата, булевское
значение и т.д.)
Литерал — строка символов в кодировке Unicode
Виды литералов:
Литерал
Литерал с кодом языка — текст на каком-то языке. Состоит из:
• текста литерала в кодировке Unicode и• метки языка в формате RFC 3066.
kzn.ru
Казань @ru
Казан @tt
Kazan @en
Литералы с одинаковым текстом, но разными кодами языка не равны друг другу.
Rock @en ≠(рок-музыка) Rock @de (юбка)
Булка @ru Булка @bg (невеста)≠
Chat @en (болтовня) Chat @fr (кошка)≠
:имя
:имя
:имя
Литерал
Типизированный литерал имеет некое значение. Состоит из:
• текста литерала в кодировке Unicode и• URI типа данных.
В RDF можно использовать любой URI типа данных, но, встроенную поддержку имеют только типы данных из пространства имен XML Schema (XSD).
:дата-основания
1804-11-17
Kpfu.ru
^^xsd:date
Тип данных соотносит символьное представление литерала с неким значением (числом, датой, булевским значением и т.д.)
Типизированные литералы с разным текстом могут быть равны, если соотносятся с одним и тем же значением.
42 ^^xsd:decimal +42 ^^xsd:decimal= 42.00 ^^xsd:decimal= =
42 +42 42.00≠ ≠ , но:
Класс
• Класс — это такой же RDF-ресурс, задаваемый по URI.
• Классы описываются средствами RDFs и OWL.
• Принадлежность ресурса классу задается встроенным предикатом rdf:type.
• RDF содержит несколько встроенных классов:o rdf:Statement— для создания реификации (утверждений об утверждениях);
o rdf:Bag, rdf:Seq, rdf:Alt, rdf:List — для создания контейнеров и списков;
o и некоторые другие.
RDF-класс — это категория ресурсов (например: Люди, Организации, Документы и т.д.)
Казанский Университет — это организация (RDF-класс foaf:Organization).
rdf:type
Kpfu.ru
foaf:Organization
Реификация
Для создания утверждения об утверждении создается ресурс относящийся к классу rdf:statement и имеющий три свойства:
• rdf:subject — субъект утверждения;
• rdf:predicate — предикат;
• rdf:object — объект.
Реификация — это утверждение об утверждении
Птолемей сказал, что Земля является центром Вселенной.
:сказал
rdf:statement
rdf:type
rdf:subject
rdf:predicate
rdf:object
:вселенная
:земля
:центр
Реификация
Для создания утверждения об утверждении создается ресурс относящийся к классу rdf:statement и имеющий три свойства:
• rdf:subject — субъект утверждения;
• rdf:predicate — предикат;
• rdf:object — объект.
Реификация — это утверждение об утверждении
Коперник сказал, что центром Вселенной является Солнце.
:сказал
rdf:statement
rdf:type
rdf:subject
rdf:predicate
rdf:object
:вселенная
:солнце
:центр
Реификация
Для создания утверждения об утверждении создается ресурс относящийся к классу rdf:statement и имеющий три свойства:
• rdf:subject — субъект утверждения;
• rdf:predicate — предикат;
• rdf:object — объект.
Реификация — это утверждение об утверждении
Мюллер думает, что Штирлиц является гражданином Третьего рейха.
:думает
rdf:statement
rdf:type
rdf:subject
rdf:predicate
rdf:object
:штирлиц
:имеет-гражданство
:третий-рейх:мюллер
Контейнеры и списки
RDF позволяет группировать ресурсы (и литералы) и использовать их в высказываниях как единое целое.
Поддерживаются следующие виды групп:
• контейнеры:• bag — неупорядоченный набор;
• alt — набор возможных альтернатив;
• seq — упорядоченный набор;
• list — коллекции. Коллекции являются закрытыми группами, т.е. они содержат только те элементы, которые были перечислены и больше никаких других по определению.
Apple основал Стив Джобс, Стив Возняк и Рональд Уэйн.
Столицей XXIII Зимних Олимпийских игр будет Анси, Мюнхен или Пхёнчхан.
В случае отставки президента США его замещают по порядку: вице-президент, спикер Палаты представителей, временный председатель Сената, государственный секретарь, …
Согласно канонической христианской традиции,Троица состоит из Бога-отца, Бога-Сына и Святого Духа и ни из кого больше по определению.
Apple основал Стив Джобс, Стив Возняк и Рональд Уэйн.
Неупорядоченный набор
:основан
rdf:bag
rdf:type
rdf:_1
rdf:_2
rdf:_3
http://www.apple.com/pr/bios/jobs.html
http://www.woz.org
http://dbpedia.org/resource/Ronald_G_Wayne
apple.com
Для создания неупорядоченного набора создается ресурс:• относящийся к классу rdf:bag• и имеющий свойства rdf:_1, rdf:_2, …, rdf:_n, указывающие на
соответствующие элементы.
Столицей XXIII Зимних Олимпийских игр будет Анси, Мюнхен или Пхёнчхан.
Набор альтернатив
:host-city
rdf:alt
rdf:type
rdf:_1
rdf:_2
rdf:_3
http://www.impliquons-nous.com/
http://www.muenchen2018.org/
http://www.pyeongchang2018.org/
olympic.org
Для создания набора альтернатив создается ресурс:• относящийся к классу rdf:alt• и имеющий свойства rdf:_1, rdf:_2, …, rdf:_n, указывающие на
соответствующие альтернативы.
2018
Упорядоченный набор
Для создания упорядоченного набора создается ресурс:• относящийся к классу rdf:seq• и имеющий свойства rdf:_1, rdf:_2, …, rdf:_n, указывающие на
соответствующие элементы.
В случае отставки президента США его замещают по порядку: вице-президент, спикер Палаты представителей, временный председатель Сената, государственный секретарь, …, и, наконец, министр нац. безопасности.
:success
rdf:seq
rdf:type
rdf:_1
rdf:_2
rdf:_3
http://www.whitehouse.gov/administration/vice-president-biden
http://speaker.house.gov
http://www.byrd.senate.gov
whitehouse.gov/president
...
rdf:_17
rdf:_4http://www.state.gov
http://www.treasury.gov
Коллекция
Коллекция подобна списку в языке Lisp. Для ее создания создается ресурсотносящийся к классу rdf:list и имеющий два свойства: • rdf:first (голова) — первый элемент коллекции;• rdf:rest (хвост) — ссылка на под-коллекцию, содержащую оставшиеся элементы.
Под-коллекция также содержит голову и хвост. Хвост под-коллекции, содержащей последний элемент указывает на встроенный ресурс rdf:nil.
Согласно канонической христианской традиции, Троица состоит из Бога-отца, Бога-Сына и Святого Духаи ни из кого больше по определению.
:состоит-из
рпц:троица
rdf:rest
rdf:first
rdf:list
rdf:type
рпц:бог-отец
rdf:nil
rdf:listrdf:first
rdf:rest
rdf:typeрпц:дух-святой
rdf:first
rdf:rest
rdf:list
rdf:type
рпц:бог-сын
Способы хранения RDF-графа
• Triplestore + точка доступа
Аналогично реляционной базе данных
• Текстовый файл в специальном формате
Два подхода:
Сериализация RDF
Форматы сериализации:
• RDF/XML — стандартный формат на базе XML.
• N-Triples — простой формат.
• Turtle — удобный формат.
• JSON-LD — формат на базе JSON.
• RDFa и Microdata — формат RDF-разметки HTML-страниц.
Сериализация — это представление RDF в текстовом виде
Сериализация RDF
<rdf:RDFxmlns:foaf='http://xmlns.com/foaf/0.1/'xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#'><foaf:Person rdf:about="http://kiwitobes.com/toby.rdf#ts">
<foaf:name>Toby Segaran</foaf:name><foaf:homepage rdf:resource="http://kiwitobes.com/"/><foaf:nick>kiwitobes</foaf:nick><foaf:mbox rdf:resource="mailto:[email protected]"/><foaf:interest><foaf:Document rdf:about="http://semprog.com">
<rdfs:label>Semantic Programming</rdfs:label></foaf:Document>
</foaf:interest><foaf:knows><foaf:Person rdf:about="http://semprog.com/people/colin">
<foaf:name>Colin Evans</foaf:name><foaf:mbox rdf:resource="mailto:[email protected]"/>
</foaf:Person></foaf:knows><foaf:knows><foaf:Person>
<foaf:name>Jamie Taylor</foaf:name><foaf:mbox rdf:resource="mailto:[email protected]"/>
</foaf:Person></foaf:knows>
</foaf:Person></rdf:RDF><!-- (Из книги Segaran, Evans, Taylor «Programming the Semantic Web») -->
Пример RDF/XML:
Сериализация RDF
<http://kiwitobes.com/toby.rdf#ts> <http://xmlns.com/foaf/0.1/homepage> <http://kiwitobes.com/>.
<http://kiwitobes.com/toby.rdf#ts> <http://xmlns.com/foaf/0.1/nick> "kiwitobes".
<http://kiwitobes.com/toby.rdf#ts> <http://xmlns.com/foaf/0.1/name> "Toby Segaran".
<http://kiwitobes.com/toby.rdf#ts> <http://xmlns.com/foaf/0.1/mbox> <mailto:[email protected]>.
<http://kiwitobes.com/toby.rdf#ts> <http://xmlns.com/foaf/0.1/interest> <http://semprog.com>.
<http://kiwitobes.com/toby.rdf#ts> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>.
<http://kiwitobes.com/toby.rdf#ts> <http://xmlns.com/foaf/0.1/knows> _:jamie .
<http://kiwitobes.com/toby.rdf#ts> <http://xmlns.com/foaf/0.1/knows> <http://semprog.com/people/colin>.
_:jamie <http://xmlns.com/foaf/0.1/name> "Jamie Taylor".
_:jamie <http://xmlns.com/foaf/0.1/mbox> <mailto:[email protected]>.
_:jamie <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>.
<http://semprog.com/people/colin> <http://xmlns.com/foaf/0.1/name> "Colin Evans".
<http://semprog.com/people/colin> <http://xmlns.com/foaf/0.1/mbox> <mailto:[email protected]>.
<http://semprog.com/people/colin> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>.
<http://semprog.com> <http://www.w3.org/2000/01/rdf-schema#label> "Semantic Programming".
<http://semprog.com> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Document>.
# (Из книги Segaran, Evans, Taylor «Programming the Semantic Web»)
Пример N-Triples:
Сериализация RDF
@prefix foaf: <http://xmlns.com/foaf/0.1/>.@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.@prefix semperp: <http://semprog.com/people/>.@prefix tobes: <http://kiwitobes.com/toby.rdf#>.
tobes:ts a foaf:Person;foaf:homepage <http://kiwitobes.com/>;foaf:interest <http://semprog.com>;foaf:knows semperp:colin,
[ a foaf:Person;foaf:mbox <mailto:[email protected]>;foaf:name "Jamie Taylor"];
foaf:mbox <mailto:[email protected]>;foaf:name "Toby Segaran";foaf:nick "kiwitobes".
<http://semprog.com> a foaf:Document;rdfs:label "Semantic Programming".
semperp:colin a foaf:Person;foaf:mbox <mailto:[email protected]>;foaf:name "Colin Evans".
# (Из книги Segaran, Evans, Taylor «Programming the Semantic Web»)
Пример Turtle:
Сериализация RDF
<div xmlns:foaf="http://xmlns.com/foaf/0.1/" about="http://kiwitobes.com/toby.rdf#ts" typeof="foaf:Person"><p>
Name: <span property="foaf:name">Toby Segaran</span></p><p>
Nickname: <span property="foaf:nick">kiwitobes</span></p><p>
Interests:<a rel="foaf:interest" href="http://semprog.org">
<span property="rdfs:label">Semantic Programming</span></a>
</p><p>Homepage: <a rel="foaf:homepage" href="http://kiwkitobes.com/">KiwiTobes</a>
</p><p>Friends:
</p><ul rel="foaf:knows">
<li about="http://semprog.com/people/colin" typeof="foaf:Person" property="foaf:name">Colin Evans
</li><li typeof="foaf:Person">
<p property="foaf:name">Jamie Taylor</p><p>
Email: <a rel="foaf:mbox" href="mailto:[email protected]">[email protected]</a></p>
</li></ul>
</div>
<!-- (Из книги Segaran, Evans, Taylor «Programming the Semantic Web») -->
Пример RDFa (подсвечено):
Сериализация RDF
<div itemscope itemid="http://kiwitobes.com/toby.rdf#ts" itemtype=" http://xmlns.com/foaf/0.1/Person"><p>
Name: <span itemprop="name">Toby Segaran</span></p><p>
Nickname: <span itemprop ="nick">kiwitobes</span></p><p>
Interests:<a itemprop="interest" href="http://semprog.org" itemscope>
<span itemprop="http://www.w3.org/2000/01/rdf-schema#label">Semantic Programming</span></a>
</p><p>Homepage: <a itemprop="homepage" href="http://kiwkitobes.com/">KiwiTobes</a>
</p><p>Friends:
</p><ul>
<li itemscope itemid="http://semprog.com/people/colin" itemtype=" http://xmlns.com/foaf/0.1/Person"><span itemprop="name">Colin Evans</span>
</li><li itemscope itemtype=" http://xmlns.com/foaf/0.1/Person">
<p itemprop="name">Jamie Taylor</p><p>
Email: <a itemprop="mbox" href="mailto:[email protected]">[email protected]</a></p>
</li></ul>
</div>
Пример Microdata (подсвечено):
N-Triples
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин".<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.
N-Triples состоит из простого перечисления триплетов.Триплет содержит субъект, предикат и объект, разделенные пробелом.В конце триплета ставится точка.
N-Triples
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин".<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.
N-Triples состоит из простого перечисления триплетов.Триплет содержит субъект, предикат и объект, разделенные пробелом.В конце триплета ставится точка.
Субъект Предикат Объект
<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.
N-Triples
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин".<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.
URI’и ресурсов записываются в <…>.
N-Triples
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин".<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.
Литералы записываются в кавычках.
N-Triples
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин"@ru.<http://example.com/vasya> <http://schema.org/name> "Vasya Pupkin"@en.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.
Код языка в литерале записывается после @.
N-Triples
Тип данных литерала — после ^^.
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин"@ru.<http://example.com/vasya> <http://schema.org/name> "Vasya Pupkin"@en.<http://example.com/vasya> <http://schema.org/birthDate> "1990-04-30"^^<http://www.w3.org/2001/XMLSchema#date>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.
N-Triples
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин"@ru.<http://example.com/vasya> <http://schema.org/name> "Vasya Pupkin"@en.<http://example.com/vasya> <http://schema.org/birthDate> "1990-04-30"^^<http://www.w3.org/2001/XMLSchema#date>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.<http://example.com/vasya> <http://schema.org/knows> _:person1.
_:person1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>._:person1 <http://schema.org/name> "Марья Ивановна"@ru._:person1 <http://schema.org/name> "Maria Ivanovna"@en.
Для того, чтобы описать анонимный узел, ему дают служебный идентификатор.Идентификатор записывается так: _:идентификатор.
Замечание: идентификатор — это не URI, на него нельзя сослаться из других графов.
Turtle
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин"@ru.<http://example.com/vasya> <http://schema.org/name> "Vasya Pupkin"@en.<http://example.com/vasya> <http://schema.org/birthDate> "1990-04-30"^^<http://www.w3.org/2001/XMLSchema#date>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.<http://example.com/vasya> <http://schema.org/knows> _:person1.
_:person1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>._:person1 <http://schema.org/name> "Марья Ивановна"@ru._:person1 <http://schema.org/name> "Maria Ivanovna"@en.
Turtle является расширением N-Triples.Поэтому, любой N-Triples-документ также является и Turtle-документом.Но Turtle позволяет записывать триплеты в более понятном и компактном виде.
Turtle
@prefix : <http://example.com/>. #Префикс с пустым именем@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.
<http://example.com/vasya> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>.<http://example.com/vasya> <http://schema.org/name> "Вася Пупкин"@ru.<http://example.com/vasya> <http://schema.org/name> "Vasya Pupkin"@en.<http://example.com/vasya> <http://schema.org/birthDate> "1990-04-30"^^<http://www.w3.org/2001/XMLSchema#date>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/email> <mailto:[email protected]>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/petya>.<http://example.com/vasya> <http://schema.org/knows> <http://example.com/masha>.<http://example.com/vasya> <http://schema.org/knows> _:person1.
_:person1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://schema.org/Person>._:person1 <http://schema.org/name> "Марья Ивановна"@ru._:person1 <http://schema.org/name> "Maria Ivanovna"@en.
URI’и с повторяющимися префиксами можно сократить, присвоив префиксу имя.Имя присваивается так: «@prefix имя-префикса: <префикс>.». Одно имя м.б. пустым .Сокращенный URI записывается так: имя-префикса:остаток-uri (без <…>).
Turtle
@prefix : <http://example.com/>. #Префикс с пустым именем@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.
:vasya rdf:type schema:Person.:vasya schema:name "Вася Пупкин"@ru.:vasya schema:name "Vasya Pupkin"@en.:vasya schema:birthDate "1990-04-30"^^xsd:date.:vasya schema:email <mailto:[email protected]>.:vasya schema:email <mailto:[email protected]>.:vasya schema:knows :petya.:vasya schema:knows :masha.:vasya schema:knows _:person1.
_:person1 rdf:type schema:Person._:person1 schema:name "Марья Ивановна"@ru._:person1 schema:name "Maria Ivanovna"@en.
URI’и с повторяющимися префиксами можно сократить, присвоив префиксу имя.Имя присваивается так: «@prefix имя-префикса: <префикс>.». Одно имя м.б. пустым .Сокращенный URI записывается так: имя-префикса:остаток-uri (без <…>).
Turtle
@prefix : <http://example.com/>. #Префикс с пустым именем@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.
:vasya rdf:type schema:Person.:vasya schema:name "Вася Пупкин"@ru.:vasya schema:name "Vasya Pupkin"@en.:vasya schema:birthDate "1990-04-30"^^xsd:date.:vasya schema:email <mailto:[email protected]>.:vasya schema:email <mailto:[email protected]>.:vasya schema:knows :petya.:vasya schema:knows :masha.:vasya schema:knows _:person1.
_:person1 rdf:type schema:Person._:person1 schema:name "Марья Ивановна"@ru._:person1 schema:name "Maria Ivanovna"@en.
URI’и с повторяющимися префиксами можно сократить, присвоив префиксу имя.Имя присваивается так: «@prefix имя-префикса: <префикс>.». Одно имя м.б. пустым .Сокращенный URI записывается так: имя-префикса:остаток-uri (без <…>).
schema:name ↔ http://schema.org/name
Turtle
@prefix : <http://example.com/>.@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.
:vasya rdf:type schema:Person;schema:name "Вася Пупкин"@ru;schema:name "Vasya Pupkin"@en;schema:birthDate "1990-04-30"^^xsd:date;schema:email <mailto:[email protected]>;schema:email <mailto:[email protected]>;schema:knows :petya;schema:knows :masha;schema:knows _:person1.
_:person1 rdf:type schema:Person;schema:name "Марья Ивановна"@ru;schema:name "Maria Ivanovna"@en.
#Отступы в примере добавлены для форматирования, они необязательны
Повторяющиеся субъекты можно опустить.Триплет с опущенным субъектом отделяется от предыдущего символом ;.
Turtle
@prefix : <http://example.com/>.@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.
:vasya rdf:type schema:Person;schema:name "Вася Пупкин"@ru,
"Vasya Pupkin"@en;schema:birthDate "1990-04-30"^^xsd:date;schema:email <mailto:[email protected]>,
<mailto:[email protected]>;schema:knows :petya,
:masha,_:person1.
_:person1 rdf:type schema:Person;schema:name "Марья Ивановна"@ru,
"Maria Ivanovna"@en.
Если повторяется и субъект, и предикат — их также можно опустить.Триплет с опущенным субъектом и предикатом отделяется от предыдущего симв. «,».
Turtle
@prefix : <http://example.com/>.@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.
:vasya rdf:type schema:Person;schema:name "Вася Пупкин"@ru,
"Vasya Pupkin"@en;schema:birthDate "1990-04-30"^^xsd:date;schema:email <mailto:[email protected]>,
<mailto:[email protected]>;schema:knows :petya,
:masha,[rdf:type schema:Person;schema:name "Марья Ивановна"@ru,
"Maria Ivanovna"@en].
Анонимный узел можно записать также в […].Субъект в […] всегда опущен.
Turtle
@prefix : <http://example.com/>.@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.
:vasya a schema:Person;schema:name "Вася Пупкин"@ru,
"Vasya Pupkin"@en;schema:birthDate "1990-04-30"^^xsd:date;schema:email <mailto:[email protected]>,
<mailto:[email protected]>;schema:knows :petya,
:masha,[a schema:Person;schema:name "Марья Ивановна"@ru,
"Maria Ivanovna"@en].
rdf:type можно заменить на a.
Turtle
@prefix : <http://example.com/>.@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.@prefix schema: <http://schema.org/>.@prefix xfn: <http://gmpg.org/xfn/1#>.
:vasya rdf:type schema:Person;schema:name "Вася Пупкин"@ru,
"Vasya Pupkin"@en;schema:birthDate "1990-04-30"^^xsd:date;schema:email <mailto:[email protected]>,
<mailto:[email protected]>;schema:knows :petya,
:masha,[rdf:type schema:Person;schema:name "Марья Ивановна"@ru,
"Maria Ivanovna"@en].
:wolf xfn:crush (:nif-nif :noof-noof :naf-naf). #Волк совсем потерял голову от трех поросят (от всех в целом)
Коллекция записывается в (…).Ее элементы отделяются пробелом.
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
</rdf:RDF>
Корнем RDF/XML документа является элемент rdf:RDF
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
</rdf:RDF>
В нем можно объявить необходимые пространства имен
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description></rdf:Description>
</rdf:RDF>
Описание ресурса задается с помощью элемента rdf:Description
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"></rdf:Description>
</rdf:RDF>
URI ресурса — через атрибут rdf:about
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"><foaf:name>Вася Пупкин</foaf:name><schema:birthDate>1990-09-30</schema:birthDate>
</rdf:Description></rdf:RDF>
Свойства описываются с помощью вложенных элементов
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"><foaf:name>Вася Пупкин</foaf:name><schema:birthDate>1990-09-30</schema:birthDate>
</rdf:Description></rdf:RDF>
Замечание: URI свойства = URI пространства имен + имя свойства
foaf:name ↔ http://xmlns.com/foaf/0.1/name
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"><foaf:name>Вася Пупкин</foaf:name><schema:birthDate>1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"></rdf:Description>
</foaf:knows></rdf:Description>
</rdf:RDF>
Значением свойства может быть другой ресурс
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"><foaf:name>Вася Пупкин</foaf:name><schema:birthDate>1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"><foaf:name>Маша Пупкина</foaf:name>
</rdf:Description></foaf:knows>
</rdf:Description></rdf:RDF>
Он может иметь свои свойства
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"><foaf:name>Вася Пупкин</foaf:name><schema:birthDate>1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"><foaf:name>Маша Пупкина</foaf:name><foaf:interest><rdf:Description rdf:about="http://dbpedia.org/resource/Pop_music"></rdf:Description>
</foaf:interest></rdf:Description>
</foaf:knows></rdf:Description>
</rdf:RDF>
…значением которых тоже могут быть ресурсы (и так до бесконечности)
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"><foaf:name xml:lang="ru">Вася Пупкин</foaf:name><schema:birthDate>1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"><foaf:name xml:lang="ru">Маша Пупкина</foaf:name><foaf:interest><rdf:Description rdf:about="http://dbpedia.org/resource/Pop_music"></rdf:Description>
</foaf:interest></rdf:Description>
</foaf:knows></rdf:Description>
</rdf:RDF>
Код языка в литерале задается с помощью атрибута xml:lang
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"xml:lang="ru">
<foaf:name>Вася Пупкин</foaf:name><schema:birthDate>1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"><foaf:name>Маша Пупкина</foaf:name><foaf:interest><rdf:Description rdf:about="http://dbpedia.org/resource/Pop_music"></rdf:Description>
</foaf:interest></rdf:Description>
</foaf:knows></rdf:Description>
</rdf:RDF>
Код языка можно задать для родительского элемента,и он будет действовать для всех вложенных элементов(пока не будет переопределен)
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"xml:lang="ru">
<foaf:name>Вася Пупкин</foaf:name><schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"><foaf:name>Маша Пупкина</foaf:name><foaf:interest><rdf:Description rdf:about="http://dbpedia.org/resource/Pop_music"></rdf:Description>
</foaf:interest></rdf:Description>
</foaf:knows></rdf:Description>
</rdf:RDF>
Тип данных в литерале задается с помощью атрибута rdf:datatype
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"xml:lang="ru">
<foaf:name>Вася Пупкин</foaf:name><schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"><foaf:name>Маша Пупкина</foaf:name><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest>
</rdf:Description></foaf:knows>
</rdf:Description></rdf:RDF>
Если значением свойства является ресурс, у которого нет своих свойств,то URI этого ресурса можно указать не через вложенный элемент rdf:Description,а через атрибут rdf:resource
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"
foaf:name="Маша Пупкина"><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest>
</rdf:Description></foaf:knows>
</rdf:Description></rdf:RDF>
Если значением свойства является строковый литерал,то его можно задать не через вложенный элемент, а через одноименный атрибут
Замечание: нельзя задать свой код языка (он может только наследоваться), свойства не могут повторяться
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"></rdf:type><schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"
foaf:name="Маша Пупкина"><rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"></rdf:type><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest>
</rdf:Description></foaf:knows>
</rdf:Description></rdf:RDF>
Тип ресурса указывается при помощи свойства rdf:type
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<rdf:Description rdf:about="http://example.com/vasya"rdf:type="http://xmlns.com/foaf/0.1/Person"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><rdf:Description rdf:about="http://example.com/masha"
rdf:type="http://xmlns.com/foaf/0.1/Person"foaf:name="Маша Пупкина">
<foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest></rdf:Description>
</foaf:knows></rdf:Description>
</rdf:RDF>
Тип можно задать также через атрибут rdf:type
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<foaf:Person rdf:about="http://example.com/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><foaf:Person rdf:about="http://example.com/masha"
foaf:name="Маша Пупкина"><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest>
</foaf:Person></foaf:knows>
</foaf:Person></rdf:RDF>
Тег rdf:Description можно заменить на тег,соответствующий типу описываемого ресурса
Замечание: тип ресурса записывается с использованием префикса пространства имен
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<foaf:Person rdf:about="http://example.com/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><foaf:Person rdf:about="http://example.com/masha"
foaf:name="Маша Пупкина"><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest><foaf:knows><rdf:Description><rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"></rdf:type><foaf:name>Равшан</foaf:name>
</rdf:Description><foaf:knows>
</foaf:Person></foaf:knows>
</foaf:Person></rdf:RDF>
Анонимный ресурс — это просто ресурс, у которого нет URI
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<foaf:Person rdf:about="http://example.com/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><foaf:Person rdf:about="http://example.com/masha"
foaf:name="Маша Пупкина"><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest><foaf:knows rdf:parseType="Resource"><rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"></rdf:type><foaf:name>Равшан</foaf:name>
<foaf:knows></foaf:Person>
</foaf:knows></foaf:Person>
</rdf:RDF>
Если значением свойства является анонимный ресурс,то соответствующий ему элемент rdf:Description можно опустить.Для этого в элемент со свойством надо добавить атрибут rdf:parseType="Resource"
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<foaf:Person rdf:about="http://example.com/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><foaf:Person rdf:about="http://example.com/masha"
foaf:name="Маша Пупкина"><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest><foaf:knows rdf:type="http://xmlns.com/foaf/0.1/Person" foaf:name="Равшан" />
</foaf:Person></foaf:knows>
</foaf:Person></rdf:RDF>
А если свойствами анонимного ресурса являются только литералы и rdf:type,то их можно записать не в виде вложенных элементов, а в виде атрибутов
Замечание: свойства с одним и тем же именем не могут повторяться (не может быть два rdf:type или foaf:name)
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/">
<foaf:Person rdf:about="http://example.com/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><foaf:Person rdf:about="http://example.com/masha"
foaf:name="Маша Пупкина"><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest><foaf:knows rdf:nodeID="ravshan" />
</foaf:Person></foaf:knows><foaf:knows rdf:nodeID="ravshan" />
</foaf:Person><foaf:Person rdf:nodeID="ravshan" foaf:name = "Равшан" />
</rdf:RDF>
Иногда на анонимный ресурс требуется сослаться несколько раз.Для этого через атрибут rdf:nodeID ему надо присвоить спец. идентификатор,на которой через этот же атрибут можно ссылаться .
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"xmlns:schema="http://schema.org/"xml:base="http://example.com">
<foaf:Person rdf:about="/vasya"xml:lang="ru"foaf:name="Вася Пупкин">
<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-09-30</schema:birthDate><foaf:knows><foaf:Person rdf:about="/masha"
foaf:name="Маша Пупкина"><foaf:interest rdf:resource="http://dbpedia.org/resource/Pop_music"></foaf:interest><foaf:knows rdf:nodeID="ravshan" />
</foaf:Person></foaf:knows><foaf:knows rdf:nodeID="ravshan" />
</foaf:Person><foaf:Person rdf:nodeID="ravshan" foaf:name = "Равшан" />
</rdf:RDF>
Абсолютные URI’и можно преобразовать в относительные.Для этого надо объявить базовый URI с помощью атрибута xml:base.
Пропустить эту нудятину про RDF/XML →
RDF/XML
<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xfn="http://gmpg.org/xfn/1#"xmlns:base="http://example.com">
<!-- Волк совсем потерял голову от трех поросят /--><rdf:Description rdf:about="/wolf"><xfn:crush rdf:parseType="Collection"><rdf:Description rdf:about="/nif-nif" /><rdf:Description rdf:about="/noof-noof" /><rdf:Description rdf:about="/naf-naf" />
</xfn:crush></rdf:Description>
</rdf:RDF>
Значением свойства может быть RDF-коллекция.Для этого надо установить атрибут rdf:parseType="Collection", и добавить члены коллекции в виде вложенных элементов.
Пропустить эту нудятину про RDF/XML →
Microdata
<div><h1>ООО «Хабр»</h1><img src="http://habrahabr.ru/images/1432119938/logo.svg"><span>105082, Москва, Спартаковский переулок, д. 2, стр. 1, секция 3
</span><span>+7 499 653-59-61</span><time datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a href="mailto:[email protected]">Напишете нам!</span>
</div>
Основная идея Microdata — на web-странице уже есть вся необходимая информация,надо только разметить ее в понятном машине виде.
Microdata
<div itemscope><h1>ООО «Хабр»</h1><img src="http://habrahabr.ru/images/1432119938/logo.svg"><span>105082, Москва, Спартаковский переулок, д. 2, стр. 1, секция 3
</span><span>+7 499 653-59-61</span><time datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a href="mailto:[email protected]">Напишете нам!</span>
</div>
Укажем, что данный HTML-элемент описывает некоторый объектс помощью атрибута itemscope.
Microdata
<div itemscope itemtype="http://schema.org/Organization"><h1>ООО «Хабр»</h1><img src="http://habrahabr.ru/images/1432119938/logo.svg"><span>105082, Москва, Спартаковский переулок, д. 2, стр. 1, секция 3
</span><span>+7 499 653-59-61</span><time datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a href="mailto:[email protected]">Напишете нам!</span>
</div>
Укажем тип этого объекта с помощью атрибута itemtype.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1>ООО «Хабр»</h1><img src="http://habrahabr.ru/images/1432119938/logo.svg"><span>105082, Москва, Спартаковский переулок, д. 2, стр. 1, секция 3
</span><span>+7 499 653-59-61</span><time datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a href="mailto:[email protected]">Напишете нам!</span>
</div>
Укажем его URI с помощью атрибута itemid.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="http://schema.org/name">ООО «Хабр»</h1><img itemprop="http://schema.org/logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="http://schema.org/address">105082, Москва, Спартаковский переулок, д. 2, стр. 1, секция 3
</span><span itemprop="http://schema.org/telephone">+7 499 653-59-61</span><time itemprop="http://schema.org/openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="http://schema.org/email" href="mailto:[email protected]">Напишете нам!</span>
</div>
Разметим его свойства с помощью атрибута itemprop.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><img itemprop="logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address">105082, Москва, Спартаковский переулок, д. 2, стр. 1, секция 3
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
URI свойств можно сократить.(См. подробности в: http://www.w3.org/TR/microdata-rdf/#property-uri-generation).
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><img itemprop="logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">105082, Москва, Спартаковский переулок, д. 2, стр. 1, секция 3
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
Значением свойства тоже может быть объект.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><img itemprop="logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="postalCode">105082</span>,<span itemprop="addressLocality">Москва</span>,<span itemprop="streetAddress">Спартаковский переулок, д. 2, стр. 1, секция 3</span>
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
И этот объект тоже имеет свои свойства.Чтобы отделить одни свойства от других, обернем их в HTML-элементы <span>.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><img itemprop="logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="postalCode">105082</span>,<span itemprop="addressLocality">Москва</span>,<span itemprop="streetAddress">Спартаковский переулок, д. 2, стр. 1, секция 3</span>
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
Обычно значение свойства — содержимое соответствующего HTML-элемента.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><img itemprop="logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="postalCode">105082</span>,<span itemprop="addressLocality">Москва</span>,<span itemprop="streetAddress">Спартаковский переулок, д. 2, стр. 1, секция 3</span>
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
Но у элементов <a> и <link> значение свойства берется из атрибута href.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><img itemprop="logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="postalCode">105082</span>,<span itemprop="addressLocality">Москва</span>,<span itemprop="streetAddress">Спартаковский переулок, д. 2, стр. 1, секция 3</span>
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
У элементов <img>, <video> и <audio> — из атрибута src.
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><img itemprop="logo" src="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="postalCode">105082</span>,<span itemprop="addressLocality">Москва</span>,<span itemprop="streetAddress">Спартаковский переулок, д. 2, стр. 1, секция 3</span>
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
У элемента <time> — из атрибута datetime.(Атрибут содержит дату в машиночитаемом формате ISO 8601).
Microdata
<div itemscope itemtype="http://schema.org/Organization" itemid="http://tmtm.ru/"><h1 itemprop="name">ООО «Хабр»</h1><meta itemprop="logo" content="http://habrahabr.ru/images/1432119938/logo.svg"><span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="postalCode">105082</span>,<span itemprop="addressLocality">Москва</span>,<span itemprop="streetAddress">Спартаковский переулок, д. 2, стр. 1, секция 3</span>
</span><span itemprop="telephone">+7 499 653-59-61</span><time itemprop="openingHours" datetime="Mo-Su 6:00-23:00">Работаем круглосуточно с 6:00 до 23:00
</time><a itemprop="email" href="mailto:[email protected]">Напишете нам!</span>
</div>
У элемента <meta> — из атрибута content.
Резюме
• RDF позволяет кому угодно сказать что угодно о каком угодно ресурсе — объекте реального мира, электронном документе или абстрактном понятии.
• Все ресурсы идентифицируются с помощью URI.
• Высказывания о ресурсах представляются в виде триплетов, состоящих из субъекта (описываемого ресурса), предиката (его свойства) и объекта (значения свойства).
• Триплеты объединяются в RDF-граф.
• Множество всех RDF-графов в сети представляет собой единый глобальный граф (GGG). Это развитие паутины документов (WWW).
• В качестве URI ресурса может выступать URL онтологии с его описанием, с помощью которой в RDF-графе могут выводиться новые данные.
• Абстрактный RDF-граф можно представать в текстовом виде в одном из форматов сериализации, например RDF/XML, Turtle или Microdata.