xml - crear - interpretar xsd
XSD: ¿cómo restringir el número de caracteres en el atributo de tipo de cadena? (5)
Tengo una pregunta sobre la adición de restricciones en mi esquema xml (xsd). Tengo un tipo complejo como
<xsd:complexType name="xxx">
<xsd:attribute/>
.....
</xsd:complexType>
Tengo muchos atributos en este tipo complejo, y pocos de ellos son de tipo cadena. Ahora quiero que esos atributos de tipo de cadena estén restringidos a y no. de caracteres, ¿cómo agrego esta restricción?
¡Gracias! -Ankush
La respuesta de marc_s requerirá que defina un nuevo tipo para cada longitud de cadena posible que pueda usar. En su lugar, puede definir la restricción directamente en el atributo en 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>
Necesitas crear un tipo simple así:
<xs:simpleType name="LimitedString">
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
</xs:restriction>
</xs:simpleType>
y luego use este nuevo tipo en su esquema:
<xs:complexType name="test">
<xs:sequence>
<xs:element name="abc" type="xs:String" />
</xs:sequence>
<xs:attribute type="LimitedString" name="myattr" />
</xs:complexType>
Bagazo
Puedes restringir la cadena a un número de caracteres como este:
<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>
La longitud xs: en lo anterior limita la longitud de la cadena a exactamente 3 caracteres. También puede usar xs: minLength y xs: maxlength , o ambos.
Puedes proporcionar un patrón así:
<xs:simpleType name="fourCharAlphaString">
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z]{4}"/>
</xs:restriction>
</xs:simpleType>
Lo anterior dice, 4 caracteres, de cualquiera de az, AZ. El patrón xs: es una expresión regular, así que ve a la ciudad con él.
Puede restringir la cadena a un conjunto particular de cadenas de esta manera:
<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>
siempre se puede definir la longitud máxima de una cadena en xsd. Solo agrega el atributo manLength resp. longitud mínima.
Agregue esto y funcionó para mí,
<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>