29

我对 XML Schema 等还有些陌生,并且一直在努力开发一些 XML、Schema 和样式表 (XSLT)。我已经取得了合理的进展,但后来意识到我的 Schema 已经停止工作,所以我把它带回了一个更简单的非描述性示例。

这是我的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="Test.Namespace"  
      schemaLocation="http://myNameSpace.com Test1.xsd">
    <element1 id="001">
        <element2 id="001.1">
             <element3 id="001.1" />
        </element2>
    </element1>
</Root>

我写了一个在这里的模式:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="item" type="element3Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element3Type">
         <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
 </xsd:schema>

Schema 代表了我的真实 XML 的结构。

现在,当我尝试验证我的 XML 时,我收到了这个错误:

cvc-elt.1: Cannot find the declaration of element 'Root'. [7]

我认为这与 Root 元素上的命名空间问题有关,但我真的不确定。

有人可以建议我做错了什么吗?

4

3 回答 3

28

感谢以上所有人,但现在已解决。为了其他人的利益,最严重的错误是按照 Ian 的建议对齐三个命名空间。

为了完整起见,这里是更正的 XML 和 XSD

这是 XML,错别字已更正(对于迟到造成的任何混淆,我们深表歉意)

<?xml version="1.0" encoding="UTF-8"?>

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="urn:Test.Namespace"  
      xsi:schemaLocation="urn:Test.Namespace Test1.xsd">
    <element1 id="001">
        <element2 id="001.1">
            <element3 id="001.1" />
        </element2>
    </element1>
</Root>

而且,这是架构

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:Test.Namespace"
            xmlns="urn:Test.Namespace"
            elementFormDefault="qualified">
    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
       
    <xsd:complexType name="element1Type">
        <xsd:sequence>
            <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
       
    <xsd:complexType name="element2Type">
        <xsd:sequence>
            <xsd:element name="element3" type="element3Type"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="element3Type">
        <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>        
</xsd:schema>

再次感谢大家,我希望这对将来的其他人有用。

于 2013-03-27T10:14:21.833 回答
26

cvc-elt.1:找不到元素“根”的声明。[7]

schemaLocation在根元素上的属性应该是xsi:schemaLocation,并且您需要修复它以使用正确的命名空间。

您可能应该将targetNamespace架构和xmlns文档http://myNameSpace.com的 一旦你这样做,它应该找到模式。关键是架构的目标命名空间、文档的命名空间和您为其提供架构位置的命名空间这三个必须相同。Test.Namespaceurn:Test.Namespace

(尽管它仍然无法验证,因为您在架构期望的文档中<element2>包含一个)<element3>item

于 2013-03-27T09:11:55.440 回答
1

您的XML Schema 的 与Root元素targetNamespace的命名空间不匹配(点 in vs. comma in )Test.NamespaceTest,Namespace

一旦您同意上述内容,您必须考虑到您的 XSD 中没有element2属性顺序

于 2013-03-27T01:08:57.013 回答