当前位置 : 主页 > 网页制作 > xml >

如何创建有效的内联XML架构?

来源:互联网 收集:自由互联 发布时间:2021-06-13
我需要创建一个嵌入式 XML模式,即模式在与数据相同的 XML中定义. 我试图理解如何正确地做到这一点,但到目前为止,我没有得到一个简单的例子来通过验证.这是我试图用作内联架构的简
我需要创建一个嵌入式 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>作为一个孩子元素!

Invalid per cvc-complex-type.1.2.4:
element {07001}:schema not allowed
here (1) in element {None}:root, expecting [{None}:item,$]:

问:您能向我展示一个带有内联架构定义的简单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>
网友评论