Cenni su SGML, HTML, XML
Download
Report
Transcript Cenni su SGML, HTML, XML
Cenni Su SGML, HTML, XML
SGML (Standard Generalized Markup
Language) è il padre di tutti i linguaggi
"Markup"
–
Lo svantaggio è la "pesantezza" dei suoi documenti:
HTML (HyperText Markup Language) è a tutti
gli effetti un'istanza di SGML.
XML (eXtensible Markup Language) nasce
come semplificazione dell'SGML e come
strumento per la trasmissione di dati insieme
alla loro semantica.
XMLSchema: cos'è e a cosa serve
Scambio di informazioni/dati deve essere
trattato in modo automatico
I documenti XML usati da più partner devono
avere la stessa struttura
Attraverso le DTD è possibile garantire questa
coerenza
MA le DTD hanno una propria sintassi
particolare che bisogna imparare e non sono
molto flessibili.
XMLSchema a cosa serve
Uno strumento più semplice è XMLSchema.
Un documento XMLSchema associato a un
documento XML svolge la stessa funzione di
una DTD.
l'XML può essere validato con il documento
XSchema,
XMLSchema offre strumenti completi ad
esempio il range di valori di ogni campo.
Un altro vantaggio dei documenti XMLSchema
è che sono scritti in XML stesso.
XMLSchema – Per capire
Pensiamo ai documenti XML come contenitori
di dati
I linguaggi di programmazione ad oggetti
permettono di definire classi con determinate
proprietà
Un oggetto istanza di una classe avrà dei valori
per certe proprietà e il sistema controllerà che i
valori e i tipi siano corretti
In Xschema avviene una cosa analoga
XMLSchema - Per capire
Un documento XML contiene elementi, i quali a
loro volta contengono attributi, testo o altri
elementi;
La definizione di regole su struttura sui tipi e sui
vincoli è analoga alla definizione di una classe
per un linguaggio ad oggetti (es. JAVA),
Il documento XML può essere pensato quindi
come un oggetto istanza della classe.
XMLSchema: definizione formale
Esistono due versioni di XMLSchema :
–
–
World Wide Web Consortium (W3C) e
Microsoft, XDRSchema.
Nel 2001 lo Schema W3C è stato accettato come
standard;
XDRSchema di Microsoft ha struttura e regole
analoghe.
XML Schema Part 0: Primer e XML Schema Part 1:
Structures
–
–
–
contengono la descrizione completa e sistematica dello
strumento
il primo documento in modo più discorsivo e con molti esempi,
il secondo in modo più formale.
XML Schema Part 2: Datatypes
L'elenco dei tipi di dati predefiniti in
XMLSchema.
XMLSchema Definisce le regole per scrivere in
modo corretto un documento,
E’ utile anche per ricavare un modello formale
del documento,
Dopo, un apposito parser, può effettuare la
validazione di documenti XML basati sullo
stesso modello formale.
XML Schema Part 2: Datatypes
Forse non esiste ancora alcun parser per la
versione corrente del linguaggio,
W3C sta lavorando sul passaggio a un modello
formale
–
(XML Schema: Formal Description )
Fioriscono anche molte tecniche, parallele o
alternative allo Schema, per validare documenti
XML
Schematron , TREX , RELAX , …
Attuali applicazioni di XMLSchema
Aziende che pubblicano in XML, in modo che
clienti o partners commerciali possano usarli,
Esistono anche proposte "no-profit", che
nascono tipicamente in ambito universitario
NOTA: C'è ancora una netta predominanza di
DTD
Xschema è promettente per il futuro ma è in
fase di "promozione“
La versione più utilizzata è XDRSchema di
Microsoft
Applicazioni future di XMLSchema
Esempio importante è la cartella clinica elettronica;
Dovrebbe garantire al paziente continuità di cura
Se un medico, in America, deve soccorrere un turista
infortunato, potrà disporre dell'intera storia clinica del
paziente;
La cartella clinica elettronica ottimale è un oggetto
complesso
Dovrebbe contenere anche i vari protocolli di cura per
ciascuna patologia e informazioni sul loro costo, tra le
altre cose.
XMLSchema - Introduzione
Esempio preso dalla rete.
Vogliamo dare accesso ai genitori sul
rendimento scolastico dei figli via rete.
Scambiare dati attraverso documenti XML.
Occorre definire la struttura.
Consideriamo il prospetto dei voti per tre
materie e non consideriamo alcuni vincoli.
Lo sviluppo di un esempio
Bisogna inserire l'intestazione del documento, dove
viene specificato il namespace,
Direttamente riferimento alla descrizione di tipi semplici e
complessi presenti sul sito della W3C
In annotation vanno ad esempio i commenti.
<xsd:schema xmlns:xsd=
"http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="it">
XML tutorial di esempio per GECO
</xsd:documentation>
</xsd:annotation>
Definizione: Elemento "studente"
Elemento "studente" di tipo "StudentType", struttura
dati principale.
Occorre definire il nuovo tipo, complesso perché deve
contenere elementi ed attributi.
<xsd: element name="studente" type="StudentType"/>
<xsd: complexType name="StudentType">
<xsd:sequence>
<xsd:element name="cognome" type="xsd:string"/>
<xsd:element name="nome" type="xsd:string"/>
<xsd:element name="sesso" type="SexType"/>
<xsd:element name="indirizzo" type="AddressType"/>
<xsd:element name="classe" type="ClassType"/>
<xsd:element name="pagella" type="ReportType"/>
</xsd:sequence>
<xsd:attribute name="matricola" type="xsd:integer"/>
</xsd:complexType>
Studente: Spiegazione
Gli elementi "nome" e "cognome" sono due stringhe,
tipi base.
Gli altri campi devono essere definiti.
Il tag "sequence" indica che il tipo "StudentType" è
composto da più elementi, mentre nella penultima riga
viene inserito un attributo all'interno del tag di un
oggetto "StudentType".
Mentre tutti gli altri tag vanno aperti e chiusi, per un
elemento o un attributo il tag di chiusura viene
sostituito da un "/" dopo la dichiarazione del tipo.
Definizione : AddressType
AddressType è un tipo complesso che al suo
interno ha tre elementi.
<xsd:complexType name="AddressType">
<xsd:sequence>
<xsd:element name="nomeVia" type="xsd:string"/>
<xsd:element name="CAP" type="xsd:integer"/>
<xsd:element name="citta" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
Nomevia, cap, citta sono tipi base String o
Integer (simile ad un linguaggio di
programmazione)
Definizione: "SexType"
"SexType" con vincoli interni
Tali vincoli restringono il campo dei valori di un tipo di
base tramite il tag "restriction".
I valori che possono essere assunti da un elemento di
tipo "SexType" vengono elencati tramite il tag
"enumeration",
<xsd:simpleType name ="SexType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="M"/>
<xsd:enumeration value="F"/>
</xsd:restriction>
</xsd:simpleType>
Definizione: "ClassType"
Per "ClassType" viene specificata la struttura che può
essere assunta da un elemento di questo tipo.
–
–
Un elemento di tipo "ClassType" deve essere composto da un
numero seguito da una lettera maiuscola.
I tipi sono dichiarati semplici quando al loro interno non sono
presenti nè elementi nè attributi.
<xsd:complexType name="ClassType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{1}-[A-Z]{1}"/>
</xsd:restriction>
<xsd:attribute name="sperimentazione">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Bilingue"/>
<xsd:enumeration value="Brocca"/>
<xsd:enumeration value="P.N.I."/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
ClassType: Note ulteriori
All'interno di "ClassType", inoltre, viene aggiunto un
attributo che ci permette di introdurre un altro concetto:
"tipo anonimo".
Il tipo dell'attributo "sperimentazione" non viene
dichiarato all'interno del tag,
Viene definito dopo la chiusura del tag con un tipo
semplice.
Si può fare in questo modo solo se nessun altro
elemento utilizza lo stesso tipo.
Nota: così è necessario specificare il tag di chiusura per
l’attributo.
Definizione: Tipo ReportType
Dopo i tipi anonimi, possiamo fare una modifica
al tipo "StudentType"
Dichiariamo l'elemento "pagella" come tipo
anonimo.
<xsd:element name="pagella">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="matematica" type="ListOfMarks"/>
<xsd:element name="italiano" type="ListOfMarks"/>
<xsd:element name="edmusicale" type="ListOfMarks"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Definizione: ComplexType MIXED
Definire un complexType mixed permette di inserire
del testo libero, fuori dai tag degli elementi,
Per i tipi degli elementi di pagella, le restrizioni
riguardano i valori assunti dall'elemento voto,
e
"ListOfMarks" è definito come una lista di voti.
<xsd:simpleType name="voto">
<xsd:restriction base="xsd:decimal">
<xsd:minExclusive value="0"/>
<xsd:maxInclusive value="10"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ListOfMarks">
<xsd:list itemType="voto"/>
</xsd:simpleType>
Come Estendere di un TIPO
Se si può accedere al database della scuola si
possono avere informazioni su studenti già
diplomati.
Per sfruttare il lavoro fatto, è possibile
estendere il tipo studentType aggiungendo
un elemento "votoDiploma".
<xsd:complexType name="GraduatedStudent">
<xsd:extension base="StudentType">
<xsd:element name="voto diploma“type="integer"/>
</xsd:extension>
</xsd:complexType>
Note ulteriori
Si potrebbe effettuare una restrizione sul nuovo
tipo per eliminare i campi riguardanti i voti delle
varie materie che ora risultano superflui.
Si presenta però il problema di permettere in un
documento XML la presenza di uno solo tra
questi due tipi.
Per far questo si usa il tag <choice>, che
permette di scegliere tra uno soltanto degli
elementi contenuti al suo interno