首页> 中国专利> 把Web服务映射到本体

把Web服务映射到本体

摘要

公开了一种企业信息集成系统。该系统基于不同的层:-各数据源,-对应于所述各数据源的数据模式的各源本体,-集成了不同源本体的集成本体,-查询输入级,优选按web服务的形式。在各级别之间使用映射规则。对文档风格的web服务和XML文档到本体的映射,给出了详细的规则,除了其他之外,覆盖了分别映射到类特性和关系(对象特性)的简单内容和复杂内容元素。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-02-27

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20100120 终止日期:20170127 申请日:20060127

    专利权的终止

  • 2010-01-20

    授权

    授权

  • 2007-01-17

    实质审查的生效

    实质审查的生效

  • 2006-11-22

    公开

    公开

说明书

技术领域

本发明涉及对分布数据源的统一查询以及有效恢复在分布数据源中所存储数据的方法。

本发明特别涉及把XML文档的数据结构映射到本体(ontology)。

背景技术

企业数据系统,尤其是对大型企业,通常要包括多个数据源,这些数据源可基于不同的数据模式,如

关系型数据库

XML文档、XML模式、XML文档类型定义(DTD)

Web服务

Adabas文件

SGML文本

接口描述语言(IDL)

JAVA接口

资源描述框架(RDF)

统一建模语言(UML)

本体Web语言(OWL)

对象角色建模

话题映射(Topic maps)

等等

由于几代IT技术的演进和/或数据的合并和获取等,具有不同数据模式的几个数据库可以包含不同商务区域中的信息。另一方面,还可以从Web服务获得信息页。例如,企业人事数据可能存储在服从第一关系数据库模式的关系数据库中,而企业财务数据可能存储在服从第二关系数据库模式的关系数据库中。常常这些不同的数据源可能会重叠,而且用户很难进行跨企业数据源的查询。

因此,需要工具用于数据集成或信息集成,并且需要统一的查询工具使得用户可以跨越服从不同数据模式的数据源来查询数据。当单一的查询问题要涉及多个数据源的时候也需要统一的查询工具。

相关技术的说明

属于同一个专利族的专利申请US 2004/0216030 A1、US2004/0093559 A1、US 2004/0093344 A1、US 2003/0179228 A1、US2003/0177481 A1、US 2003/0163597 A1、US 2003/0163450 A1、US2003/0120665 A1、以及US 2003/0101170 A1描述了数据模式的映射,除了其他之外,中央本体模型包括关系数据库模式和XML模式用于解决数据集成问题(后面将详细说明本体的概念)。不同数据模式的基本结构映射到中央本体模型的类和属性。这样,对关系数据库模式,表(table)通常映射成类(class),而表的字段(field)通常映射成类的属性(property)。类似地,对XML模式,复杂类型通常映射成本体类,而复杂类型中的元素和属性通常映射成本体属性。

这样,在XML文档和本体结构之间需要映射。

XML数据可源于:

Web服务

XML文档或数据库

另外的XML数据源

最常见的情况是,Web服务把XML文档作为输入并产生XML文档作为输出。这样的Web服务被称作“文档风格的Web服务”。

XML简介

XML是可扩展置标语言(eXtensible Markup Language)的英文缩写。置标语言是一组标记和文本值(简单说明)。当今最著名的置标语言是HTML,用来设计网页。XML使得人们可以设计他们自己的置标语言,使这种置标语言适于存储任何类型的信息。下面是XML文档的例子:

<addresses>

    <employee name="John Doe">

        <address>

            <street>Oakroad 5</street>

            <city>Lyngby</city>

            <country>Denmark</country>

        </address>

        <phone>124-21424-21</phone>

        <email>jd@example.com</email>

        <category>friend</category>

        <category>co-worker</category>

    </employee>

</addresses>

看一看这个文档很快就知道它的用途:它是用于存储联系地址的置标语言。再仔细看一看各元素(element)或节点:

<employee name="John Doe">...</person>

<employee>称作打开标记(opening tag)。该打开标记中的name="John Doe"称作属性(attribute)。该属性的名为"name",并且该属性的值或实例为"John Doe"。"..."是该元素的内容。这既可以是更多的元素也可以是文本数据。</employee>是关闭标记。

元素总是要关闭,以构造良好的XML文档。在XML文档中的注释具有和HTML文档同样的文法。

<!—此处写注释-->

要注意XML文档的结构。最外层的元素,即包含所有其他标记的元素,被称作根节点或根元素。在上述的例子中,<addresses>是根节点。在另外元素内容中的任何元素称作该元素的子女节点。

XML文档可以看作是分层的树形结构。每个元素是一个节点。最顶上的节点是根元素或根节点。注意,除了根节点之外的所有的节点有且只有一个双亲节点。

所有XML文档的起始行都是

<?xml version="1.0"encoding="iso-8859-1"?>

对encoding属性可以有变化。增加下述的处理指令:

<?xml-stylesheet href="stylesheet.xsl"type="text/xsl"?>

这表示无论用什么程序来表现该XML文档,都使用XSL风格页。制作包含该行的XML文档可使得Internet Explorer(6.0及更高版本)可根据该风格页表现该文档。

XML模式简介

XML模式用来说明XML文档的结构。XML模式语言也称作XML模式定义(XSD)。请看下面的记作“note.xml”的例子XML文档:

<?xml version="1.0"?>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

下面的记作"note.xsd"的XML模式文件用于定义上述的XML文档("note.xml")的元素:

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3schools.com"

xmlns="http://www.w3schools.com"

elementFormDefault="qualified">

<xs:element name="note">

<xs:complexType>

<xs:sequence>

<xs:element name="to"type="xs:string"/>

<xs:element name="from"type="xs:string"/>

<xs:element name="heading"type="xs:string"/>

<xs:element name="body"type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

该note元素被称作复杂类型(复杂元素),因它包含其他的元素。这些其他的元素(to,from,heading,body)被称作简单类型(简单元素),因它们不包含另外的元素。

type="xs:string"用于定义数据类型,这里是定义了字符串(string)。也可以定义其他数据类型,如“整数(integer)”、“日期(date)”等。这些简单类型被称作“原子(atomic)”类型。

<schema>元素是每个XML模式的根元素:

<?xml version="1.0"?>

<xs:schema>...

...

</xs:schema>

<schema>元素可包含某些属性。模式声明(declaration)常常如下面的样子:

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3schools.com"

xmlns="http://www.w3schools.com"

elementFormDefault="qualified">

...

</xs:schema>

下面的片断:

xmlns:xs="http://www.w3.org/2001/XMLSchema"

指示在该模式中使用的元素和数据类型(schema、element、complexType、sequence、string、boolean等)来自“http://www.w3.org/2001/XMLSchema”名字空间(namespace)。它还指示来自“http://www.w3.org/2001/XMLSchema”名字空间的元素和数据类型应该带有前缀“xs:”。

下面的片断:

targetNamespace="http://www.w3schools.com"

指示由该模式定义的元素(note,to,from,heading,body)来自“http://www.w3schools.com”名字空间。

片断:

xmlns="http://www.w3schools.com"

指定了默认的名字空间声明。该声明告知模式验证器(schema-validator)在该XML文档中使用的所有元素都在"http://www.w3schools.com"名字空间中声明。

片断:

elementFormDefault="qualified"

指示该XML示例文档所使用的在该模式中声明的任何元素必须是名字空间合格的。

该XML文档具有到XML模式的参照:

<?xml version="1.0"?>

<note xmlns="http://www.w3schools.com"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.w3schools.com note.xsd">

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

一旦使XML Schema Instance名字空间可用:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

就可以使用schemaLocation属性。该属性有两个值。第一个值是要使用的名字空间。第二个值是要使用该名字空间的XML模式的位置:

xsi:schemaLocation="http://www.w3schools.com note.xsd"

