cerca
Tecnologie Web - Laboratorio 2
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Tecnologie Web - Laboratorio 2

Torna alla pagina di Tecnologie Web


 :: Laboratorio 2 ::

Esercizio 1

Verificare che il documento sia valido.
Modificare il documento in modo che non sia valido e verificare la non validità.

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE PROTEIN-SET [ 
<!ELEMENT PROTEIN-SET (PROTEIN+)> 
<!ELEMENT PROTEIN (ACCESSION, ENTRY-NAME, PROTEIN-NAME, GENE-
NAME+, ORGANISM, COMMENT*, KEYWORD*)> 
<!ELEMENT ACCESSION (#PCDATA)> 
<!ELEMENT ENTRY-NAME (#PCDATA)> 
<!ELEMENT PROTEIN-NAME (#PCDATA)> 
<!ELEMENT GENE-NAME (#PCDATA)> 
<!ELEMENT COMMENT (#PCDATA)> 
<!ELEMENT KEYWORD (#PCDATA)> 
<!ELEMENT ORGANISM (#PCDATA)> 
<!ATTLIST ORGANISM taxonomyid NMTOKEN #REQUIRED> 
]> 

<PROTEIN-SET> 
<PROTEIN> 
<ACCESSION>P26954</ACCESSION> 
<ENTRY-NAME>IL3B-MOUSE</ENTRY-NAME> 
<PROTEIN-NAME>Interleukin-3 receptor class  II beta chain [Precursor] </PROTEIN-
NAME> 
<GENE-NAME>CSF2RB2</GENE-NAME> 
<GENE-NAME>AI2CA</GENE-NAME> 
<GENE-NAME>IL3RB2</GENE-NAME> 
<GENE-NAME>IL3R</GENE-NAME> 
<ORGANISM taxonomyid="10090">Mus musculus</ORGANISM>

<COMMENT>Function: in mouse there are two classes of ...</COMMENT> 
<COMMENT>Subunit: Heterodimer of an alpha and a beta chain.</COMMENT> 
<COMMENT>Subcellular location: Type I membrane protein.</COMMENT> 
<COMMENT>Similarity: belongs to the .. </COMMENT> 
<KEYWORD>Receptor</KEYWORD> 
<KEYWORD>Glycoprotein</KEYWORD> 
<KEYWORD>Signal</KEYWORD> 
</PROTEIN> 
</PROTEIN-SET>

SOLUZIONE

Dando in pasto il codice ad un validatore online risulta VALIDO!

Per rendere il documento non-valido è sufficiente omettere un elemento che deve comparire necessariamente, ad esempio organism; oppure non rispettare l'ordine degli elementi presente del DTD, quindi andare a scrivere gli elementi in un ordine diverso rispetto a come sono dichiarati nel DTD.

Esercizio 2

Scrivere un documento XML (con DOCTYPE PROGRAMMAZIONE) valido rispetto al seguente DTD.

<!ELEMENT PROGRAMMAZIONE (CANALE+)> 
<!ELEMENT CANALE (NOME, GIORNO+)> 
<!ELEMENT NOME (#PCDATA)> 
<!ELEMENT GIORNO (DATA, SLOT_PROGRAMMA+)+> 
<!ELEMENT DATA (#PCDATA)> 
<!ELEMENT SLOT_PROGRAMMA (ORA, TITOLO, DESCRIZIONE?)> 
<!ELEMENT ORA (#PCDATA)> 
<!ELEMENT TITOLO (#PCDATA)> 
<!ELEMENT DESCRIZIONE (#PCDATA)> 

<!ATTLIST PROGRAMMAZIONE NOME CDATA #REQUIRED> 
<!ATTLIST CANALE NUMERO CDATA #REQUIRED> 
<!ATTLIST SLOT_PROGRAMMA VTR CDATA #IMPLIED> 
<!ATTLIST TITOLO RATING CDATA #IMPLIED> 
<!ATTLIST TITOLO LINGUA CDATA #IMPLIED > 

SOLUZIONE

<PROGRAMMAZIONE NOME="P1">
 <CANALE NUMERO="1">
  <NOME>CANALE 5 </NOME>
  <GIORNO>
   <DATA> 01 APRILE </DATA>
   <SLOT_PROGRAMMA VTR="ACASO">
    <ORA>23</ORA>
    <TITOLO RATING="R1">THE PRESTIGE</TITOLO>
   </SLOT_PROGRAMMA>
 </GIORNO>
 </CANALE>
</PROGRAMMAZIONE>

Esercizio 3

Definire una DTD che renda valido il seguente documento.

<address_book> 
 <entry> 
  <name> 
   <fname> John </fname> 
   <lname> Doe </lname> 
  </name> 
  <address> 
      <street> 34 Square Plaza </street> 
      <state> OH </state> 
      <zip>459856</zip> 
      <locality> Cincinnati </locality> 
      <country> US >/country> 
  </address> 
  <tel> 4569 458962</tel> 
  <email> john@emailaddress.com </email> 
 </entry> 

<entry> 
  <name> 
   <fname> Jane </fname> 
   <lname> Potter </lname> 
  </name> 
  <address> 
      <street> 24 Money Street </street> 
      <postal_code> 5000</postal_code> 
      <locality> Cincinnati </locality> 
      <country> US >/country> 
  </address> 
  <email> jane@emailaddress.com </email> 
 </entry> 

<entry> 
  <name> 
   <fname> Oliver </fname> 
   <lname> Twist </lname> 
  </name> 
  <email> john@emailaddress.com </email> 
 </entry> 

</address_book> 

SOLUZIONE

<!DOCTYPE address_book [
<!ELEMENT address_book (entry+)>
<!ELEMENT entry (name, address?, tel?, email)>
<!ELEMENT name (fname, lname)>
<!ELEMENT fname (#PCDATA)>
<!ELEMENT lname (#PCDATA)>
<!ELEMENT address (street, postal_code?, state?, zip?, locality, country)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ELEMENT locality (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT postal_code (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]>

Esercizio 4

1- Verificare la validità del seguente documento xml rispetto allo schema.
2- Provare poi a modificare il file.xml (per esempio cancellare l’attributo orderid) e verificarne la non validità.
3- Modificare lo schema in modo da rendere valido il file .xml senza l’attributo orderid.

Shiporder.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 

<shiporder orderid="889923" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="shiporder.xsd"> 

 <orderperson>John Smith</orderperson> 
 <shipto> 
  <name>Ola Nordmann</name> 
  <address>Langgt 23</address> 
  <city>4000 Stavanger</city> 
  <country>Norway</country> 
 </shipto> 
 <item> 
  <title>Empire Burlesque</title> 
  <note>Special Edition</note> 
  <quantity>1</quantity> 
  <price>10.90</price> 
 </item> 
 <item> 
  <title>Hide your heart</title> 
  <quantity>1</quantity> 
  <price>9.90</price> 
 </item> 
</shiporder> 

shiporder.xsd

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

<xs:element name="shiporder"> 
 <xs:complexType> 
  <xs:sequence> 
   <xs:element name="orderperson" type="xs:string"/> 
   <xs:element name="shipto"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="name" type="xs:string"/> 
      <xs:element name="address" type="xs:string"/> 
      <xs:element name="city" type="xs:string"/> 
      <xs:element name="country" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
   </xs:element> 
   <xs:element name="item" maxOccurs="unbounded"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="title" type="xs:string"/> 
      <xs:element name="note" type="xs:string" minOccurs="0"/> 
      <xs:element name="quantity" type="xs:positiveInteger"/> 
      <xs:element name="price" type="xs:decimal"/> 
     </xs:sequence> 
    </xs:complexType> 
   </xs:element> 
  </xs:sequence> 
  <xs:attribute name="orderid" type="xs:string" use="required"/> 
 </xs:complexType> 
</xs:element> 

</xs:schema> 

SOLUZIONE

1- Il documento è valido in quanto rispetta le regole definite nel XML Schema.

2- Se togliamo l'attributo orderid dal file XML il programma restituisce il seguente errore Attribute 'orderid' must appear on element 'shiporder'. avvisando ovviamente che il documento non è valido.

3- Quindi se andiamo a togliere dal file XML l'attributo orderid, lo Schema corrispondente deve diventare(semplicemente andare a togliere la riga dove era dichiarato l'attributo):

<?xml version="1.0" encoding="ISO-8859-1"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="shiporder">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="orderperson" type="xs:string"/>
    <xs:element name="shipto">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="name" type="xs:string"/>
       <xs:element name="address" type="xs:string"/>
       <xs:element name="city" type="xs:string"/>
       <xs:element name="country" type="xs:string"/>
      </xs:sequence>
     </xs:complexType>
    </xs:element>
   <xs:element name="item" maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="note" type="xs:string" minOccurs="0"/>
      <xs:element name="quantity" type="xs:positiveInteger"/>
      <xs:element name="price" type="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>
</xs:element>
</xs:schema>

Esercizio 5

Creare uno Schema XML che descriva la struttura di un documento dizionario, che rispetti i seguenti vincoli:

  • L'elemento dizionario deve contenere zero o più elementi termine.
  • L'elemento termine è costituito dagli elementi parola, pronuncia e almeno un'occorrenza dell'elemento significato.
  • L'elemento significato è costituito dagli elementi definizione ed esempio (l'elemento esempio può, comparire zero o più volte).

Gli elementi parola, pronuncia, definizione e esempio sono di dipo stringa.

SOLUZIONE

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

<xs:element name="dizionario">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="termine" minOccurs="0">
    <xs:complexType>
     <xs:sequence>
      <xs: element name="parola" type="xs:string"/>
      <xs: element name="pronuncia" type="xs:string"/>
      <xs: element name="significato" minOccurs="1">
       <xs:complexType>
        <xs:sequence>
         <xs: element name="definizione" type="xs:string"/>
         <xs: element name="esempio" type="xs:string" minOccurs="0"/>
        </xs:sequence>
       </xs:complexType>
     </xs:sequence>
    </xs:complexType>
  </xs:sequence>
 </xs:complexType>
</xs:element>
</xs:schema>

Esercizio 6

Creare un documento istanza XML valido rispetto allo schema precedente.

SOLUZIONE

<?xml version="1.0" encoding="ISO-8859-1"?>
<dizionario
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="dizionario.xsd">
<termine>
  <parola>rosa</parola>
  <pronuncia>rosammmmm!</pronuncia>
  <significato>
    <definizione>colore prefetito dalle barbaroglu </definizione>
    <esempio> mmmmmm, rosa!!! </esempio>
  </significato>
</termine>
</dizionario>

Torna alla pagina di Tecnologie Web