Saltar al contenido principal

Solución: Actividad 403

Se deben añadir los siguientes atributos en el nodo raíz del documento XML para vincular el XSD:

<impresoras 
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="403.xsd">

El XML Schema es el siguiente:

403.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="impresoras" type="tipoImpresoras" />

<xs:complexType name="tipoImpresoras">
<xs:sequence>
<xs:element name="impresora" type="tipoImpresora" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="tipoImpresora">
<xs:sequence>
<xs:element name="fabricante" type="xs:string" />
<xs:element name="modelo" type="xs:string" />
<xs:element name="peso" type="tipoPeso" />
<xs:element name="tamaño" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
<xs:element name="cartucho" type="tipoCartucho" />
<xs:element name="enred" type="tipoEnred" minOccurs="0" />
</xs:sequence>
<xs:attribute name="numSerie" type="xs:ID" use="required" />
<xs:attribute name="tecnologia" type="tipoTecnologia" use="required" />
<xs:attribute name="compra" type="xs:positiveInteger" use="optional" />
</xs:complexType>

<xs:simpleType name="tipoPeso">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0" />
<xs:fractionDigits value="2" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="tipoCartucho">
<xs:restriction base="xs:string">
<xs:pattern value="C-[0-9]{3}[A-Z]{1,2}" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="tipoTecnologia">
<xs:restriction base="xs:string">
<xs:enumeration value="matricial" />
<xs:enumeration value="láser" />
<xs:enumeration value="tinta" />
</xs:restriction>
</xs:simpleType>

<xs:complexType name="tipoEnred" />
</xs:schema>

Algunas consideraciones:

  • En las restricciones del elemento peso, también se puede utilizar minExclusive, según como interpretemos el valor del peso:
    • Si consideramos que una impresora puede pesar 0 utilizamos minInclusive.
    • Si consideramos que una impresora no puede tener pesar 0, utilizamos maxExclusive.
  • En las restricciones del atributo tecnologia tecnología también se puede utilizar una expresión regular (matricial|láser|tinta), aunque es más conveniente una enumeración. Los valores de los atributos value de enumeration deben ser exactamente los que se indican en el enunciado, sino se producirán errores en la validación. Por ejemplo, láser debe llevar tilde. Utilizar laser produce un error.
  • La expresión regular que se define en la restricción del elemento cartucho se puede definir de múltiples formas. Otras opciones válidas son:
    • C-\d{3}[A-Z]{1,2}
    • C-\d{3}[A-Z][A-Z]
    • C-[0-9]{3}[A-Z][A-Z]?
    • C-[0-9]{3}[A-Z]{1}[A-Z]?
    • C-\d{3}[A-Z]{1}[A-Z]?
    • C-[0-9][0-9][0-9][A-Z][A-Z]
    • C-\d\d\d[A-Z][A-Z]
  • El elemento tipoEnred debe ser un elemento vacío, por lo tanto, se debe definir un tipo que tenga en cuenta esa situación (existen varias formas de hacerlo). Dejar un elemento sin atributo type permite que el atributo contenga cualquier cosa.
  • Las restricciones del atributo compra se pueden aplicar utilizando el tipo de dato positiveInteger. No es necesario definir un nuevo tipo.
  • Aquellos atributos minOccurs o maxOccurs que tengan valor 1 pueden ser omitidos, ya que ese es su valor por defecto.