XSD:如何描述一个元素,它可以没有值?

时间:2017-07-13 09:57:05

标签: xml xsd

带值的XML示例:

<Type name="firstType">1</Type>

没有值的XML示例:

<Type name="secondType" />

XSD中的一个如何定义第二种元素?它有什么样的元素类型?

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式定义第一个元素(不带“name”属性):

<xs:element name="Type" type="xs:integer" />

如果您定义的第二个元素没有类型且没有子序列或选项

<xs:element name="Type" />

然后不允许使用子元素。这意味着该元素必须为空。

但是,如果元素具有特定的属性值,并且同时不为空,则它不能定义为空的元素,如果它具有其他属性值。

这是名称属性的完整示例:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="type0">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:integer">
                <xs:attribute name="name" use="required" fixed="firstType"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="type1">
          <xs:complexType>
            <xs:attribute name="name" use="required" fixed="secondType"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

但是我不建议在属性中定义类型,而是建议在元素中定义类型。这将允许不同的子类型。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="type">
          <xs:complexType>
            <xs:choice>
              <xs:element name="firstType" type="xs:integer"/>
              <xs:element name="secondType"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

答案 1 :(得分:1)

我认为以前的答案存在一些问题。

使用此示例

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2017 (https://www.liquid-technologies.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ElementInt" type="xs:int" />
                <xs:element name="ElementWithAnything" />
                <xs:element name="myEmptyElm">
                    <xs:complexType />
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

元素' ElementInt '易于理解,其类型设置为xs:int,因此它必须包含int。

元素' ElementWithAnything '是有趣的地方,因为类型是 NOT 指定,类型默认为xs:anyType ,这允许任何东西,文本,元素,属性等等。

元素' myEmptyElm '基本上是说它的类型基于子xs:complexType。 xs:complexType以空为开头,因此除非您向其添加任何内容,否则生成的XML元素也必须为空。

声明一个空的元素

<xs:element name="myEmptyElm">
    <xs:complexType />
</xs:element>

声明允许任何子文本,元素或属性的元素

<xs:element name="ElementWithAnything" />