<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- La declaración anterior define el documento como XML y
además define el Namespace de XML-Schema bajo el vocablo xsd
-->
<!-- En esta sección se indica que dentro del elemento agenda
se deben encontrar al menos (minOcurrs ) un elemento del
tipo persona sin ningún limite superior (maxOcurrs )
Posteriormente se define una restricción, la cual indica
que dentro de los elementos persona los valores de
nombre y apellido deben ser únicos, esto
permite que no sean duplicadas personas en la agenda.
-->
<xsd:element name="agenda">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="persona" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="unica">
<xsd:selector xpath="persona"/>
<xsd:field xpath="nombrecompleto/nombre"/>
<xsd:field xpath="nombrecompleto/apellido"/>
</xsd:unique>
</xsd:element>
<!-- Dentro del elemento persona deben encontrarse anidados
el elemento nombrecompleto ; correo el cual
no tiene limite superior, ubicación y telefono
que esta restringido a 2 máximo.
Los elementos clasificación y edad también
deben encontrarse anidados dentro de dicho elemento.
(NOTA: Aquellos elementos que no especifiquen
los atributos minOccurs y maxOccurs, toman los valores default,
1 y 1 respectivamente )
Además se indica que el atributo id es obligatorio
para este elemento y debe ser del tipo string
También es definido el atributo visible el cual es opcional
y debe ser del tipo boolean (true o false).
-->
<xsd:element name="persona">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="nombrecompleto"/>
<xsd:element ref="correo" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="ubicacion"/>
<xsd:element ref="telefono" minOccurs="0" maxOccurs="2"/>
<xsd:element ref="clasificacion"/>
<xsd:element ref="edad"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:integer" use="required"/>
<xsd:attribute name="visible" type="xsd:boolean" use="optional"/>
</xsd:complexType>
</xsd:element>
<!-- En esta sección se define la composición del elemento
nombrecompleto el cual debe contener en su estructura
los elementos nombre y apellido
-->
<xsd:element name="nombrecompleto">
<xsd:complexType>
<xsd:all>
<xsd:element ref="apellido"/>
<xsd:element ref="nombre"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<!-- Las siguientes tres declaraciones definen
el formato del contenido de apellido,nombre
y correo que es del tipo string, en otras palabras texto.
-->
<xsd:element name="apellido" type="xsd:string"/>
<xsd:element name="nombre" type="xsd:string"/>
<xsd:element name="correo" type="xsd:string"/>
<!-- El elemento ubicacion debe incluir los elementos
ciudad y pais
-->
<xsd:element name="ubicacion">
<xsd:complexType>
<xsd:all>
<xsd:element ref="ciudad"/>
<xsd:element ref="pais"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<!-- Aquí se define el formato de ciudad , pais ,
telefono , clasificacion y edad ; las dos primeras utilizan el formato
string, sin embargo, el resto de los elementos utilizan un diseño
especial que se describe a continuación
-->
<xsd:element name="ciudad" type="xsd:string"/>
<xsd:element name="pais" type="xsd:string"/>
<xsd:element name="telefono" type="formatotelefono"/>
<xsd:element name="clasificacion" type="formatoclasificacion"/>
<xsd:element name="edad" type="formatoedad"/>
Regular Expressions
<!-- El siguiente formato indica que además de ser del tipo string
éste se encuentra restringido a 12 espacios, los cuales deben poseer
la secuencia: 2 digitos (guión) 4 digitos (guión) 4 digitos.
(NOTA: La sintaxis utilizada en los elementos xsl:pattern
representan secuencias de Regular Expressions )
-->
<xsd:simpleType name="formatotelefono">
<xsd:restriction base="xsd:string">
<xsd:length value="12"/>
<xsd:pattern value="\d{2}-\d{4}-\d{4}"/>
</xsd:restriction>
</xsd:simpleType>
<!-- El siguiente formato indica que además de ser
del tipo string éste se encuentra restringido a 3 alternativas
descritas en los elementos xsd:enumaration , en este caso
a los valores Trabajo , Familia y Personal .
-->
<xsd:simpleType name="formatoclasificacion">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Trabajo"/>
<xsd:enumeration value="Familia"/>
<xsd:enumeration value="Personal"/>
</xsd:restriction>
</xsd:simpleType>
integer <!-- El siguiente formato indica que además de ser
del tipo integer éste se encuentra restringido a un valor
mayor a 18 y menor que 65.
-->
<xsd:simpleType name="formatoedad">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="18"/>
<xsd:maxInclusive value="65"/>
</xsd:restriction>
</xsd:simpleType>
<!-- Se cierra el elemento raíz del documento XML -->
</xsd:schema>
|