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
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 atributosvalue
deenumeration
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. Utilizarlaser
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 atributotype
permite que el atributo contenga cualquier cosa. - Las restricciones del atributo
compra
se pueden aplicar utilizando el tipo de datopositiveInteger
. No es necesario definir un nuevo tipo. - Aquellos atributos
minOccurs
omaxOccurs
que tengan valor1
pueden ser omitidos, ya que ese es su valor por defecto.