对XML文档可生成XML模式,该XML模式包含该XML文档中所包含数据的数据类型定义。利用这样的XML模式,可以验证相应的XML文档,即可以在这方面检查该文档中的数据,不论它们是否服从正确的数据类型。该验证过程产生XML文档的注解版本,对每个数据或XML实例包含PSVI实例(PSVI=post schema validationinfo set,后模式验证信息集),即所谓的标记,它是从该XML文档到合适数据类型的参照。PSVI实例包含有关XML实例的数据类型的信息。PSVI的一个例子是:

<ProductDetails xsi:type="productDetailsType">

它是上述的所给的例子<addresses>加PSVI注解的版本:

<addresses xsi:type="addressestype">

    <employee xsi:type="fullpersoninfo"name="John Doe">

        <shoesize xsi:type="shoesizetype"

                        country="france">35</shoesize>

        <address xsi:type="addresstype">

            <street xsi:type="xs:string">Oakroad 5

            </street>

            <city xsi:type="xs:string">Lyngby</city>

            <country xsi:type="xs:string">Denmark

            </country>

        </address>

        <phone xsi:type="xs:string">124-21424-21</phone>

        <email xsi:type="xs:string">jd@example.com

        </email>

        <category xsi:type="xs:string">friend</category>

        <category xsi:type="xs:string>co-worker</category>

    </employee>

</addresses>

xsi:type="fullpersoninfo"是PSVI注解。它按附加属性的形式给出。

对于带有多重节点的XML分层结构,所需要的映射是困难的。

发明内容

因此,本发明的目的是提供一种详尽的方法,用于把XML数据结构映射到本体构造。

本发明的第一方面用于实现这个目的。在本发明的其他方面说明优选的实施例。

本发明各个方面的合理组合也在本发明的公开范围之内。

一般而言,对于XML文档,复杂类型(complex type)映射到本体类(ontology class),复杂类型中的元素和属性(attribute)映射到本体特性(ontology property)。

为了映射XML文档和文档风格WEB服务,建议下面的方法。在下面将祥述该方法的各个步骤。不必按该文本中给定的次序来执行这些步骤。而且,没有明确陈述的另外步骤也可以作为该方法的一部分。

在描述该方法之前,需要定义更多的XML模式的元素。

简单类型(SimpleType)元素

XSD simpleType元素是其类型为简单类型(如type="xs:string")的元素:

    <xs:element name="firstname"type="xs:string"/>

带有属性的简单内容(simpleContent)元素

simpleContent元素包含在只有文本的复杂类型上或在简单类型上的扩展或限制作为内容,并且不包含元素,但具有属性。相应的双亲元素是complexType元素(见下述)。下面是不包含元素的XML元素(<shoesize>):

<shoesize country="france">35</shoesize>

下述例子声明了complexType,“鞋尺码(shoesize)”,其内容被定义成整数数据类型并带有国家(country)属性:

<xs:complexType name="shoesizetype">

  <xs:simpleContent>

    <xs:extension base="xs:integer">

      <xs:attribute name="country"type="xs:string"/>

    </xs:extension>

  </xs:simpleContent>

</xs:complexType>

<xs:element name="shoesize"type=”shoesizetype”/>

复杂内容(complexContent)元素

complexContent元素在包含有混合内容或仅包含元素的复杂类型上定义扩展和限制。

下面的例子具有复杂类型,“fullpersoninfo”,其通过对带有三个附加元素(address、city、country)的继承类型进行扩展,从另外的复杂类型“personinfo”导出:

<xs:complexType name="personinfo">

  <xs:sequence>

    <xs:element name="firstname"type="xs:string"/>

    <xs:element name="lastname"type="xs:string"/>

    <xs:element name="shoesize"type="shoesizetype"/>

  </xs:sequence>

</xs:complexType>

<xs:complexType name="companytype">

  <xs:sequence>

    <xs:element name="name"type="xs:string"/>

    <xs:element name="employee"type="fullpersoninfo"/>

  </xs:sequence>

</xs:complexType>

<xs:complexType name="fullpersoninfo">

  <xs:complexContent>

    <xs:extension base="personinfo">

      <xs:sequence>

        <xs:element name="address"type="xs:string"/>

        <xs:element name="city"type="xs:string"/>

        <xs:element name="country"type="xs:string"/>

      </xs:sequence>

    </xs:extension>

  </xs:complexContent>

</xs:complexType>

在上述的例子中,"employee"元素必须按顺序包含下述元素:"firstname"、"lastname"、"address"、"city"、以及"country"。

简言之,XSD complexContent元素是其类型带有complexContent的复杂类型(comlexType)的元素。

建议的方法

所建议的用于把XML数据结构映射到本体的方法包括下述步骤:

提供XML文档,其带有相应的XML模式定义。

按下述方式把XML模式声明和定义映射到本体模式定义:

-把XML元素和属性声明映射到本体特性定义;

-把XML模式complexType定义映射到本体类定义。

如果使用通过XML模式验证XML文档所得到的信息(PSVI注解),按下述方式把带有已知PSVI类型的XML节点映射到本体实例:

-把PSVI complexType注解映射到本体类实例;

-把元素和属性节点映射到本体特性实例。

定义预定义的本体类定义和预定义的本体数据类型(datatype)特性定义以及预定义的对象特性定义。

如果已经通过XML模式验证了该XML文档,通过把XML元素和属性节点映射到本体特性实例和本体类实例而把不带有PSVI类型注解的XML节点映射到本体实例和本体定义。

在下面的段落中将详细描述根据本发明的方法。

按照下面详细说明的方式把XML模式声明和定义映射到本地模式定义,即在模式一级做完整的映射。声明(declaration)是可在XML模式以及XML文档中找到的名字(name)。除了在XML文档中通过xsi:type机制显式地赋予类型,声明只出现在XML模式中。

把XSD complexType定义映射到本体的类定义。类的名字是复杂类型(complexType)的名字(或系统定义的名字)。

把XSD complexType定义的XSD complexContent元素声明映射到本体的对象特性定义,该对象特性具有域类(domain class)和范围类(range class),在域类中使用该元素,而该复杂内容(complexContent)元素的复杂类型(complexType)映射到对象特性的范围类。在上述给出的例子中,XSD complexContent元素声明的例子是"employee"。

一般而言,特性的域类是这样的类,该类的特性由所述特性来定义。而范围(range)定义所述特性的允许值。如上述给出的类"companytype"具有数据类型特性"name"和对象特性"employee",其具有范围(类)"fullpersoninfo"和域(类)"companytype"。

把XSD simpleType元素映射到本体的数据类型特性定义,该数据类型(datatype)特性具有域类,该域类是其中使用了该元素的类,而该范围类型是simpleType元素声明的XML模式类型。在上述给出的例子中XSD simpleContent元素声明的例子是"firstname"。

更精确地定义,XSD simpleContent元素是其类型为带有简单内容(simpleContent)的复杂类型(comlexType)的元素。术语XSDsimpleContent元素也用于simpleType元素(type="xs:string"),即,用于其元素内容为simpleType的元素。

把带有属性的XSD simpleContent元素声明映射到本体的对象特性定义,该对象特性具有域类和范围类,该域类是其中使用了该元素的类,并且该对象特性的范围类是simpleContent元素的complexType所映射到的类。上述给出的例子中带有属性的XSD simpleContent元素声明的例子是"shoesize"。

把XSD属性声明映射到本体的datatype特性定义,该datatype特性具有域类,该鱼类是其中使用了该元素的类,并且该范围类型是该属性声明的XML模式类型。在上述给出的例子中XSD属性声明的例子是"country"。

如果使用通过XML模式验证XML文档得到的信息(PSVI注解),按照下述方式把带有已知类型的XML节点映射到本体实例。

如上面定义的,PSVI注解(如xsi:type="fullpersoninfo")用于引导本体模式构造,该构造然后再用XML元素的实例来补充。对于本体,“数据”被称作实例。类的实例被称作“对象”。XML文档的“实例”被称作“节点”。

有时候,类的“对象特性”被称作“关系(relations)”。它们定义了从一个类或对象到另外类或对象的指针。通常,类之间的对象特性以及特性的继承要结合到本体中。除了对象特性,所谓的datatype特性是标准的,可以按数据的形式对其定义类的特性。

