首页> 中国专利> 同时实现关系持久化和语义网风格访问的系统及方法

同时实现关系持久化和语义网风格访问的系统及方法

摘要

本申请提出一种系统和方法,使得对于对象同时实现关系持久化和语义网风格访问,该系统包括:对象-关系(OR)映射生成器,用于从输入的面向对象(OO)模型生成OR映射和关系模式;模型转换器,用于从所述输入的OO模型生成本体网语言(OWL)本体;以及语义映射生成器,用于从OR映射、关系模式和OWL本体生成语义映射,以便用于语义网风格访问。本发明提供了一种工具,通过输入OO模型,不仅接收到用于关系持久化的关系模式,而且接收到用于语义网风格访问的OWL本体。

著录项

  • 公开/公告号CN101593103A

    专利类型发明专利

  • 公开/公告日2009-12-02

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN200810108780.6

  • 申请日2008-05-29

  • 分类号G06F9/44;

  • 代理机构北京市柳沈律师事务所;

  • 代理人周少杰

  • 地址 美国纽约阿芒克

  • 入库时间 2023-12-17 23:14:27

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-07-20

    未缴年费专利权终止 IPC(主分类):G06F9/44 授权公告日:20130417 终止日期:20150529 申请日:20080529

    专利权的终止

  • 2013-04-17

    授权

    授权

  • 2010-01-27

    实质审查的生效

    实质审查的生效

  • 2009-12-02

    公开

    公开

说明书

技术领域

本申请涉及面向对象(Object Oriented,OO)模型到语义网的数据转换, 特别涉及一种系统和方法,使得对于对象同时实现关系持久化(persistence) 和语义网风格访问。

背景技术

