Saltar al contenido principal

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:

  1. [a-z0-9]: el nombre de dominio de segundo nivel debe empezar por letra minúscula o número.
  2. [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 indica 0 como el mínimo de ocurrencias porque el nombre puede tener una longitud de 2 caracteres y un máximo de 61 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).
  3. [a-z0-9]: el nombre de dominio de segundo nivel debe terminar por letra minúscula o número.
  4. \.: punto que separa ambos nombres (primer nivel y segundo nivel).
  5. [a-z]{2,3}: el nombre de primer nivel puede contener solo letras y la longitud es de 2 o 3 caracteres.