如何使用XSD阻止XML中的元素为空

时间:2017-07-14 08:04:59

标签: xml xsd

我希望在使用我的XSD进行XML验证时不接受空元素

我的XML:

<Request>
<Query>Select * from Table</Query>
<Query></Query>
</Request>

我的XSD:

<xs:simpleType name="className">
    <xs:restriction base="xs:string">
        <xs:minLength value="1" />
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="status">
    <xs:restriction base="xs:integer">
        <xs:minInclusive value="100" />
        <xs:maxExclusive value="600" />
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="requires">
    <xs:restriction base="xs:string">
        <xs:minLength value="1" />
    </xs:restriction>
</xs:simpleType>
<xs:complexType name="sql">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attribute name="requires" type="requires"/>
            <xs:attribute name="when" type="xs:string" />
            <xs:attribute name="limit" type="xs:string" />
            <xs:attribute name="offset" type="xs:string" />
            <xs:attribute name="classname" type="className" />
            <xs:attribute name="status" type="status"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>
<xs:complexType name="query">
    <xs:complexContent>
        <xs:extension base="sql">
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:element name="Request">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Query" type="query" maxOccurs="unbounded">
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

如果查询标记为空,我希望不接受它,所以这应该是无效的。希望我的问题是重点。 :)

2 个答案:

答案 0 :(得分:2)

您已经有一个simpleType className,它定义了一个非空字符串。将其重命名为non-empty-string以反映意图,然后更改sql类型,将其定义为non-empty-string的扩展名而不是xs:string

答案 1 :(得分:0)

如果您希望它是必需的

,请在架构中的元素上使用属性minOccurs=1