Как представлять отношения RDB в rdf

В настоящее время я работаю над преобразованием реляционной базы данных в модель RDF. В реляционной базе данных существуют три вида отношений: 1) наследование, 2) ассоциация, 3) агрегация.

Для отображения отношений наследования я добавил тройку RDF,

{ Child_Table <rdfs:subClassOf> Parent_Table }

Это так написано? Я хочу сопоставить отношения ассоциации и агрегации с моделью RDF. Какие предикаты (свойства) следует использовать для сопоставления взаимосвязей и агрегации между таблицами? Это схема, которую я хочу отобразить.

Допустим, между таблицами A и TableB есть взаимосвязь агрегации, есть ли способ представить это отношение в RDF, что-то вроде этого.

{ tableA <predicate> tableB}

Пожалуйста, просветите этого noobie.:'(

1 ответ

Простое сопоставление данных

Существует много разных способов представления данных в реляционных базах данных в RDF, и наилучший способ во многом зависит от конкретных данных, которые у вас под рукой. Вы упоминаете, что у вас есть отношения наследования, ассоциации и агрегации, но без примеров ваших данных трудно понять, каким будет наилучший подход. Вы можете быть заинтересованы в некоторых ресурсах, таких как:

наследование

Отношения наследования, ассоциации и агрегации обычно обсуждаются в контексте классов, которые могут иметь или не иметь смысла в контексте реляционных баз данных. Не зная, как ваша информация представлена ​​в базе данных, трудно сказать,

ChildTable rdfs:subClassOf ParentTable

имеет смысл или нет. Мне кажется, что если у вас была, например, таблица Animal, каждая строка которой представляет отдельный экземпляр животного, а затем также была таблица Mammal, каждая строка которой представляла отдельный экземпляр млекопитающего, то каждый Экземпляр млекопитающего также будет иметь ключ к соответствующему ряду животных. Например, у вас могут быть следующие таблицы:

Animal 
AnimalId, LatinName, CasualName, FavoriteFood
71, Heloderma suspectum, "Jim the Gila Monster", "Eggs"
72, Canis lupus familiaris, "Semour", "Pizza"
73, Canis lupus familiaris, "Spot", "Kibble"
74, Felis catus, "Fluffy", "Fish"
75, Homo sapiens, "Fry", "Bachelor Chow"

Mammal
AnimalId, isBipedal
72, false
73, false
74, false
75, false

Чтобы представить наследство между млекопитающими и животными, можно сказать, что

Mammal rdfs:subClassOf Animal

Вы должны были бы, конечно, убедиться, что Mammal с AnimalId 72 тот же ресурс, что и Animal с AnimalId 72, но если вы уже реализовали прямое отображение реляционных данных, это не должно быть проблемой.

ассоциация

В чистом RDF(S) вы не можете сделать гораздо больше, чем наследовать. Конечно, вы можете объявить домен и диапазон свойств и вывести некоторую информацию о типе, но вы действительно не можете сделать многое, чтобы гарантировать, что, например, каждый Animal есть хотя бы одна любимая еда. По крайней мере, вы должны аннотировать свои свойства и классы с помощью rdfs:comments, чтобы указать, что данные должны включать. Например:

Animal rdfs:comment "Each animal instance MUST have:
                       exactly one ID (hasID);
                       exactly one latin name (hasLatinName); and
                       exactly one favorite food (hasFavoriteFood).
                     Each animal instance MAY have:
                       up to one casual name (hasCasualName)." . 

Однако если вы можете использовать OWL, вы можете выразить эти типы отношений, используя классы ограничений и аксиомы подклассов. Например, следующие аксиомы OWL представляют ограничения, выраженные в предыдущем комментарии:

Animal SubClassOf (hasId exactly 1 xsd:integer) 
Animal SubClassOf (hasLatinName exactly 1 xsd:string)
Animal SubClassOf (hasFavoriteFood exactly 1 xsd:string)
Animal SubClassOf (hasCasualName max 1 xsd:string)

агрегирование

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

Однако следует помнить, что классы RDF и OWL более правильно рассматриваются как наборы, а не объектно-ориентированные классы программирования. Приятной особенностью этого является то, что, в отличие от многих популярных языков программирования, классы не ограничиваются наличием одного родительского класса. Это означает, что в некоторых случаях в объектно-ориентированном программировании, где необходима агрегация, аналог множественного наследования RDF работает так же хорошо.

Другие вопросы по тегам