对每个带有complexType注解的XML元素节点,产生该本体的类的实例,该实例的类是该complexType定义所要映射到的类。在上述给出的例子中,带有complexType注解的元素节点的例子是"employee"。

把XML simpleType元素节点映射到本体的datatype特性实例,该datatype特性实例的域类实例是对其中使用该元素节点的PSVI类型注解生成的实例。在上述给出的例子中,XML simpleType元素节点的例子是""firstname"=Peter"。

把带有属性的XML simpleContent元素节点映射到该本体的对象特性实例,具有域类实例和范围类实例,该对象特性实例的域类实例是对其中使用该元素的类型注解生成的实例,该对象特性实例的范围类实例是对该XML simpleContent元素节点的PSVI注解生成的类实例。在上述给出的例子中,XML simpleContent元素节点的例子是

<shoesize country=”france">35</shoesize>.

把XML complexContent元素节点映射到该本体的对象特性实例,该对象特性具有域类实例和范围类实例,该对象特性实例的域类实例是对其中使用该元素的PSVI类型注解生成的实例,并且该对象特性实例的范围类实例是对该XML complexContent元素节点的PSVI类型注解生成的类实例。在上述给出的例子中,XML complexContent元素节点的例子是:

<employee name="John Doe">

        <shoesize

                country="france">35</shoesize>

        <address>

            <street>Oakroad 5

            </street>

            <city>Lyngby</city>

            <country>Denmark

            </country>

        </address>

        <phone>124-21424-21</phone>

        <email>jd@example.com

        </email>

        <category>friend</category>

        <category>co-worker</category>

    </employee>

把XML simpleType属性映射到该本体的datatype特性实例,该datatype特性实例的域类实例是对其中使用属性节点的PSVI类型注解生成的实例。在上述给出的例子中,XML simpleType属性节点的例子是

country="France".

定义下述预定义的本体模式定义:

-单一的类定义,其为所有生成的类定义的超类(super class);

-单一的对象特性定义,其为所有生成的对象特性定义的超对象(super object)特性,该对象特性具有域类和范围类,它们是所述的超类;

-单一的datatype特性定义,其为所有生成的datatype特性定义的超datatype特性,该datatype具有作为所述超类的域类,该范围类型是任何原子类型。

如果通过XML模式验证了XML文档,按下述方式把不带有PSVI类型注解的XML节点映射到本体实例和本体定义:

对每个不是叶子节点的XML元素节点,生成该本体的所有生成的类的预定义超类的实例;以及生成该预定义超对象特性的对象特性实例,该对象特性实例的域类实例是对包含元素节点生成的实例,并且该范围类实例是对该XML元素节点生成的类实例。叶子节点是位于最低级的节点。

对每个不带有属性节点的XML叶子元素节点,生成预定义超datatype特性的datatype特性实例,该datatype特性的域类实例是对该包含元素节点生成的实例。“包含元素节点”是该XML文档的上一级节点。在上面给出的例子中,不带有属性节点的XML叶子元素节点是""firstname"=Peter"。

对每个XML属性节点,生成该预定义的超datatype特性的datatype特性实例,该datatype特性的域类实例是对该属性所属于的元素节点生成的实例。

通常,不带有PSVI类型的XML节点是通过XSD通配符验证的节点。作为默认,优选使用下述预定义的本体模式定义:

  class  GeneralWSInstance  object property  GeneralWSObjectProperty  datatype property  GeneralWSDatatypeProperty

这样,本体实例和特性实例总是具有这些本体定义作为类型:或者直接对不带有PSVI类型的XML节点,或者间接对带有PSVI类型的节点,因所有生成的本体定义具有这些本体定义作为超类和超特性。

优选从该模式定义生成类是特性类型。如果不能这样(如对通配符元素没有PSVI类型),利用默认的定义生成类和特性定义。

把XML web服务映射到本体

如果根据上述的方法完成所需要的XML数据结构的映射,则可实现文档风格的web服务到本体的映射。

更详细地,为了把XML web服务映射到本体,执行下述的步骤:

提供带有相应web服务描述符(WSDL)的XML SOAPwebservice。

按下述方式把WSDL定义映射到本体模式定义:

-把操作定义映射到该本体的类定义;

-把部分定义(part definition)映射到本体特性定义。

SOAP请求的输入和输出消息按下述方式映射到本体实例:

-单一的SOAP请求映射到单一本体类实例;

-表示输入和输出消息的部分的元素节点映射到本体特性实例。

更精确地,可按下述方式完成WSDL定义到本体模式定义的映射:

-把操作定义映射到该本体的类定义;

-如果该输入或输出消息的部分被定义成complexContent元素声明,其映射到该本体的对象特性定义,该对象特性具有域类和范围类,该域类是从该操作定义映射的类,并且该对象特性的范围类是complexContent元素的complexType所映射到的类;

-如果该输入和输出消息的部分被定义成XSD simpleType元素声明,其映射到该本体的datatype特性定义,该datatype特性具有从该操作定义映射的域类以及范围类型,该范围类型是该simpleType元素声明的XML模式类型。

-如果该输入或输出消息的部分被定义成带有属性的XSDsimpleContent元素声明,其映射到该本体的对象特性定义,该对象特性具有域类和范围类,该域类是从该操作定义映射的类,并且该对象特性的范围类是simpleContent元素的complexType所映射到的类。

操作的例子是附录A中的"getProductDetails"。带有simpleType的元素声明的部分定义的例子是附录A中的"ProductNumber"。带有complexContent元素声明的部分定义的例子是附录A中的"ProductDetails"。

进而,该soap请求的输入和输出消息按下述方式映射到本体实例:

-对操作的每个SOAP请求,生成该本体的类的实例,该实例的类是这样的类,该操作定义要映射到该类;

-如果该输入或输出消息包含XML simpleType元素节点,其映射到该本体的datatype特性实例,该datatype特性实例的域类实例是对该SOAP请求的操作生成的实例;

-如果该输入或输出消息包含带有属性的XML simpleContent元素节点,其映射到该本体的对象特性实例,该对象特性具有域类实例和范围类实例,该对象特性实例的域类实例是对该SOAP请求的操作生成的实例,该对象特性实例的范围类实例是对该XML simpleContent元素节点的PSVI类型注解生成的类实例;

-如果该输入或输出消息包含XML complexContent元素节点,其映射到该本体的对象特性实例,该对象特性具有域类实例和范围类实例,该对象特性实例的域类实例是对该SOAP请求的操作生成的实例,并且该对象特性实例的范围类实例是对该XML complexContent元素节点的PSVI类型注解生成的类实例。

请求操作的例子是附录C中的"getProductDetails"的输入消息。简单元素节点部分的例子是附录C中的SOAP请求的输入消息中的节点"ProductNumber"。复杂内容元素节点部分的例子是附录C中的SOAP请求的输出消息中的节点"ProductDetails"。

输入消息的落地

为了使得web服务能够产生结果或输出,必须定义良好的输入。该输入可以不包含变量;所有的变量必须具有指定的值。换言之,所有的变量必须“落地(grounded)”。本体的特性是“落地”的,是指该特性存在实例或值。因此,需要本体的定义,其中本体类的对象或datatype特性可以被标记成落地的。

另外,本发明的目的可以通过以下的结构来实现:

-可加载到计算机的数据结构,当在计算机上执行该数据结构时,其适于执行根据本说明书中所描述的实施例之一的方法,

-计算机程序,其中当在计算机上执行该计算机程序时,该程序适于执行根据本说明书中所描述的实施例之一的方法,

-计算机程序,包括程序工具(program means),当在计算机或计算机网络上执行该计算机程序时,用于执行根据本说明书中所描述的实施例之一的方法,

-计算机程序,包括根据前述方面的计算机工具,其中,该程序工具存储在计算机可读的存储介质上,

-存储介质,其中数据结构存储在该存储介质上,并且其中该数据结构在被加载到计算机或计算机网络的主和/或工作存储区时适于执行根据本说明书中所描述的实施例之一的方法,

-计算机程序产品,具有程序代码工具,其中,该程序代码工具可存储在或被存储在存储介质中,当该程序代码工具在计算机或计算机网络上执行时,用于执行根据本说明书中所描述的实施例之一的方法,

