xml - 在 XML Schema 中如何使一个元素成为其自身的子元素?

标签 xml schema nested

我希望能够拥有同一父元素的任意级别的嵌套子元素,例如:

<path expr="/">
  <path expr="usr">
    <path expr="bin">
      <path expr="X11" />
    </path>
  </path>
  <path expr="var" />
</path>

我正在编写 XML 模式文件,但我不知道如何在模式中表示这种父/子关系:这是我所拥有的,但它不是有效的模式定义:

          <xs:element name="path">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="path" minOccurs="0" />
              </xs:sequence>
              <xs:attribute name="expr" type="xs:string" use="required" />
            </xs:complexType>
          </xs:element>

更新:感谢您的回复。我试过了,但出现以下错误:“w3.org/2001/XMLSchema:complexType”元素在此上下文中不受支持。我应该提到,我所描述的路径层次结构本身是一个名为 application 的元素的子元素,因此整个结构类似于:

<application name="test">
  <path expr="/">
    <path expr="usr">
      <path expr="bin">
        <path expr="X11" />
      </path>
    </path>
    <path expr="var" />
  </path>
</application>

最佳答案

下面应该可以解决问题。 XSD 标准很难直接使用,我总是使用像 Liquid XML Studio 这样的编辑器.

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Path" type="PathType" />
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>

alt text
(来源:liquid-technologies.com)

XSD 有效。对于您描述的新 XML,您需要将其更改为如下所示。

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.0.1135 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Application">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="path" type="PathType" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>

关于xml - 在 XML Schema 中如何使一个元素成为其自身的子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/811833/

相关文章:

java - 合适的 XML 编码器和解码器

xml - document.evalute 函数给出异常

sql - Oracle 是否允许跨模态视图?

'for' 循环内的 'for' 循环是否可以使用相同的计数器变量名称?

javascript - 嵌套值的正则表达式

sql - 查找具有包含 xml 字符串值的字段的所有表

xml - ODI-1227 : ActiveMQObjectMessage cannot be cast to javax. jms.BytesMessage

xml - xml中的 'base'属性是什么?

json - 在基于另一个架构对象的json架构上使用条件语句

elasticsearch - 在ElasticSearch中嵌套文档而没有映射类型