`
JAVA海洋
  • 浏览: 626962 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

使XML本地化和关系化

阅读更多
Oracle XML DB提供本地化格式和关系数据库访问。

  XML正快速地成为企业间数据交换的首选语言。然而,大多数企业把它们的数据存储在如Oracle9i数据库那样的关系数据库中。那么你怎样将分层次的、以文档为中心的XML和表格式的面向集合的关系数据库连接起来?你是把XML文档作为文件存储在文件系统中?还是把XML文档分开,把数据存储在关系数据库中?在两种方法间进行选择时需要根据你使用数据的方式进行权衡。但如果你不必进行选择呢?如果你可以同时使用两种方法,你会如何做呢?你可以使用Oracle9i数据库第2版中叫做XML DB知识库(XML DB Repository)的新特性。

  XML DB知识库说明

  Oracle XML DB既不是一个单独的产品也不是一个你必须安装的单独选项。Oracle XML DB指的是在直接内置于Oracle9i数据库的XML特性和技术的集合。其中一个关键特性就是XML DB知识库。这个知识库使你能够在Oracle9i数据库第2版中直接存储XML文档。一旦你的XML文档存储在该知识库中,你就能够以XML为中心的方式或以关系为中心的方式访问XML数据。

  要把XML数据存储在你的数据库中,你只需简单地使用FTP、HTTP或WebDAV等所有行业标准的协议写一个XML文档文件即可。而从数据库中获取XML数据就像执行一个SQL查询或使用上述协议之一读文件一样简单。

  场景设置

  假设你正在销售独立艺术家制作的CD。你需要和主要的音乐商店、在线站点和艺术家自身交换信息。你已经开发了用来描述CD内容的如清单1所示的XML文档格式,现在想利用XML DB 知识库把信息存储在数据库中。你想通过SQL轻松地访问数据并轻松地访问本地XML文档。简而言之,你希望数据既具有关系特性又具有层次特性。在这篇文章中,我是你的DBA,实现它是我的工作。

  注册XML模式

  我的第一步是使用XML DB知识库注册你的XML模式。当我注册一个XML模式时,该知识库创建能够保存那个模式实例的对象类型和对象表。下面对通过SQL*Plus执行的dbms_xmlschema.registerURI的调用从http://gennick.com/cd.xsd获取如清单2中所示的XML模式,然后注册它:

BEGIN
dbms_xmlschema.registerURI(
'cd.xsd',
'http://gennick.com/cd.xsd');
END;
/

  注意:我除了需要对各种模式对象类型的CREATE权限外,为了注册模式和创建这篇文章中的例子我还需要ALTER SESSION和QUERY REWRITE权限。

  清单3显示了由于注册CD模式而创建的一些结构和对象。一个名字是CD331_TAB的XML表被创建来保存模式的实例:在知识库中的每个CD文档将由这个表中的一行来表示。我可以通过查询USER_XML_TABLES数据字典视图得到XML表的一个列表。在这个例子中,我简单地在模式注册前后查询视图然后查找新的表名。CD331_TAB中的每一行将包含一个CD327_T类型的实例,这个类型对应于我们的XML模式来创建的。XML文档的第一层元素被表示为CD327_T类型的属性,属性名和XML字段名相匹配。例如,该对象类型中的Title字段直接对应于XML模式中的Title元素。Songs字段对应于Songs元素。Songs是XML模式中的一个复杂元素,同样地它被映射到另一个对象类型"Songs328_T"。如果我使用SQL*Plus命令DESCRIBE "Songs328_T",并继续研究Songs字段的定义,我会看到歌曲集合最终被作为一个VARRAY实现,在VARRAY中,每个元素都表示一首歌曲。

  当我注册一个模式时,我可以控制Oracle9i数据库生成的对象和类型名;我也可以控制被用来存储我的XML数据的特定数据类型。可以通过使用XML DB知识库定义的属性和oraxdb名字空间的部分注释XML模式来进行这些控制。当我不提供那些属性时,Oracle9i数据库为我生成它们,我可以通过查看存储在该知识库中的模式版本来简单地浏览Oracle9i数据库所生成的内容。图1说明了你如何能够方便地访问知识库数据,这次是通过HTTP,使用一个标准的Web浏览器来访问的。图1显示了我的知识库中的CD模式的一部分,你可以看到模式注释,它们全都以"oraxdb"开始。注意,URL使用8080端口,它是知识库使用的默认HTTP端口。

  默认情况下,注册模式时创建的全部对象将属于注册模式的用户所有。在这个例子中,我拥有清单3中的表和类型以及其他与该CD模式相关的所有对象。因为是我注册了那个模式,所以任何我保存到知识库中的XML文件(是该CD模式的实例)将被拆开然后存储在CD331_TAB表中。该模式和注册是特定于我的。其他用户保存的CD文件将不会被存储在我的表中。你可以对dbms_xmlschema.register模式使用一个可选参数,来创建一个影响所有用户的全局模式,以便所有用户都可以把CD文档保存到该表中。

  创建XML文件夹

  如果要把CD XML文档存储在XML DB知识库中,我就需要一个存放它们的文件夹。要创建一个文件夹,我作为SYSTEM用户登录到Oracle并执行清单4中的PL/SQL块。调用dbms_xdb.createfolder创建名为/CD的第一层文件夹。PL/SQL块然后使用dbms_xdb.setAcl过程创建把所有文件夹权限赋予拥有者(也就是SYSTEM用户)、把读权限赋予其他所有用户的访问控制列表(ACL)。下一步为了把文件夹的拥有者由SYSTEM改变为GENNICK,需要对资料库的RESOURCE_VIEW调用UPDATE语句。在文件夹创建后,提交是重要的;直到你提交后,该文件夹才对其他会话可见。现在我可以作为GENNICK使用FTP或WebDAV连接并把XML文件保存到/CD文件夹中。

  保存XML文档

  一旦我注册了模式然后创建一个文件夹来保存我的XML文档,把文档保存到知识库就像拷贝文件那样简单。清单5显示了一个拷贝(清单1中所示的)LegendsOfTheGreatLakes.xml文件到知识库的FTP会话。FTP open命令使用的端口2100是知识库为FTP会话使用的默认端口。注意,我可以不使用FTP,而是像以前那样在WebDAV和Windows Web文件夹简单地使用Windows拷贝和粘贴操作。

  使用RESOURCE_VIEW

  你应该知道的一个重要视图是名为RESOURCE_VIEW的视图。RESOURCE_VIEW视图为你所访问的知识库中的每个文档和文件夹返回一行。例如,通过执行下面的查询你可以得到/CD文件夹下所有XML文档的一个列表。

SELECT any_path
FROM resource_view
WHERE under_path(res,'/CD')=1
AND extractValue(res,
'/Resource/ContentType')='text/xml';

ANY_PATH
-------------------------------
/CD/Gospel/NothingLess.xml
/CD/LegendsOfTheGreatLakes.xml

  上面显示的新的UNDER_PATH函数使你能够测试一个给定的知识库资源是否在你指定的文件夹(或路径)中。在这个例子中,我使用该函数把查询结果限定在/CD文件夹及其子文件夹的资源中。通过使用对基本表所创建的一个层次式域索引可以使对RESOURCE_VIEW视图进行的基于路径的查询更高效。这个索引是该知识库的一部分;你不用创建它。



图1:XML DB知识库中示例CD模式的一部分

   资源视图中的RES字段并不代表资源自身,而只是代表资源的元数据。对RES字段运用新的extractValue函数检查每个资源的内容类型。因此查询的结果被进一步地限制到指向XML文档的路径。'/Resource/ContentType'语法代表XPath表示法。XPath是指定XML文档各部分的标准表示法;你将在许多对XML数据的查询中使用它。

  给定一个资料库路径,你可以使用新的XDBUriType对象类型检索全部或部分基本XML文档。清单6显示两个查询。第一个查询是对以上代码的扩展,使用XDBUriType来检索/CD文件夹下的所有XML文档。为了只提取CD标题,清单6中的第二个查询进行了进一步的改进,把标准的XPath语法附加到URL的末端。

  对知识库数据的关系访问

  也可以通过直接访问基本表来访问知识库中的XML数据。我注册CD模式时创建的基本表是CD331_TAB。你可以直接对这个表编写查询语句,但这些查询必须是支持XML的。要简化通过设计用于关系数据的报表工具访问XML数据,你可以创建一个如清单7中所示的视图。除了视图,清单7还对艺术家名字创建了一个索引。视图和索引使我能够有效地执行诸如下面的标准关系查询:

  SELECT title
  FROM cd_master
  WHERE artist='Carl Behrend';

  更新XML数据

  不幸的是,因为在cd_master视图中的所有字段都是基于SQL函数的,所以该视图不能被更新。然而,可以更新知识库中的XML数据;我只需要如下所示更新注册模式时所创建的基本表:

UPDATE CD331_TAB cd
SET VALUE(cd) = updateXML(
value(cd),
'/CD/Website/text()',
'http://greatlakeslegends.com/
legends.htm');

  注意这个新的updateXML函数中的XPath语法的使用。路径'/CD/Website/text()'说明我要更新CD文档的Website元素的文本。updateXML的第三个参数为那个文本指定新值。这是一个恰当的更新,并非常高效。XML DB知识库并不需要重建被改变的整个XML文档。因为模式被注册了,所以XML DB知识库能够以在底层对象结构只有Website属性被触及的方式重写这个查询。

  结论

  通过使用XML DB知识库,你可以把XML文档存储在数据库中,并使用标准的互联网协议访问那些文档。同时,你还可以使用标准的关系查询访问相同的XML文档或是那些文档的部分。你没有XML数据和关系数据,只有数据。"XML"和"关系"只是查看数据的不同范例。通过把数据从范例中分离出来,Oracle9i保护你最重要的资产之一--数据--免受范例改变的影响。

  你应该知道的一个重要视图是名为RESOURCE_VIEW的视图。RESOURCE_VIEW视图为你所访问的知识库中的每个文档和文件夹返回一行。例如,通过执行下面的查询你可以得到/CD文件夹下所有XML文档的一个列表。

SELECT any_path
FROM resource_view
WHERE under_path(res,'/CD')=1
AND extractValue(res,
'/Resource/ContentType')='text/xml';

ANY_PATH
-------------------------------
/CD/Gospel/NothingLess.xml
/CD/LegendsOfTheGreatLakes.xml

  上面显示的新的UNDER_PATH函数使你能够测试一个给定的知识库资源是否在你指定的文件夹(或路径)中。在这个例子中,我使用该函数把查询结果限定在/CD文件夹及其子文件夹的资源中。通过使用对基本表所创建的一个层次式域索引可以使对RESOURCE_VIEW视图进行的基于路径的查询更高效。这个索引是该知识库的一部分;你不用创建它。



图1:XML DB知识库中示例CD模式的一部分

   资源视图中的RES字段并不代表资源自身,而只是代表资源的元数据。对RES字段运用新的extractValue函数检查每个资源的内容类型。因此查询的结果被进一步地限制到指向XML文档的路径。'/Resource/ContentType'语法代表XPath表示法。XPath是指定XML文档各部分的标准表示法;你将在许多对XML数据的查询中使用它。

  给定一个资料库路径,你可以使用新的XDBUriType对象类型检索全部或部分基本XML文档。清单6显示两个查询。第一个查询是对以上代码的扩展,使用XDBUriType来检索/CD文件夹下的所有XML文档。为了只提取CD标题,清单6中的第二个查询进行了进一步的改进,把标准的XPath语法附加到URL的末端。

  对知识库数据的关系访问

  也可以通过直接访问基本表来访问知识库中的XML数据。我注册CD模式时创建的基本表是CD331_TAB。你可以直接对这个表编写查询语句,但这些查询必须是支持XML的。要简化通过设计用于关系数据的报表工具访问XML数据,你可以创建一个如清单7中所示的视图。除了视图,清单7还对艺术家名字创建了一个索引。视图和索引使我能够有效地执行诸如下面的标准关系查询:

  SELECT title
  FROM cd_master
  WHERE artist='Carl Behrend';

  更新XML数据

  不幸的是,因为在cd_master视图中的所有字段都是基于SQL函数的,所以该视图不能被更新。然而,可以更新知识库中的XML数据;我只需要如下所示更新注册模式时所创建的基本表:

UPDATE CD331_TAB cd
SET VALUE(cd) = updateXML(
value(cd),
'/CD/Website/text()',
'http://greatlakeslegends.com/
legends.htm');

  注意这个新的updateXML函数中的XPath语法的使用。路径'/CD/Website/text()'说明我要更新CD文档的Website元素的文本。updateXML的第三个参数为那个文本指定新值。这是一个恰当的更新,并非常高效。XML DB知识库并不需要重建被改变的整个XML文档。因为模式被注册了,所以XML DB知识库能够以在底层对象结构只有Website属性被触及的方式重写这个查询。

  结论

  通过使用XML DB知识库,你可以把XML文档存储在数据库中,并使用标准的互联网协议访问那些文档。同时,你还可以使用标准的关系查询访问相同的XML文档或是那些文档的部分。你没有XML数据和关系数据,只有数据。"XML"和"关系"只是查看数据的不同范例。通过把数据从范例中分离出来,Oracle9i保护你最重要的资产之一--数据--免受范例改变的影响。

分享到:
评论

相关推荐

    XML简单实例 XML简单实例

    XML(eXtensible Markup Language)是一种用于标记数据的语言,它是HTML的补充,主要用于存储和...在实际应用中,XML常被用于数据库存储、网络通信、配置文件、软件本地化等领域,是IT行业中不可或缺的数据处理工具。

    基于Xpath的xml文件查询和更新

    XML(eXtensible Markup Language)是一种用于存储和交换结构化数据的标准格式,广泛应用于Web服务、配置文件、数据交换等领域。Xpath(XML Path Language)则是用来在XML文档中查找信息的语言,它允许我们通过路径...

    XML文件导出为本地excel文件

    XML(Extensible Markup Language)是一种用于存储和传输结构化数据的标准格式,广泛应用于软件开发、Web服务和数据交换等领域。本篇文章将详细讲解如何将XML文件导出为本地的Excel文件,这一过程涉及到数据解析、...

    OpenOffice国际化本地化框架.pdf

    - **XIML(XML International Markup Language)**:一种用于描述国际化和本地化资源的XML格式。 - **I18N API**:提供了一系列API来支持多语言环境下的文本处理,如文本方向控制、断行规则等。 #### 四、藏文办公...

    MyBatis+MySQL本地自动生成映射类和XML文件

    标题提到的"本地自动生成映射类和XML文件"就是这样的一个功能,它能够根据数据库表结构自动创建相应的Mapper接口和XML配置文件,使得开发者可以更专注于业务逻辑的实现。 以下是这个过程中的关键知识点: 1. **...

    xml生成器-快速生成xml

    6. **保存与查看**:生成的XML文件可以保存到本地,用任何支持XML的编辑器或程序进行查看和进一步处理。 此外,对于开发者而言,了解XML的规范和语法是非常重要的。XML文件必须遵循以下原则: - 文件必须以`<?xml ...

    java根据xml生成schema_xsd_生成javabean

    XSD(XML Schema Definition)是XML的一个规范,用于定义XML文档的结构和数据类型,为XML提供了一种形式化的约束。JavaBean是一种特殊的Java类,遵循特定的命名规则和设计模式,用于封装数据和业务逻辑,常在Java...

    XML开发库对比

    值得注意的是,XML4C与Xerces-C有关系,但使用了ICU(International Components for Unicode),在国际化和本地化方面表现更好。 5. Xerces-C: Xerces-C是另一个强大的XML解析库,同样支持SAX和DOM,提供XML文档...

    数据库转为XML格式

    XML(eXtensible Markup Language)是一种自解释的文本格式,它允许以结构化的方式存储和传输数据,便于人和机器阅读。下面将详细阐述这个过程中的关键知识点。 一、数据库与XML的关系 数据库,如MySQL、Oracle、...

    oracle数据库的xml文件数据查询

    这种能力可以帮助我们更高效地管理数据,并且能够灵活地应对那些半结构化数据(例如XML)所带来的挑战。本文将详细介绍如何在Oracle数据库中直接读取和处理XML文件数据。 #### XMLTable函数 `XMLTable`函数是...

    Xml TreeView

    5. **frmXMLTreeView.resx**:这是一个资源文件,包含了窗体的本地化字符串和其他资源,如图像或图标。 6. **XmlTreeView.sln**:这是解决方案文件,包含了一个或多个项目的集合,用于在Visual Studio中组织和管理...

    QT读取xml文件将所有节点保存到treewidget中

    通过这种方式,我们可以有效地将XML文件的结构和内容映射到`QTreeWidget`上,使用户能够直观地查看和操作XML数据。这种方法适用于展示具有层级关系的数据,例如配置文件、目录结构或其他任何可以通过树形结构表示的...

    xml格式文件阅读工具(中文版)

    在软件本地化中,XML用于存储多语言资源。 "foxechs.exe"可能是这款XML阅读工具的执行文件,用户只需运行这个程序即可启动工具。安装和使用过程中,需要注意兼容性问题,确保软件与操作系统版本匹配,并遵循软件的...

    xml数据存储

    这通常用于存储非本地化的资源,如配置文件或图形元数据。 6. **DOM和SAX解析器**:对于较大的XML文件,Android提供了两种解析机制。DOM(Document Object Model)将整个XML文档加载到内存中,便于遍历和操作。而...

    XML入门教程内容.pdf

    10. XML技术架构:XML的技术架构包括了XML本身、一套用于定义数据内容和结构的模式语言,比如DTD(文档类型定义)或XML Schema,以及用于描述数据之间关系的XLink和XPointer等标准。 通过上述知识点的学习,我们...

    开源XML编辑器源代码

    2. **结构化折叠**:允许用户隐藏不关心的部分,使文档更易于管理和阅读。 3. **自动完成**:在编写XML时,编辑器可以提供标签、属性和值的智能提示,提高编码效率。 4. **错误检测与修复**:实时检查XML文档的语法...

    birt xml数据源

    这为那些拥有XML格式数据的组织提供了灵活性,使他们能利用BIRT进行数据可视化和分析。 3. **配置BIRT XML数据源**: - **创建数据源**:在BIRT Report Designer中,用户可以创建新的数据源,选择“XML”类型,...

    unity3d语言本地化Demo

    7. **国际化设置**:Unity支持.NET的`System.Globalization`命名空间,允许开发者获取和设置当前线程的文化信息,以实现更精确的本地化,包括数字、日期和货币格式。 在提供的压缩包中,`Assembly-CSharp.csproj`是...

    windows平台XML解析工具

    4. **快速查看**:foxe_CHS.exe提供了一种直观的方式来查看XML文档的结构,通过缩进和颜色高亮显示XML元素,使用户能快速理解数据层次关系。 5. **搜索功能**:内置的搜索功能允许用户快速查找特定的XML节点或值,...

    搜搜移动大厅(XML/序列化/IO流实现)

    XML的结构化特性使得它在处理复杂数据关系时显得更为合适,同时,XML的文本形式又保证了其良好的可读性和易解析性,这在多种平台和技术之间交换数据时尤为关键。此外,由于XML的文本格式是跨平台的,这使得搜搜移动...

Global site tag (gtag.js) - Google Analytics