Inheritance 如何在rdf中表示RDB关系

Inheritance 如何在rdf中表示RDB关系,inheritance,associations,rdf,aggregation,rdbms,Inheritance,Associations,Rdf,Aggregation,Rdbms,目前我正在将关系数据库转换为RDF模型。 在关系数据库中,有三种关系: 1个继承,2个关联,3个聚合 为了映射继承关系,我添加了一个RDF三元组 { Child_Table <rdfs:subClassOf> Parent_Table } 是这样写的吗? 我想将关联和聚合关系映射到RDF模型。我应该使用哪些谓词属性来映射表之间的关联和聚合关系?这就是我想要映射的模式 假设TableA和TableB之间存在聚合关系,有没有任何方法可以用RDF来表示这种关系 { tableA <

目前我正在将关系数据库转换为RDF模型。 在关系数据库中,有三种关系: 1个继承,2个关联,3个聚合

为了映射继承关系,我添加了一个RDF三元组

{ Child_Table <rdfs:subClassOf> Parent_Table }
是这样写的吗? 我想将关联和聚合关系映射到RDF模型。我应该使用哪些谓词属性来映射表之间的关联和聚合关系?这就是我想要映射的模式

假设TableA和TableB之间存在聚合关系,有没有任何方法可以用RDF来表示这种关系

{ tableA <predicate> tableB}
请打开这个noobie.:'

简单数据映射 在RDF中,有许多不同的方法来表示关系数据库中的数据,最好的方法在很大程度上取决于您手头的特定数据。您提到您有继承、关联和聚合关系,但如果没有数据示例,就很难知道最好的方法是什么。不过,您可能对一些资源感兴趣,例如:

遗产 继承、关联和聚合的关系通常在类的上下文中讨论,这在关系数据库的上下文中可能有意义,也可能没有意义。如果不知道您的信息在数据库中是如何表示的,很难说

ChildTable rdfs:subClassOf ParentTable
有没有意义。在我看来,如果你有一个动物表,每一行代表一个动物的个体实例,然后还有一个哺乳动物表,每一行代表一个哺乳动物的个体实例,那么每个哺乳动物实例也会有一个对应动物行的键。例如,您可能有以下表格:

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
当然,您需要确保具有AnimalId 72的哺乳动物与具有AnimalId 72的动物是相同的资源,但是如果您已经实现了关系数据的直接映射,这应该不是问题

协会 在纯RDF中,除了继承,您不能做更多的事情。当然,您可以声明属性的域和范围,并推断一些类型信息,但在确保每只动物至少有一种喜爱的食物方面,您确实做不了多少事情。至少,您应该用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模拟也可以工作。

简单数据映射 在RDF中,有许多不同的方法来表示关系数据库中的数据,最好的方法在很大程度上取决于您手头的特定数据。您提到您有继承、关联和聚合关系,但如果没有数据示例,就很难知道最好的方法是什么。不过,您可能对一些资源感兴趣,例如:

遗产 继承、关联和聚合的关系通常在类的上下文中讨论,这在关系数据库的上下文中可能有意义,也可能没有意义。如果不知道您的信息在数据库中是如何表示的,很难说

ChildTable rdfs:subClassOf ParentTable
有没有意义。在我看来,如果你有一个动物表,每一行代表一个动物的个体实例,然后还有一个哺乳动物表,每一行代表一个哺乳动物的个体实例,那么每个哺乳动物实例也会有一个对应动物行的键。例如,您可能有以下表格:

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
你需要把它放在一边 当然,有AnimalId 72的哺乳动物与有AnimalId 72的动物是同一资源,但是如果您已经实现了关系数据的直接映射,这应该不是问题

协会 在纯RDF中,除了继承,您不能做更多的事情。当然,您可以声明属性的域和范围,并推断一些类型信息,但在确保每只动物至少有一种喜爱的食物方面,您确实做不了多少事情。至少,您应该用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模拟也可以工作。

我已经实现了[link]。但是没有关于映射RDB关系的参考。它还应该独立于数据,因为这种映射应该适用于任何SQL模式。RDFS中是否有与关联和聚合关系相关的谓词?@SiddharthSingh啊,好的。起初,我认为这只是一个关于如何在RDF中表示关系数据的问题,但实际上您在问如何记录一些更高级别的连接。我更新了一些关于继承、关联和聚合的讨论。仅在RDFS中,您可以做的事情就这么多,但是如果您也可以选择使用OWL,您可能可以捕获您感兴趣的所有关系。@JoshuaTaylor,聚合和关联在大多数常用的语用学中不是有什么不同吗:如果我们想,比如说,删除某个被拒绝的东西,我们还应该删除聚合信息,而简单的关联信息可以保持独立。也就是说,如果我们删除大学,作为大学一部分的教员也应该删除,但不应该删除与之相关的教授。我认为这对于建模来说已经足够重要了,而且在RDB和RDF中都有正确建模的方法。@RomanSusi我不太明白你在这个例子中的意思。在描述一所大学时,你可能会有:unixa:University;:hasFacultyMember:profY,:profZ。如果您去掉了所有涉及:uniX的三元组,这通常是在RDF中删除某个内容的方法,那么您仍然会得到:profY a:ProfessorprofZ a:Professor.@RomanSusi要了解本体语言中的部分关系,请参阅W3C编者笔记,。我已经实现了[link]。但是没有关于映射RDB关系的参考。它还应该独立于数据,因为这种映射应该适用于任何SQL模式。RDFS中是否有与关联和聚合关系相关的谓词?@SiddharthSingh啊,好的。起初,我认为这只是一个关于如何在RDF中表示关系数据的问题,但实际上您在问如何记录一些更高级别的连接。我更新了一些关于继承、关联和聚合的讨论。仅在RDFS中,您可以做的事情就这么多,但是如果您也可以选择使用OWL,您可能可以捕获您感兴趣的所有关系。@JoshuaTaylor,聚合和关联在大多数常用的语用学中不是有什么不同吗:如果我们想,比如说,删除某个被拒绝的东西,我们还应该删除聚合信息,而简单的关联信息可以保持独立。也就是说,如果我们删除大学,作为大学一部分的教员也应该删除,但不应该删除与之相关的教授。我认为这对于建模来说已经足够重要了,而且在RDB和RDF中都有正确建模的方法。@RomanSusi我不太明白你在这个例子中的意思。在描述一所大学时,你可能会有:unixa:University;:hasFacultyMember:profY,:profZ。如果您去掉了所有涉及:uniX的三元组,这通常是在RDF中删除某个内容的方法,那么仍然会有:profY a
:教授:profZ a:Professor.@RomanSusi要想更好地阅读本体语言中的部分关系,请参阅W3C编者笔记。