Используйте 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>
Изменить регулярные выражения для содержания вашего сердца, например, провалить пример с ведущим и/или конечные пробелы.
Отредактировано, чтобы отразить комментарий ФП, что «[SomeString» также недействительна.
Если '[SomeString' без закрывающей скобки действительны? – kjhughes
Собственно, нет. Он не должен быть действительным. – lyres
И, я предполагаю, что 'SomeString '' без открытой скобки также должен быть недействительным, верно? [Мой ответ ниже] (http://stackoverflow.com/a/26049756/290085) принимает и отклоняет случаи, перечисленные в вашем вопросе, плюс отклоняет '' [SomeString "и' SomeString] "'. – kjhughes