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

Xml 如何在XSD中组合属性的枚举值?,xml,enums,xsd,Xml,Enums,Xsd,我想创建一个属性(gravity\u layout),它采用不同的组合值(例如:bottom\124; right) 如何创建此属性? 我写过这样的话: <xs:attribute name='layout_gravity'> <xs:simpleType> <xs:union memberTypes='xs:string'> <xs:simpleType> <xs:restric

我想创建一个属性(
gravity\u layout
),它采用不同的组合值(例如:
bottom\124; 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>

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

您可以

  • 使用XSD v1.1断言(XSD v1.0中不可用) 并尝试找出一个聪明的XPath来 验证由
    |
    符号

  • 修复您的XML设计,使用单独的
    元素
    
    layout\u gravity
    而不是将多个值塞入一个
    @layout\u gratity
    属性:

    <layout_gravity>
      <source>bottom</source>
      <source>right</source>
      <!-- ... -->
    </layout_gravity>
    
    
    底部
    正确的
    
  • 我推荐方法2,因为

    • XSD(v1.1或v1.0)将能够自然地表示您的约束,并且
    • 使用XML的程序将能够更好地利用XML解析器 而不是必须微解析填充到单个 属性
      • 你可以

      • 使用XSD v1.1断言(XSD v1.0中不可用) 并尝试找出一个聪明的XPath来 验证由
        |
        符号

      • 修复您的XML设计,使用单独的
        元素
        
        layout\u gravity
        而不是将多个值塞入一个
        @layout\u gratity
        属性:

        <layout_gravity>
          <source>bottom</source>
          <source>right</source>
          <!-- ... -->
        </layout_gravity>
        
        
        底部
        正确的
        
      • 我推荐方法2,因为

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