-至少一个操作系统、其中存储有多个计算机可执行指令的计算机可读介质、协处理装置、计算装置以及带有计算机可执行指令的调制数据信号,用于执行根据本说明书中所描述的实施例之一的方法。

通过结合附图阅读说明书以及权利要求书,可以理解本发明的其他目的和优点。

附图说明

为了更完整地理解本发明,可参照附图阅读说明书。附图包括:

图1示出了企业信息集成平台的一般视图;

图2示出了把XML数据结构映射到本体的一般概述;以及

图3示出了示例性的数据结构。

具体实施方式

内容

1.系统的一般视图

2.F-Logic介绍

3.映射

3.1.数据库的映射

3.1.1.关系数据库到源本体的映射

3.2.XML映射

3.2.1.带有complexContent的XML参数映射到本体

3.3.Web服务映射

3.3.1.输入变量的落地

4.定义成参数化查询的外部视图

5.作为web服务的出版

附录A web服务的web服务模式的例子

附录B包含在依据附录A的web服务的web服务描述中的XML模式

附录C用于依据附录A的web服务的SOAP请求

1.系统的一般视图

图1示出了企业信息集成平台的一般视图。其中示出了若干数据源XML、DB1、DB2和RPC,RPC是远程过程调用并代表一种web服务。存在源本体100、102、104和106分别对应每个数据源。这些源本体被集成到集成本体108。该集成本体及其下层结构可通过预定义的外部视图V1、V2和V3来存取。对应这些外部视图的是web服务WS1、WS2和WS3。这些web服务可用于把查询输入到系统。推理机或运行时单元110被用于回答这些查询。在这一端,它把该查询输入通过web服务翻译成用该集成本体108的查询语言表示的查询。而且,它动态地访问本体结构100、102、104、106和108以及为回答该查询的对应规则。这些规则的一部分在源本体100、102、104和106与各数据源之间映射。这些映射包含内置函数(built-in)用于访问各数据源。运行时引擎110在使用规则评估查询的同时直接访问外部数据源。

根据示例性的第一实施例,本发明包含系统,优选的是计算机系统,用于统一查询符合不同数据模式的分布数据源。

该系统包含多个数据源,各数据源分别符合给定的数据模式。这些数据源的不同数据模式例如可以是关系数据库、XML文本、web服务等。不同的数据源可存储在不同的存储介质上、存储在网络中的不同计算机上、存储在不同的工厂,或者存储在一个计算机或一个硬盘驱动器上。

每种数据模式具有用来组织数据的结构以及数据模式查询语言,如SQL、Xquery、web服务的API的远程过程调用等。

该系统还包括多个源本体,各对应到一个数据源。每个源本体包括一组结构。通常,该组结构至少包括类和该类的特性。有时候在文献中,类(class)也被称作“类别(category)”,特性(property)也被称作“属性(attribute)”。通常,对象特性和各类之间的关系以及数据类型特性的继承等也结合到本体中。

该数据被称作类的实例。换言之,类是集合,而数据/实例是集合的成员。

优选实现作为类分层结构的对象模型。在分层结构之内,在预定级别上的各类被分别分派到更高级别的确定一个类,也即只允许单继承。一般来说,类结构也可以更一般地实现成无回路的图(acyclicgraph),对此可允许多继承。

例如类的例子可以是类“人”。该类“人”的特性的例子是人的“姓名”。类或数据可以通过对象特性联系起来,如人A和人B“合作”。

定义每个数据源和其对应的源本体之间的映射。利用该映射,把数据源的数据模式的结构映射到源本体的结构。如,对关系数据库模式,表(table)通常映射到源本体的类,而表的字段(field)通常映射到类的特性。

使用基于谓词逻辑的陈述性规则系统,实现各数据源和其对应的源本体之间的映射。陈述性规则系统的一个重要特征是规则计算的结果不依赖于规则定义的次序。

该映射包括工具(mean),用于通过数据源的数据模式查询语言来查询该数据源。

另外,该系统包括集成本体。该集成本体又包括一组结构,通常至少有类和特性。

在优选的实施例中,集成本体具有与其相关联的本体查询语言。该集成本体的本体查询语言不必与源本体的本体查询语言相同,尽管出于实用的原因通常是相同的。

该系统提供每个源本体与该集成本体之间的映射。从字面上看,集成本体是最高级的或全局的本体。利用该映射,各源本体的结构映射到该集成本体的结构。集成本体给出数据的统一视图。这使得可以做信息集成。

该映射不必把源本体的类映射到该集成本体的类,也不必把源本体的特性映射到集成本体的特性。这些本体可具有不同的结构,这可以适当地在个别情况下把特定类映射到特性。如,一个源本体可能具有类“激光打印机”,而集成本体可具有类“打印机”并带有特性“型号”,其实例(实现、数据)可以是“激光打印机”。

源本体和集成本体之间的映射还可以使用基于谓词逻辑的陈述性规则系统来实现。

该系统还包括用于输入与各数据源的数据有关的查询工具。

最后,至少存在一个基于谓词逻辑的推理单元,用于通过使用规则来评估查询。由该推理单元来回答查询。为此,该推理单元对规则评估,它选择适于回答问题的规则。在自顶向下的方法中,规则相继地从集成本体导出到相关的源本体。另外,把相关的源本体映射到相应数据源的规则包括用于通过该数据源的数据模式查询语言来查询该数据源的工具。这些工具把各查询翻译成该数据模式的语言。可以回答这些查询并返回结果。推理单元使用这些结果在web服务的级别上回答查询。因此,该推理单元用作运行时(runtime)单元来回答查询。利用来自本体的信息和规则,可直接查询下层数据源。它是单独的单元而不是本体结构的一部分。

本系统相对于现有技术的主要优点在于映射中所使用的强有力而灵活的规则。结构可以被转换;结构可以被重命名;值可以被改变、转换或计算。

基于本体和陈述性规则的系统提供了无与伦比的建模数据和过程的可能性。

而且,很容易把具有新数据模式的新数据源集成到本系统中。它可以在新的源本体和新的数据模式之间定义映射。在该源本体和集成本体之间的映射不需要新的编程的过程,只需纯的建模。

为了获得该系统的许多优点,关键是使该系统建立在谓词逻辑的基础上或基于谓词逻辑的规则的基础上,而不是建立在现有技术中常用的商业规则的基础上。对此需要做一些解释。如果我们把谓词逻辑限制在具有否定的霍恩(horn)逻辑(规范逻辑)而不是商业规则,并且规范逻辑规则应该至少与它们的外部表示如它们的句法密切关联。相对地,它们底层背景理论基本是不同的。规范逻辑有很好的理论基础:谓词逻辑的模型伦。Herbrand模型是事实的集合(有时候是无限的)。规范逻辑规则和实事的集合的意思由唯一的最小Herbrand模型来定义。这样,不严格地说,规范逻辑规则和实事的集合是实事集合的简化,即最小的Herbrand模型。该最小Herbrand模型的定义独立于给定的规则顺序、独立于给定的规则体顺序并独立于计算该模型的推理算法。对于商业规则的含义没有可用的理论。商业规则的含义由简单的推理算法Rete算法给出。该算法的结果严重依赖规则的顺序、规则体顺序和规则头中使用的操作。这样,对于规则含义的确定没有独立的理论,必须等待推理算法的回答,以得到规则集合的确切含义。更糟糕的是,每个商业规则系统的表现都是不同的。

为了提高本系统的易用性,可自动生成对应于数据源和其数据模式的源本体。同样可自动生成源本体和其对应的数据源之间的映射。

如所提到的,可使用谓词逻辑明确定义本体和本体之间的映射。这些模型可用推理机直接执行。这样,在实现阶段就不会损失信息,也无需信息的再解释,并且该执行对应于原始含义,而且该执行可以立刻开始。

为了加速系统的工作,用作推理引擎的推理单元可在查询评估期间动态存取本体的规则和结构。当推理单元存取存储有模型的数据结构,就给出了实现动态存取的方法。这样就可以动态建模该数据集成,并同时查询所建模的结构。也可以对模型测试。而且,这种系统的知识工程师和用户可以同时工作在系统上。

