Ejercicio de XSD - Escribir expresiones regulares
En las expresiones regulares se pueden utilizar –entre otros– los siguientes símbolos:
Símbolos | Significado |
---|---|
. |
Cualquier carácter. |
\d |
Cualquier dígito del 0 al 9. |
\D |
Cualquier carácter que no sea un dígito del 0 al 9. |
x* |
x puede aparecer cero o más veces. |
x+ |
x debe aparecer al menos una vez. |
x? |
x puede aparecer una vez o no aparecer. |
[abc] o [a|b|c] |
Cualquier carácter indicado entre los corchetes: a, b o c. |
[a-z] |
Cualquier carácter de la a a la z. |
x{n} |
x debe aparecer n veces. |
x{n,m} |
x debe aparecer entre n y m veces. |
x{n,} |
x debe aparecer al menos n veces. |
Teniendo en cuenta, solamente, los símbolos mostrados en la tabla anterior, escribir las posibles expresiones regulares que permitan representar los siguientes valores:
1) |
"Capítulo 0", "Capítulo 1", "Capítulo 2"... "Capítulo 9". (Solo se permite un dígito). |
2) |
"Capítulo 0", "Capítulo 1", "Capítulo 2"... "Capítulo 99". (Uno o dos dígitos). |
3) |
"Capítulo 1", "Capítulo 2", "Capítulo 3"... "Capítulo 99". (No se permite "Capítulo 0"). |
4) |
"Capítulo 0", "Capítulo 1", "Capítulo 2"... "Capítulo 99"... "Capítulo 100"... (Uno o más dígitos). |
5) |
Cualquier valor de dos caracteres, cuyo primer carácter sea distinto de un dígito (0-9) y cuyo segundo carácter sea "Z": "aZ"... "zZ", "AZ"... "ZZ", "?Z", "=Z", "*Z"... |
6) |
"ABBC", "ABBBC", "ABBBBC", "ABBBBBC". |
7) |
El primer carácter debe ser "R". A continuación, deben aparecer obligatoriamente dos o más "S". Finalmente, puede aparecer o no, un dígito del 3 al 8: "RSS", "RSSS"... "RSS3"... "RSS8", "RSSS3"... "RSSS8"... "RSSSSSSSSSSS7"... |
8) |
Cualquier valor que contenga en primer lugar "COD", después tres dígitos (0-9) y, finalmente, uno o más caracteres cualesquiera: "COD645pera", "COD646manzana"... |
Solución:
1) |
Capítulo \d Capítulo [0-9] Capítulo [0|1|2|3|4|5|6|7|8|9] |
2) |
Capítulo \d\d? Capítulo \d{1,2} Capítulo [0-9][0-9]? Capítulo [0|1|2|3|4|5|6|7|8|9][0|1|2|3|4|5|6|7|8|9]? |
3) |
Capítulo [1-9]\d? Capítulo [1-9][0-9]? Capítulo [1|2|3|4|5|6|7|8|9][0|1|2|3|4|5|6|7|8|9]? |
4) |
Capítulo \d+ Capítulo \d\d* Capítulo [0-9]+ Capítulo [0|1|2|3|4|5|6|7|8|9]+ |
5) |
\DZ \D[Z] |
6) |
AB{2,5}C ABBB?B?B?C |
7) |
RSS+[3-8]? RSSS*[3-8]? RS{2,}[3-8]? RSS+[3|4|5|6|7|8]? |
8) |
COD\d{3}.+ COD\d\d\d.+ COD[0-9][0-9][0-9].+ |
Ampliación del ejercicio
Dado el siguiente documento XML:
<?xml version="1.0" encoding="UTF-8"?>
<expresiones-regulares xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="expresiones-regulares.xsd">
<expresiones>
<expresion1>Capítulo 0</expresion1>
<expresion2>Capítulo 0</expresion2>
<expresion3>Capítulo 1</expresion3>
<expresion4>Capítulo 0</expresion4>
<expresion5>aZ</expresion5>
<expresion6>ABBC</expresion6>
<expresion7>RSS</expresion7>
<expresion8>COD645pera</expresion8>
</expresiones>
<expresiones>
<expresion1>Capítulo 9</expresion1>
<expresion2>Capítulo 99</expresion2>
<expresion3>Capítulo 99</expresion3>
<expresion4>Capítulo 99999</expresion4>
<expresion5>?Z</expresion5>
<expresion6>ABBBBBC</expresion6>
<expresion7>RSSSSSSSSSSS7</expresion7>
<expresion8>COD646manzana</expresion8>
</expresiones>
</expresiones-regulares>
Escribir el contenido del archivo "expresiones-regulares.xsd" que permita validarlo utilizando las expresiones regulares escritas en este ejercicio.
Solución:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="expresiones-regulares">
<xs:complexType>
<xs:sequence>
<xs:element name="expresiones" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="expresion1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Capítulo \d"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="expresion2">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Capítulo \d\d?"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="expresion3">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Capítulo [1-9]\d?"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="expresion4">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="Capítulo \d+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="expresion5">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\DZ"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="expresion6">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="AB{2,5}C"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="expresion7">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="RSS+[3-8]?"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="expresion8">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="COD\d{3}.+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>