Ejercicio XML para Crear un XSD

Documento XML

Consideremos el siguiente documento XML que describe una universidad con información sobre facultades, departamentos, cursos y estudiantes. Tu tarea es crear un archivo XSD que valide la estructura de este XML.

<university>
    <faculty name="Engineering">
        <department name="Computer Science">
            <course code="CS101">
                <title>Introduction to Programming</title>
                <credits>3</credits>
                <students>
                    <student id="S001">
                        <name>John Doe</name>
                        <email>johndoe@example.com</email>
                    </student>
                    <student id="S002">
                        <name>Jane Smith</name>
                        <email>janesmith@example.com</email>
                    </student>
                </students>
            </course>
            <course code="CS102">
                <title>Data Structures</title>
                <credits>4</credits>
                <students>
                    <student id="S003">
                        <name>Emily Johnson</name>
                        <email>emilyj@example.com</email>
                    </student>
                </students>
            </course>
        </department>
        <department name="Mechanical Engineering">
            <course code="ME101">
                <title>Thermodynamics</title>
                <credits>3</credits>
                <students>
                    <student id="S004">
                        <name>Michael Brown</name>
                        <email>mbrown@example.com</email>
                    </student>
                </students>
            </course>
        </department>
    </faculty>
    <faculty name="Arts">
        <department name="Literature">
            <course code="LT101">
                <title>Introduction to Poetry</title>
                <credits>2</credits>
                <students>
                    <student id="S005">
                        <name>Sarah Davis</name>
                        <email>sdavis@example.com</email>
                    </student>
                </students>
            </course>
        </department>
    </faculty>
</university>

Instrucciones para Crear el XSD

  1. Define el elemento raíz university.
  2. Cada faculty debe tener un atributo name de tipo string.
  3. Cada department debe tener un atributo name de tipo string.
  4. Cada course debe tener un atributo code de tipo string.
  5. Cada course debe contener elementos title (string) y credits (integer).
  6. Cada students contiene múltiples elementos student.
  7. Cada student debe tener un atributo id de tipo string.
  8. Cada student debe contener elementos name (string) y email (string con restricción de formato de email).

Solución en XSD

A continuación se presenta una posible solución en XSD para validar el documento XML anterior:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- Definición del elemento raíz -->
    <xs:element name="university">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="faculty" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="department" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="course" maxOccurs="unbounded">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="title" type="xs:string"/>
                                                    <xs:element name="credits" type="xs:integer"/>
                                                    <xs:element name="students">
                                                        <xs:complexType>
                                                            <xs:sequence>
                                                                <xs:element name="student" maxOccurs="unbounded">
                                                                    <xs:complexType>
                                                                        <xs:sequence>
                                                                            <xs:element name="name" type="xs:string"/>
                                                                            <xs:element name="email">
                                                                                <xs:simpleType>
                                                                                    <xs:restriction base="xs:string">
                                                                                        <xs:pattern value="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}"/>
                                                                                    </xs:restriction>
                                                                                </xs:simpleType>
                                                                            </xs:element>
                                                                        </xs:sequence>
                                                                        <xs:attribute name="id" type="xs:string" use="required"/>
                                                                    </xs:complexType>
                                                                </xs:element>
                                                            </xs:sequence>
                                                        </xs:complexType>
                                                    </xs:element>
                                                </xs:sequence>
                                                <xs:attribute name="code" type="xs:string" use="required"/>
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="name" type="xs:string" use="required"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string" use="required"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Explicación de la Solución

  1. Elemento university: Es el elemento raíz que contiene múltiples faculty.
  2. Elemento faculty: Cada faculty tiene un atributo name y puede contener múltiples department.
  3. Elemento department: Cada department tiene un atributo name y puede contener múltiples course.
  4. Elemento course: Cada course tiene un atributo code y contiene los elementos title, credits y students.
  5. Elemento students: Contiene múltiples elementos student.
  6. Elemento student: Cada student tiene un atributo id y contiene los elementos name y email. El email está restringido a un formato específico mediante una expresión regular.

Este XSD valida la estructura del XML, asegurando que todos los elementos y atributos estén presentes y tengan los tipos de datos correctos.

white ceramic mug between apple magic keyboard and two flat screen computer monitors
Photo by Picography on Pexels.com

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad