我需要创建一个嵌入式XML模式,即模式在与数据相同的XML中定义。
我试图理解如何正确地做到这一点,但到目前为止,我没有得到一个简单的例子来通过验证。这是我尝试用作内联架构的简单示例XML的原因:
(注意:XML结构(例如root / item)已经在野外,所以我被限制为无法在数据元素上使用命名空间。)
<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="#mySchema">
<xs:schema id="mySchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="item" type="xs:string"
maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<item>String 1</item>
<item>String 2</item>
<item>String 3</item>
</root>
但是当我通过w3.org XML Schema Validator运行该XML时,XML验证失败,并显示以下错误消息,表示它不希望将<xs:schema>
视为子元素! / p>
每个cvc-complex-type.1.2.4无效: 元素{http://www.w3.org/2001/XMLSchema}:架构不允许 这里(1)元素{无}:root,期待[{None}:item,$]:
问:您能否向我展示一个简单的XML文档示例,该文档具有通过验证的内联架构定义?
答案 0 :(得分:4)
如果您的root
孩子有一个xs:schema
元素作为孩子,那么架构需要允许它拥有这样的孩子。允许它的最简单方法是使用通配符:
<xs:sequence>
<xs:any processContents="skip" namespace="http://www.w3.org/2001/XMLSchema"
minOccurs="0" maxOccurs="1"/>
<xs:element name="item" type="xs:string"
maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>