2014-09-26 34 views
1

我有10个“括号内”变量(“[EVENT]”,“[PROTOCOL]”,“[SESSION]”等...) 我需要限制一个属性。 有效情况是:xsd:SimpleType:如何将属性限制为连接的特定值列表

  1. 不带括号的任何字符串 “括号内的”
  2. 提到10个变量
  3. 任何括号内的变量(S)串联定期字符串,例如: 我的[EVENT] [协议] @ google.com
  4. 空字符串

非有效的情况:

  1. 括号内的任何串,除了10个预定义
  2. 与级联相同
  3. 字符串仅打开或关闭托架

要短 - 括号内仅预定义变量是允许的,他们可以与任何字符串连接。

预先感谢

+2

你试过了什么? – 2014-09-26 12:26:16

回答

1

阅读正则表达式如下:含有除了周围EVENT,协议或SESSION那些没有括号的一个或多个的子串的串联。这被平凡地扩展到其他可接受的括号内变量。

<?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="[^\[\]]*"/> 
      <xs:pattern value="([^\[\]]*\[(EVENT|PROTOCOL|SESSION)\][^\[\]]*)+"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

感谢您的想法。不幸的是,这种模式不匹配没有括号的常规字符串(我的第一个有效的案例) – lyres 2014-09-26 18:01:02

+0

哦,你是对的,但那是一件容易的事。答案已更新。 – kjhughes 2014-09-26 18:09:20

+0

哇!你很快!只剩下一个案例 - 空字符串也应该被视为有效(我忘了将它包含在我原来的问题中)。 – lyres 2014-09-26 18:14:15

相关问题