如何在XSD中组合属性的枚举值?

时间:2016-06-07 08:57:44

标签: xml enums xsd

我想创建一个属性(gravity_layout),它采用不同的组合值(例如:bottom|right) 我该如何制作这个属性? 我写了这个:

   <xs:attribute name='layout_gravity'>
    <xs:simpleType>
      <xs:union memberTypes='xs:string'>
        <xs:simpleType>
          <xs:restriction base='xs:NMTOKEN'>
            <xs:enumeration value='bottom' />
            <xs:enumeration value='center' />
            <xs:enumeration value='center_horizontal' />
            <xs:enumeration value='center_vertical' />
            <xs:enumeration value='clip_horizontal' />
            <xs:enumeration value='clip_vertical' />
            <xs:enumeration value='fill' />
            <xs:enumeration value='fill_horizontal' />
            <xs:enumeration value='fill_vertical' />
            <xs:enumeration value='left' />
            <xs:enumeration value='right' />
            <xs:enumeration value='top' />
          </xs:restriction>
        </xs:simpleType>
      </xs:union>
    </xs:simpleType>
  </xs:attribute>

我可以为它定义一个值,例如只是rightbottom,但如果我写right|bottom,那么我会收到错误。

1 个答案:

答案 0 :(得分:0)

你可以

  1. 使用XSD v1.1断言(在XSD v1.0中不可用) 并尝试找出一个聪明的XPath 验证由|分隔的合法值的微语言 符号,

    <强>

  2. 修复您的XML设计,以便使用单独的source元素 layout_gravity而不是将多个值插入单个值 @layout_gratity属性:

    <layout_gravity>
      <source>bottom</source>
      <source>right</source>
      <!-- ... -->
    </layout_gravity>
    
  3. 我建议使用#2 ,因为

    • XSD(v1.1或v1.0)将能够自然地表示您的约束,并且
    • 使用XML的程序将能够利用XML解析器 而不是微量解析填充到单个中的复合值 属性。