2013-03-26 172 views
15

我对XML模式等有点新,并且一直在努力开发一些XML,模式和样式表(XSLT)。我已经取得了合理的进展,但后来意识到我的Schema已经停止工作,所以我已经回到了一个更简单的非描述性示例。XML模式验证:找不到元素的声明

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

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

有人可以建议我做错了请。

回答

14

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

schemaLocation属性应该是xsi:schemaLocation,并且您需要解决它使用正确的命名空间。

你或许应该改变架构的targetNamespace和文档的xmlnshttp://myNameSpace.com(因为名称空间应该是有效的URI,这Test.Namespace不是,虽然urn:Test.Namespace将是确定)。一旦你这样做,它应该找到模式。重点在于模式的所有三个目标名称空间,文档的名称空间以及您为其提供架构位置的名称空间必须相同。

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

+3

我已经按照您的建议更正了以下内容,现在它可以正常工作 “三个”命名空间的说明正是我所需要的。 – Nerdio 2013-03-27 10:07:19

1

你的XML架构的元素的命名空间一旦你同意上述不匹配(点在主场迎战Test.Namespace逗号Test,Namespace

targetNamespace,你必须考虑你的element2有属性订单不在您的XSD中。根元素

+0

谢谢你,并发现两个明显的错误。我纠正了这些; '代码' <根 的xmlns:的xsi = “http://www.w3.org/2001/XMLSchema-instance” 的xmlns =“Test.Namespace” schemaLocation =“http://myNameSpace.com Test1.xsd” > '代码' (对不起,我似乎不正确插入的代码)。 问题仍然存在... – Nerdio 2013-03-27 08:15:03

17

感谢大家之上,但是这已经得到解决。为了其他人的利益,最重要的错误是按照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> 

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

+4

如果我可以对你的答案提出一些改进:你应该不接受我的答案,等一天我想,然后接受你的答案,因为从技术上讲,你的答案包含所有的修正;我还会修复你的NID部分URN,它是无效的(删除'.',这是NID的无效字符),并添加强制NSS部分,由另一个':'分隔。 schemaLocation只是一个提示,如果不是出于安全原因,XSD知道的验证器可以自由忽略它 - 这就是为什么它不应该是XML无效的原因。 – 2013-03-27 11:54:00

相关问题