3.1
数据为主的文件
数据为主的文件表现出来的特点是结构相当规范,数据格式良好(就是说,数据中
最小的独立单元是 PCDATA-only 元素级别或则是一个属性),和一些或则没有混合内容。其中同
类型元素和 PCDATA 的出现顺序并不重要。例如 XML 文件内容是销售单、飞行计划、餐馆菜单等等。
数据为主的文件经常被用来设计机器消费,这时 XML 的调用是多余的 --- 它仅仅是一种数
据传输。
例如,下面的销售单就是一个数据为主的文档:
<Orders>
<SalesOrder SONumber="12345">
<Customer CustNumber="543">
<CustName>ABC Industries</CustName>
<Street>123 Main St.</Street>
<City>Chicago</City>
<State>IL</State>
<PostCode>60609</PostCode>
</Customer>
<OrderDate>981215</OrderDate>
<Line LineNumber="1">
<Part PartNumber="123">
<Description>
<p><b>Turkey wrench:</b><br />
Stainless steel, one-piece construction,
lifetime guarantee.</p>
</Description>
<Price>9.95</Price>
</Part>
<Quantity>10</Quantity>
</Line>
<Line LineNumber="2">
<Part PartNumber="456">
<Description>
<p><b>Stuffing separator:<b><br />
Aluminum, one-year guarantee.</p>
</Description>
<Price>13.27</Price>
</Part>
<Quantity>5</Quantity>
</Line>
</SalesOrder>
</Orders>
注意在 XML 世界中,许多(其实应该是大量)的文件实际上都是数据为主的。例如,
考虑在 Amazon.com 网站上显示一本书的各种信息的页面,虽然这个页面是一个相当巨大的文
本,但是这个文本的结构是高度规范的,所有页面都包含有介绍书的共同点,并且每一页中文本
的大小是受限制的。也就是说,它可以从一个简单的、数据为主的 XML 文档 + 包含有每一页信息
的数据库 + XSL 样板文件 就能够实现这个网站的结构了。通常,目前任何一个动态建立 HTML 的网
站都可以被上面介绍的这种结构来实现的。
下面是一个很简单的例子:
<Lease>
<Lessee>ABC Industries</Lessee> agrees to lease the property at
<Address>123 Main St., Chicago, IL</Address> from <Lessor>XYZ
Properties</Lessor> for a term of not less than <LeaseTerm
TimeUnit="Months">18</LeaseTerm> at a cost of <Price
Currency="USD" TimeUnit="Months">1000</Price>.
</Lease>
它是使用下面的这个 XML 文档和一个简单的样板文件实现的:
<Lease>
<Lessee>ABC Industries</Lessee>
<Address> 123 Main St., Chicago, IL</Address>
<Lessor>XYZ Properties</Lessor>
<LeaseTerm TimeUnit="Months">18</LeaseTerm>
<Price Currency="USD" TimeUnit="Months">1000</Price>
</Lease>
3.2 以文档为主的文件
以文档为主的文件表现出来的特点是:不规范的结构,大量的原始数据(就是说,
最小的独立数据单元是包含有混合内容的元素级或则本身就是一个文档),和大量混合内容。其中
同类型元素和 PCDATA 出现顺序是非常重要的。例如一本书,一封电子邮件,广告,以及几乎所有的
XHTML 文档。以文档为主的文件通常是用来设计人文消费:
例如,下面的产品描述就是一个以文档为主的文件:
<Product>
<Name>Turkey Wrench</Name>
<Developer>Full Fabrication Labs, Inc.</Developer>
<Summary>Like a monkey wrench, but not as big.</Summary>
<Description>
< Para>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.</Para>
<Para>You can:</Para>
<List>
<Item><Link URL="Order.html">Order your own turkey wrench</Link></Item>
<Item><Link URL="Wrenches.htm">Read more about wrenches</Link></Item>
<Item><Link URL="catalog.zip">Download the catalog</Link></Item>
</List>
<Para>The turkey wrench costs just $19.99 and, if you
order now, comes with a hand-crafted shrimp hammer as a
bonus gift.</Para>
</Description>
3.3 数据( Data )、文件 (Documents) 和数据库 (Databases)
事实上,数据为主的文件和文档为主的文见之间的区别并不是很清晰。例如,虽然
一个数据为主的文件(例如一张发票),也有可能包含大量的不规范结构的数据,例如发票的描
述部分。而一个以文档为主的文件(例如用户手册),也可能包含有规范的数据结构 ( 通常是元数
据 metadata), 例如作者名和再版日期。除了这些,你用来判断是否是两者中其一的另外
一个重要特点是你是对数据还是对文档感兴趣,这也将决定你要采用什么样的系统。
要存储和获取数据,你可以使用一个数据库(通常是关系数据库,面向对象数据库
或则树状体系数据库)和中间件,或则你也可以使用 XML 服务器(你可以把它看成是将数据库
和中间件捆绑在一起)。要保存文档,你将需要一个内容管理系统。有关各种系统的探讨
在第 4.0 小节中 , " 存储和获取数据 " 和第 5.0 小节 " 存储和获取文档 ". 你能够在第 6.0 小节找到
一些可使用的软件列表 " 可利用的软件 " 。
4.0 存储和获取数据
数据的类型可以在数据为主的文件的原始定义或则从数据库中的字段类型中得到。
前者的例子是你想把数据库中的数据保存成 XML 文件放到网站上;后者的例子是你需
要把大量的数据保存到关系数据库中。根据你的具体需求,你需要的软件或则是把 XML 数据
读入到数据库或则是把数据库中的数据输出到 XML 文件,或则两者都支持。
4.1 转录数据
当将数据保存在数据库中,它经常需要抛弃与文档信息有关的大量内容,例如它的
名称和 DTD ,同时还有它的物理结构,例如实体的定义和使用、属性值和相同类型元素的出现顺
序,还有二进制数据的存储方式 ( 是经过 Base64 编码的还是没有经过编码的实体或则其他方式 ),
CDATA 的内容和其他编码信息。简单而言,当从数据库中获取信息时,最后生成的 XML 文档结果可
能不包含任何 CDATA 或则实体运用( entity usage ) ( 除非预先定义了实体 lt (就是符号 "<"
) ,gt(">"), amp("&"), apos("'"), quot(""")) 和同类型元素、属性出现的顺序。
例如,假设你需要把一个销售单的信息使用 XML 格式从一个数据库中获取数据然后转
录到另外一个数据库中,在这个例子中,在 XML 文档中并不关心销售单的编号是保存在销售单的日
期的前面还是后面,也不用关心是否将顾客的名称保存在 CDATA section 作为一个扩展入口 ,
或则甚至直接当成一个 PCDATA. 但是,对于将这些相关数据从第一个数据库中转录到第二个数据
库的过程中,这些信息都是非常重要的。这样,这个数据传输软件就需要考虑使用树状结构
(它将一个单独的销售单的信息用组 (group) 来实现)。
另一个当忽略文档信息和它的物理结构会带来麻烦的例子是 ---" 借贷套利 " 文档,它
保存的数据是从一个数据库中的文档中获取,并且需要重新组装这些数据成为一个新的文档,
而这个过程经常会导致新的文档的结构和原来的文档会不一致。
从上面的例子可以看出,对于数据库和数据传输中间件的选择是根据你的需求而变
化的。
数据为主的文件表现出来的特点是结构相当规范,数据格式良好(就是说,数据中
最小的独立单元是 PCDATA-only 元素级别或则是一个属性),和一些或则没有混合内容。其中同
类型元素和 PCDATA 的出现顺序并不重要。例如 XML 文件内容是销售单、飞行计划、餐馆菜单等等。
数据为主的文件经常被用来设计机器消费,这时 XML 的调用是多余的 --- 它仅仅是一种数
据传输。
例如,下面的销售单就是一个数据为主的文档:
<Orders>
<SalesOrder SONumber="12345">
<Customer CustNumber="543">
<CustName>ABC Industries</CustName>
<Street>123 Main St.</Street>
<City>Chicago</City>
<State>IL</State>
<PostCode>60609</PostCode>
</Customer>
<OrderDate>981215</OrderDate>
<Line LineNumber="1">
<Part PartNumber="123">
<Description>
<p><b>Turkey wrench:</b><br />
Stainless steel, one-piece construction,
lifetime guarantee.</p>
</Description>
<Price>9.95</Price>
</Part>
<Quantity>10</Quantity>
</Line>
<Line LineNumber="2">
<Part PartNumber="456">
<Description>
<p><b>Stuffing separator:<b><br />
Aluminum, one-year guarantee.</p>
</Description>
<Price>13.27</Price>
</Part>
<Quantity>5</Quantity>
</Line>
</SalesOrder>
</Orders>
注意在 XML 世界中,许多(其实应该是大量)的文件实际上都是数据为主的。例如,
考虑在 Amazon.com 网站上显示一本书的各种信息的页面,虽然这个页面是一个相当巨大的文
本,但是这个文本的结构是高度规范的,所有页面都包含有介绍书的共同点,并且每一页中文本
的大小是受限制的。也就是说,它可以从一个简单的、数据为主的 XML 文档 + 包含有每一页信息
的数据库 + XSL 样板文件 就能够实现这个网站的结构了。通常,目前任何一个动态建立 HTML 的网
站都可以被上面介绍的这种结构来实现的。
下面是一个很简单的例子:
<Lease>
<Lessee>ABC Industries</Lessee> agrees to lease the property at
<Address>123 Main St., Chicago, IL</Address> from <Lessor>XYZ
Properties</Lessor> for a term of not less than <LeaseTerm
TimeUnit="Months">18</LeaseTerm> at a cost of <Price
Currency="USD" TimeUnit="Months">1000</Price>.
</Lease>
它是使用下面的这个 XML 文档和一个简单的样板文件实现的:
<Lease>
<Lessee>ABC Industries</Lessee>
<Address> 123 Main St., Chicago, IL</Address>
<Lessor>XYZ Properties</Lessor>
<LeaseTerm TimeUnit="Months">18</LeaseTerm>
<Price Currency="USD" TimeUnit="Months">1000</Price>
</Lease>
3.2 以文档为主的文件
以文档为主的文件表现出来的特点是:不规范的结构,大量的原始数据(就是说,
最小的独立数据单元是包含有混合内容的元素级或则本身就是一个文档),和大量混合内容。其中
同类型元素和 PCDATA 出现顺序是非常重要的。例如一本书,一封电子邮件,广告,以及几乎所有的
XHTML 文档。以文档为主的文件通常是用来设计人文消费:
例如,下面的产品描述就是一个以文档为主的文件:
<Product>
<Name>Turkey Wrench</Name>
<Developer>Full Fabrication Labs, Inc.</Developer>
<Summary>Like a monkey wrench, but not as big.</Summary>
<Description>
< Para>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.</Para>
<Para>You can:</Para>
<List>
<Item><Link URL="Order.html">Order your own turkey wrench</Link></Item>
<Item><Link URL="Wrenches.htm">Read more about wrenches</Link></Item>
<Item><Link URL="catalog.zip">Download the catalog</Link></Item>
</List>
<Para>The turkey wrench costs just $19.99 and, if you
order now, comes with a hand-crafted shrimp hammer as a
bonus gift.</Para>
</Description>
3.3 数据( Data )、文件 (Documents) 和数据库 (Databases)
事实上,数据为主的文件和文档为主的文见之间的区别并不是很清晰。例如,虽然
一个数据为主的文件(例如一张发票),也有可能包含大量的不规范结构的数据,例如发票的描
述部分。而一个以文档为主的文件(例如用户手册),也可能包含有规范的数据结构 ( 通常是元数
据 metadata), 例如作者名和再版日期。除了这些,你用来判断是否是两者中其一的另外
一个重要特点是你是对数据还是对文档感兴趣,这也将决定你要采用什么样的系统。
要存储和获取数据,你可以使用一个数据库(通常是关系数据库,面向对象数据库
或则树状体系数据库)和中间件,或则你也可以使用 XML 服务器(你可以把它看成是将数据库
和中间件捆绑在一起)。要保存文档,你将需要一个内容管理系统。有关各种系统的探讨
在第 4.0 小节中 , " 存储和获取数据 " 和第 5.0 小节 " 存储和获取文档 ". 你能够在第 6.0 小节找到
一些可使用的软件列表 " 可利用的软件 " 。
4.0 存储和获取数据
数据的类型可以在数据为主的文件的原始定义或则从数据库中的字段类型中得到。
前者的例子是你想把数据库中的数据保存成 XML 文件放到网站上;后者的例子是你需
要把大量的数据保存到关系数据库中。根据你的具体需求,你需要的软件或则是把 XML 数据
读入到数据库或则是把数据库中的数据输出到 XML 文件,或则两者都支持。
4.1 转录数据
当将数据保存在数据库中,它经常需要抛弃与文档信息有关的大量内容,例如它的
名称和 DTD ,同时还有它的物理结构,例如实体的定义和使用、属性值和相同类型元素的出现顺
序,还有二进制数据的存储方式 ( 是经过 Base64 编码的还是没有经过编码的实体或则其他方式 ),
CDATA 的内容和其他编码信息。简单而言,当从数据库中获取信息时,最后生成的 XML 文档结果可
能不包含任何 CDATA 或则实体运用( entity usage ) ( 除非预先定义了实体 lt (就是符号 "<"
) ,gt(">"), amp("&"), apos("'"), quot(""")) 和同类型元素、属性出现的顺序。
例如,假设你需要把一个销售单的信息使用 XML 格式从一个数据库中获取数据然后转
录到另外一个数据库中,在这个例子中,在 XML 文档中并不关心销售单的编号是保存在销售单的日
期的前面还是后面,也不用关心是否将顾客的名称保存在 CDATA section 作为一个扩展入口 ,
或则甚至直接当成一个 PCDATA. 但是,对于将这些相关数据从第一个数据库中转录到第二个数据
库的过程中,这些信息都是非常重要的。这样,这个数据传输软件就需要考虑使用树状结构
(它将一个单独的销售单的信息用组 (group) 来实现)。
另一个当忽略文档信息和它的物理结构会带来麻烦的例子是 ---" 借贷套利 " 文档,它
保存的数据是从一个数据库中的文档中获取,并且需要重新组装这些数据成为一个新的文档,
而这个过程经常会导致新的文档的结构和原来的文档会不一致。
从上面的例子可以看出,对于数据库和数据传输中间件的选择是根据你的需求而变
化的。