我的XSD架构可以设置,以便命名空间元素显示为验证XML的全局吗?

时间:2016-05-27 14:26:03

标签: xml xsd

鉴于此XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="ABC" xmlns:abc="ABC">

  <xs:complexType name="thing">
    <xs:sequence>
      <xs:element name="NAME" type="xs:string" />
      <xs:element name="DESCRIPTION" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="things">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="thing" type="abc:accident" 
                    maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

我在解决以下问题时遇到了问题:

<?xml version="1.0" encoding="UTF-8"?>
<things>
  <thing>
    <NAME>Zaphod Beeblebrox</NAME>
    <DESCRIPTION>Just this guy</DESCRIPTION>
  </thing>
</things>

我认为这完全取决于命名空间......我只在XSD验证中收到了关于“命名空间”的错误,因此我只在XSD中添加了一个命名空间。但我不控制XML插入某种命名空间引用。

是否有一些简单的方法可以将XML中的<things>验证为<abc:things> - 或者是一种完全排除XSD中命名空间的方法?

1 个答案:

答案 0 :(得分:1)

如果您的XML已设置,

<?xml version="1.0" encoding="UTF-8"?>
<things xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="try.xsd">
  <thing>
    <NAME>Zaphod Beeblebrox</NAME>
    <DESCRIPTION>Just this guy</DESCRIPTION>
  </thing>
</things>

并且它不使用命名空间,然后只是编写XSD而不使用命名空间:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="thing">
    <xs:sequence>
      <xs:element name="NAME" type="xs:string" />
      <xs:element name="DESCRIPTION" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="things">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="thing" type="thing"
                    maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

上述XSD将成功验证上述XML。