Il processo di sviluppo software

Transcript

Il processo di sviluppo software
Corso di Laurea Specialistica in Ingegneria Informatica
Corso di Linguaggi e Tecnologie Web
DTD ed XML Schema - Esercizi
Eufemia TINELLI
A. A. 2011 - 2012
Contenuti
• Esercizi: DTD
XML e XSD
XML
• Design Pattern per XML
E. TINELLI – LTW A. A. 20112011-2012
2
Esercizio 1
• Si progetti il DTD e si scriva un XML valido per un
linguaggio di markup per lettere.
• Requisiti:
– Ogni lettera ha un mittente, una data, un destinatario, un
oggetto, una forma cortese di saluto, un corpo, una
chiusura, una firma.
– Il corpo della lettera ha quanto meno un paragrafo.
E. TINELLI – LTW A. A. 20112011-2012
3
DTD es. 1
<!ELEMENT lettera (mittente, data, destinatario, oggetto,
saluto,corpo, chiusura, firma)>
<!ELEMENT mittente (#PCDATA)>
<!ELEMENT data (#PCDATA)>
<!ELEMENT destinatario (#PCDATA)>
<!ELEMENT oggetto (#PCDATA)>
<!ELEMENT saluto(#PCDATA)>
<!ELEMENT corpo (paragrafo+)>
<!ELEMENT paragrafo (#PCDATA)>
<!ELEMENT chiusura (#PCDATA)>
<!ELEMENT firma (#PCDATA)>
E. TINELLI – LTW A. A. 20112011-2012
4
XML es. 1
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE lettera SYSTEM "lettera.dtd">
<lettera>
<mittente>Max Temporali</mittente>
<data>23 Ottobre 2011</data>
<destinatario>I tifosi della MotoGP</destinatario>
<oggetto>Dramma a Sepang durante la gara della MotoGP</oggetto>
<saluto>Ciao Marco</saluto>
<corpo>
<paragrafo>Non mi sembra vero, sono frastornato. Mi tremano le mani ed ho un
senso di nausea da malessere. […]</paragrafo>
<paragrafo>Non la commento, non le voglio nemmeno rivedere quelle immagini.
Sono crude, impietose, devastanti per la sensibilità di chiunque.[…]</paragrafo>
<paragrafo>Marco è stato un campione di umanità e di simpatia prima di tutto,
l’unico pilota a cui ho chiesto una dedica su un poster […]</paragrafo>
<paragrafo>Non oso mettermi nei panni del babbo di Marco, della fidanzata, della
mamma e […]</paragrafo>
</corpo>
<chiusura> Con affetto,</chiusura>
<firma>Max Temporali</firma>
</lettera>
E. TINELLI – LTW A. A. 20112011-2012
5
XML di uno schema relazionaleÆ DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE schema SYSTEM “schemarelazionale.dtd">
<schema>
<relazione nome="Studente">
<attributi>
<attributo null="no">Matricola</attributo> <attributo null="yes">Nome</attributo>
<attributo null="yes">Cognome</attributo> <attributo null="yes">Data nascita</attributo></attributi>
<chiave><componente>Matricola</componente> </chiave>
</relazione>
<relazione nome="Esame">
<attributi>
<attributo null="no">Corso</attributo> <attributo null="no">Studente</attributo>
<attributo null="yes">Data</attributo> <attributo null="no">Voto</attributo></attributi>
<chiave><componente>Corso</componente><componente>Studente</componente></chiave>
<chiave_esterna>
<sorgente><componente>Studente</componente></sorgente>
<destinazione ref=“Studente”>Matricola</destinazione>
</chiave_esterna>
</relazione>
</schema>
E. TINELLI – LTW A. A. 20112011-2012
6
XML Æ DTD: Soluzione
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT schema (relazione)+>
<!ELEMENT relazione (attributi,chiave,chiave_esterna*)>
<!ELEMENT attributi (attributo+)>
<!ELEMENT chiave (componente+)>
<!ELEMENT chiave_esterna (sorgente,destinazione)>
<!ELEMENT sorgente (componente+)>
<!ELEMENT attributo (#PCDATA)>
<!ELEMENT componente (#PCDATA)>
<!ELEMENT destinazione (#PCDATA)>
<!ATTLIST relazione nome ID #REQUIRED>
<!ATTLIST attributo null (yes|no) “yes”>
<!ATTLIST destinazione ref IDREF #REQUIRED>
E. TINELLI – LTW A. A. 20112011-2012
7
Esercizio 2 - http://www.w3.org/TR/xmlschema-0/
• Si progetti un XSD e si scriva un XML valido per un
linguaggio di markup per un ordine di acquisto.
• Requisiti:
– Ogni ordine di acquisto ha la data dell’ordine ed una serie
di informazioni: dati acquirente degli US (nome e
indirizzo), dati venditore degli US (nome e indirizzo) e dati
dei prodotti acquistati.
– Ciascuna di queste informazioni può avere un commento
opzionale
– Ciascun prodotto ha un nome, una quantità (non superiore
a 100), un prezzo, una data di spedizione ed un codice
(es. formato del codice 123-AB)
E. TINELLI – LTW A. A. 20112011-2012
8
XSD es. 2 (1)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="en">Purchase order schema for
Example.com.Copyright 2000 Example.com. All rights
reserved.</xsd:documentation>
</xsd:annotation>
<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
<xsd:element name="comment" type="xsd:string"/>
E. TINELLI – LTW A. A. 20112011-2012
9
XSD es. 2 (2)
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="shipTo“ type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment“ minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
E. TINELLI – LTW A. A. 20112011-2012
10
XSD es. 2 (3)
<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN“ fixed="US"/>
</xsd:complexType>
E. TINELLI – LTW A. A. 20112011-2012
11
XSD es. 2 (4)
<xsd:complexType name="Items">
<xsd:sequence>
<xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="USPrice" type="xsd:decimal"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="partNum" type="SKU" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
E. TINELLI – LTW A. A. 20112011-2012
12
XSD es. 2 (5)
<!-- Stock Keeping Unit, a code for identifying products -->
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
E. TINELLI – LTW A. A. 20112011-2012
13
XML es. 2
<?xml version="1.0"?>
<purchaseOrder xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation=“purchase-order.xsd“ orderDate="1999-10-20">
<shipTo country="US">
<name>Alice Smith</name><street>123 Maple Street</street>
<city>Mill Valley</city><state>CA</state>
<zip>90952</zip>
</shipTo>
<billTo country="US">
<name>Robert Smith</name><street>8 Oak Avenue</street>
<city>Old Town</city><state>PA</state>
<zip>95819</zip>
</billTo>
<comment>Hurry, my lawn is going wild!</comment>
<items>
<item partNum="872-AA">
<productName>Lawnmower</productName><quantity>1</quantity><USPrice>148.95</USPrice>
<comment>Confirm this is electric</comment>
</item>
<item partNum="926-AA">
<productName>Baby Monitor</productName><quantity>1</quantity><USPrice>39.98</USPrice>
<shipDate>1999-05-21</shipDate>
</item>
</items>
</purchaseOrder>
E. TINELLI – LTW A. A. 20112011-2012
14
XML di una business card Æ XSD
<?xml version="1.0" encoding="UTF-8" ?>
<b:card xmlns:b="http://businesscard.org"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://businesscard.org
business-card.xsd">
<b:name>John Doe</b:name>
<b:title>CEO, Widget Inc.</b:title>
<b:email>[email protected]</b:email>
<b:phone>(202) 555-1414</b:phone>
<b:logo uri="widget.gif" />
</b:card>
E. TINELLI – LTW A. A. 20112011-2012
15
XML Æ XSD: Soluzione
<schema
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:b="http://businesscard.org"
targetNamespace="http://businesscard.org" elementFormDefault="qualified">
<element name="card" type="b:card_type"/>
<complexType name="card_type">
<sequence>
<element ref="b:name"/><element name="title" type="string"/>
<element name="email" type="b:email"/><element name="phone" type="string" minOccurs="0"/>
<element name="logo" type="b:logo_type" minOccurs="0"/>
</sequence>
</complexType>
<element name="name" type="string"/>
<simpleType name="email">
<restriction base="string"><pattern value="([a-z]|[0-9]|[.])+@([a-z]|[0-9]|[.])+"/>
</restriction>
</simpleType>
<complexType name="logo_type">
<attribute name="uri" type="anyURI" use="required"/>
</complexType>
</schema>
E. TINELLI – LTW A. A. 20112011-2012
16
Best practices http://blogs.msdn.com/b/skaufman/archive/2005/05/10/416269.aspx
www.xfront.com/GlobalVersusLocal.html
E. TINELLI – LTW A. A. 20112011-2012
17
Approccio “Bambole Russe”
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
•
•
•
•
Nessuno dei tipi e degli elementi è riutilizzabile (local scope)
Stile compatto
De-accoppiamento: ogni elemento si descrive da se
Coesione: tutte le informazioni sono raggruppate in un’unica descrizione
E. TINELLI – LTW A. A. 20112011-2012
18
Approccio “Fette di Salame”
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="Author" type="xsd:string"/>
<xsd:element name="Book">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Title"/>
<xsd:element ref="Author"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
•
•
•
•
Tipi ed elementi riutilizzabili (global scope)
Stile verboso
Accoppiamento: elementi interconnessi
Coesione: tutte le informazioni sono raggruppate in un’unica descrizione
E. TINELLI – LTW A. A. 20112011-2012
19
Approccio “Tende alla Veneziana”
<xsd:simpleType name="Title">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Mr."/>
<xsd:enumeration value="Mrs."/>
<xsd:enumeration value="Dr."/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Name">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="Publication">
<xsd:sequence>
<xsd:element name="Title" type="Title"/>
<xsd:element name="Author" type="Name"/>
</xsd:sequence>
</xsd:complexType>
• Riuso delle definizioni dei
tipi
• Stile verboso
• Accoppiamento: elementi
interconnessi
• Coesione: tutte le
informazioni sono
raggruppate in un’unica
descrizione
<xsd:element name="Book" type="Publication"/>
E. TINELLI – LTW A. A. 20112011-2012
20
Approccio “Giardino dell’Eden”
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://book.org"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="BookInformation" type="BookInformationType"/>
<xs:complexType name="BookInformationType">
<xs:sequence>
<xs:element ref="Title"/>
<xs:element ref="ISBN"/>
<xs:element ref="Publisher"/>
<xs:element ref="PeopleInvolved" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PeopleInvolvedType">
<xs:sequence>
<xs:element ref="Author"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Title" type="string"/>
<xs:element name="ISBN" type="string"/>
<xs:element name="Publisher" type="string"/>
<xs:element name="Author" type="string"/>
<xs:element name="PeopleInvolved" type="PeopleInvolvedType"/>
</xs:schema>
E. TINELLI – LTW A. A. 20112011-2012
21