如何在XSD中使用targetNamespace来验证XML

时间:2015-03-27 09:08:17

标签: xml validation xsd namespaces xml-namespaces

我现在正式失去名称空间。我正在尝试以这种(非常简短的)格式验证我们从客户那里获得的XML:

<?xml version="1.0"?>
<order xmlns="http://dev.bla.de/schema/order/1.2">
  <order-number>400056980</order-number>
</order>

我正在尝试为此创建一个匹配的Schema,我想出了:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://dev.bla.de/schema/order/1.2" xmlns:bla="http://dev.bla.de/schema/order/1.2" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="order" type="bla:someOrder"/>

<xs:complexType name="someOrder">
  <xs:sequence>
    <xs:element maxOccurs="1" minOccurs="1" name="order-number">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:minLength value="1"></xs:minLength>
          <xs:maxLength value="13"></xs:maxLength>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

</xs:schema>

但是当我用xmllint验证时,我得到:

example.xsd:2: element schema: Schemas validity error : Element '{http://www.w3.org/2001/XMLSchema}schema': No matching global declaration available for the validation root.
example.xsd fails to validate

我是如何编写此XSD以开始验证此XML的?我在这里正式迷失了,我认为这是targetNamespace的一个问题,但经过两天的反对之后,我不再确定任何事情......

请帮忙! ;)

SOLUTION:

要解决问题,必须将架构的头部改为:

<xs:schema targetNamespace="http://dev.bla.de/schema/order/1.2" xmlns="http://dev.bla.de/schema/order/1.2" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:element name="order" type="someOrder" />

1 个答案:

答案 0 :(得分:1)

我通过使用命名的命名空间来验证它:

<?xml version="1.0" encoding="UTF-8"?>
<bla:order xmlns:bla="http://dev.bla.de/schema/order/1.2">
  <order-number>400056980</order-number>
</bla:order>