【问题标题】:How do I require that an element contain character data using XML Schema如何使用 XML Schema 要求元素包含字符数据
【发布时间】:2010-08-05 23:52:01
【问题描述】:

如果我有一个xml文档,例如:

<colors>  
    <color1>1452</color1>  
    <color2></color2>  
    <color3></color3>  
</colors>

我想在 XML 模式中定义 color1 元素必须包含一个 int 类型的值,不能为 null 且不能为空。所以上面的例子是有效的,但是如果 color1 像 color2 和 color3 一样是空的,它就会失败。我四处搜索,但似乎找不到一种干净的方法来要求元素填充一个值。我是否遗漏了一些非常明显的东西?

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    您需要在架构中定义元素的类型,如下所示:

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

    要限制元素的长度,请使用xs:restriction,如下所示。

    <xs:element name="color">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:minLength value="5"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    

    请注意,我使用了一个字符串来表示类型。顺便说一句,我不确定您是否可以将minLength 与整数一起使用,但您可以将正则表达式与xs:pattern 一起使用。

    【讨论】:

    • 这成功了,我给它输入正则表达式 [0-9]{3,5} 来强制它只允许 3-5 个数字的范围。我会用更全面的东西更新答案。
    【解决方案2】:

    这是您将如何进行类型检查的方法:

    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="age" type="xs:integer"/>
    <xs:element name="dateborn" type="xs:date"/>
    

    所以在你的情况下,你会想要type="xs:integer"

    您实际上可以执行的不同限制非常广泛,例如正则表达式以及最小和最大整数值。更多信息here

    编辑:here 提供了有关您可能想要指定的不同数字类型的更多信息,而不仅仅是整数。

    【讨论】:

    • 也感谢您的建议。
    【解决方案3】:

    对于属性,模式应该有:

    <... use="required" type="..."/>
    

    对于元素:

    <xs:element minOccurs="1"/>
    

    【讨论】:

    • 不幸的是,minOccurs 只要求元素本身出现在 xml 中,它不会检查元素是否包含数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多