Ejercicio 416
Elabora un documento XSD que permita validar el siguiente documento XML:
<dominio>w3c.org</dominio>
Se debe verificar que el contenido de <dominio>
es un nombre de dominio válido.
Un dominio está formado por 2 partes:
dominio.tld
Donde:
dominio
es un nombre de dominio de segundo nivel. Por ejemplo:w3c
,wikipedia
,google
, etc.tld
es un nombre de dominio de primer nivel (TLD). Por ejemplo:com
,net
,es
, etc.
Caracteres válidos para el nombre de un dominio de segundo nivel son:
- Letras minúsculas.
- Números.
- Guión medio (
-
).
Un nombre de dominio de segundo nivel:
- Puede combinar los caracteres válidos de cualquier forma con la única restricción de que el guión medio no puede ser ni el primer ni el último caracter.
- La cadena de texto debe tener un mínimo de 2 caracteres.
- La cadena de texto no puede superar los 63 caracteres.
Los dominios de primer nivel:
- Solo pueden utilizar letras minúsculas.
- Pueden tener una longitud de 2 o 3 caracteres.
Solución
XML
<?xml version="1.0" encoding="UTF-8" ?>
<dominio
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="416.xsd">w3c.org</dominio>
416.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="dominio" type="nombre-dominio" />
<xs:simpleType name="nombre-dominio">
<xs:restriction base="xs:string">
<xs:pattern value="[a-z0-9][a-z0-9\-]{0,61}[a-z0-9]\.[a-z]{2,3}" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
La expresión regular está formada por las siguientes partes:
[a-z0-9]
: el nombre de dominio de segundo nivel debe empezar por letra minúscula o número.[a-z0-9\-]{0,61}
: el nombre de dominio de segundo nivel puede contener letras minúsculas, números o guiones medios desde ninguna vez hasta 61. El guión medio se debe escapar con\
. Se indica0
como el mínimo de ocurrencias porque el nombre puede tener una longitud de 2 caracteres y un máximo de61
porque el nombre puede tener un máximo de 63 caracteres (se cuenta 61 más 2 de los caracteres que se indican en los puntos 1 y 3).[a-z0-9]
: el nombre de dominio de segundo nivel debe terminar por letra minúscula o número.\.
: punto que separa ambos nombres (primer nivel y segundo nivel).[a-z]{2,3}
: el nombre de primer nivel puede contener solo letras y la longitud es de 2 o 3 caracteres.