1

在生成 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>
4

1 回答 1

0

对于您提供的特定代码段,如果您简单地确保存在与您的 targetNamespace 匹配的默认命名空间(我刚刚在 SO 上的另一篇文章中对此进行了解释)并且您使命名空间别名为“ xh11d" 可用于您的 XSD 处理器(不知何故,通过目录或通过直接xs:import)。

我想说你不应该忽略验证错误,至少在你能做出明智的决定之前是这样。

我将下载 XSD,然后我自己看看;如果有什么有价值的事情发生,我会在这里告诉你。

于 2013-10-29T15:15:54.743 回答