-1

我在下面的 xsd 架构中有问题如何将逗号分隔的字符串限制为像这样的一个字符

    <status>A,B,C,D</status> 

目前我正在使用下面的代码来创建逗号分隔的字符串列表。

    <xs:simpleType name="order">
<xs:annotation>
  <xs:documentation>
  Comma-separated list of anything
  </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
  <xs:pattern value="[^,]+(,\s*[^,]+)*"/>
</xs:restriction>

4

3 回答 3

2

利用

    <xs:element name="status">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="((([A-Z][,]+)+)([A-Z]?))|([A-Z]))"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

验证:

  <status>A</status>
  <status>A,</status>
  <status>A,B</status>
  <status>A,B,C,D</status>
  <status>A,B,C,D,</status>

并避免

  <status>AA</status>
  <status>AA,</status>
  <status></status>
  <status>AAAA,BBBB,CCCC,DDDD,</status>
于 2013-05-16T10:38:39.973 回答
2

类似于Navin Rawat 的答案,只是不同(和更简单)的正则表达式:

<xs:element name="status">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z](,[A-Z])*"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>
于 2016-06-14T00:27:12.093 回答
0

尽管@Navin Rawat的回答允许使用逗号,但它可能 不是解决您问题的最佳/最佳XML解决方案。

一个更好的解决方案是使用XML list,如以下模式代码所示:

<xs:schema>
<xs:simpleType name="character">
  <xs:restriction base="xs:string">
    <xs:maxLength value="1" />
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="order">
  <xs:annotation>
    <xs:documentation>
    Space-separated list of single characters
    </xs:documentation>
  </xs:annotation>
  <xs:list itemType="character" />
</xs:simpleType>
</xs:schema>

如您所见,is 使用 axs:restriction而不是正则表达式来强制每个字符串的长度为 1。唯一的缺点是它要求字符串以空格分隔,而不是逗号分隔。

于 2016-02-21T16:45:05.753 回答