我对使用 XML 模式相当陌生,所以如果这比我自己认为的更微不足道,请原谅我的无能。
我正在尝试创建一个必需属性,该属性必须包含列表中的 1 个或多个以空格分隔的字符串值。列表为4种典型的HTTP请求方式;get
, post
, put
, and delete
.
因此有效的元素包括:
<rule methods="get" />
<rule methods="get post" />
<rule methods="post put delete" />
而无效元素包括:
<rule methods="get get" />
<rule methods="foobar post" />
<rule methods="get;post;put" />
我尝试过用枚举和长度来愚弄,但我不相信我理解我需要做什么(或者就此而言,如果它实际上是可能的,尽管看起来似乎应该是)
这就是我现在所处的位置,感谢@tdrury:
<xs:attribute name="methods" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:pattern value="(?:(?:get|post|put|delete)\s?){1,4}" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
哪个有效,除了重复(such as get get
or post post post
) 和不存在的空格 (such as getpost
or postputdelete
)
Edit:
经过一番尝试后,我想到了一个想法:枚举所有可能的序列。值得庆幸的是,这个列表是(暂且)固定为四种常用的运输方式,get
, post
, put
, and delete
,所以我想:
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
<xs:enumeration value="delete" />
<xs:enumeration value="put" />
<xs:enumeration value="put delete" />
<xs:enumeration value="post" />
<xs:enumeration value="post delete" />
<xs:enumeration value="post put" />
<xs:enumeration value="post put delete" />
<xs:enumeration value="get" />
<xs:enumeration value="get delete" />
<xs:enumeration value="get put" />
<xs:enumeration value="get put delete" />
<xs:enumeration value="get post" />
<xs:enumeration value="get post delete" />
<xs:enumeration value="get post put" />
<xs:enumeration value="get post put delete" />
</xs:restriction>
任何人都可以看到这会的原因not是个好主意吗?