在优选的实施例中,集成本体具有与其相关联的本体查询语言,并且该系统包括工具用于把每个查询翻译成该集成本体的本体查询语言。

为了进一步提高该系统的灵活性和性能,至少一个本体补充有基于谓词逻辑的陈述性规则系统,用于表示附加的信息。

为了符合流行的标准,优选实施例中的该系统包括至少一个web服务形式的查询单元,用于输入与该集成本体有关的查询。把该查询由web服务输入翻译成该集成本体的本体查询语言,使得可对分布数据进行统一的查询。一般来说,对所有相关的查询定义单独的web服务。

为了使数据模式查询语言的能力尽可能强并加速查询的计算,该系统包括用于标示查询或规则或可结合成该数据源的数据模式查询语言中的复杂查询的规则的组合的工具,以及用于把这些查询或规则或者规则组合翻译成该数据源的数据模式查询语言中的复杂查询。如对关系数据库,结合了不同表和字段以及它们的数据项的查询可以被标示并被翻译成相应的SQL查询。

为了在运行时进一步加速查询的计算,该系统包括工具用来动态过滤那些在web服务级别上对回答该查询没有影响的数据或规则或查询。

为了更好满足不同用户组的需求,该系统可包括多个集成本体,集成不同的数据源或集成相同的数据源,并且表示数据上的不同视图。

2.F-Logic介绍

为了明确表达查询,通常使用逻辑语言F-Logic作为本体查询语言(参见J.Angele,G.Lausen:"Ontologies in F-Logic"in S.Staab,R.Studer(Eds.):Handbook on Ontologies in Information Systems.International Handbooks on Information Systems,Springer,2003,page29)。为了获得F-Logic功能性的某些直观理解,使用下述的例子,在其中对西方世界所熟知的圣经人物之间的关系做映射。

首先,定义本体,即类和其分层结构以及一些实事:

abraham:man.

sarah:woman.

isaac:man[fatherIs->abraham;motherIs->sarah].

ishmael:man[fatherIs->abraham;motherIs->hagar:woman].

jacob:man[fatherIs->isaac;motherIs->rebekah:woman].

esau:man[fatherIs->isaac;motherIs->rebekah].

这里明确定义了一些类:"man"和"woman"。如亚伯拉罕(Abraham)是男人(man)。类"man"具有特性"fatherIs"和"motherIs",这代表双亲。例如男人以撒(Isaac)有父亲亚伯拉罕(Abraham)和母亲撒拉(Sarah)。在这个特定的例子中,各特性是对象特性(objectproperties)。

尽管F-Logic适于定义本体的类结构,但是,在许多情况下,也使用本体语言RDF或OWL用于这种目的。

另外,给出某些规则来定义各类之间的依赖性:

FORALL X,Y X[sonIs->>Y]<-Y:man[fatherIs->X].

FORALL X,Y X[sonIs->>Y]<-Y:man[motherIs->X].

FORALL X,Y X[daughterIs->>Y]<-Y:woman[fatherIs->X].

FORALL X,Y X[daughterIs->>Y]<-Y:woman[motherIs->X].

利用F-Logic编写的规则包括规则头(左侧)和规则体(右侧)。这样,上面所给例子中的第一条规则的意思就是:如果Y是男人,其父亲是X,则Y是X的儿子之一(可能有多个儿子)。单箭头"->"表示对给定的数据类型(datatype)或对象特性只可能有一个值,而双箭头"->>"表示对特性可赋予多于一个的值。

最后,明确构造一个查询,查找“生有儿子且该儿子的父亲为亚伯拉罕的所有女人”。换句话说,就是查找同亚伯拉罕生过儿子的所有女人:

FORALL X,Y<-X:woman[sonIs->>Y[fatherIs->abraham]].

该查询的文法类似于规则定义,但省去了规则头。

查询结果是撒拉和夏甲:

X=sarah

X=hagar

3.映射

3.1.数据库的映射

对于数据库的映射,定义特殊的内置函数(built-in)。利用该内置函数可以存取数据库。它建立诸如SQL的查询来存取数据库。该内置函数结合到映射规则中。

下面的例子说明了在作为数据库类型的MS SQLServer上对数据库的存取,运行在称作"host"的特殊计算机或端口上。该数据库包含表"Person",该表含有有关人的"Id"、"name"和"town"的信息。映射规则具有格式:

              X:Person[hasName->Y;livesInTown->Z]<-

        dbaccess("MS SQL",host,Person,f(Id,X,Name,Y,Town,Z)).

3.1.1.关系数据库到源本体的映射

关系数据库包含一组表。每个表由固定数目的命名列构成。对每个列给定数据类型。表的内容必须符合这些数据类型。对表中的行,必须给出(唯一)关键码,用于明确标示一个行。该关键码可由某些列的值构成,或使用如数字的另外的单独的值。外码定义到其他表的链接;它们表示其他表的关键码,因此代表对象特性。

按如下来定义关系数据库到其对应的源本体的映射:

-每个表映射到本体中的类。

-表中不表示外码的每个列,即不表示关系的每个列,映射到本体的对应类的数据类型特性。

-表示外码的每个列映射到本体的二元关系。

-表中的每个行映射到本体的实例。由该行的关键码或由该行的所有值(当没有可用的关键码)生成该实例的唯一标识符。

-该行中的值映射到所述的数据类型特性值和对象特性。

可按下述方式对关系数据库的数据模式自动生成源本体和映射:

-类名是表名。

-特性名是列名。

-如果有主关键码(primary key),则由数据库名、数据库位置、表名加上该主关键码生成该实例的唯一标识符。

-如果没有唯一关键码,使用该行中所有的值v1、...、vn通过连接这些值建立唯一的关键码。

-通过该行中的值直接给出实例的特性值。

-通过所述的外码的关键码转换建立对象特性。

参加例子:表"person"包含"id"、"name"、"city"、"street"、"zip"、"married"。"id"是关键码。该表包含有数据项"1"、"Peter"、"New York"、"King street"、"12"、"2"。

相应的源本体是如下的样子(按F-Logic的形式):

Person[

   name=>STRING;

   city=>STRING;

  street=>STRING;

  zip=>NUMBER;

  married=>Person].

通过下述的规则给出该表到概念"Person"的映射:

f(database,person,X):Person[id->X;name->Y;city->Z;street->U;zip->V;married->f(database,foreigntablename,W)]<-dbaccess(database,person,access(id,X,name,Y,city,Z,street,U,zip,V,married,W)).

源本体以及从该表到源本体的映射因此可自动生成。

3.2.XML映射

在XML实例和F-Logic实例或源本体的结构之间需要映射。

对于XML文档,可以产生XML模式,其包含XML文档中包含的数据的数据类型定义。利用这样的XML模式,可以验证对应的XML文档,即可在这方面来检查该文档中的数据,看其是否符合正确的数据类型。验证过程产生XML文档的注解版本,对每个元素或XML实例包含有PSVI实例(PSVI=post schema validation info set,后模式验证信息集合),其参照XML模式的适当数据类型。PSVI实例包含有关XML实例的数据类型的信息。

现在,我们利用XML模式来考察XML实例,在设计时其具有固定的模式。对XML实例给出PSVI实例,其对类型信息做注解并从XML表示的具体词汇中做摘要。

该映射应该尽可能的保留信息。当然丢失某些信息也是可接受的,因做这种保留的工作量太大,如

-通过嵌套序列、选择或所有模型组来约束复杂内容模型。

-利用如0、1以及无界的量来约束最小发生次数(MinOccurs)和最大发生次数(MaxOccurs)。

有利用相关联的XML模式结构把XML元素节点映射到本体实例和模式的模式驱动映射。

该映射按如下来定义:

-把XML simpleType元素说明映射到本体的datatype特性定义(如表的列)。

-把XML complexType定义映射到本体类定义。

-把XML complexContent元素说明映射到本体的对象特性定义。

