【问题标题】:XML Schema- how to match any integer?XML Schema-如何匹配任何整数?
【发布时间】:2012-10-12 21:57:23
【问题描述】:

我需要编写一个符合模式的 XML 文件。模式强制元素的数据类型(在 Linux 上可能是进程 ID)为整数。

这段代码通过了验证-

<pid datatype="int">123</pid>

但是,我不会事先知道“123”或进程ID,因此,我想写这样的东西-

 <pid datatype="int">*</pid>

显然这不起作用,因为 * 被视为字符串而不是整数。

我的问题是 - 有没有一种方法可以让我在 XML 文件中输入一个值 以通过测试?

EDIT- 这是架构- http://oval.mitre.org/language/version5.10/ovaldefinition/documentation/unix-definitions-schema.html#process58_object

【问题讨论】:

  • 共享您的架构...如果架构被编写为期望数字数据类型,那么就没有办法绕过它...

标签: xml xsd integer xml-validation


【解决方案1】:

完成架构定义后,pid 可以为空,也可以包含数值。因此,如果没有要传入的数据,则只需将其指定为&lt;pid datatype="int"&gt;&lt;/pid&gt;&lt;pid /&gt;

【讨论】:

    【解决方案2】:

    如果您希望允许使用整数或星号,请将架构更改为使用如下类型:

    <xs:element name="pid">
      <xs:simpleType>
        <xs:union>
          <xs:simpleType ref="xs:integer"/>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="*"/>
            </
          </
        </
      </
    </
    

    【讨论】:

      【解决方案3】:

      也许您也可以使用 regex 在 XSD 中定义一个简单类型,如下所示:

      <!-- definition of simple types -->
      <simpleType name="pidType">
          <annotation>
              <documentation>A number or *</documentation>
          </annotation>
          <restriction base="string">
              <pattern value="\d+|\*{1}" />
          </restriction>
      </simpleType>
      

      那么你就可以使用它了:

      <element name="pid" type="tns:pidType"></element>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2012-04-07
        • 2011-12-18
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多