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