Activitats

Creació d'un DTD per validar la matriculació d'alumnes

L’objectiu d’aquesta tasca és aprendre a crear un DTD a partir d’un exemple d’XML.

En un centre reben les dades de matriculació d’alumnes a partir de fitxers XML com aquest

baixa ( 475 B )
que podeu veure resumit aquí:

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <matricula>
  3. <cicle>Administració de sistemes informàtics i xarxes</cicle>
  4. <alumnes>
  5. <alumne>
  6. <nom>Federicu Pi</nom>
  7. <any>2010</any>
  8. <mòduls>
  9. <mòdul>XML</mòdul>
  10. <mòdul>Xarxes Locals</mòdul>
  11. </mòduls>
  12. </alumne>
  13. </alumnes>
  14. </matricula>

Com que la introducció de dades és manual se solen produir molts errors; per evitar que el programa falli volen comprovar-los abans contra una DTD. Us demanen que el desenvolupeu.

  1. <!ELEMENT matricula (cicle,alumnes)>
  2. <!ELEMENT cicle (#PCDATA)>
  3. <!ELEMENT alumnes (alumne)+>
  4. <!ELEMENT alumne (nom,any,mòduls)>
  5. <!ELEMENT nom (#PCDATA)>
  6. <!ELEMENT any (#PCDATA)>
  7. <!ELEMENT mòduls (mòdul)+>
  8. <!ELEMENT mòdul (#PCDATA)>

Creació d'un DTD per una editorial

L’objectiu d’aquesta tasca és aprendre a crear un DTD a partir d’exemples de fitxers XML.

A una editorial li cal una DTD per validar documents com aquests

baixa ( 714 B )
i us han demanat que el feu vosaltres

  1. <!ELEMENT biblioteca (editorial)+>
  2. <!ELEMENT editorial (raosocial,adreca,(contacte,llibre+)?)>
  3. <!ELEMENT raosocial (#PCDATA)>
  4. <!ELEMENT contacte (#PCDATA)>
  5. <!ELEMENT llibre (titol,publicacio,autor,premis,argument)>
  6. <!ELEMENT titol (#PCDATA)>
  7. <!ELEMENT publicacio (#PCDATA)>
  8. <!ELEMENT autor (nom,cognom+,adreca)>
  9. <!ELEMENT premis (premi)+>
  10. <!ELEMENT argument (#PCDATA)>
  11. <!ELEMENT nom (#PCDATA)>
  12. <!ELEMENT cognom (#PCDATA)>
  13. <!ELEMENT premi (#PCDATA)>
  14. <!ELEMENT adreca (carrer,numero,pis?,codipostal,poblacio)>
  15. <!ELEMENT carrer (#PCDATA)>
  16. <!ELEMENT numero (#PCDATA)>
  17. <!ELEMENT pis (#PCDATA)>
  18. <!ELEMENT codipostal (#PCDATA)>
  19. <!ELEMENT poblacio (#PCDATA)>

Creació d'un DTD per una bodega

L’objectiu d’aquesta tasca és aprendre a crear un DTD a partir de fitxers XML d’exemple.

Creeu una DTD que us permeti validar el grup d’arxius que ha generat el programa de facturació d’una bodega:

baixa ( 1.7 KB )

  1. <!ELEMENT albara (numero,data,client,articles)>
  2. <!ELEMENT numero (#PCDATA)>
  3. <!ELEMENT data (#PCDATA)>
  4. <!ELEMENT client (nom,poblacio)>
  5. <!ATTLIST client id CDATA #REQUIRED>
  6. <!ELEMENT articles (compra)+>
  7. <!ELEMENT nom (#PCDATA)>
  8. <!ELEMENT poblacio (#PCDATA)>
  9. <!ELEMENT compra (article,quantitat,descompte?)>
  10. <!ELEMENT article (descripcio,(ampolla|granel),preu)>
  11. <!ATTLIST article codi CDATA #REQUIRED>
  12. <!ELEMENT quantitat (#PCDATA)>
  13. <!ELEMENT descompte (#PCDATA)>
  14. <!ELEMENT descripcio (#PCDATA)>
  15. <!ELEMENT ampolla EMPTY>
  16. <!ELEMENT granel EMPTY>
  17. <!ELEMENT preu (#PCDATA)>

Crear un DTD per les relacions d'una empresa

L’objectiu d’aquesta tasca és crear un DTD a partir d’un exemple d’XML.

Una empresa on treballen quatre persones (1 director i 3 treballadors) ha d’enviar les seves dades amb un arxiu XML que validi amb aquesta DTD:

baixa ( 396 B )

Genereu un arxiu XML amb quatre treballadors que validi amb la DTD especificada.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE personal SYSTEM "personal.dtd">
  3. <personal>
  4. <persona id="A">
  5. <dades>
  6. <nom>Marcelo</nom>
  7. <cognom>Dominguez</cognom>
  8. </dades>
  9. <email>marcelo@empresa.cat</email>
  10. <url href="http://www.empresa.cat" />
  11. <relació treballador="B C D" />
  12. </persona>
  13. <persona id="B">
  14. <dades>
  15. <nom>Frederic</nom>
  16. <cognom>Pi</cognom>
  17. </dades>
  18. <email>frederic@empresa.cat</email>
  19. <relació treballador="C D" director="A" />
  20. </persona>
  21. <persona id="C">
  22. <dades>
  23. <nom>Manel</nom>
  24. <cognom>Puigdevall</cognom>
  25. </dades>
  26. <email>mpuigdevall@empresa.cat</email>
  27. <relació treballador="B D" director="A" />
  28. </persona>
  29. <persona id="D">
  30. <dades>
  31. <nom>Maria</nom>
  32. <cognom>Sebastià</cognom>
  33. </dades>
  34. <email>mari@empresa.cat</email>
  35. <url href="http://maria.blogspot.com"/>
  36. <relació treballador="B D" director="A" />
  37. </persona>
  38. </personal>

Creació d'un DTD per validar les dades de previsió del temps

L’objectiu d’aquesta tasca és aprendre a crear un DTD a partir d’un exemple d’XML.

S’ha de crear una DTD que validi un fitxer amb les previsions del temps de diferents poblacions de Catalunya. El fitxer de mostra per una població és el següent:

baixa ( 1.2 KB )

  1. <!ELEMENT temps (poblacio)+>
  2. <!ELEMENT poblacio (nom,comarca,data+)>
  3. <!ELEMENT nom (#PCDATA)>
  4. <!ELEMENT comarca (#PCDATA)>
  5. <!ELEMENT data (maxima,minima,vent,pluja?,previsio+)>
  6. <!ATTLIST data dia NMTOKEN #REQUIRED>
  7. <!ELEMENT maxima (#PCDATA)>
  8. <!ELEMENT minima (#PCDATA)>
  9. <!ELEMENT vent (#PCDATA)>
  10. <!ELEMENT pluja (#PCDATA)>
  11. <!ELEMENT previsio (estat,graus)>
  12. <!ATTLIST previsio hora NMTOKEN #REQUIRED>
  13. <!ELEMENT estat (#PCDATA)>
  14. <!ELEMENT graus (#PCDATA)>

Creació d'un DTD per validar una facturació

L’objectiu d’aquesta tasca és aprendre a crear un DTD a partir d’un exemple d’XML.

L’empresa Porquets, SA, es dedica a la venda i fabricació de porquets de xocolata.

Els informàtics de l’empresa Porquets, SA, han creat un programa que exporta les dades de facturació en format XML.

facturacio.xml ( 959 B )

Com que no estan segurs que el programa no tingui errors els cal alguna manera de determinar que els fitxers XML que genera el programa sempre siguin vàlids. Us han contractat per crear la DTD.

  1. <!ELEMENT facturacio (empresa,factura+)>
  2. <!ELEMENT empresa (raosocial)>
  3. <!ELEMENT factura (client,rebut+,data,subtotal,iva,total)>
  4. <!ATTLIST factura numero CDATA #REQUIRED>
  5. <!ELEMENT client (raosocial,idioma?)>
  6. <!ELEMENT rebut (data,totalrebut,linies)>
  7. <!ATTLIST rebut numero CDATA #REQUIRED>
  8. <!ELEMENT subtotal (#PCDATA)>
  9. <!ELEMENT iva (#PCDATA)>
  10. <!ELEMENT total (#PCDATA)>
  11. <!ELEMENT idioma (#PCDATA)>
  12. <!ELEMENT totalrebut (#PCDATA)>
  13. <!ELEMENT linies (producte)+>
  14. <!ELEMENT producte (descripcio,quantitat,preuunitari)>
  15. <!ATTLIST producte codi CDATA #REQUIRED>
  16. <!ELEMENT descripcio (#PCDATA)>
  17. <!ELEMENT quantitat (#PCDATA)>
  18. <!ELEMENT preuunitari (#PCDATA)>
  19. <!ELEMENT raosocial (nom,cognom*,adreca,codipostal,poblacio,(DNI|NIF))>
  20. <!ATTLIST raosocial tipus NMTOKEN #REQUIRED>
  21. <!ELEMENT nom (#PCDATA)>
  22. <!ELEMENT cognom (#PCDATA)>
  23. <!ELEMENT adreca (#PCDATA)>
  24. <!ELEMENT codipostal (#PCDATA)>
  25. <!ELEMENT poblacio (#PCDATA)>
  26. <!ELEMENT DNI (#PCDATA)>
  27. <!ELEMENT NIF (#PCDATA)>
  28. <!ELEMENT data (#PCDATA)>

Creació d'un XSD

L’objectiu d’aquesta tasca és crear un fitxer XSD a partir d’un exemple d’XML.

Aquest any s’han celebrat les eleccions marcianes 2010. Com que els marcians són gent tan avançada han distribuït els resultats en un fitxer XML.

Baixa resultats ( 404 B )

Us demanen que creeu un XSD per poder validar les dades.

Recordeu que no solament hi ha una solució possible.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  3. <xs:element name="eleccions">
  4. <xs:complexType>
  5. <xs:sequence>
  6. <xs:element name="descripcio" type="xs:string"/>
  7. <xs:element name="dades">
  8. <xs:complexType>
  9. <xs:sequence>
  10. <xs:element name="data" type="xs:date"/>
  11. <xs:element name="cens" type="xs:integer"/>
  12. <xs:element name="abstencio" type="xs:integer"/>
  13. <xs:element name="blancs" type="xs:integer"/>
  14. </xs:sequence>
  15. </xs:complexType>
  16. </xs:element>
  17. <xs:element name="resultats">
  18. <xs:complexType>
  19. <xs:sequence>
  20. <xs:element maxOccurs="unbounded" name="partit">
  21. <xs:complexType>
  22. <xs:sequence>
  23. <xs:element name="nom" type="xs:string"/>
  24. <xs:element name="vots" type="xs:integer"/>
  25. </xs:sequence>
  26. </xs:complexType>
  27. </xs:element>
  28. </xs:sequence>
  29. </xs:complexType>
  30. </xs:element>
  31. </xs:sequence>
  32. </xs:complexType>
  33. </xs:element>
  34. </xs:schema>

Desenvolupament d'un XSD per validar els resultats d'un torneig de futbol

L’objectiu d’aquesta tasca és aprendre a crear un fitxer XSD a partir d’un exemple d’XML.

El diari esportiu L’Àngel Volador ha organitzat una lliga de futbol entre quatre equips: FC Masarach, UE Cabanes, CE Vilatenim i Reial Vilabertran.

Els resultats els han expressat en XML.

Fitxer ( 785 B )

Creeu el fitxer XSD per validar els documents a partir del de mostra.

Recordeu que no solament hi ha una solució…

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  3.  
  4. <xs:element name="lliga">
  5. <xs:complexType>
  6. <xs:sequence>
  7. <xs:element name="jornada" maxOccurs="unbounded">
  8. <xs:complexType>
  9. <xs:sequence>
  10. <xs:element name="partit" maxOccurs="unbounded">
  11. <xs:complexType>
  12. <xs:sequence>
  13. <xs:element name="dia" type="xs:string"/>
  14. <xs:element name="equip" minOccurs="2" maxOccurs="2">
  15. <xs:complexType>
  16. <xs:sequence>
  17. <xs:element name="nom" type="xs:string"/>
  18. <xs:element name="resultat" type="xs:integer"/>
  19. <xs:element name="gols">
  20. <xs:complexType>
  21. <xs:sequence>
  22. <xs:element name="jugador" type="xs:string" maxOccurs="unbounded" minOccurs="0"/>
  23. </xs:sequence>
  24. </xs:complexType>
  25. </xs:element>
  26. </xs:sequence>
  27. <xs:attribute name="juga" type="xs:string"/>
  28. </xs:complexType>
  29. </xs:element>
  30. </xs:sequence>
  31. <xs:attribute name="num" type="xs:integer"/>
  32. </xs:complexType>
  33. </xs:element>
  34. </xs:sequence>
  35. <xs:attribute name="num" type="xs:integer"/>
  36. </xs:complexType>
  37. </xs:element>
  38. </xs:sequence>
  39. </xs:complexType>
  40. </xs:element>
  41. </xs:schema>

Desenvolupar un XSD per validar la previsió del temps

L’objectiu d’aquesta tasca és aprendre a crear un fitxer XSD a partir d’un exemple d’XML.

Cal crear un XSD per validar els fitxers de previsió del temps de poblacions de Catalunya que podeu trobar en aquest fitxer:

baixa ( 1.2 KB )

Per fer la solució d’aquesta activitat començarem creant uns tipus especials “preveure”, on hi haurà les repeticions de les previsions, i el tipus “dia” per a repeticions de dies.

D’aquesta manera serà més simple definir l’element principal.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  3.  
  4.  
  5. <xs:complexType name="preveure">
  6. <xs:sequence>
  7. <xs:element name="estat" type="xs:string"/>
  8. <xs:element name="graus" type="xs:integer"/>
  9. </xs:sequence>
  10. <xs:attribute name="hora" type="xs:string" use="required" />
  11. </xs:complexType>
  12.  
  13. <xs:complexType name="dia">
  14. <xs:sequence>
  15. <xs:element name="maxima" type="xs:integer"/>
  16. <xs:element name="minima" type="xs:integer"/>
  17. <xs:element name="vent" type="xs:string"/>
  18. <xs:element name="pluja" type="xs:string" minOccurs="0"/>
  19. <xs:element name="previsio" type="preveure" maxOccurs="unbounded"/>
  20. </xs:sequence>
  21. <xs:attribute name="dia" type="xs:string" use="required"/>
  22. </xs:complexType>
  23.  
  24. <xs:element name="temps">
  25. <xs:complexType>
  26. <xs:sequence>
  27. <xs:element name="poblacio" maxOccurs="unbounded">
  28. <xs:complexType>
  29. <xs:sequence>
  30. <xs:element name="nom" type="xs:string"/>
  31. <xs:element name="comarca" type="xs:string"/>
  32. <xs:element name="data" type="dia" maxOccurs="unbounded"/>
  33. </xs:sequence>
  34. </xs:complexType>
  35. </xs:element>
  36. </xs:sequence>
  37. </xs:complexType>
  38. </xs:element>
  39.  
  40. </xs:schema>

Com sempre, les possibles solucions són molt diverses.

Creació d'un XSD per validar la facturació d'una empresa

L’objectiu d’aquesta tasca és aprendre a crear un fitxer XSD a partir d’un exemple d’XML.

L’empresa Porquets, SA, ha despatxat el gerent, el senyor Senglar, i n’han contractat un de nou, que ha quedat espantat perquè s’hagin pagat diners per fer una DTD.

I per tant, ha decidit que s’ha de canviar. Després de fer els crits corresponents als informàtics de l’empresa (“Antics! Antics!”) us ha trucat a vosaltres perquè els feu l’XML Schema.

Baixa XML ( 959 B )

Com a requisit “extra” vol que us assegureu que el DNI i el NIF segueixen l’estructura correcta d’aquests documents.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  3.  
  4. <xs:complexType name="rao">
  5. <xs:sequence>
  6. <xs:element name="nom" type="xs:string"/>
  7. <xs:element name="cognom" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
  8. <xs:element name="adreca" type="xs:string"/>
  9. <xs:element name="codipostal" type="xs:integer"/>
  10. <xs:element name="poblacio" type="xs:string"/>
  11. <xs:choice>
  12. <xs:element name="DNI" type="xs:string"/>
  13. <xs:element name="NIF" type="xs:string"/>
  14. </xs:choice>
  15. </xs:sequence>
  16. <xs:attribute name="tipus" use="required" type="xs:NCName"/>
  17. </xs:complexType>
  18.  
  19. <xs:complexType name="producte">
  20. <xs:sequence>
  21. <xs:element name="descripcio" type="xs:string"/>
  22. <xs:element name="quantitat" type="xs:integer"/>
  23. <xs:element name="preuunitari" type="xs:integer"/>
  24. </xs:sequence>
  25. <xs:attribute name="codi" type="xs:integer" use="required"></xs:attribute>
  26. </xs:complexType>
  27.  
  28. <xs:complexType name="productes">
  29. <xs:sequence>
  30. <xs:element name="producte" type="producte" maxOccurs="unbounded"/>
  31. </xs:sequence>
  32. </xs:complexType>
  33.  
  34. <xs:complexType name="linies">
  35. <xs:sequence>
  36. <xs:element name="data" type="xs:string"/>
  37. <xs:element name="totalrebut" type="xs:string" />
  38. <xs:element name="linies" type="productes"/>
  39. </xs:sequence>
  40. <xs:attribute name="numero" type="xs:integer" use="required"/>
  41. </xs:complexType>
  42.  
  43. <xs:element name="facturacio">
  44. <xs:complexType>
  45. <xs:sequence>
  46. <xs:element name="empresa">
  47. <xs:complexType>
  48. <xs:sequence>
  49. <xs:element name="raosocial" type="rao"/>
  50. </xs:sequence>
  51. </xs:complexType>
  52. </xs:element>
  53. <xs:element name="factura" maxOccurs="unbounded">
  54. <xs:complexType>
  55. <xs:sequence>
  56. <xs:element name="client" >
  57. <xs:complexType>
  58. <xs:sequence>
  59. <xs:element name="raosocial" type="rao"/>
  60. </xs:sequence>
  61. </xs:complexType>
  62. </xs:element>
  63. <xs:element name="rebut" type="linies" maxOccurs="unbounded"/>
  64. <xs:element name="data" type="xs:string" />
  65. <xs:element name="subtotal" type="xs:float"/>
  66. <xs:element name="iva" type="xs:integer"/>
  67. <xs:element name="total" type="xs:float"/>
  68. </xs:sequence>
  69. <xs:attribute name="numero" type="xs:integer" use="required"></xs:attribute>
  70. </xs:complexType>
  71. </xs:element>
  72. </xs:sequence>
  73. </xs:complexType>
  74. </xs:element>
  75. </xs:schema>

Anar a la pàgina següent:
Exercicis d'autoavaluació