-把带有属性的XML simpleContent元素说明映射到本体的对象特性定义。

通过下面的例子说明该映射。利用附录B中的目录模式来说明该例子的XML模式。在图3中可见该结构。

下面的XML文档的例子适合该模式。<ProductDetails="tns:productDetailsType"xmlns="http://www.example.com/ProductCatalog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tns="http://www.example.com/ProductCatalog.xsd"xmlns:xs="http://www.w3.org/2001/XMLSchema"xsi:schemaLocation="http://www.example.com/ProductCatalog.xsdProductCatalog.xsd">

<Weight>25</Weight>

<WeightUnit>kg</WeightUnit>

<Dimensions>

   <Height>27</Height>

   <Width>24</Width>

   <Depth>21</Depth>

</Dimensions>

<DimensionsUnit>cm</DimensionsUnit>

<Colour transparency="50">red</Colour></ProductDetails>

对该带有简单和复杂类型元素说明的XML模式,产生下述的本体,该例子用语言F-Logic表达:

productDetailsType[].

dimensionsType[].

productDetailsType[Weight=>xsd#INTEGER;

 WeightUnit=>xsd#STRING;

 Dimensions=>>dimensionsType;

 DimensionsUnit=>xsd#STRING;

     Colour=>colourType].

dimensionsType[Height=>xsd#INTEGER;

 Width=>xsd#INTEGER;

 Depth=>xsd#STRING].

colourType[value=>xsd#STRING;

 transparency=>xsd#INTEGER].

该XML映射把上述XML实例映射到下述的本体的实例:

instance2productDetailsType:productDetailsType.

instance2productDetailsType[Weight->>"24,6";

 WeightUnit->>"pounds";

 Dimensions->>instance4dimenstionsType;

DimensionsUnit->>"inches";

    Colour->>instance5ColourType].

instance4dimensionsType:dimensionsType.

instance4dimensionsType[Width->>24.0;

 Depth->>21.0;

 Height->>26.0].

instance5ColourType:ColourType.

instance5ColourType[value->"red”;

transparency->>50].

图2示出了XML数据结构到本体映射的一般视图。模式定义映射到模式定义,并且实例映射到实例。

这通过一般内置函数(generic built-in)来实现,其具有作为输入的XML模式信息及其到本体定义的映射。通过存取XML实例,该内置函数具有所有的信息,用于构造相应的作为带有本体模式信息的变量给出的本体实例。这根据上述的模式驱动映射来实现。

根据该类属XML内置函数,该映射通过生成的F-Logic映射规则来实现,该生成的F-Logic映射规则通过XML内置函数把生成的本体类和特性映射到相应的XML构造。下面是这种生成规则的例子:FORALL VAR0,VAR1,VAR2,VAR3,VAR4,VAR5(id("productDetailsType",VAR0):

    productDetailsType[

 Weight->>VAR1;

 WeightUnit->>VAR2;

 Dimensions->>VAR3;

 DimensionsUnit->>VAR4;

     Colour->>VAR5]<-XMLBuiltin("datasource-URL",VAR0

"XMLSchemaDefiniton”,”MappingToOntology”,

     F(VAR1,VAR2,VAR3,VAR4,VAR5))

该内置函数生成Xqueries。该Xqueries的XML结果根据该规则映射到本体实例。

3.2.1.把带有complexContent的XML参数映射到本体

一般来说,web服务方法本身可以映射到源本体的类(概念),其所有参数映射到数据类型或对象特性。SimpleType XML元素说明象表那样映射,即可以直接映射到数据类型或对象特性。需要解决的问题是带有复杂内容(complexContent)的参数。

下面的表1定义了从带有包括复杂内容的XML模式信息的XML元素节点到F-Logic/本体模式(以F-Logic表示的本体)的映射。

  XML schema  F-Logic schema  命名的complexType  类带有所有元素的特性和包含在complexType  内容模型中的属性。忽略模型组(序列、选项、  所有)  <xs:complexType  name="productDetailsType">    <xs:sequence>      <xs:element    name="Weight"  type="xs:int"/>      <xs:element name="WeightUnit"  type="xs:string"/>      <xs:element name="Dimensions"  type="tns:dimensionsType"/>      <xs:element  name="DimensionsUnit"  type="xs:string"/>    </xs:sequence>  </xs:complexType>  productDetailsType[    Weight=>xs#NUMERIC;    WeightUnit=>xs#STRING;    Dimensions=>DimensionsUnitType]  匿名complexType  类带有从路径到complexType的生成名  对匿名complexType使用封装元素名
  <xs:complexType  name="productDetailsType">    <xs:sequence>  …      <xs:element name="Unit">         <xs:complexType><xs:seque  nce>              <xs:element  name="unitName"type="xs:strmg"/>              <xs:element  name="unitSpecification"  type="xs:anyURI"/>          </xs:sequence></xs:complex  Type>      </xs:element>  ...  </xs:sequence>  </xs:complexType>  productDetailsType.Unit[    unitName=>xs#STRING;    unitSpecification=>xs#STRING]  元素complexContent的元素  ObjectProperty带有对complexType的类范围,  如关系  <xs:element    name="ProductDetails"  type="tns:productDetailsType"/>  <xs:complexType  name="productDetailsType">    <xs:sequence>      <xs:element      name="Weight"  type="x=s:int"/>      <xs:element name="WeightUnit"  type="xs:string"/>      <xs:element name="Dimensions"  type="tns:dimensionsType"/>      <xs:element  name="DimensionUnit"  type="xs:string"/>    </xs:sequence>  </xs:complexType>  [..  ProductDetails=>productDetailsType  ]  productDetailsType[    Weight=>xs#NUMERIC;    WeightUnit=>xs#STRING;    Dimensions=>DimensionsUnitType;    DimensionUnit=>xs#STRING  ]  DimensionsUnitType[   Height=>xs#NUMERIC;   Width->xs#NUMERIC:   Depth->xs#NUMERIC;]  带有simpleContent的元素  datatypeProperty  <xs:element        name="Height"  type="xs:int"/>  [weight=>xs:int]  属性  DatatypeProperty带有名字前缀@  <xs:e              anAttribute="EUR"  type="xs:string"/>  [@anAttribute=>xs#STRING]  MinOccurs=0  MaxOccurs>1  =>  ==>  subtyping  subtype
  <xs:complexType name="Employee"    <xs:complexContent>      <xs:extension base="Person">        <xs:sequence>         <xs:element name="loan"  type="xs:string">  Employee::Person[  load=>xs#integer  ]  带有complexContent的通配符元素  对类无特别特性定义  <xs:element name="ProductDetails">  <xs:complexType  name="productDetailsType">    <xs:sequence>      <xs:any  maxOccurs=”unbounded”/>   </xs:sequence>  </xs:complexType>  </xs:element>  [..  ProductDetails=>productDetailsType  ]

表1

下述的表2定义了从带有包括复杂内容的XML模式信息的XML元素节点到F-Logic/本体实例(以F-Logic表示的本体)的映射。

  XML instance  (PSVI)  F-Logic instance  带有从PSVI指定xsi:type的元素复杂  内容  对象带有生成的对象标识符(由对象特性参  考)  <ProductDetails  xsi:type="productDetailsType">    <Weight>24.6</Weight>    <WeightUnit>pounds</WeightUnit>    <Dimensions>      <Height>26</Height>      <Width>24</Width>      <Depth>21</Depth>    </Dimensions>    <DimensionUnit>inches</Dimension  Unit>  </ProductDetails>  ProductDetailsType(id1):productDetailsType[  Weight->24.6;  WeightUnit->"pounds";  Dimensions->DimensionsUnitType(id2)    DimensionsUnitType(id2):  DimensionsUnitType[   Height->26;   Width->24;   Depth->21]  没有命名类型的复杂内容元素节点  带有生成的对象标识符的对象(由对象特性  参考)
    <Unit>     <unitName>kg      </unitName>     <unitSpecification>http://www.std.or  g/unit/measures       </unitName>  </Unit>  ProductDetailsType.Unit(Obj1):  productDetailsType.anType1[unitName->  "kg";    unitSpecification->  "http://www.std.org/unit/measures"]  复杂内容(complexContent)元素节点  对象类型特性实例  <ProductDetails  xsi:type="productDetailsType">     <Weight>24.6</Weight>     <WeightUnit>pounds</WeightUnit>     <Dimensions>       <Height>26</Height>       <Width>24</Width>       <Depth>21</Depth>     </Dimensions>     <DimensionUnit>inches</Dimension  Unit>  </ProductDetails>  [..  ProductDetails->productDetailsType(id1)  ]  productDetailsType(id1):productDetailsType[  Weight->24.6;  WeightUnit->"pounds";  Dimensions->DimensionsUnitType(id2);  DimensionUnit->"inches"  ]   DimensionsUnitType(id2):  DimensionsUnitType[   Height->26;   Width->24;   Depth->21]  元素(Element)  数据类型特性(datatypeProperty)  <weight xsi:type="xs:integer>4711  </weight>  [weight->4711]  XML属性节点  Datatype Property实例  <e anAttribute="EUR"></e>  [@anAttribute->"EUR"]  假定:XML元素没有任何类型注解  对象特性实例  <ProductDetails    <Weight>24.6</Weight>    <WeightUnit>pounds</WeightUnit>     <DimensionUnit>inches</Dimension  Unit>  </ProductDetails>  [..  ProductDetails->GeneralWSInstance(id1)  ]  GeneralWSInstance(id1):GeneralWSInstance[  Weight->24.6;  WeightUnit->"pounds";  Dimensions->GeneralWSInstance(id2);  DimensionUnit->"inches"  ]

表2

忽略下述的模式概念:

模型组序列中的差异、选择和所有混合内容。

不映射的XML节点:

-处理指令节点以及

-注释

3.3.Web服务映射

Web服务可以被看作是带有一组输入参数和一组输出参数的远程过程调用(RPC),其包括结果。

例如,发布城市的当前温度信息的web服务可具有作为输入参数的邮政编码以及作为输出参数的温度。相应的源本体可具有类“地点(place)”,其带有两个特性:“邮政编码(zip code)”和“温度(temperature)”。

这里只考虑文档风格的web服务,其中所有的输入参数包含在输入消息的单一的XML元素中,并且所有的输出参数包含在输出消息的单一XML元素中。所述XML元素由XML模式定义来描述。该web服务由参照XML模式定义的WSDL(web服务描述语言)来描述。

附录A包含下述的定义web服务getProductDetails的例子,其使用在描述XML映射中使用的相同模式的元素。

Web服务操作映射到本体类,该类把输入消息的元素和输出消息的元素作为特性。这些元素的内容如上述的XML映射所规定的映射到本体定义。因此上述的web服务将产生下述的本体定义。

//CLASSES--------------------

getProductDetailsOperation[].

productDetailsType[].

dimensionsType[].

getProductDetailsType[].

//PROPERTIES--------------------

getProductDetailsOperation[

 ProductNumber=>ProductNumberType;

 ProductDetails=>productDetailsType].

productDetailsType[Weight=>xsd#INTEGER;

 WeightUnit=>xsd#STRING;

 Dimensions=>>dimensionsType;

 DimensionsUnit=>xsd#STRING;

 Colour=>colourType].

dimensionsType[Height=>xsd#INTEGER;

 Width=>xsd#INTEGER;

 Depth=>xsd#STRING].

colourType[value=>xsd#STRING;

transparency=>xsd#INTEGER].

在附录C中,有根据给定的WSDL定义的SOAP请求的例子。SOAP代表“简单对象存取协议(Simple Object Access Protocol)”;它是轻便的基于XML的消息协议,在向网络上发送web服务请求中的信息并响应消息之前,使用该协议编码这些信息。

该web服务映射把上述的web服务的SOAP请求映射到下述的本体实例。注意只有第一个实例是专门针对该web服务映射的。其他的实例与XML映射例子中的相同。

instance1GetProductDetailsOperation:getProductDetailsOperation.

instance1GetProductDetailsOperation[ProductNumber->>605001;

  ProductDetails->>instance2productDetailsType].

instance2productDetailsType:productDetailsType.

instance2productDetailsType[Weight->>"24,6";

  WeightUnit->>"pounds";

  Dimensions->>instance4dimenstionsType;

  DimensionsUnit->>"inches";

  Colour->>instance5ColourType].

instance4dimenstionsType:dimensionsType.

instance4dimenstionsType[Width->>24.0;

   Depth->>21.0;

  Height->>26.0].

  instance5ColourType:ColourType.

  instance5ColourType[value->"red”;

  transparency->>50].

根据上面规定的映射,一般内置函数"webservice"实现该对应的SOAP请求到本体实例的转换。该内置函数获得WSDL描述及其到本体定义的映射作为输入。由此从SOAP请求的结果构造本体实例。

根据该类属web服务内置函数,通过生成的F-Logic映射规则实现该映射,所述规则把生成的本体类和特性映射到该web服务内置函数。下面是生成的规则的例子:

FORALL PN,PD

getProductDetailsOperation(PN):getProductDetailsOperation

     [ProductNumber->PN;ProductDetails->PD]

<-webservice("http://www.example.com/Products",

input(”ProductNumber”,PN),

output(”ProductDetails”,PD))

附录A至C示出了web服务,通过相应的的SOAP请求描述web服务,以及说明该请求如何映射到本体模式和实例。

3.3.1.输入变量的落地

为了使web服务能够产生结果或输出,必须仔细定义输入。输入可以不包含变量;所有的变量必须要赋值。换言之,所有的变量必须是“落地的”。如果本体的特性具有实例或值,则称该特性是“落地的(grounded)”。

下面的例子说明了特性的落地。该例子中,通过下述的规则把产品细节(Product Details)从web服务映射到本体:

FORALL PN,PD

       getProductDetailsOperation(PN):

       getProductDetailsOperation[

       ProductNumber->PN;ProductDetails->PD]

    <-webservice(http://

       www.example.com/Products,

                input("ProductNumber",PN),

                output("ProductDetails",PD)).

由于产品号是对该web服务的输入,它必须有一个值,它必须是落地的。如果有另外的规则把该源本体映射到集成本体,如:

FORALL X,Y

     X:Product[PoNumber->Y]<-

X:getProductDetailsOperation[ProductNumber->Y].

则该集成本体的数据类型特性“PONumber”必须是落地的。另一方面,对产品号可用性的查询检查,如:

FORALL X<-X:Product[PoNumber->5].

是可执行的,由于值5是落地的值,因此对该web服务的输入("ProductNumber",5)是落地的,并且该web服务是可执行。

对此,可以定义本体定义的扩展,这种扩展可以把本体类的对象或数据类型特性标记成落地的。只有对这样的本体元素的查询才是允许的,其中这些元素是直接落地的或者等同于其他落地的特性。如果输入是落地的,或者换句话说,被标记成必须落地的,则这些直接依赖或(通过规则)间接依赖该WSDL操作的特性定义就是落地的。依赖该WSDL的输入的特性定义事先不落地。

例如,对集成本体的查询,当查询所有产品号是不允许的:

FORALL X,Y<-X:Product[PoNumber->Y].

因数据类型特性"PoNumber"不落地,对web服务内置函数的输入参数没有可用的值(通过规则来传递)。因此,不能执行该web服务,也不能回答该查询。

解决该问题的另一个方法是通过使用推理机的指令。在该实施例中,推理机知道那个对象或数据类型特性必须落地(它们在本体中必须是未标记的),并拒绝没有适当落地的查询。推理机通过规则图(系统图)来传递所述落地的特性。因此,不需要通过说明哪个特性必须落地以及哪个特性不需要落地来扩展本体。

如果集成本体的某些特性或类落地,通过该集成本体的落地的本体特性可以扩展映射,以便使WSDL操作的输入消息的部分落地。如,通过馈送带有来自集成本体的值的web服务的输入值,可以扩展web服务的映射。如果该集成本体知道所有可能的产品号(如通过从数据库的映射),这些产品号可以用作对web服务的输入:

FORALL PN,PD,X

          getProductDetailsOperation(PN):

          getProductDetailsOperation[

          ProductNumber->PN;ProductDetails->PD]

    <-X:Product[PoNumber->PN]and

          webservice(http://www.example.com/Products,

          input(“ProductNumber”,PN),

          output(“ProductDetails”,PD)).

因此,扩展了映射。使用来自集成本体的产品号通过值来初始化变量PN,并因此使web服务的输入落地。这使得诸如

FORALL X,Y<-X:Product[PoNumber->Y].

的查询可被回答,因对于所有的产品号,该本体知道(如通过数据库映射)可以执行web服务内置函数。

4.定义成参数化查询的外部视图

在集成数据上的不同外部视图可通过指定预定义的查询来定义。它们可被理解成预定义的对该集成本体的参数化查询,并使用该集成本体的查询语言来构成。

4.1.例子

考察在web服务输入级别上提出的查询如何被转换到web服务数据源级别上。然后再考察上述给出的web服务getProductDetails的例子。

我们给出一个对包含有附录A中的例子web服务Catalog的集成本体的查询例子:

Forall X,Y,Z,U<-X:getProductDetails[ProductNumber->50600;getProductDetails->Y[Weight->Z;WeightUnit->U]].

5.Web服务输入

对每个外部视图,可以定义该系统的相应web服务访问,这使得可以相应地查询该系统。在最一般的情况下,这样的web服务以XML文档作为输入并生成XML文档作为输出或回答。这样的web服务被称作“文档风格的web服务”。

这样,对上述给出的web服务getProductDetails的例子,输入的XML文档可以是如下的样子

<ProductNumber>

123

</ProductNumber>

输出可以是如下的样子

<ProductDetails>

<Weight>60</Weight>

<WeightUnit>kg</WeightUnit>

</ProductDetails>

更详细的解释在后面给出。

尽管结合特定的实施例说明并示出了本发明,本领域的普通技术人员能够理解,如所说明的和所主张的权利,在不脱离这里所说明的本发明的基本原理的前提下,可以有各种变化和修改。在不脱离其精神实质和基本特征的前提下,本发明可以用其他的特定形式来实现。从各个方面来说,所给出的实施例都应该被理解成是示例性的,而不是限制性的。因此,本发明的范围由权利要求书来限定,而不是由上述的说明来限定。权利要求的等价物的含义和范围内的所有变化都在所主张的权利要求之内。

引用的参考文献

美国专利US 2004/0216030 A1

美国专利US 2004/0093559 A1

美国专利US 2004/0093344 A1

美国专利US 2003/0179228 A1

美国专利US 2003/0177481 A1

美国专利US 2003/0163597 A1

美国专利US 2003/0163450 A1

美国专利US 2003/0120665 A1

美国专利US 2003/0101170 A1

J.Angele,G.Lausen:"Ontologies in F-Logic"in S.Staab,R.Studer(Eds.):Handbook on Ontologies in Information Systems.InternationalHandbooks on Information Systems,Springer,2003,page 29ff..

A.Van Gelder,K.A.Ross,and J.S.Schlipf:"The well-foundedsemantics for general logic programs";Journal of the ACM,38(3):620-650,July 1991.

J.D.Ullman:"Principles of Database and Knowledge-Base Systems";vol.I,Computer Sciences Press,Rockville,Maryland,1988.附录A

Catalog WebserviceProductCatalog.wsdl<wsdl:definitionsxmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"xmlns:cat="http://www.example.com/ProductCatalog.xsd"xmlns:tns="http://www.example.com/ProductCatalog.wsdl"xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"targetNamespace="http://www.example.com/ProductCatalog.wsdl"><wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:import namespace="http:// www.example.com/ProductCatalog.xsd" schemaLocation="ProductCatalog.xsd"/> </xs:schema></wsdl:types><wsdl:message name="getProductDetailsRequest"> <wsdl:part name="request" element="cat:ProductNumber"/></wsdl:message><wsdl:message name="getProductDetailsResponse"> <wsdl:part name="Body"element="cat:ProductDetails"/></wsdl:message><wsdl:portType name="CatalogPortType"> <wsdl:operation name="getProductDetails"><wsdl:input name="getDetailsRequest"<!-- SIPO <DP n="47"> --><dp n="d47"/> message="tns:getProductDetailsRequest"/> <wsdl:output name="getDetailsResponse" message="tns:getProductDetailsResponse"/> </wsdl:operation></wsdl:portType><wsdl:binding name="CatalogSoapBinding" type="tns:CatalogPortType"> <soap:binding style="document"transport="http://   schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="getProductDetails">  <soap:operation/>  <wsdl:input>   <soap:body parts="request"use="literal"/>  </wsdl:input>  <wsdl:output>   <soap:body parts="Body"use="literal"/>  </wsdl:output> </wsdl:operation></wsdl:binding><wsdl:service name="getProductDetails"> <wsdl:port name="getProductPort"   binding="tns:CatalogSoapBinding">  <soap:address location="http://  www.example.com/getProductDetails"/> </wsdl:port></wsdl:service></wsdl:definitions>
附录B
Catalog schemaProductCatalog.xsd<?xml version="1.0"encoding="UTF-8"?> <xs:schema targetNamespace="http://  www.example.com/ProductCatalog.xsd"<br/> xmlns:tns="http://www.example.com/ProductCatalog.xsd"<br/> xmlns:xs="http://www.w3.org/2001/XMLSchema"  elementFormDefault="qualified">  <xs:element name="ProductNumber"type="xs:int"/>  <xs:element name="ProductDetails"  type="tns:productDetailsType"/>  <xs:complexType name="productDetailsType">   <xs:complexContent>  <xs:restriction base="xs:anyType">   <xs:sequence>  <xs:element name="Weight"   type="xs:int"/>  <xs:element name="WeightUnit"   type="xs:string"/>  <xs:element name="Dimensions"   type="tns:dimensionsType"/>  <xs:element name="DimensionsUnit"   type="xs:string"/>  <xs:element name="Colour"   type="tns:colourType"/>   </xs:sequence>  </xs:restriction><!-- SIPO <DP n="49"> --><dp n="d49"/>   </xs:complexContent> </xs:complexType> <xs:complexType name="colourType">   <xs:simpleContent>  <xs:extension base="xs:string">   <xs:attribute name="transparency"  type="xs:int"/>  </xs:extension>   </xs:simpleContent> </xs:complexType> <xs:complexType name="dimensionsType">   <xs:complexContent>  <xs:restriction base="xs:anyType">   <xs:sequence>  <xs:element name="Height"  type="xs:int"/>  <xs:element name="Width"  type="xs:int"/>  <xs:element name="Depth"  type="xs:int"/>   </xs:sequence>  </xs:restriction>   </xs:complexContent> </xs:complexType></xs:schema>
附录CSOAP request 输入消息 <SOAP-ENV:Envelope                                        xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/"           xmlns:SOAP- ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <SOAP-ENV:Body>

      <tns:ProductNumber xmlns:tns="http://www.example.com/ProductCatalog.xsd" xsi:schemaLocation="http://www.example.com/ProductCatalog.xsd ProductCatalog.xsd">50600</tns:ProductNumber>

    </SOAP-ENV:Body>

 </SOAP-ENV:Envelope> 输出消息 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://

          schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <SOAP-ENV:Body>

      <tns:ProductDetails xmlns:tns="http://www.example.com/ProductCatalog.xsd" xsi:schemaLocation="http://

  www.example.com/ProductCatalog.xsd ProductCatalog.xsd">

    <tns:Weight>25</tns:Weight>

    <tns:WeightUnit>kg</tns:WeightUnit>

    <tns:Dimensions>

       <tns:Height>27</tns:Height>

       <tns:Width>24</tns:Width>

       <tns:Depth>21</tns:Depth>

    </tns:Dimensions>

    <tns:DimensionsUnit>cm</tns:DimensionsUnit>

    <tns:Colour transparency="50">red</tns:Colour>

 </tns:ProductDetails>   </SOAP-ENV:Body></SOAP-ENV:Envelope>

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号