200 likes | 285 Views
Gli schema W3C. Estensione di tipi semplici, scelte fra più elementi, application profiles. Elementi vuoti. Senza attributi <xs:element name=“figura”/> Con attributi <xs:element name=“figura"> <xs:complexType> <xs:attribute name=“didascalia" use="optional" type=“xs:string” />
E N D
Gli schema W3C Estensione di tipi semplici, scelte fra più elementi, application profiles
Elementi vuoti • Senza attributi <xs:element name=“figura”/> • Con attributi <xs:element name=“figura"> <xs:complexType> <xs:attribute name=“didascalia" use="optional" type=“xs:string” /> <xs:attribute name=“link” use=“optional” type=“anyUri”> </xs:complexType> </xs:element>
Derivazione di tipi semplici • Restringimento • Enumerazione • Modelli (espressioni regolari) • Estensione
Enumerazione: attributi con valori <xs:complexType name="STANZE"> <xs:sequence> <xs:element name="verso" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="tipo" use="optional" default="quartina“ type=“en1”/> </xs:complexType> <xs:simpleType name=“en1”> <xs:restriction base="xs:string"> <xs:enumeration value=“terzina"/> <xs:enumeration value=“distico"/> <xs:enumeration value=“quartina"/> </xs:restriction> </xs:simpleType> L’enumerazione di valori è una restrizione del tipo semplice xs:string
Enumerazione: elementi con valori <xs:element name="titolo"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="I"/> <xs:enumeration value="II"/> </xs:restriction> </xs:simpleType> </xs:element> Con gli schema si possono specificare anche i valori di un elemento
Modelli \d{numero di caratteri} \s spazio <xsd:simpleType name="paginazione"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1,4}-\d{1,4}"/> </xsd:restriction> </xsd:simpleType> Espressione regolare
Elemento con testo e attributi con valori <xs:complexType name="STANZE"> <xs:sequence> <xs:element name="verso" type=“Versi" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name=“Versi”> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="tipo" use=“required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value=“settenario"/> <xs:enumeration value=“endecasillabo"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> Esercizio 20 Esercizio 22 (a casa) Bisogna estendere xs:string per accogliere attributi Per i valori degli attributi si deve restringere xs:string Tipo anonimo!
Scelte fra più elementi <xs:complexType name="STANZE“> <xs:sequence> <xs:choice> <xs:element name="verso" type="xs:string“ maxOccurs="unbounded"/> <xs:element name=“versetto” type="xs:string“ maxOccurs="unbounded"/> </xs:choice> </xs:sequence> </xs:complexType>
Mixed Content model <xs:complexType name="STANZE“ mixed=“true”> <xs:sequence> <xs:element name="verso" type="xs:string maxOccurs="unbounded"/> <xs:element name=“versetto” type="xs:string“ maxOccurs="unbounded"/> </xs:sequence> </xs:complexType>
Mixed content model 2 <xs:complexType name="STANZE“ mixed=“true”> <xs:sequence> <xs:choice> <xs:sequence> <xs:element name="verso" type="xs:string“ maxOccurs="unbounded"/> <xs:element name=“versetto” type="xs:string“ maxOccurs="unbounded"/> </xs:sequence> <xs:sequence> <xs:element name=“versetto” type="xs:string“ maxOccurs="unbounded"/> <xs:element name="verso" type="xs:string“ maxOccurs="unbounded"/> </xs:sequence> </xs:choice> </xs:sequence> </xs:complexType>
Mixed content Model 3: finalmente! <xs:complexType name="STANZE“ mixed=“true”> <xs:sequence> <xs:choicemaxOccurs="unbounded" minOccurs="0"> <xs:element name="verso" type="xs:string“ maxOccurs="unbounded"/> <xs:element name=“versetto” type="xs:string“ maxOccurs="unbounded"/> </xs:choice> </xs:sequence> </xs:complexType> Equivale a (#PCDATA|verso|versetto)*
L’ordine degli elementi • sequence: ordine obbligatorio • choice: scelta fra più elementi • all: un qualsiasi ordine NOVITA! <xsd:complexType name="NTypo"> <xsd:all> <xsd:element name="luogoEd" type="xsd:string"/> <xsd:element name="editore" type="xsd:string"/> <xsd:element name="annoEd" type="xsd:gYear"/> </xsd:all> </xsd:complexType>
Elementi e attributi qualificati • L’elemento root dello schema • <xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema • elementFormDefault="qualified" • attributeFormDefault="unqualified" • > Gli elementi dovranno essere preceduti da xs: Gli attributi no!
Target namespace • Nell’elemento root si può anche: • definire qual’è il namespace principale • definire se elementi e attributi dovranno esplicitare o no il namespace <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.iccu.sbn.it/biblio.xsl" targetNamespace="http://www.sito.it/biblio.xsd" elementFormDefault="unqualified" attributeFormDefault="unqualified"> Se c’è si riferiscono al target namespace
Il file 1. Non qualificato <bibliografia xmlns="http://www.sito.it/biblio.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.iccu.sbn.it/biblio.xsd"> <!-- qui il documento --> </bibliografia> 2. Qualificato <bib:bibliografia xmlns:bib="http://www.sito.it/biblio.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.iccu.sbn.it/biblio.xsd"> <!-- qui il documento --> </bib:bibliografia>
Includere frammenti di schema Quando lo schema è grosso o si occupa di più argomenti si può spezzare in più file: <xs:include schemaLocation="biblio2.xsd"/>
Importare altri namespace <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sito.it/biblio.xsd" targetNamespace="http://www.sito.it/biblio.xsd" xmlns:dc="http://purl.org/dc/elements/1.1/" elementFormDefault="qualified" attributeFormDefault="unqualified" > <!-- ecc. --> <xsd:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="simpledc20020312.xsd"/> <xs:complexType name="VERSI"> <xs:sequence> <xs:element ref="dc:title"/> <xs:element name="stanza" type="STANZE" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xsd:schema> ref e non name
Dublin Core • Schema di metadati descrittivi per identificare una risorsa. Comprende: • title • creator • publisher • date
Application profiles • schema costituito da elementi recuperati da uno o più namespace combinati insieme dagli implementatori e ottimizzati per un particolare applicazione • Si possono combinare uno o più namespace • Non si possono introdurre nuovi elementi • Si possono specificare i valori degli elementi • Si possono raffinare le definizioni standard Esercizio 21
Annotazioni • <xsd:annotation> si usa per documentare gli schema, sia per gli umonai che per le macchine • <xsd:documentation> documentazione per gli umani • <xsd:appinfo> documentazione per le applicazioni <xsd:annotation> <xsd:documentation xml:lang="it"> Schema per la creazione di bibliografie <!-- ricordarsi di spiegare meglio questo punto --> </xsd:documentation> </xsd:annotation>