是否可以将属性定义为字符串还是已知字符串?

时间:2018-10-10 06:10:53

标签: c# xsd

例如我想有几个保留的字符串,它们在程序中具有自定义行为。我想与使用Schema的人交流,哪些值将具有预先编程的行为。

说“ a”,“ b”,“ c”,“ d”被保留。

如果有人指定“ customOperation1”,那么它将在代码中被视为自定义值。

如果有人使用“ a”,则将调用“ a”的预编程行为。

当前我只是将其作为字符串字段使用,但是有没有办法将“带有额外含义和关键字的字符串”传达给XML?

例如

  <xs:simpleType name="operation" final="restriction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="a"/>
      <xs:enumeration value="b"/>
    </xs:restriction>
  </xs:simpleType>

请允许我指定一个名为operation的枚举,其值为“ a”和“ b”

如何做同样的事情,但也允许自定义项?

1 个答案:

答案 0 :(得分:1)

您可以使用枚举和字符串的并集,例如:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:simpleType name="SpecialOp" final="restriction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="a"/>
      <xs:enumeration value="b"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="CustomOp">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <xs:simpleType name="Operation">
    <xs:union memberTypes="SpecialOp CustomOp"/>
  </xs:simpleType>

  <xs:element name="op" type="Operation"/>

</xs:schema>

这将接受op的任何字符串值,但仍传达特殊值的含义。