Tutoriales de informática - Abrirllave.com

Abrirllave.com

Ejercicio de XSD - Iniciales al revés

Dado el archivo "fichas.xsd":

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="fichas">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ficha" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nombre" type="xs:string"/>
              <xs:element name="iniciales">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="edad" type="xs:integer"/>
             </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Realizar los cambios necesarios en "fichas.xsd", para que el siguiente documento XML sea válido:

<?xml version="1.0" encoding="UTF-8"?>
<fichas xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="fichas.xsd">
   <ficha>
      <nombre>Ana Sanz Tin</nombre>
      <iniciales>AST</iniciales>
      <edad>22</edad>
      <iniciales-al-reves>TSA</iniciales-al-reves>
   </ficha>
   <ficha>
      <nombre>Iker Rubio Mol</nombre>
      <iniciales>IRM</iniciales>
      <edad>23</edad>
      <iniciales-al-reves>MRI</iniciales-al-reves>
   </ficha>
</fichas>

Nota: hay que tener en cuenta que el elemento iniciales-al-reves debe ser del mismo tipo que iniciales, y dicho tipo solamente deberá definirse una vez.

Solución:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="fichas">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ficha" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nombre" type="xs:string"/>
              <xs:element name="iniciales" type="tresLetras"/>
              <xs:element name="edad" type="xs:integer"/>
              <xs:element name="iniciales-al-reves" type="tresLetras"/>
             </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

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

</xs:schema>

Ampliación del ejercicio

Si se quisiera permitir que las tres letras de iniciales e iniciales-al-reves, sean minúsculas o mayúsculas indistintamente; en lugar de [A-Z][A-Z][A-Z] ¿qué se podría escribir?

Solución:

[a-zA-Z][a-zA-Z][a-zA-Z]