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
faculty
debe tener un atributoname
de tipo string. - Cada
department
debe tener un atributoname
de tipo string. - Cada
course
debe tener un atributocode
de tipo string. - Cada
course
debe contener elementostitle
(string) ycredits
(integer). - Cada
students
contiene múltiples elementosstudent
. - Cada
student
debe tener un atributoid
de tipo string. - Cada
student
debe 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._%+-]+@[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
- Elemento
university
: Es el elemento raíz que contiene múltiplesfaculty
. - Elemento
faculty
: Cadafaculty
tiene un atributoname
y puede contener múltiplesdepartment
. - Elemento
department
: Cadadepartment
tiene un atributoname
y puede contener múltiplescourse
. - Elemento
course
: Cadacourse
tiene un atributocode
y contiene los elementostitle
,credits
ystudents
. - Elemento
students
: Contiene múltiples elementosstudent
. - Elemento
student
: Cadastudent
tiene un atributoid
y contiene los elementosname
yemail
. Elemail
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.