【问题标题】:How to stop an element in XML from being empty using XSD如何使用 XSD 阻止 XML 中的元素为空
【发布时间】:2017-07-14 08:04:58
【问题描述】:

我希望在使用我的 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>

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

【问题讨论】:

  • 这能回答你的问题吗? Restricting empty elements in xsd
  • 我已经有一个simpleType。正如@Michael Kay 的答案所暗示的那样,我只是将其设为通用,然后在需要类似限制的任何地方重复使用它。所以从技术上讲,我的代码已经有了答案。 :P

标签: xml xsd


【解决方案1】:

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

【讨论】:

  • 非常感谢。那真是太愚蠢了。我为非空字符串声明了一个新的 simpleType,因为将来我可能需要为 className 放置一些正则表达式。
【解决方案2】:

如果您希望它是强制性的,请在架构中的元素上使用属性minOccurs=1

【讨论】:

  • 这只是为了指定我希望在我的 XML 中最少有多少个查询标签,我可以给 minOccurs=0。但这不是我的意思。
猜你喜欢
  • 2011-05-06
  • 2016-11-02
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2015-11-11
相关资源
最近更新 更多