XML Schema验证:找不到元素的声明(XML Schema Validation : Cann

2019-07-23 13:56发布

我还是有点新的XML模式等,并一直在努力开发一些XML,模式和样式表(XSLT)。 我做了合理的进展,但后来意识到我的架构已经停止工作,所以我把它拿走了回到一个简单的非描述的例子。

这里是我的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>

该架构是代表我真正的XML的结构。

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

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

这个我觉得是与根元素的命名空间的问题做的,但我真的不知道。

有人建议我在做什么错了,请。

Answer 1:

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

schemaLocation根元素属性应该是xsi:schemaLocation ,你需要解决它使用正确的命名空间。

你或许应该改变targetNamespace架构和xmlns的文件,以http://myNameSpace.com (因为名称空间应该是有效的URI,这Test.Namespace不大,但urn:Test.Namespace将确定)。 一旦你这样做,它应该找到的模式。 问题的关键是,所有三种模式的目标命名空间,文档的命名空间,命名空间为这你给架构位置必须是相同的。

(虽然它仍然不会验证为你的<element2>包含<element3>在架构预计在文档中item



Answer 2:

感谢大家的上方,但是这已经得到解决。 对于其他人的利益是在调整这三个名字空间伊恩的建议最显著错误。

为了完整起见,这里是修正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>

再次感谢大家,我希望这是利用给别人,将来别人。



Answer 3:

targetNamespace的XML模式的不元素的命名空间相匹配(在点Test.Namespace与逗号Test,Namespace

一旦你做出上述表示同意,你必须考虑到你element2有一个属性命令 ,是不是在你的XSD。



文章来源: XML Schema Validation : Cannot find the declaration of element