XSD: как ограничить количество символов в атрибуте типа строки?
У меня вопрос о добавлении ограничения в моей xml-схеме (xsd). У меня сложный тип типа:
<xsd:complexType name="xxx">
<xsd:attribute/>
.....
</xsd:complexType>
У меня есть много атрибутов в этом сложном типе, и некоторые из них имеют строковый тип. Теперь я хочу, чтобы эти атрибуты типа строки были ограничены y no. символов, как добавить это ограничение?
Спасибо!
-Ankush
Ответы
Ответ 1
Вам нужно создать простой тип:
<xs:simpleType name="LimitedString">
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
а затем используйте этот новый тип в вашей схеме:
<xs:complexType name="test">
<xs:sequence>
<xs:element name="abc" type="xs:String" />
</xs:sequence>
<xs:attribute type="LimitedString" name="myattr" />
</xs:complexType>
Марк
Ответ 2
Вы можете ограничить строку числом таких символов, как это:
<xs:simpleType name="threeCharString">
<xs:annotation>
<xs:documentation>3-char strings only</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:length value="3"/>
</xs:restriction>
</xs:simpleType>
xs: length в приведенном выше значении ограничивает длину строки ровно 3 символами. Вы также можете использовать xs: minLength и xs: maxlength, или и то, и другое.
Вы можете создать такой шаблон:
<xs:simpleType name="fourCharAlphaString">
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z]{4}"/>
</xs:restriction>
</xs:simpleType>
Выше сказано, 4 символа любого из a-z, A-Z. xs: pattern является регулярным выражением, поэтому отправляйтесь в город с ним.
Вы можете ограничить строку определенным набором строк таким образом:
<xs:simpleType name="iso3currency">
<xs:annotation>
<xs:documentation>ISO-4217 3-letter currency codes. Only a subset are defined here.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:length value="3"/>
<xs:enumeration value="AUD"/>
<xs:enumeration value="BRL"/>
<xs:enumeration value="CAD"/>
<xs:enumeration value="CNY"/>
<xs:enumeration value="EUR"/>
<xs:enumeration value="GBP"/>
<xs:enumeration value="INR"/>
<xs:enumeration value="JPY"/>
<xs:enumeration value="RUR"/>
<xs:enumeration value="USD"/>
</xs:restriction>
</xs:simpleType>
Ответ 3
Ответ marc_s потребует от вас определения нового типа для каждой возможной длины строки, которую вы могли бы использовать. Вместо этого вы можете определить ограничение непосредственно на самом атрибуте.
<xs:complexType name="Test">
<xs:attribute name="LimitedString">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value = "50"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
Ответ 4
Добавьте это, и это сработало для меня,
<xs:element name="vendor">
<xs:simpleType>
<xs:annotation>
<xs:documentation>80-char strings only</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ответ 5
вы всегда можете определить максимальную длину строки в xsd.
Просто добавьте атрибут manLength соответственно. MINLENGTH.