doc/LD2/base1.md
2026-01-20 17:21:44 +03:00

9.3 KiB
Raw Blame History

LD2

Linked Data 2 (LD2) - это Linked Data с дополнениями \ ограничениями \ особенностями. Цель такая же - формализм знаний.

Введение

Классический web (классический пример wikipedia) построен на гиперссылках (hyperlink).
Hyperlink в общем случае выполняет переход по указанному адресу, который может быть файлом, UNC-адресом или URL-адресом.
Элемент (обычно подсвечиваемое слово \ фраза) имеет свойство hyperlink со значением - адресом перехода:

:элемент :имеетHyperlink :значениеHyperlink(URL) .

Web 3.0 из всемирной паутины делает семантическую паутину Semantic Web на базе Linked Data.

Triple RDF example

Триплет - как атом знания - обычно вводится так: :Миша :Ест :Рыбу .
Всегда на первом месте Субъект - в данном триплете - Миша, далее к нему привязанный (всегда к субъекту) Предикат (отношение) - Ест и Объект Рыбу.
Как в простом предложении: Подлежащее - Сказуемое - Дополнение.
См. позиционное правило SVO subjectverbobject. Понятие Объект - общее, а в RDF оно узкое, поэтому будем в понимании RDF Объект называть "Объектт", если рядом нет уточнения с "-" или в скобках. Вместо объекта \ дополнения может быть не объект (что-то с id, именованное, классифицированное и т.п.), а Литерал - безымянная константа (nameless constant).
Еще пример на sky.pro/wiki/javascript

flowchart LR
        obj1_Name[/obj1 Имя = Миша: Подлежащее-субъект/]--> link12{{связь типа Ест: глагол_предикат}} --> obj2_Name[/obj2 Имя = Рыбу: Дополнение-объект/]                

Рис. 1 mermaid.live

Это просто и понятно. Однако это иллюзия, точнее сильное упрощение. В реальности "под катопом" - самое главное, не попавшее в пример, и "триплет становится квинтет":

flowchart TB
   subgraph baseTriple[triple = Миша Ест Рыбу]
        direction LR
        obj1_Id --> link12{{связь типа Ест}} --> obj2_Id
    end
       obj1_Name[/obj1 Имя = Миша/] --> obj1_Id[/obj1 Id = 123/] 
       obj1_Other[/obj1 = ALL properties: ФИО, ИНН/] --> obj1_Id 
       obj2_Id[/obj2 Id = 345/] --> obj2_Name[/obj2 Имя = Рыбу/]                
       obj2_Id --> obj2_Other[/obj2 = ALL properties: вид, размер/]  

Рис. 2 mermaid.live

В данном случае мы хотим сказать, что конкретный Миша (экземпляр) ест конкретную рыбу (экземпляр).
Экземпляр - это "Собственное существительное" - отдельный единичный предмет (мир вещей).
Образ - это "Нарицательное существительное" - обобщённые названия однородных предметов и явлений (мир идей). С ними похожая ситуация, но немного иная.

В отличие от "тривиальной связи" hyperlink (Web, mediaWiki и т.п.) в семантическом триплете (web 3.0 \ semantic Web, semantic mediaWiki и т.п.) имеем именнованные два объекта связи и типизированную связь "связан связью такого-то типа".

1 Привило идентификации Предиката

Проблема идентификации Предиката

В RDF (Resource Description Framework) предикат не может быть напрямую связан с rdf:type, потому что предикаты сами по себе не являются ресурсами в классическом понимании RDF-модели. Предикаты определяют тип связи между субъектом и объектом, а не являются самостоятельными сущностями, к которым можно применять rdf:type в рамках базовой модели RDF. Предикаты не могут иметь id и т.п.
Что делать? Можно использовать обходные пути, например, :Link a rdf:Property . или типы отношений из RDF Schema или OWL к предикату, которые определяют его свойства. Есть Реификация и RDF Star. О

Правило

днако в LD2 будем использовать правило "два объекта соединяются только одним предикатом одного типа" (в каждую сторону) и id предиката вычисляется автоматически:

id1-predicateName-id2

Таким образом предикат становится объектом, к которому можно применять любые другие отношения, добавлять свойства и методы (как к object).
Таким образом, без явного указания к :id1 :predicateName :id2 .

:id1-predicateName-id2 rdf:type :Link .
:id1-predicateName-id2 :isSource :id1 .
:id1-predicateName-id2 :isTarget :id2 . 

получит те же знания.
Что делать, если два объекта имеют более чем две связи одного типа? Например, две системы взаимодействуют по протоколу jdbc и DirectLink?
В этом случае объект - связь :id1-predicateName-id2 разбивается на компоненты и каждому компоненту дается соответсвующее свойство.
:id1-predicateName-id2 - это группа компонент, в которой выделяется первый компонент со свойством protocol = jdbc и второй со свойством protocol = DirectLink.
Задание id дочерним компонентам также должно быть задано правилом, например, через разделитель ".".

also