Saltar al contenido principal

Ejercicio 422

Se desea registrar la estructura de ficheros y directorios de Windows en un fichero XML.

Para cada directorio, se guarda la siguiente información:

  • Nombre (atributo).
  • Propietario (atributo).
  • Fecha de creación (atributo).
  • Fecha de modificación (atributo).

Para cada fichero, se guarda la siguiente información:

  • Nombre.
  • Extensión (atributo).
  • Tamaño del fichero.
  • Unidad en la cual se expresa el tamaño (atributo).
  • Propietario (atributo).
  • Fecha de creación (atributo).
  • Fecha de modificación (atributo).
Documento XML

Ejemplo de documento XML que cumple los requisitos.

Escribe un XML Schema para validar el tipo de documento XML descrito, eligiendo los tipos de datos más apropiados y teniendo en cuenta que:

  • El elemento <unidad-almacenamiento> es el elemento raíz y puede contener elementos <directorio> (ninguno, uno o varios) y/o elementos <fichero> (ninguno, uno o varios). Además, tiene un atributo letra.
  • Todos los atributos son obligatorios.
  • Un <directorio> puede contener elementos <directorio> (ninguno, uno o varios) y/o elementos <fichero> (ninguno, uno o varios).
  • Un <fichero> contiene dos elementos obligatorios: <nombre> y <tamano>.
  • Los valores válidos para unidades son: B, KB, MB, GB y TB.
Solución
XML
<?xml version="1.0" encoding="UTF-8" ?>
<unidad-almacenamiento letra="C" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="422.xsd">
<directorio nombre="Archivos de programa" propietario="PC" creado="2022-01-11T05:12:03" modificado="2022-01-11T05:12:03">
<directorio nombre="Windows Defender" propietario="PC" creado="2022-01-11T05:12:03" modificado="2022-04-08T07:45:23">
<fichero creado="2022-01-11T05:12:03" modificado="2023-01-25T13:00:25" propietario="PC">
<nombre extension="exe">ConfigSecurityPolicy.exe</nombre>
<tamano unidades="KB">298</tamano>
</fichero>
</directorio>
</directorio>
<directorio nombre="Archivos de programa (x86)" propietario="PC" creado="2022-01-11T05:12:03" modificado="2023-01-25T13:00:25">
</directorio>
<directorio nombre="Usuarios" propietario="PC" creado="2022-01-11T05:12:03" modificado="2023-01-25T13:00:25">
</directorio>
<directorio nombre="Windows" propietario="PC" creado="2022-01-11T05:12:03" modificado="2022-06-23T10:45:33">
<fichero creado="2022-01-11T05:12:03" modificado="2022-05-19T16:03:12" propietario="PC">
<nombre extension="exe">explorer.exe</nombre>
<tamano unidades="KB">4973</tamano>
</fichero>
<fichero creado="2022-01-11T05:12:03" modificado="2022-08-14T01:34:57" propietario="PC">
<nombre extension="exe">regedit.exe</nombre>
<tamano unidades="KB">388</tamano>
</fichero>
<fichero creado="2022-01-11T05:12:03" modificado="2022-12-29T20:05:02" propietario="SYSTEM">
<nombre extension="ini">system.ini</nombre>
<tamano unidades="B">1000</tamano>
</fichero>
</directorio>
</unidad-almacenamiento>
422.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="unidad-almacenamiento" type="unidad-almacenamiento"></xs:element>

<xs:complexType name="unidad-almacenamiento">
<xs:complexContent>
<xs:extension base="contenido-directorio">
<xs:attribute name="letra" type="unidad-letra" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>

<xs:complexType name="directorio">
<xs:complexContent>
<xs:extension base="contenido-directorio">
<xs:attribute name="nombre" type="xs:string" use="required" />
<xs:attributeGroup ref="metadatos-basicos"></xs:attributeGroup>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<xs:complexType name="contenido-directorio">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="directorio" type="directorio"></xs:element>
<xs:element name="fichero" type="fichero"></xs:element>
</xs:choice>
</xs:sequence>
</xs:complexType>

<xs:complexType name="fichero">
<xs:sequence>
<xs:element name="nombre" type="nombre"></xs:element>
<xs:element name="tamano" type="tamano"></xs:element>
</xs:sequence>
<xs:attributeGroup ref="metadatos-basicos"></xs:attributeGroup>
</xs:complexType>

<xs:attributeGroup name="metadatos-basicos">
<xs:attribute name="propietario" type="xs:string" use="required" />
<xs:attribute name="creado" type="xs:dateTime" use="required" />
<xs:attribute name="modificado" type="xs:dateTime" use="required" />
</xs:attributeGroup>

<xs:complexType name="nombre">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="extension" type="xs:string" use="required"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>

<xs:simpleType name="unidad-letra">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]"></xs:pattern>
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="fichero-tamano">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"></xs:minInclusive>
</xs:restriction>
</xs:simpleType>

<xs:complexType name="tamano">
<xs:simpleContent>
<xs:extension base="fichero-tamano">
<xs:attribute name="unidades" type="unidades" use="required"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>

<xs:simpleType name="unidades">
<xs:restriction base="xs:string">
<xs:enumeration value="B"></xs:enumeration>
<xs:enumeration value="KB"></xs:enumeration>
<xs:enumeration value="MB"></xs:enumeration>
<xs:enumeration value="GB"></xs:enumeration>
<xs:enumeration value="TB"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:schema>