枚举类型的正确XSD

本文关键字:XSD 类型 枚举 | 更新日期: 2023-09-27 18:00:36

我有一个类似的枚举类

public enum Test
{
    a = 1,
    b = 2
}

我正在为以下创建xsd

<xs:complexType name="Test">
<xs:all>
    <xs:element name="TCode" type="TestCode" minOccurs="1" maxOccurs="1" />
    <xs:element name="TValue" type="TestValue" minOccurs="1" maxOccurs="1" />
</xs:all>
</xs:complexType>    
<xs:simpleType name="TestCode">
    <xs:restriction base="xs:string">
        <xs:enumeration value="a" />
        <xs:enumeration value="b" />
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="TestValue">
    <xs:restriction base="xs:string">
        <xs:enumeration value="1" />
        <xs:enumeration value="2" />
    </xs:restriction>
</xs:simpleType>
  1. 这是为Enum类创建xsd类型的正确方法吗
  2. 如何在不使用xs:assert的情况下验证XML元素?

    如果TCodea,则TValue1

    如果TCodeb,则TValue2

XML将是

<Test>
   <TCode>a</TCode>
   <TValue>1</TValue>
</Test>

有什么想法吗?

枚举类型的正确XSD

我认为使用标准xsd函数是不可能的。但是,如果TCode和TValue有一个固定的1比1关系,你不应该只问这两者中的一个吗?这将使创建无效状态成为不可能。

示例:

<xs:complexType name="Test">
 <xs:choise>
  <xs:element name="TCode" type="TestCode" minOccurs="1" maxOccurs="1" />
  <xs:element name="TValue" type="TestValue" minOccurs="1" maxOccurs="1" />
 </xs:choise>
</xs:complexType>