Dar*_*ryn 6 xml xsd xml-validation
我需要编写一个嵌入式XML模式,即该模式是在与数据相同的XML中定义的。
我试图了解如何正确执行此操作,但到目前为止,我还没有获得通过验证的简单示例。这是我尝试用作带有内联架构的简单示例XML的内容:(
注意:XML结构(例如,根/项目)已经大肆使用,因此我被约束为无法在数据元素上使用名称空间)
<?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>
Run Code Online (Sandbox Code Playgroud)
但是,当我通过w3.org XML Schema Validator运行该XML时,该XML验证失败,并显示以下错误消息,它不希望将其<xs:schema>视为子元素!
每个cvc-complex-type.1.2.4无效: 元素{ http://www.w3.org/2001/XMLSchema }:此处不允许元素{None}:root中的模式(1),期望[{None}:项目,$]:
问:能否给我展示一个简单的XML文档的示例,该示例具有通过验证的内联模式定义?
如果您的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>
Run Code Online (Sandbox Code Playgroud)