日期:2014-03-13  浏览次数:21025 次

  Turkey wrench:
  Stainless steel, one-piece construction,
  lifetime guarantee.
  
  9.95
  
  10
  
  Stuffing separator:
  Aluminum, one-year guarantee.
  
  13.27
  
  5

  在XML的世界中,许多内容丰富的文档实际上都是数据为中心的。我们以显示图书信息的Amazon.com网站为例。虽然这个页面是相当巨大的文本,但是这个文本的结构是高度规范的,其中许多的部分对任何的书本描述页面都是相反的,并且特点页面中的各部分的大小都是无限的。也就是说,该页面可以通过一个简单的、数据为中心的XML文档来建立,其中包含了从数据库中检索得到的文本信息以及一个XSL款式表。通常,目前任何通过在模板中填充数据库数据而动态结构HTML页面的网站都可以被上面引见的用以数据为中心的XML文档和一个或者多个的XSL款式表方式替代。
  
  例如,我们来看下面的租房(Lease)文档:
  
    ABC Industries agrees to lease the property at
  123 Main St., Chicago, IL from XYZ
 Properties for a term of not less than TimeUnit="Months">18 at a cost of Currency="USD" TimeUnit="Months">1000.
  
  可以从下面的XML文档和简单的款式表得到:
  
  ABC Industries
  123 Main St., Chicago, IL
  XYZ Properties
  18
  1000

  4.2 以文档为中心的文件

  以文档为中心的文档的特点是:结构不规范、数据颗粒度更大(即,最小的独立数据单元是包含有混合内容的元素或者就是整个XML文档)以及含有大量的混合内容。其中相反层次的元素和PCDATA出现顺序是非常重要的。典型的例子是书、电子邮件、广告以及大多数XHTML文档。以文档为中心的文档是用于人的使用。
  
  例如,下面的产品描述文档就是以文档为中心: 
  
  Turkey Wrench
  
  Full Fabrication Labs, Inc.
  
  Like a monkey wrench, but not as big.
  
  The turkey wrench, which comes in both right- and
  left-handed versions (skyhook optional), is made of the finest
  stainless steel. The Readi-grip rubberized handle quickly adapts
  to your hands, even in the greasiest situations. Adjustment is
  possible through a variety of custom dials.
  
  You can:
  
  Order your own turkey wrench
  Read more about wrenches
  Download the catalog
  
  The turkey wrench costs just $19.99 and, if you
  order now, comes with a hand-crafted shrimp hammer as a
  bonus gift.
    
  4.3 数据、文档和数据库

  在理想情况中,以数据为中心的文件和文档为中心的文件之间的区别并不是很严厉。例如,一个以数据为中心的文件(如一张发票),也有可能包含粗颗粒度、不规则的数据(如发票的描述部分)。而一个以文档为中心文件(如用户手册)也可能包含有良好颗粒度、规则的结构化数据(通常是元数据),例如作者和修订日期。除此之外,让你的文档具有以数据为中心或者以文档为中心的特点有助于你判断是关怀数据还是文档,这也将决定你需求采用什么样的系统。
  
  要存储或检索数据,你可以使用一个数据库(通常是关系型、面向对象型或者是层次型)和两头件(字带或者是采用第三方),你也可以使用XML服务器(即创建分布式使用的平台,例如利用XML进行数据传输的电子商务使用)。要保存文档,你将需求一个内容管理系统或者是分歧性的DOM实现系统。有关各类系统的探讨在5.0 
  
  "存储和检索数据" 大节和6.0 "
  
  href="#storingretrievingdocs">存储和检索文档 " 大节。你也能够在 
  
  href="http://www.rpbourret.com/xml/XMLDatabaseProds.htm"> 
  
  XML数据库产品 中了解详细的相关产品列表。

  5.0 存储和检索数据

  在以数据为中心的文档中的数据内容可能来自数据库(此时你想把数据导出为XML格式),也可能是XML文档(此时你想把数据存储在数据库中)。前者的例子是在关系型数据库中存储的大量现无数据(或称遗产数据);后者的例子是将数据作为XML发布在Web中,而且你想要在你的数据库中进行存储以进行更多的处理。如此,依据你的需求,你可能需求将XML文档转移到数据库的软件,也可能需求从数据库转移到XML文档的软件,或者两者都支持。

  5.1 转移数据

  将数据存储在数据库中时,经常需求丢弃大量与文档有关的信息,例如文档名称和DTD,同时还有其物理结构,例照实体的定义和使用、属性值和同层元素的顺序、二进制数据的存储方式(是Base64编码、是未析实体或他方式)、字符数据段和其他的编码信息。类似的,当从数据库中检索数据时,生成的XML文档结果除了非预定义实体lt(<"),gt(">"), amp("&"), apos("’"), quot(""")不包含任何CDATA或实体援用。而同层元素和属性的出现顺序也常常就是从数据库中前往的数据的次序。

  虽然一开始有些让你吃惊,但是这常常是合理的。例如,假设你需求用XML作为数据格式把一张销售从一个数据库中转移到另一个数据库中。在这种情况下,在XML文档中并不关怀销售单的编号是保存在销售单的日期的前面还是后面,也不用关怀能否将顾客的名称保存在字符数据(CDATA)段还是作为一个外部实体,或者直接当成一个PCDATA。最重要的在于相关的数据是从第一个数据库转移到第二个数据库中。这样,这个数据传输软件就需求考虑数据的层次结构(该结构将销售单的有关进行进行了分组),而其他则不必过多考虑。 
    
  忽略文档信息以及其物理结构的后果之一是 
  
  文档的"逆反回归"的不分歧效应,即将一个文档的数据存储在数据库中,然后依据这些数据重新组织成新的文档。而即便是依据标准格式处理,得到的也常常是和前面不同的文档。这能否可以接受要取决于你的需求,而且也将影响到你对数据库和数据传输两头件的选择。
  
  5.2 
  
  从文档结构到数据库结构的映射
  
  为了在XML和数据库之间传输数据,需求在文档结构和数据库结构之间进行互相的映射。这样的映射通常分为两大类: 模板驱动和模式驱动。
  
  5.2.1 模板驱动的映射
  
  在以模板驱动的映射中,没有事后定义文档结构和数据库结构之间的映射关系 
  
  ,而是使用将命令语句内嵌入模板的方法,让数据传输两头件来处理该模板。例如,考虑下面的模板(留意该模板并不适用任何实际的产品),在<SelectStmt>元素中内嵌了SELECT语句:
  
  <?xml version="1.0"?>
  <FlightInfo>
  <Intro>The following flights have available seats:</Intro>