声明xml架构命名空间后无法找到数据类型

时间:2013-10-20 15:00:34

标签: xml schema

我无法理解声明XML架构的某些行为。

问题 这个xml架构工作正常:

*<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://www.example.org" xmlns:ab="http://test.com"
            targetNamespace="http://www.example.org"
            elementFormDefault="qualified">
  <xsd:element name="simple1" type="complexType1"/>

  <xsd:complexType name="complexType1">
    <xsd:sequence>
      <xsd:element name="element1" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>*

但如果我更改targetnamespace除http://www.example.org之外的任何内容,则架构找不到complexType1。为什么会这样。 这不起作用。

*<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://www.example.org" xmlns:ab="http://test.com"
            targetNamespace="http://www.example.org99999"
            elementFormDefault="qualified">
  <xsd:element name="simple1" type="complexType1"/>

  <xsd:complexType name="complexType1">
    <xsd:sequence>
      <xsd:element name="element1" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>*

提前致谢

1 个答案:

答案 0 :(得分:0)

当您声明诸如complexType之类的组件时,它会进入架构的targetNamespace。当您引用具有无前缀名称的组件时,如在type="complexType1"属性中,这将被视为对默认命名空间的引用(在xmlns属性中声明)。在您的第一个示例中,targetNamespace和默认命名空间是相同的,因此它可以工作;在第二个例子中,它们是不同的,所以它没有。

如何解决?这取决于你想要达到的目标,你没有告诉我们。