Torna alla pagina di Tecnologie Web
:: Laboratorio 2 ::
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.
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>
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)> ]>
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>
Creare uno Schema XML che descriva la struttura di un documento dizionario, che rispetti i seguenti vincoli:
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>
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>