【问题标题】:how to represent RDB Relationships in rdf如何在 rdf 中表示 RDB 关系
【发布时间】:2013-05-27 05:22:15
【问题描述】:

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

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

{ Child_Table <rdfs:subClassOf> Parent_Table }

是这样写的吗? 我想将关联和聚合关系映射到 RDF 模型。我应该使用哪些谓词(属性)来映射表之间的关联和聚合关系?它是我要映射的架构。

假设 TableA 和 TableB 之间存在聚合关系,有没有什么方法可以在 RDF 中表示这种关系,总和之类的。

{ tableA <predicate> tableB}

请赐教这个菜鸟。 :'(

【问题讨论】:

    标签: inheritance associations rdf aggregation rdbms


    【解决方案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
    

    当然,您需要确保 MammalAnimalId 72AnimalAnimalId 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 模拟也可以正常工作。

    【讨论】:

    • 我已经实现了 [link]w3.org/TR/rdb-direct-mapping 。但是没有关于映射 RDB 关系的参考。它也应该独立于数据,因为这个映射应该适用于任何 SQL 模式。 RDFS中是否有谓词,涉及到关联和聚合关系?
    • @SiddharthSingh 啊,好的。起初我以为这只是一个关于如何在 RDF 中表示关系数据的问题,但您实际上是在问如何记录一些更高级别的连接。我更新了一些关于继承、关联和聚合的讨论。仅在 RDF(S) 中可以做的事情就这么多了,但如果您还可以选择使用 OWL,您可能可以捕获所有您感兴趣的关系。
    • @JoshuaTaylor ,在大多数常用语用学中聚合和关联没有不同:如果我们想删除聚合的东西,我们也应该删除聚合信息,而简单的关联信息可以留(它是“独立的”)。也就是说,如果我们删除大学,那么作为大学一部分的教师也应该被删除,而不是相关联的教授。我认为这对于建模来说已经足够重要了,并且有一些方法可以在 RDB 和 RDF 中正确地建模。
    • @RomanSusi 在这种情况下,我并不完全符合您的要求。在描述一所大学时,您可能会拥有:uniX a :University ; :hasFacultyMember :profY, :profZ . 如果您去掉所有涉及:uniX 的三元组(这通常是在RDF 中“删除”事物的方式),您仍然会拥有:profY a :Professor . :profZ a :Professor
    • @RomanSusi 要详细了解本体语言中的 partOf 关系,请查看 W3C 编者注,Simple part-whole relations in OWL Ontologies
    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多