面向对象编程占据目前软件开发的主导地位。从用于应用的OO模型的 设计开始,开发者还期待处理有关模型的数据和模型的语义(semantics)的问 题。对象,作为模型的数据,通过OR(对象-关系)映射系统(ORM System: Hibernate,参见http://www.hibernate.org/hib_docs/v3/reference/en/html/),可存 储在关系数据库中,该OR映射系统首先生成用于OO模型的关系数据库模 式(简称关系模式),然后将对象转换为关系数据。本体(Ontology),作为候选 者,可以用于表达模型的语义,并且语义网(Semantic Web,一种构建基于语 义的系统的新兴技术)推荐本体网语言(Ontology Web Language,OWL)用于知 识表示和推理。结果,引出了模型转换,这由OO模型(例如,ER(实体关系)、 RDB(关系数据库)、XSD(XML Schema Definition,XML(可扩展标记语言)数 据库模式定义)和UML(统一建模语言)模型)和OWL本体之间的自组织转换 (ad-hoc transformation)引擎提供(EODM:EMF Ontology Definition Metamodel, 参见http://www.eclipse.org/modeling/mdt/?project=eodm#eodm)。

语义网(Semantic Web,SW)是当前Web的一种扩展,其中信息被赋 予良好定义的语义,更便于计算机和人协同工作。如果称现有Web是超文本 的Web(Web of Hypertext),那么语义网可称为数据的网(Web of data)。通 过提供统一的数据格式,语义Web能有效管理分布在不同数据源中的信息, 从而有助于信息集成。

虽然上述两个问题似乎分别有解决方案,但涉及两者的构架(framework) 仍然是一个挑战。给定OO模型,通过OR映射产生的关系数据与从模型转 换产生的本体无关。诚然,有像D2R服务器(数据到资源描述框架(RDF) 服务器,D2R Server:Publishing relational databases on the Semantic Web,参见 http://sites.wiwiss.fu-berlin.de/suhl/bizer/d2r-server/index.html)的工具可用于在 语义网上发布关系数据库,这意味着一种桥接关系数据与本体的解决方案。 然而,这种技术仍然没有在整体上解决上述问题。这是因为由像D2R的工具 从关系模式发布的本体不总是在语义上“接近”其原生OO模型。例如,由 D2R发布的XSD本体完全不同于、或者劣于从XSD的UML模型转换的本 体。类似地,本体库可能用于存储从OO模型转换的OWL本体,但是,其 关系模式已经简化为如三元组(主语谓语宾语)一样简单,后者不总是具 体地“接近”其原生OO模型。

下面,通过举例进行说明。假设已有关于Person(人)和Paper(论文) 的OO模型。现有两对象,其一是MJ这个对象,作为Person类的实例,有 id(标识符)、name(姓名)和papers(论文)三个属性;其二是UMRR这 个对象,作为Paper类的实例,有id(标识符)、title(标题)和authors(作 者)三个属性。希望在语义网上发布这两个对象,使之成为语义数据。也就 是说,分别有统一资源标识符URI(Uniform Resource Identifier)来唯一地标 识每个对象,比如d:MJ和d:UMRR,其中d是命名空间(Namespace)。同时, 这两个URI将通过属性PersonPapers和PaperAuthors彼此链接起来。这样, 从一个对象的URI出发,不但可以访问这个对象的描述,得到属性和属性值, 而且能够通过链接浏览到其它对象。比如,通过作者MJ到达文章UMRR, 再由文章UMRR到达其他作者,继而到达其他作者的其他文章,等等,依此 类推。更有意思的是,利用Web2.0技术,我们还可以给MJ这个对象的URI 加书签(Bookmark)并进行标签(Tag),在社区网络(Social Networking) 上共享这个资源,或者订阅(Subscribe)这个URI,从而实时掌握MJ的数据 信息。

简而言之,上述问题要解决的是如何根据已有的OO模型将对象发布成 为语义数据。ORM系统常见的做法分为三步骤:第一步是为OO模型产生关 系模式;第二步是把这些关系模式部署到关系数据库;最后是把对象转换成 关系数据。结合上述例子,已知Person和Paper这两个OO类,两者之间有 关联关系。因此OR映射所产生的关系模式中将有三张表:直接映射得到的 PERSON和PAPER以及反映关联关系的中间表PERSON_PAPER。在将关系 模式部署到关系数据库中之后,原有的对象将被存储到这些表中,从而实现 对于对象的关系持久化(persistence)。另一方面,D2R服务器能够直接发布 关系数据库中的内容到语义Web上,为每个对象赋予URI,并对此URI进行 描述,使之成为语义数据;因此,能够对发布的那些对象进行访问,从而实 现对于对象的语义网风格访问。

发明内容

在实现本发明的一个实施方式中,提供一种系统,使得对于对象同时实 现关系持久化和语义网风格访问,该系统包括:OR映射生成器,用于从输入 的OO模型生成OR映射和关系模式;模型转换器,用于从所述输入的OO 模型生成OWL本体;以及语义映射生成器,用于从OR映射、关系模式和 OWL本体生成语义映射,以便用于语义网风格访问。

在实现本发明的另一个实施方式中,提供一种方法,使得对于对象同时 实现关系持久化和语义网风格访问,该方法包括:OR映射步骤,用于从输入 的OO模型生成OR映射和关系模式;模型转换步骤,用于从所述输入的OO 模型生成OWL本体;以及语义映射步骤,用于从OR映射、关系模式和OWL 本体生成语义映射,以便用于语义网风格访问。

按照本发明的实施方式,通过输入OO模型,不仅接收到用于关系持久 化的关系模式,而且接收到用于语义网风格访问的OWL本体。关系模式和 本体之间的自动语义映射,使得模型的数据在模型的语义网上可访问。

本发明提供一种工具,其对任何给定OO模型极好地生成关系模式、OWL 本体以及它们之间的自动映射。因为生成的关系模式用于存储在OO模型中 定义的对象,并且生成的OWL本体确保在语义上“接近”输入的OO模型, 所以,它们之间生成的自动映射使得对于对象同时实现关系持久化和语义网 风格访问。

附图说明

图1图示了根据本发明的一个实施方式的系统架构。

图2说明图1中的OR映射生成器、模型转换器和语义映射生成器中使 用的方法的内在联系。

图3图示了图1中的OR映射生成器组件的工作流程。

图4图示了图1中的模型转换器组件的工作流程。

图5图示了图1中的语义映射生成器组件的工作流程。

图6示出根据本发明的一个实施方式的方法的流程图。

图7图示了Person和Paper两个对象之间的双向关联。

图8表示Person和Paper的类定义的代码比较。

图9是由OR映射生成器组件生成的关系模式的一个例子,其中图示了 3个RDB表及其间关系。

具体实施方式

以下参照附图对本发明的实施方式进行详细的说明。

图1图示了根据本发明的一个实施方式的系统架构,其中也图示了本发 明的一个实施方式的实现环境。该实施方式的系统中包括三个组件,即OR 映射生成器2、模型转换器3以及语义映射生成器12。以OO模型1的输入 开始,OR映射生成器2生成OR映射文件5和关系模式文件6,而模型转换 器3产生相应的OWL本体文件7。最后,OR映射、关系模式和OWL本体 被馈入语义映射生成器12,输出语义映射文件8。通过D2R引擎13,语义映 射文件8对语义网风格访问可用;而使用OO编程的开发者,可通过OR映 射引擎10使用OR映射文件5,对关系数据库11中所存储的对象进行操作。

图2说明图1中的OR映射生成器、模型转换器和语义映射生成器中使 用的方法的内在联系。如图2中的左侧所示,OR映射生成器2中使用的方法 将OO类映射到RDB表,并且将OO属性映射到与相应的表相关联的RDB 列。同时,图2的右侧示出:在模型转换器3中使用的方法,将OO类转换 为OWL类,并且相应地将OO属性转换为OWL属性。最后,语义映射生成 器12中使用的方法,除了在RDB列和OWL属性之间自动映射外,还在RDB 表和OWL类之间自动映射。

参照图1,假设用于应用的OO模型1已经很好地设计,OO编程的开发 者将利用OR映射工具(如OR映射生成器2)来生成那些OO模型的关系模 式6,并将生成的关系模式部署到关系数据库(RDB)11中。随后,OO编 程的开发者利用OR映射文件5将相关对象存储到数据库中。

图6示出根据本发明的一个实施方式的方法的流程图。如图6所示,在 步骤S61,输入OO模型。在步骤S62,进行OR映射,从输入的OO模型生 成OR映射和关系模式;而在步骤S63,进行模型转换,从输入的OO模型生 成OWL本体。在步骤S65,进行语义映射,从OR映射、关系模式和OWL 本体生成语义映射,以便用于语义网风格访问。

按照本发明的一个实施方式,可采用OR映射生成器生成OR映射和关 系模式的文件,采用模型转换器生成OWL本体的文件,采用语义映射生成 器生成语义映射的文件。

下面将结合图3-5描述根据本发明的一个实施方式的系统中的OR映射 生成器、模型转换器和语义映射生成器这三个组件的一种可能的实现方式。

图3图示了OR映射生成器组件的工作流程。简单来说,OR映射生成器 将OO类映射到RDB表,所述RDB表配置有从所述OO类中的相关OO属 性映射的列。

如图3所示,在步骤S32,OO模型输入OR映射生成器。在步骤S34, 对于输入OO模型中的每个OO类,将OR映射从该给定OO类指定给RDB 表T。在步骤S35,对于该给定OO类的每个OO属性,判断该给定OO属性 是否多值。如果否,那么在步骤S36,将该OO属性映射到指定的RDB表T 的列;如果是,那么在步骤S37,找到一中间RDB表,该中间RDB表具有 列C和C’,其中列C是外键,指向表T的主键,列C’也是外键,指向另一 表T’的主键,从该OO属性的值域类映射到该表T’。结果,该OO属性被映 射到该中间RDB表的列C’。在步骤S38,通过整合来自步骤S34、S36和S37 的所有类和属性映射的输出,产生关系模式。

结果,通过图3所示的工作流程,OR映射生成器产生了OR映射和关系 模式。也就是说,OR映射生成器将给定OO类映射到RDB表(T),将给定 OO类的OO属性映射到RDB表(T)的对应列(该OO属性非多值),或者 映射到中间RDB表的对应列(C’)(该OO属性多值),该对应列(C’)是外 键,指向表(T’)的主键,其中从该OO属性的值域类映射到表(T’);而且, OR映射生成器整合所有类和属性映射的输出,产生关系模式。

图4图示了模型转换器组件的工作流程。同样,实现模型转换器的一种 明显的方式是将OO类转换到OWL类,并且相应地将OO属性转换到OWL 对象属性或转换到OWL数据类型属性。

如图4所示,在步骤S42,OO模型输入模型转换器。在步骤S44,对于 输入OO模型中的每个OO类,将该给定的OO类转换为OWL类。在步骤 S45,对于给定OO类中的每个OO属性,判断该给定的OO属性是否多值。 如果是,那么在步骤S47,将该OO属性转换为OWL对象属性,其具有该给 定的OO类的定义域(domain)和为该OO属性声明的返回类型的值域;如 果否,那么在步骤S46,将该OO属性转换为OWL数据类型属性,其具有该 给定的OO类的定义域和rdfs:Literal(RDF数据库模式的字符类型)的值域。

因此,通过图4所示的工作流程,模型转换器产生OWL本体。也就是 说,模型转换器将OO类转换为OWL类,将该OO类的属性转换为OWL数 据类型属性(该OO属性非多值),或者转换为OWL对象属性(该OO属性 多值)。

图5图示了语义映射生成器组件的工作流程。在上述两组件的基础上, 语义映射生成器将以原生()方式实现。存在两种映射:一种是从RDB 表映射到OWL类的类映射(ClassMap),而另一种是从RDB列映射到OWL 属性的属性映射(PropertyMap)。特别地,结合(Join)RDB表用于将关联 的列导向OWL对象属性。

如图5所示,在步骤S52,OR映射、关系模式和OWL本体输入语义映 射生成器。在步骤S54,对于输入本体中的每个OWL类,找到输入的关系模 式中对应于该给定OWL类的RDB表T,并且在其间建立类映射。在步骤S55, 对于具有该给定OWL类的定义域的每个OWL属性,判断其是否OWL对象 属性。如果是,那么在步骤S57,将找到的表T与一中间RDB表结合,该中 间表具有列C和C’,其中列C是外键,指向找到的RDB表T的主键,而列 C’也是外键,指向另一RDB表T’的外键,其中从该OWL对象属性的值域类 映射到表T’。结果,在该OWL属性和该中间表的列C’之间建立属性映射。 如果否(即该OWL属性是OWL数据类型属性),那么在步骤S56,找到发 现的RDB表T中对应于该OWL属性的RDB列,并且在其间建立属性映射。

因此,通过图5所示的工作流程,由于在该系统框架内OR映射和模型 转换器的对应性,语义映射生成器自动生成语义映射。也就是说,语义映射 生成器从RDB表(T)到OWL类自动建立类映射,并且在所述OWL类的 OWL数据类型属性和所述RDB表(T)中对应于该OWL属性的列之间自动 建立属性映射,或者在所述OWL类的OWL对象属性和一中间RDB表的对 应列(C’)之间自动建立属性映射,该对应列(C’)是外键,指向另一RDB 表(T’)的主键,其中从该OWL对象属性的值域类映射到另一RDB表(T’)。

下面通过一个例子,说明本发明的一个实施方式,作为应用本发明的方 法或系统等的一种示例实现。

作为示例,Person(人)和Paper(论文)是其间保持双向关联的两个对 象。如图7所示,其图示了Person和Paper两个对象之间的双向关联。其中, Person具有两个属性:标识符(id),Long(长整数)类型;name(姓名), String(字符串)类型;两者均是单值的。Paper也具有两个属性:标识符(id), Long(长整数)类型;title(标题),String(字符串)类型;两者均是单值的。 Person和Paper两者之间的关联是:Person是Paper的作者(authors),而Paper 是Person的论文(papers),作者和论文均是多值的。

在OO编程(例如Java)中,对应的代码如图8所示,其表示Person和 Paper的类定义的代码比较。

下面所示的OR映射生成器组件的实现代码的示例,可生成OR映射文 件,其中将Person类和Paper类分别映射为PERSON表和PAPER表。

<ORmapping>

   //OR映射的实例

    <class name=″Person″table=″PERSON″>

    //将Person类映射到PERSON表

        <id name=″id″column=″PERSON_ID″/>

        //将Person类id(单值)属性映射到PERSON表中的PERSON_ID列

        //其中PERSON_ID列是PERSON表的主键

        <property name=″name″type=″String″column=″PERSON_NAME″/>

        //将Person类name(单值)属性映射到PERSON表中的PERSON_NAME列

        <set name=″papers″table=″PERSON_PAPER″>

        //将Person类papers(多值)属性映射到PERSON_PAPER表中的PAPER_ID列

            <key column=″PERSON_ID″/>

            //其中PERSON_ID列是PERSON_PAPER表的外键

            //并且该列指向PERSON表中PERSON_ID列

            <many-to-many column=″PAPER_ID″class=″Paper″/>

          //另外PAPER_ID列也是PERSON_PAPER表的外键,参考如下Paper类映射

        </set>

   </class>

</ORmapping>

<ORmapping>

   //另一个关联的OR映射的实例

   <class name=″Paper″table=″PAPER″>

        <id name=″id″column=″PAPER_ID″/>

        //将Paper类id(单值)属性映射到PAPER表中的PAPER_ID列

        //其中PAPER_ID列是PAPER表的主键

        <property name=″title″type=″String″column=″PAPER_TITILE″/>

        //将Paper类title(单值)属性映射到PAPER表中的PAPER_TITLE列

        <set name=″authors″table=″PERSON_PAPER″inverse=″true″>

        //将Paper类authors(多值)属性映射到PERSON_PAPER表中的PERSON_ID列

            <key column=″PAPER_ID″/>

            //其中PAPER_ID列是PERSON_PAPER表的外键

            //并且该列指向PAPER表中的PAPER_ID列

            <many-to-many column=″PERSON_ID″class=″Person″/>

          //另外PERSON_ID列也是PERSON_PAPER表的外键,参考如上Person类映射

       </set>

   </class>

</ORmapping>

假设“Person”是具有属性“id”、“name”和“papers”的OO类。首先,将OO 类“Person”映射到RDB表“PERSON”;之后,将OO属性“id”和“name”分别映 射到表“PERSON”中的RDB列“PERSON_ID”和“PERSON_NAME”,其中 “PERSON_ID”是表“PERSON”的主键。但是,OO属性“papers”有些不同(它 是多值的),从另一个OO类“Paper”得到值。因此,需要结合表“PERSON”和 中间表“PERSON_PAPER”,该中间表“PERSON_PAPER”具有列 “PERSON_ID”和“PAPER_ID”,这两列都是该中间表的外键,其中列 “PERSON_ID”指向表“PERSON”的主键,而列“PAPER_ID”指向表“PAPER”的 主键。结果,OO属性“papers”被映射到中间表“PERSON_PAPER”中的RDB 列“PAPER_ID”。

类似地,“Paper”是具有属性“id”、“title”和“authors”的OO类。首先,将 OO类“Paper”映射到RDB表“PAPER”;之后,将OO属性“id”和“title”分别映 射到表“PAPER”中的RDB列“PAPER_ID”和“PAPER_TITLE”,其中 “PAPER_ID”是表“PAPER”的主键。但是,OO属性“authors”有些不同(它是 多值的),从另一个OO类“Person”得到值。因此,需要结合表“PAPER”和中 间表“PERSON_PAPER”,如上所述引入的,该中间表“PERSON_PAPER”具有 列“PERSON_ID”和“PAPER_ID”,这两列都是该中间表的外键,其中列 “PERSON_ID”指向表“PERSON”的主键,而列“PAPER_ID”指向表“PAPER”的 主键。结果,OO属性“authors”被映射到中间表“PERSON_PAPER”中的RDB 列“PERSON_ID”。

对于上述OR映射文件,由OR映射生成器组件生成的关系模式如图9 所示。其中有3个RDB表:“PERSON”、“PAPER”和“PERSON_PAPER”。如 上所述,表“PERSON”从OO类“Person”映射,具有列“PERSON_ID”和 “PERSON_NAME”;而表“PAPER”从OO类“Paper”映射,具有列“PAPER_ID” 和“PAPER_TITLE”。特别地,“PERSON_PAPER”是用于映射OO属性“papers” 和“authors”的中间表,使得“PERSON_PAPER”具有列“PERSON_ID”和 “PAPER_ID”,它们是外键,分别指向表“PERSON”和“PAPER”的主键。

同时,对于该示例,模型转换器组件将产生OWL本体,其具有Person 和Paper的OWL类、以及用于PersonId、PersonName、PaperId、PaperTitle 等的OWL数据类型属性。具体地,为上述的双向关联指定用于PersonPapers 和PaperPersons的OWL对象属性。下面是对于该示例的模型转换器的实现代 码。

<owl:Class rdf:ID=″Person″/>

//这是一个OWL类Person

<owl:DatatypeProperty rdf:ID=″PersonId″>

        //这是一个OWL数据类型属性PersonId

        <rdfs:domain rdf:about=″#Person″/>

        //该属性PersonId定义域是类Person

        <rdfs:range rdf:resource=″&rdfs;#Literal″/>

        //该属性PersonId值域是rdfs:Literal(RDF数据库模式的字符类型)

        <rdf:type rdf:resource=″&owl;#FunctionalProperty″/>

        //该属性PersonId是单值属性

</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID=″PersonName″>

        <rdfs:domain rdf:about=″#Person″/>

        <rdfs:range rdf:resource=″&rdfs;#Literal″/>

</owl:DatatypeProperty>

<owl:ObjectProperty rdf:ID=″PersonPapers″>

        <rdfs:domain rdf:about=″#Person″/>

        <rdfs:range rdf:about=″#Paper″/>

</owl:ObjectProperty>

<owl:Class rdf:ID=″Paper″/>

//这是另一个OWL类Paper

<owl:DatatypeProperty rdf:ID=″PaperId″>

        //这是一个OWL数据类型属性PaperId

        <rdfs:domain rdf:about=″#Paper″/>

        //该属性PaperId定义域是类Paper

        <rdfs:range rdf:resource=″&rdfs;#Literal″/>

        //该属性PaperId值域是rdfs:Literal(RDF数据库模式的字符类型)

        <rdf:type rdf:resource=″&owl;#FunctionalProperty″/>

        //该属性PaperId是单值属性

</owl:DatatypeProperty>

<owl:DatatypeProperty rdf:ID=″PaperTitle″>

        <rdfs:domain rdf:about=″#Paper″/>

        <rdfs:range rdf:resource=″&rdfs;#Literal″/>

</owl:DatatypeProperty>

<owl:ObjectProperty rdf:ID=″PaperAuthors″>

        <rdfs:domain rdf:about=″#Paper″/>

        <rdfs:range rdf:about=″#Person″/>

</owl:ObjectProperty>

首先,将OO类“Person”映射到OWL类。因为其OO属性“id”和“name” 不是多值的,所以将其映射到OWL数据类型属性“PersonId”和“PersonName”, 其具有“Person”的定义域和“rdfs:Literal”的值域;而其OO属性“papers”是多值 的,所以将其映射到OWL对象属性“PersonPapers”,其具有“Person”的定义域 和“Paper”的值域。

类似的,将OO类“Paper”映射到OWL类。因为其OO属性“id”和“title” 不是多值的,所以将其映射到OWL数据类型属性“PaperId”和“PaperTitle”, 其具有“Paper”的定义域和“rdfs:Literal”的值域;而其OO属性“authors”是多值 的,所以将其映射到OWL对象属性“PaperAuthors”,其具有“Paper”的定义域 和“Person”的值域。

最后,通过输入OR映射生成器组件和模型转换器组件生成的上述文件, 语义映射生成器组件自动输出从关系模式到OWL本体的语义映射的文件。 下面是对于该示例的类映射和属性映射的实现代码的实施例。

<ClassMap>

    //这是一个语义映射的实例,将OWL类Person映射到RDB表PERSON

    <rdb table=″PERSON″/>

    //这是被映射的RDB表PERSON

    <owl class=″Person″/>

    //这是将映射的OWL类Person

</ClassMap>

<PropertyMap>

    //这是一个语义映射的实例

    //将OWL数据类型属性PersonId映射到RDB表PERSON中的列PERSON_ID

    <rdb table=″PERSON″column=″PERSON_ID″/>

    //这是被映射的RDB表PERSON中的列PERSON_ID

    <owl class=″Person″property=″PersonId″/>

    //这是将映射的OWL数据类型属性PersonId

</PropertyMap>

<PropertyMap>

    //将OWL数据类型属性PersonName映射到RDB表PERSON中的列PERSON_NAME

    <rdb table=″PERSON″column=″PERSON_NAME″/>

    <owl class=″Person″property=″PersonName″/>

</PropertyMap>

<ClassMap>

    //将OWL类PAPER映射到RDB表Paper

    <rdb table=″PAPER″/>

    <owl class=″Paper″/>

</ClassMap>

<PropertyMap>

    //将OWL数据类型属性PaperId映射到RDB表PAPER中的列PAPER_ID

    <rdb table=″PAPER″column=″PAPER_ID″/>

    <owl class=″Paper″property=″PaperId″/>

</PropertyMap>

<PropertyMap>

    //将OWL数据类型属性PaperTitle映射到RDB表PAPER中的列PAPER_TITLE

    <rdb table=″PAPER″column=″PAPER_TITLE″/>

    //这是被映射的RDB表PAPER中的列PAPER_TITLE

    <owl class=″Paper″property=″PaperTitle″/>

</PropertyMap>

<PropertyMap>

    //将OWL对象属性PersonPapers映射到RDB表PERSON_PAPER中的列PAPER_ID

    <rdb table=″PERSON″>

             <join table=″PERSON_PAPER″key=″PERSON_ID″column=″PAPER_ID″/>

             //这是被映射的RDB表PERSON_PAPER中的列PAPER_ID

             //其中列PERSON_ID是表PERSON_PAPER的外键,指向表PERSON的主键

    </rdb>

    <owl class=″Person″property=″PersonPapers″/>

</PropertyMap>

<PropertyMap>

    //将OWL对象属性PaperAuthors映射到RDB表PERSON_PAPER中的列PERSON_ID

    <rdb table=″PAPER″>

                      <join table=″PERSON_PAPER″key=″PAPER_ID″column=″PERSON_ID″/>

             //列PAPER_ID是表PERSON_PAPER的外键,指向表PAPER的主键

    </rdb>

    <owl class=″Paper″property=″PaperAuthors″/>

</PropertyMap>

首先,对于OWL类“Person”,将其映射到RDB表“PERSON”,因为OO 类被同时映射到OWL类“Person”和RDB表“PERSON”。对于OWL数据类型 属性“PersonId”,将其映射到RDB表“PERSON”中的RDB列“PERSON_ID”, 因为该OO属性被同时映射到OWL属性“PersonId”和RDB表“PERSON”中的 RDB列“PERSON_ID”;对于OWL数据类型属性“PersonName”,将其映射到 RDB表“PERSON”中的RDB列“PERSON_NAME”,因为该OO属性被同时映 射到OWL属性“PersonName”和RDB表“PERSON”中的RDB列 “PERSON_NAME”。对于OWL对象属性“PersonPapers”,需要结合RDB表 “PERSON”和中间表“PERSON_PAPER”,如上所述。结果,OWL对象属性 “PersonPapers”会被映射到中间表“PERSON_PAPER”中的RDB列 “PAPER_ID”。

类似的,对于OWL类“Paper”,将其映射到RDB表“PAPER”,因为OO 类被同时映射到OWL类“Paper”和RDB表“PAPER”。对于OWL数据类型属 性“PaperId”,将其映射到RDB列“PAPER_ID”,因为OO属性被同时映射到 OWL属性“PaperId”和RDB列“PAPER_ID”;对于OWL数据类型属性 “PaperTitle”,将其映射到RDB列“PAPER_TITLE”,因为OO属性被同时映射 到OWL属性“PaperTitle”和RDB列“PAPER_TITLE”。对于OWL对象属性 “PaperAuthors”,需要结合RDB表“PAPER”和中间表“PERSON_PAPER”,如 上所述。结果,OWL对象属性“PaperAuthors”会被映射到中间表 “PERSON_PAPER”中的RDB列“PERSON_ID”。

利用该示例所示的方法和系统,可使得对于各对象同时实现关系持久化 和语义网风格访问。

上述实例仅仅说明了基本的情形,即:通过RDB(非中间)表,在一个 OO类与一个OWL类之间建立语义映射;同时,通过RDB(非中间表的) 列,在一个OO属性与一个OWL数据类型属性之间建立语义映射。此外, 上述实例也展示了一个较为复杂但常见的情形,即:通过RDB中间表的外键, 在一个OO属性与一个OWL对象属性之间建立语义映射。尽管上述实例中 的中间RDB表仅有两个外键,分别对应两个OWL对象属性;但对于中间 RDB表有三个或三个以上的外键,根据本发明的方法也适用。简而言之,根 据中间RDB表的外键指向的其它RDB(非中间)表的主键,能得到该外键 与相应的OWL对象属性之间的映射关系,其细节参照上述说明,不再赘述。

因此,这里仅仅描述了本发明的特定的实施方式和实现。根据本申请描 述的内容,可以做出各种改进、变形和其它实施方式和实现。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号