在生成 XML 文件时,我使用 OMG 定义的 xsd 文件。通过 Internet 进行验证需要很长时间。因此,我下载了所有这些文件以进行本地验证。这适用于简单的情况。但在未来,必须验证更复杂的结构。这包括验证 xhtml 结构。从http://www.w3.org/MarkUp/SCHEMA下载的大部分 xsd 文件有验证错误。在尝试解决这些问题时,我专注于文件 xhtml11-model-1.xsd 开始,因为该文件包含许多其他 xsd 文件使用的基本定义。初始下载文件显示 71 个验证错误!下载的文件没有声明目标名称空间,因此我添加了声明。这样做将错误数量减少到 4 个。但此时我被卡住了。我根本没有找到任何方法来纠正剩余的错误。我选择其中一个作为孤立案例进行分析。请参阅下面的代码。attributeGroup name="xhtml.dir.attrib" 的声明可以在文件 xhtml-bdo-1.xsd 中找到。但是这个文件没有通过验证,因此我将声明复制到我的测试文件中,以便将所有内容放在一个地方。但是在使用 eclipse Kepler 验证这个简单的案例时,我在 xhtml 的引用中得到了下面的错误。
<xs:attributeGroup ref="xhtml.dir.attrib" />
s4s-elt-must-match.1: The content of 'xhtml.I18n.extra.attrib' must match (annotation?, ((attribute | attributeGroup)*, anyAttribute?)). A problem was found starting at: attributeGroup.
怎么了?当声明显示正确时,为什么引用会声明错误。这是eclipse验证器的问题吗?我的误会?我应该简单地忽略这些验证错误吗?为什么从 w3.org 下载的 xsd 文件没有 targetNamespace 声明,因为它似乎需要验证和使用这些文件?感谢您的任何提示。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml/datatypes/"
xmlns:xh11d="http://www.w3.org/1999/xhtml/datatypes/"
elementFormDefault="qualified" >
<xs:attributeGroup name="xhtml.dir.attrib">
<xs:annotation>
<xs:documentation>
"dir" Attribute from Bi Directional Text (bdo) Module
</xs:documentation>
</xs:annotation>
<xs:attribute name="dir">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="ltr" />
<xs:enumeration value="rtl" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:attributeGroup name="xhtml.I18n.extra.attrib">
<xs:annotation>
<xs:documentation>Extended I18n attribute</xs:documentation>
</xs:annotation>
<xs:attributeGroup ref="xhtml.dir.attrib" />
<xs:attribute name="lang" type="xh11d:LanguageCode" />
</xs:attributeGroup>
</xs:schema>