科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道XML无处不在——DB2 9给予你掌握它的力量

XML无处不在——DB2 9给予你掌握它的力量

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

IBM最新的数据库,IBM DB2 9,引入了pureXML,一个解决使用XML进行工作的压力的本地XML特性集合。从新的XML数据类型到XQuery语言,DB2 9使得XML开发变得更加容易。

作者:Duane Merrill 来源:论坛整理 2007年12月24日

关键字: DB2

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共8页)

问题,为什么不工作?

  目前一切正常。你建立了你的数据库和数据,和获取结果的Web服务。目前你所需要的就是HTML和JavaScript(和CSS)。在你进入到Ajax部分之前,还有一些问题。

  检查一下域和域的内容。大多数域,你可以为数据,栏名和数据本身标识一个标记。但是大部分数据不能符合一般的域。传统的,当获取非结构化数据时,你的数据包需要一个catch-all域来放置任何不能清晰解析的数据。对此可能有一些不同的原因:
  1. 数据从多个非标准源而来,每个数据都有各自的栏名和域类型;
  2. 你有很多潜在的名称/值 对来包含它们在你的数据结构中,将会需要一个不合理的打表或者非常复杂的数据库结构。
  你有处理这些内容的多种方法,每种方法都有问题。比如,你可以:
  1. 使用HTML格式将数据存储在CLOB中。问题:HTML数据引入了对所需要的自定义工作区比如UI和数据更新的限制。预格式化的数据对其它应用程序变得更加不可用。
  2. 使用一个不同的标记,比如对你的JavaScript代码更加有用的JSON。问题:数据仍然对其它应用不可用。对于人来说阅读和更新也变得更加困难,在引入其它源的时候需要自定义的转化代码。
  3. 将数据存储为文本。问题:在显示你的Web应用时去除任何自定义的格式化选项。
  在这个特殊的例子中,大多数数据点,比如“POWER”和“WEAKNESS”,有它们自己的栏。这些栏设置有些时候是null。剩下的数据导入到Notes域,排除了其他类型的格式,对其它应用也是没有太大用处。

   使用XML数据类型

  你可能看到了最优方法是存储非标准数据为一个XML数据。使用DB2 9的XML数据类型,你可以得到如下好处:
  1. 你可以使用标准的XML格式存储自定义数据
  2. 你将一个XSD或者DTD文档和XML栏关联以便让每行存储数据在相同的XML结构中,这其实没有必要。每一行可以有一个完全独立的XML文档和结构。
  3. XML数据对其它应用程序有用
  4. XML文档能够使用DB2 的XQuery来搜索
  5. XML文档可以使用一系列的混合语言搜索——XQuery,SQLXML和SQL。同样的,你可以轻松的混合数据类型,同时查询关系型数据和XML数据。如何混合使用XQuery和SQL,请查看http://www.research.ibm.com/journal/sj/452/ozcan.html
  如果你回到上文,查看你早先建立的两个范例表,你将会注意到只有三个域的“XML”版本。这是因为最常用的域将会包含在独立的XML文档中。这是引入这些文档和查看数据类型的好机会。

   XML域不能被当场编辑,但是可以作为完整的文档增加和更新。可能最简单的方法是通过IMPORT方法,在http://www.devx.com/ibm/Article/31499文中有详细叙述。为List2-6中的XML数据创建5个独立的XML文件。将这些都保存在一个新目录“C:\PALS”下。

  Listing 2: hero1.xml

<HERO>
 <NOTE title="Power">Can mimic any sound she hears.</NOTE>
 <NOTE title="Alter ego">Mariah Carey</NOTE>
</HERO>
Listing 3: hero2.xml
<HERO>
 <NOTE title="Power">Telepathy</NOTE>
 <NOTE title="Weakness">Gets cranky if he stays up too late.</NOTE>
 <NOTE title="Current age">8</NOTE>
 <NOTE title="Additional weakness">Lactose intolerant.</NOTE>
</HERO>
Listing 4: hero3.xml
<HERO>
 <NOTE title="Power">Super strength; can reattach severed body parts.</NOTE>
 <NOTE title="Weakness">Not too bright.</NOTE>
 <NOTE title="Secret Origin">A somewhat clumsy man, Hank "Bullhead"
Durham fell into a vat of fresh glue and was promptly struck by lightning.
Since then, whenever he loses a part of his body, he has simply to hold it in place
and it becomes reattached.</NOTE>
</HERO>
Listing 5: hero4.xml
<HERO>
 <NOTE title="Power">Glows under a black light.</NOTE>
 <NOTE title="Weakness">Not having a black light around.</NOTE>
 <NOTE title="Note">Usually relegated to sidekick, though once played
a crucial role in a mission busting an underground pot growers cabal.</NOTE>
</HERO>
Listing 6: hero5.xml
<HERO>
 <NOTE title="Power">Ability to text message at light speed.</NOTE>
 <NOTE title="Weakness">Thumbsucking (a nervous habit in times of great stress).</NOTE>
 <NOTE title="Former Codename">Twiddle</NOTE>
</HERO>

  下面将List7 保存在相同的目录下的heroes.del。这个文件的格式非常简单——特别是一个逗号分割的列表,XDS标记指定了它的源文件。在这个例子中,HeroID域被留空了,因为它是自动申城的标识栏,因此你只有其它的域。

   Listing 7: heroes.del

Mockingbird,<XDS FIL='hero1.xml' />
Indigo,<XDS FIL='hero2.xml' />
Indivisibull,<XDS FIL='hero3.xml' />
Dayglo,<XDS FIL='hero4.xml' />
Thumbalina,<XDS FIL='hero5.xml' />

  为了建立你的表,打开命令行编辑器窗口,保证你能够连接AJAXDEMO数据库。将List8拷贝到窗口中执行。

  Listing 8: insert.sql

IMPORT FROM 'C:\PALS\heroes.del' OF DEL
XML FROM 'C:\PALS'
MODIFIED BY IDENTITYMISSING
INSERT INTO NULLID.HEROES_XML

  你可以看到消息以“Number of rows committed =5”结尾。如果这样的话,那么你已经成功的引入了HEROES_XML表。为了确认,打开表。在Notes栏,你将看到省略号,如图12所示。

引入HEROES_XML



  点击其中一个省略号来打开XML文档查看器,将会使用树状视图或者源文件视图显示XML文档。如图13.

显示XML文档



  注意XML文档的结构已经被故意的选择为最小化当前行的XML节点数目,但是你仍然可以在所需时建立它。这里我决定包含数据名作为节点的“标记”属性,将数据值作为节点值。你可以在下一段中看到JavaScript如何直接操作这一格式。实现这一个解决方案需要一些标准化,你需要从多个数据源中搜集数据。在现在的互联网中,你的源可以通过多种方式标准化。如果你从一个持续格式中引入多个流,比如RSS源,你可以写JavaScript来轻松完成这一个格式。XML数据了型提供了进行这种聚合的最佳资源。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章