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