2.2 分析问题
从回顾先前的葡萄酒酿造厂拥有者提供的记录开始,扩充您认为需要的数据,组织数据,以便根据业务和销售活动的需要使用这些信息。一开始,要弄清楚想做的事情:
● 至少要跟踪最好的顾客(或分销商)的订单。
● 与合作伙伴或旅行社共享本公司数据,同时用它们的数据扩充本公司数据。
● 为酿酒厂现有的Web站点准备信息,现有站点只是单一的HTML页面,包含了一幅涵盖地址和电话号码的大型图像——即丑陋又无法理解!
● 准备好销售产品派发给酿酒厂参观者或配销给当地餐馆。
随着酿酒厂业务的扩大,您就可以使用葡萄酒数据与分销商、杂志出版商和内部业务中心(会计、销售、配送)进行交互。要发展公司业务,必须简化某些酿酒厂内容。
内容必须调整成包括以下一些公司数据:
● 库存计算
● 分销商名称
同时可能要合并一些附加数据来支持其他商业用途,包括:
● 美国和加拿大定价(支持邻界地区的Internet销售)
● 关键字(支持更好地检索客户和分销商查找信息)
● 目录(例如,支持将佐餐酒和甜酒对照排序)
● 购买者联系信息(支持空运)
现在,对于所有的葡萄酒都必须修改它们的XML。计划增加的元素都需要新的数据。
2.2.1 生成格式良好的XML文档
格式良好的XML是遵循所有“XML文档规则”的XML文档,如下所列。这些规则规定了标记如何置于内容周围,如何按层次嵌套元素,如何为属性加标点以及怎样的元素名称是可接受的。
1. XML文档规则
创建XML文档时,必须遵循一些基本的指导原则,这样创建出的文档才是“格式良好的”。这表示XML元素编写恰当,遵循XML规则。具体规则如下:
● XML文档必须有一个根标记,即一个单独的元素,其起始标记和结束标记位于元素剩余部分和文档内容周围。
● 对于每个元素,XML标记必须有相匹配的起始标记和结束标记。XML区分大小写,例如,<vintage>1994</vintage>是有效的,但<vintage>1994</Vintage>则是无效的。
● 元素名称可以包括字母、数字和下划线,但不能以数字开头,不能包含空格。
● 空元素——没有内容的元素——只含有一个以斜线结尾的标记。例如,<image file=“branding.png”/>。
● 属性值必须用引号引起。可以使用单引号或双引号,但是建议前后使用一致。在前面的规则示例中,file是属性名称,branding.png是属性值。每个属性都有一个名值对。
● 实体字符和特殊字符必须谨慎使用。例如,XML文档内容中的特殊字符,如大于号(>),在标记中显示为一个代码或实体。大于号在XML代码中显示为>,XML分析器可以识别它并显示为恰当的字符。
如果遵循了上述规则,XML文档将是格式良好的,大多数工具和浏览器都能对其完全解析。
格式良好的XML是XML能够使用的最低要求。高质量的XML,即有效的XML,将在本书稍后作介绍。
2. 元素的命名
元素名称在可用性方面几乎是没有限制的。通过实践可以熟练创建各种XML文档。下面是一些XML实例——文档。为了更好地理解XML文档规则,可以打开记事本或其他文本编辑工具,输入下列文档实例。实践是最有用的!
在第一个示例中,根标记为<grocery_list>。空格和换行符常常用来帮助分辨起始标记和结束标记,虽然实际上并不需要。事实上,有些工具不喜欢使用额外的空格和换行符,这时候可以删除它们。
<grocery_list>
<produce>
<item>banana</item>
<item>apple</item>
</produce>
<meat>
<item>chicken breast</item>
</meat>
<dairy>
<item>milk</item>
</dairy>
</grocery_list>
在第二个示例中,根标记为<game>。这里只使用了换行符(通过按Enter键创建)来帮助分辨起始标记和结束标记。换行符是可选的,通常只对手工编辑有帮助(分析器并不需要)。
<game>
<poker type="Omaha Hi Lo">
<players>
<player standing="17">Denis Ethier</player>
<player standing="23">Nancy Mallett</player>
<player standing="112">Kim Beaver</player>
<player standing="411">Leslie Thomas</player>
<player standing="517">Leatta Welch</player>
<player standing="711">Davie Dilts</player>
<player standing="720">Juli Allentine</player>
<player standing="809">Riley Dillon</player>
<player standing="905">Nadia Grace</player>
<player standing="1217">Eddie Cidade</player>
<player standing="2741">Pamela Harris</player>
<player standing="2977">Bernard Aslan</player>
</players>
<rules src="play.pdf" />
</poker>
</game>
倒数第三行——<rules src="play.pdf"/>——是一个空元素(在第1章中已讨论过),表示在两个标记之间没有内容。空元素没有起始标记和结束标记,只有一个以斜线结尾的标记,以尖括号括起。
最后一个示例显示了一些不同的标记,根标记是<party>。同时使用了空格和换行符(也是可选的):
<party>
<date>
<month>October</month>
<date>29</date>
<year>2005</year>
</date>
<time>
<start>7:30 <pm /></start>
<end>1:00 <am /></end>
</time>
<theme>Halloween</theme>
<guests costumes = "Yes">
<guest>Eric<costume>prisoner</costume></guest>
<guest>Sue<costume>ghoul</costume></guest>
<guest>Tom<costume>ghoul</costume></guest>
<guest>Mark<costume>Grim Reaper</costume></guest>
<guest>George<costume>Doctor Death</costume></guest>
<guest>Dianne<costume>Morticia Adams</costume></guest>
<guest>Steve<costume>Lurch</costume></guest>
</guests>
<guests costumes = "No">
</guests>
</party>
利用XML规则可以创建一个简单的XML文档。现在,您可以用所想到的任何元素名和任何层次结构来创建一个XML文档。
那么,可以用XML文档来做些什么呢?
如果正确建立了XML,就可以在Microsoft Internet Explorer等浏览器中打开文档。您可以看到相当直观的文档,以树视图形式显示,在有嵌套元素的地方进行了折叠,类似于第1章的图1-2中所示。
这个XML实例还可以做些什么呢?即使脑海中没有一个具体的结构或信息模型,这对于XML中包含哪些元素是没有影响的。您需要考虑的是哪些元素是为需求服务的,要确保标记的层次结构对于所需的检索信息方式是有意义的。您真正需要的是一个格式良好的XML文档,该文档可以被所有访问格式良好的XML工具或进程使用。
2.2.2 介绍有效的XML
也许您想获取一个“高质量”的XML,因为它更加具有可预测性——因此可能更有用。根据可预测结构建立的XML称为“有效的”XML。有效的XML首先是格式良好的,它使用了元素、属性和根据定义结构的文件创建的层次嵌套。这个文件可以是一个模式或一个DTD:
● 模式是一个ASCII文本格式的文件,它使用XML标记创建元素、属性和内容模型。
● DTD(Document Type Definition,文档类型定义)是一个ASCII文本格式的文件,它使用具体的语法创建元素、属性和内容模型。
根据XML文档规则可以创建格式良好的XML,就像在第1章记事本中输入的那样。由此创建的文档可以被各种工具使用,包括Microsoft Internet Explorer。
本书中的示例使用了模式或DTD,并且结合使用了有效的XML。
2.2.3 开发结构
设计的本质是选择结构中所需的元素。第4章将介绍如何将数据的结构放入DTD或模式,以此检验数据是否符合所需的结构。
现在,考虑需要用来扩充现有酿酒厂和葡萄酒数据的结构类型,可能包括下列部分或全部内容:
● 库存
● 价格(美国和加拿大)
● 客户数据(地址、电话、电子邮箱)
● 客户类型(分销商、最终用户)
● 目录
● 关键字
● 公司细节(工作时间、对外公开日期、实际地址、证书)







