如何使XML模式中的元素可选?

How to make an element in XML schema optional?

提问人:Richard Knop 提问时间:2/12/2012 更新时间:6/8/2017 访问量:175937

问:

所以我得到了这个XML模式:

<?xml version="1.0"?> <xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
    <xs:element name="request">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="amenity">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="description" type="xs:string" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element> </xs:schema>

如何使 description 元素成为可选元素?因此,带有 description 元素和不带 description 元素的 XML 都将针对 XSD 进行验证。

XML XSD

评论

0赞 kjhughes 8/3/2020
另请参阅 XML 架构 minOccurs / maxOccurs 默认值

答:

226赞 Dmitry Kudryavtsev 2/12/2012 #1

试试这个

<xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1" />

如果您想要 0 或 1 个“描述”元素,或者

<xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="unbounded" />

如果您想要 0 到无限数量的“描述”元素。

评论

6赞 kdgregory 2/12/2012
你打败了我的答案,但这里有一个有用的链接:w3.org/TR/xmlschema-0/#OccurrenceConstraints
8赞 Duncan Jones 8/11/2016
maxOccurs默认值为 ,因此您的顶级示例不需要指定它。1
1赞 Wouter Schut 1/10/2017
事实上,测试了它,如果你想允许最多一个元素,你只需要指定 minOccurs=“0” 使其成为可选的。
0赞 thonnor 1/21/2017
maxOccurs 默认为 1 - 非常有用的信息,谢谢。
0赞 cavalsilva 1/19/2019
谢谢!此链接包含其他信息
24赞 david.s 2/12/2012 #2

在架构中将属性设置为 ,如下所示:minOccurs0

<?xml version="1.0"?>
  <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="request">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="amenity">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="description" type="xs:string" minOccurs="0" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element> </xs:schema>