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
- Define el elemento raíz
university. - Cada
facultydebe tener un atributonamede tipo string. - Cada
departmentdebe tener un atributonamede tipo string. - Cada
coursedebe tener un atributocodede tipo string. - Cada
coursedebe contener elementostitle(string) ycredits(integer). - Cada
studentscontiene múltiples elementosstudent. - Cada
studentdebe tener un atributoidde tipo string. - Cada
studentdebe contener elementosname(string) yemail(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._
</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
- Elemento
university: Es el elemento raíz que contiene múltiplesfaculty. - Elemento
faculty: Cadafacultytiene un atributonamey puede contener múltiplesdepartment. - Elemento
department: Cadadepartmenttiene un atributonamey puede contener múltiplescourse. - Elemento
course: Cadacoursetiene un atributocodey contiene los elementostitle,creditsystudents. - Elemento
students: Contiene múltiples elementosstudent. - Elemento
student: Cadastudenttiene un atributoidy contiene los elementosnameyemail. Elemailestá 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.

