当前位置:Linux教程 - Linux - XML1.0 中文文档(第二版)---5. 一致性(Conformance)

XML1.0 中文文档(第二版)---5. 一致性(Conformance)

译者:裘强 ([email protected])

5. 一致性
5.1 进行验证和不进行验证的处理器
5.2 使用 XML 处理器
5.1 进行验证和不进行验证的处理器(Validating and Non-Validating Processors)

合乎规范的 XML 处理器可以分为两类:进行验证的和不进行验证的。

进行验证和不进行验证的处理器都必须报告在文件实体的内容中和任何其他它们读到的已析实体中对格式正确性约束的违反。

[定义:进行验证的处理器必须,由使用者选择,报告违反 DTD 声明中所述约束的情况以及不满足本规范中给出的有效性约束的情况。] 要完成这一点,进行验证的 XML 处理器必须读取和处理整个 DTD 和所有在文件中引用的外部已析实体。

不进行验证的处理器只被要求检查文件实体和整个内部 DTD 子集的格式正确性。[定义:虽然它们不被要求检查文件的有效性,但它们必须处理它们读取的所有内部 DTD 子集中的声明和所有参数实体,直到遇到第一个对它们没有读取的参数实体的引用;也就是说,它们必须根据这些声明中的信息规范化属性值,包含内部实体的置换文本,并提供缺省属性值。] 除了 standalone=""yes"" 的情况,它们在遇到第一个对它们没有读取的参数实体的引用后,不应处理其后的实体声明或属性表声明,因为此实体中包含的声明可能覆盖前面的声明。
5.2 使用 XML 处理器

进行验证的处理器的行为是高度可预测的;它必须读取文件的所有部分,报告所有对格式正确性和有效性的违反。对一个不进行验证的处理器的要求要低一点;它不需要读取文件实体以外的任何文件部分。这对 XML 的处理器的使用者而言可能会有两个重要的影响:

* 某些格式正确性错误,尤其是那些要求读取外部实体的,可能不会被不进行验证的处理器检测到。例子有称为声明实体,已析实体和无递归的约束,以及""4.4 XML 处理器对实体和引用的处理""中描述为被禁止的一些情况。
* 取决于处理器是否读取参数和外部实体,从处理器传给应用的信息可能会有所不同。例如,不进行验证的处理器可能不规范化属性值,不包含内部实体的置换文本,或不提供缺省属性值,这些动作要求先读取外部或参数实体中的声明。

为了使不同 XML 处理器间的互操作有最大的可靠性,使用不进行验证的处理器的应用不应依赖于不要求这些处理器具备的动作。那些要求使用如缺省值或在外部实体中声明内部实体等功能的应用应该使用进行验证的 XML 处理器。