我有一个属性可以是任何字符串,但是如果它有起始和结束括号"^[.*]$"
- 它必须只是以下特定值之一:xsd:SimpleType:如何将属性限制为特定值和正则表达式值
"[EVENT]"
和
"[PROTOCOL]"
所以,"[EVENT]"
,"[PROTOCOL]"
,"SomeString"
- 是正确的,但"[SomeString]"
- 不是。
我该如何做到这一点?
我有一个属性可以是任何字符串,但是如果它有起始和结束括号"^[.*]$"
- 它必须只是以下特定值之一:xsd:SimpleType:如何将属性限制为特定值和正则表达式值
"[EVENT]"
和
"[PROTOCOL]"
所以,"[EVENT]"
,"[PROTOCOL]"
,"SomeString"
- 是正确的,但"[SomeString]"
- 不是。
我该如何做到这一点?
我喜欢@ Burkart使用单独的xs:pattern
元素更好(+1),但是我在等待评论中澄清时有此挂起("[SomeString"
没有右括号应该是无效的),所以我会发布它,以防万一可能会发现它很有用。在括号内读取正则表达式为EVENT或PROTOCOL或不以括号开始或结束的任何字符串。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:attribute name="attr">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\[(EVENT|PROTOCOL)\]|[^\[].*[^\]]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
好主意! 更复杂的情况如何:实际上我没有2,但是10个“括号内”变量([EVENT],[PROTOCOL],[SESSION]等) 有效的情况是: 1.任何字符串括号 2.提及了10个“括号内”变量 3.与常规字符串连接的任何括号内的变量,例如:我的[EVENT] _for_ [PROTOCOL] @ google.com 无效情况: 1.任何括号内的字符串,除了10个预定义的 2.与连接相同 3。只有开放或闭合支架的字符串 要短 - 内部括号只能是预定义变量 – lyres 2014-09-26 11:06:00
@lyes,我建议你发布一个新问题。谢谢。 – kjhughes 2014-09-26 11:47:31
谢谢,我在这里发布了新问题: http://stackoverflow.com/questions/26059526/xsdsimpletype-how-to-restrict-attribute-to-list-of-specific-values-with-concat – lyres 2014-09-26 12:25:36
使用xs:simpleType
和正则表达式来限制基类xs:string
类型。您可以有多个xs:pattern
以保持替代模式的简单。元素必须匹配其中一种模式,否则验证将失败。由于模式是正则表达式,因此在用作文字时,必须转义“[”和“]”等特殊字符。
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="elem" type="myElemType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="myElemType">
<xs:attribute name="attrib" type="myAttribType"/>
</xs:complexType>
<xs:simpleType name="myAttribType">
<xs:restriction base="xs:string">
<xs:pattern value="\[EVENT\]"/><!-- "[EVENT]": okay -->
<xs:pattern value="\[PROTOCOL\]"/><!-- "[PROTOCOL]": okay -->
<xs:pattern value="[^\[].*"/><!-- Starts with anything but "[": okay -->
</xs:restriction>
</xs:simpleType>
</xs:schema>
XML:
<root>
<elem attrib="[EVENT]"/>
<elem attrib="[PROTOCOL]"/>
<elem attrib="SomeString"/>
<elem attrib="SomeString]"/>
<elem attrib=" [SomeString] "/>
<!-- All the above are okay; the ones below fail validation -->
<elem attrib="[SomeString]"/>
<elem attrib="[SomeString"/>
</root>
修改正则表达式你的心脏的内容,例如,失败与领先的和/或尾随空格的例子。
编辑反映OP的评论“SomeString”也应该是无效的。
应该'无右括号[SomeString'有效? – kjhughes 2014-09-25 22:14:05
其实没有。它不应该是有效的。 – lyres 2014-09-25 22:35:30
而且,我猜没有左括号的'SomeString]'也应该是无效的,对吧? [我的答案在下面](http://stackoverflow.com/a/26049756/290085)接受和拒绝在你的问题中列出的情况,加上拒绝''[SomeString''和''SomeString]“''。 – kjhughes 2014-09-26 00:28:11