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 utilizarminExclusive, 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.
- Si consideramos que una impresora puede pesar 0 utilizamos
- En las restricciones del atributo
tecnologiatecnologí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 atributosvaluedeenumerationdeben ser exactamente los que se indican en el enunciado, sino se producirán errores en la validación. Por ejemplo,láserdebe llevar tilde. Utilizarlaserproduce un error. - La expresión regular que se define en la restricción del elemento
cartuchose 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
tipoEnreddebe 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 atributotypepermite que el atributo contenga cualquier cosa. - Las restricciones del atributo
comprase pueden aplicar utilizando el tipo de datopositiveInteger. No es necesario definir un nuevo tipo. - Aquellos atributos
minOccursomaxOccursque tengan valor1pueden ser omitidos, ya que ese es su valor por defecto.