【发布时间】:2013-12-05 21:26:19
【问题描述】:
我有以下简单的 XSD 架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://test" elementFormDefault="qualified" attributeFormDefault="unqualified"
xmlns:tns="http://test"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="AType">
<xs:sequence>
<xs:element name="info" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="A" type="tns:AType"/>
</xs:schema>
以下简单的 XML 文档对于此架构是否有效?
<?xml version="1.0" encoding="UTF-8" ?>
<X xsi:type="AType"
xmlns="http://test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<info>text</info>
</X>
我在一个使用 JAXP 和默认 J2SE 1.7 解析器的在线验证器中进行了尝试,并且成功验证了 XML 文档 (http://www.utilities-online.info/xsdvalidation/)。 另一方面,xmllint 说
Schemas validity error : Element '{http://test}X': No matching global declaration
available for the validation root. test2.xml fails to validate
他们是否使用不同的验证模式? J2SE解析器使用的模式是否基于XSD规范?
问题修正:
Michael Kay 向我(下)指出了 XSD 规范中的特定位置。我试图破译 XSD 规范所说的内容。我是否理解正确:
- 这三种评估方法被称为“主要”,因此允许其他(任意)方法?
- 在 (3) 中,如果根元素没有匹配的 XSD 定义,则应使用松散评估。但似乎该规范并未从宽松的评估中排除具有命名空间前缀的元素。而如果上面示例中的元素被赋予了命名空间前缀,那么 J2SE 在线验证器会失败吗?
- 在我上面的示例中,宽松的有效性会话是否适用于根?根没有“上下文确定的声明”,是吗?规范中的定义如下:
...如果元素信息项的“上下文确定的声明”没有通过“验证”相对于“ur-type 定义”而被跳过,则元素信息项的模式有效性可能会宽松地评估。 .
【问题讨论】:
-
Yaneeve:谢谢。您的参考只是表明各种解析器如何解释 XSD 验证存在很大差异。我天真地认为这个概念很清楚,并且由 XSD 规范定义。 :-(
标签: java xml validation xsd