XSD模式匹配逗号分隔单词的优先顺序

Ric*_*sen 5 xsd design-patterns

我有这样的标签

<order>foo,bar,goo,doo,woo</order>
Run Code Online (Sandbox Code Playgroud)

我需要用xsd验证.

如何编写与包含以下内容的字符串匹配的正则表达式模式:

  1. 列出{foo,bar,goo,doo,woo}中的 任何一项最大值
  2. 或者是空的.

有效示例:

<order>foo,bar,goo,doo,woo</order>
<order>foo,bar,goo</order>
<order>foo,doo,goo,woo</order>
<order>woo,foo,goo,doo,bar</order>
<order></order>
Run Code Online (Sandbox Code Playgroud)

无效:

<order>foo,foo</order>
<order>,</order>
<order>fo</order>
<order>foobar</order>
Run Code Online (Sandbox Code Playgroud)

这必须在不同的XML/XSD解析器中工作.

ZZ *_*der 3

我认为你无法用正则表达式表达所有规则。尤其是“最多一次”将很难执行。这是我想到的最接近的

<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>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

您可能想尝试使用空格作为分隔符。这在 XML 文件中更为常见。XML Schema 有一个为空格分隔列表定义的内置类型list” 。