如何在 XSD 中使用 targetNamespace 来验证 XML
How to use targetNamespace in XSD to validate XML
我现在正式迷失了名称空间。我正在尝试验证我们从客户那里得到的这种(非常缩写)格式的 XMLs:
<?xml version="1.0"?>
<order xmlns="http://dev.bla.de/schema/order/1.2">
<order-number>400056980</order-number>
</order>
我正在尝试为此创建一个匹配的架构,我想出了:
<?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 的问题,但是经过 2 天的努力,我对任何事情都不确定了......
请帮忙! ;)
解决方案:
感谢 deveth0 架构的头部必须更改为如下所示:
<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" />
我使用命名空间来验证它:
<?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>
我现在正式迷失了名称空间。我正在尝试验证我们从客户那里得到的这种(非常缩写)格式的 XMLs:
<?xml version="1.0"?>
<order xmlns="http://dev.bla.de/schema/order/1.2">
<order-number>400056980</order-number>
</order>
我正在尝试为此创建一个匹配的架构,我想出了:
<?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 的问题,但是经过 2 天的努力,我对任何事情都不确定了......
请帮忙! ;)
解决方案:
感谢 deveth0 架构的头部必须更改为如下所示:
<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" />
我使用命名空间来验证它:
<?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>