文档格式的排错
我妈妈_的清单中有数十条菜谱,甚至数百条。如果产生一个致
命错误,排错将非常困难 - 你将一行一行地寻找丢失的标记
符。如果使用几层嵌套,发现错误将很困难。
但是可以找到很好的帮助。分析器 - XML代码和报告格式错误
的应用程序可以在网上免费得到。其中最好的是Lark,它的作
者是由Tim Bray - XML规范的技术编辑和极力鼓吹者,地球上最
聪明的人之一。
我用Lark分析下面的代码。注意"chocolate chips"和它的关闭
标记符出现在 标记符中的位置有错误:
2 cups (12-oz pkg.) semi-sweet choc.
chips
Preheat overn to 350 degrees. Melt butter;
combine with brown sugar and vanilla in large mixing bowl.
Set aside to cool. Combine flour, baking powder, and salt; set aside.
Add eggs to cooled sugar mixture; beat well. Stir in reserved dry
ingredients, nuts, and chips.
Spread in greased 13-by-9-inch pan. Bake for 25 to 30 minutes
until golden brown; cool. Cut into squares.
下面是分析器返回的结果:
Error Report
Line 17, column 22: Encountered expected
... assumed
Line 18, column 36: Encountered with no start-tag.
有了这种信息,找到错误将不会成为问题。那么XML文件的有效性
是指什么呢?
实现有效性
最终我们将在组织良好的XML文档中加入信息。实际上,我们
有很多事要做 - 仍然有危机潜伏 - 虽然XML文件组织良好,
但还可能丢失关键信息。看看下面的例子:
这份菜谱中没有包含ingredient,而且因为它组织良好,所以
Lark分析器也不会发现问题。管理过哪怕是最和善的数据库的
人都知道我们人类常犯的错误:如果有机会,我们会丢掉关键
信息并加入无用的废话。这就是为什么XML的发明者引入DTD -
文档类型定义(Document Type Definition)。DTD提供了一种保
证XML或多或少是你所想的方法。
让我们看看用在菜谱上的一个DTD。
]>
这些代码起初看起来不够友好,但当把它分解时却能看出其中
的意义。让我们详细解释之:
这行是说,包含在方括号中的是具有根元素的某个文档的
DTD。如我们以前提到的,根元素包含所有其它元素。
这行定义了
须按照顺序出现在
这行需要详细的解释。我定义了以下的结构:
mandatory
我这样做是因为,按照我的想法,午餐不一定特定某道菜,但
是晚餐可能要指出开胃食品、主菜和餐后甜点。通过指定
#PCDATA - 表示经过分析的字符数据(即非二进制数据)来
实现这个功能。这里,#PCDATA是文本 - 例如,“dinner”。
"course"后面的问号表示0或1对
标记符内。
现在让我们看看下一行:
这里的加号表示至少有一对
标记符内。
我们感兴趣的最后一行是:
我把sub_item*作为一项安全措施。除了要求每个item的文本之
外,我希望计算每个item的内容的数量。星号是说在
符中可以有子条目的数目。我不需要Chocolate Chip Bars菜谱的
任何子条目,但是当它的组成成分很复杂时就用得着。
现在让我们把这些放在一起看看我们能得到什么。
DTD的完整例子
下面是一个完整的例子。我把另一个菜谱加入文件内,并为
DTD做了注释。可以注意到我在第二个菜谱中用到子条目。
]>
Carol Schmidt
Preheat oven to 350 degrees. Melt butter;
combinewith brown sugar and vanilla in large mixing bowl.
Set aside to cool. Combine flour, baking powder, andsalt;
set aside.Add eggs to cooled sugar mixture; beat well.
Stir in reserved dry ingredients, nuts, and chips.
Spread in greased 13-by-9-inch pan.
Bake for 25 to 30minutes until golden brown; cool.
Cut into squares.
Boil pasta. Sauté garlic and onion.
Add tomatoes.Serve hot.
既然有DTD,文档将被检查看是否符合DTD做出的限制。换句话
说,我们要保证文档的有效性。
为了达到这个目的,我们需要另一个工具:有效性分析器。微软
的MSXML,一个基于Java的程序,使用容易又工作得很好。上面的
文档经过这个程序的检查后没有发现错误。但是如果我检查一个
ingredient标记符中没有包含条目的菜谱,将会返回以下信息:
ingredients is not complete. Expected elements [item].
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有0条评论>>