Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Sep 5, 2019. It is now read-only.

Commit fcd5b84

Browse files
Merge pull request #7 from cristiano-c/video-fra
Video fra
2 parents fa7fe63 + 8e4a505 commit fcd5b84

File tree

20 files changed

+493
-85
lines changed

20 files changed

+493
-85
lines changed

‎02 - XML.md

Lines changed: 153 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,56 @@ Da notare che `<holder name=... />`che `holder`finisce per un `/`quindi è un em
735735

736736
![23](immagini/lezione-02/23.png)
737737

738-
## Come viene processato un documento XML?
738+
739+
740+
741+
742+
**Possibile soluzione:**
743+
744+
Struttura base
745+
746+
747+
748+
![28](immagini/lezione-02/28.png)
749+
750+
In questa soluzione si ha una root la quale contiene due elementi: `group`e `host`
751+
752+
Nel `group`si ha sia un `id` e una descrizione che può essere opzionale. Nel `host` si ha un `id`"che viene puntato" dal `id` del `group`. Ossia `group` (del host) contiene un link a `group id`. Come si può vedere nella figura sottostante:![29](immagini/lezione-02/29.png)
753+
754+
755+
756+
Inoltre ci sono anche altre informazioni come ad esempio la scheda MAC che deve essere pari a 1 e cosi via.
757+
758+
L'interfaccia dell host può essere sia 0 che più 1,2,3, ecc... questo perché alcuni pc potrebbero non avere di interfaccia.
759+
760+
Si poteva anche (come possibile soluzione con i suoi pro e contro) togliere interfacia dell host e metter i suoi elementi dentro a host.
761+
762+
Nel DTD c'è una limitazione ossia che se nel documento ci sono die ID come in questo caso (uni per il gruppo e l'altro per l'host ) ossia per il linguaggio DTD c'è un unico scope per il `unique ID` per tutto il documento. **Ossia non è possibile avere un ID del host uguale ad un ID del gruppo.** Quindi se si usa un validatore per DTD andrà a confrontare questi due ID come se fosse un unico ID.
763+
764+
La cosa si ripercuote sul `group attribute`ossia essendo che va a puntare da qualche parte, il validatore non sa se deve puntare sul ID del host o del gruppo quindi per lui è tutto corretto se punta in uno dei due.
765+
Questa è una limitazione del linguagio DTD. Tuttavia si possono fare ulteriori test usando altri strumenti come "schema".![30](immagini/lezione-02/30.png)
766+
767+
768+
769+
770+
771+
**Soluzione in DTD**
772+
773+
Nel `network`si ha sia il `group`che `host`i quali devono essere uno dietro l'altro tuttavia nessuno ci vieta di scrivere: `(group|host)*`quindi si avrebbe o un host o un gruppo con una multiplicità pari a 0 fino a n.
774+
775+
Si può vedere che qui c'è un'incongruenza con quello visto prima ossia `interface` del host ha una multiplicità indicata con il `+`mentre prima era indicata con `*`.
776+
777+
NMTOKEN non è un token unico ma c'è ne potrebbero essere altri nel documento uguali.
778+
779+
Se si volesse che ci fosse un solo unico indirizzo Ip per ogni macchina allora si dovrebbe insirire un nuovo vincolo nel DTD. Tuttavia ID per i DTD iniziano con una lettera quindi si avrebbe dei problemi.
780+
781+
782+
783+
![31](immagini/lezione-02/31.png)
784+
785+
786+
787+
**Come viene processato un documento XML?**
739788

740789
La seguente figura mostra lo schema _generico_ di elaborazione di un documento XML:
741790

@@ -788,13 +837,30 @@ In questo caso non ci sono particolari informazioni per la visualizazione (esemp
788837

789838
Tuttavia si vede come c'è sia il DTD del documento che il documento in se.
790839

840+
841+
842+
![05](immagini/lezione-02/05.png)
843+
844+
845+
846+
847+
848+
Ripartendo da questa figura si può dire che il XML processor legge e scrive i documenti XML e si prende cura della validazione del documento. Di solito questo processore è configurabile e quindi si può dire quello che si vuole ossia se il documento è "well formed" o se è valido.
849+
850+
Le applicazioni di solito leggono/scrivono le informazioni del XML processor attraverso una API.
851+
Inoltre l'applicazione può dare degli ordine al processore XML come ad esempio se deve leggere e cosi via.
852+
853+
L'applicazione può prendere le informazioni che butta fuori il processore attraverso l'API.
854+
855+
**Si hanno degli standard: SAX, DOM e StAX**
856+
791857
#### SAX parsing
792858

793859
SAX è un'API di basso livello il cui principale punto di forza è l'efficienza.
794860

795861
![](immagini/lezione-02/06.png)
796862

797-
Quando un documento viene parsato usando SAX, una serie di eventi vengono generati e passati all'applicazione tramite l'utilizzo di callback handlers che implementano l'handler delle API SAX. Gli eventi generati sono di livello molto basso e devono essere gestiti dallo sviluppatore che, inoltre, deve mantenere le informazioni necessarie durante il processo di parsing. Oltre ad un utilizzo piuttosto complicato, SAX soffre di due limitazioni di rilievo: non può modificare il documento che sta elaborando e può procedere alla lettura solo "in avanti": non può tornare indietro. Quindi, quello che è stato letto è perso e non è possibile recuperarlo.
863+
Quando un documento viene parsato usando SAX, una serie di eventi vengono generati e passati all'applicazione tramite l'utilizzo di callback handlers che implementano l'handler delle API SAX. Gli eventi generati sono di livello molto basso e devono essere gestiti dallo sviluppatore che, inoltre, deve mantenere le informazioni necessarie durante il processo di parsing. Oltre ad un utilizzo piuttosto complicato, SAX soffre di due limitazioni di rilievo: non può modificare il documento che sta elaborando e può procedere alla lettura solo "in avanti": non può tornare indietro. Quindi, quello che è stato letto è perso e non è possibile recuperarlo e si dice `push the data to the application` . In questo caso è il processore XML che guida l'applicazione. L'applicazione mette a disposizione alcune API che vengon chiamate al generare di un evento dal processore XML.
798864

799865
#### DOM parsing
800866

@@ -804,14 +870,24 @@ DOM, invece, ha come punto di forza la semplicità d'utilizzo.
804870

805871
Una volta ricevuto il documento, il parser si occupa di costruire un albero di oggetti che rappresentano il contenuto e l'organizzazione dei dati contenuti. In questo caso l'albero esiste in memoria e l'applicazione può attraversarlo e modificarlo in ogni suo punto. Ovviamente il prezzo da pagare è il costo di computazione iniziale per la costruzione dell'albero ed il costo di memoria.
806872

873+
Di solito si dice `pull the data to the application` In questo caso è l'applicazione che guida il processore xml.
874+
875+
Esso viene usato per le pagine HTML.
876+
877+
878+
879+
Il DOM è molto flessibile mentre il SAX è molto più veloce. Perché il DOM deve prendere l'informazione e memorizzarla in memoria, mentre il SAX non appena arriva l'informazione la può subito farci il parsing. Quindi il tempo di latenza nel SAX è molto più piccolo rispetto al DOM. Inoltre nel DOM poiché si può navigare nell'albero si ha bisogno di più tempo per fare tutte queste operazioni che non si hanno nel SAX.
880+
807881
#### StAX parsing
808882

809-
StAX è un pull parser.
883+
StAX è un pull parser e sta in mezzo ai due precedenti (DOM e SAX).
810884

811885
![](immagini/lezione-02/08.png)
812886

813887
A differenza di SAX, che è un push parser, non riceve passivamente i segnali inviati all'handler per elaborarli, ma è l'utente a controllare il flusso degli eventi. Questo significa che il client richiede (pull) i dati XML quando ne ha bisogno e nel momento in cui può gestirli, a differenza del modello push, dove è il parser a inviare i dati non appena li ha disponibili a prescindere che l'utente ne abbia bisogno o sia in grado di elaborarli. Le librerie pull parsing sono molto può semplici delle push parsing e questo permette di semplificare il lavoro dei programmatori, anche per documenti molto complessi. Inoltre è bidirezionale, nel senso che oltre a leggere dati XML è anche in grado di produrli. Rimane il limite di poter procedere solo "in avanti" nell'elaborazione del documento XML.
814888

889+
Riassumendo si può dire che è simile all SAX per il pull ma è carraterizato dall'events base ossia come il DOM. Quindi il StAX può sia leggere che scrivere e non si ha nella memoria un albero come nel DOM. Quindi quando si leggono i dati si comporta similmente al SAX. Inolte è l'applicazione che chiede il prossimo "pezzo" di dato al processore XML.
890+
815891

816892

817893
## Document Object Model (DOM)
@@ -889,11 +965,13 @@ consiste in 6 specifiche differenti:
889965

890966
### L'elemento <\<interface>>
891967

968+
Queste interface vengono implementate dai vari DOM
969+
892970
![](immagini/lezione-02/10.png)
893971

894972
![](immagini/lezione-02/11.png)
895973

896-
974+
Si hanno tante interface a seconda di quello che si deve fare ad esempio per i commenti oppure per un elemento.
897975

898976
## Semplice API per XML (SAX)
899977

@@ -943,14 +1021,18 @@ StAX è comodo in quanto permette sia di **leggere** sia di **scrivere** dal/sul
9431021

9441022

9451023

1024+
Ad esempio per l'accesso hai dati è molto meno facile nel DOM perché si ha il completto cotrollo dei dati: si può navigare nell'albero, si può decidere che dati si vuole prendere e quali dati non si vuole prendere e cosi via.
1025+
1026+
1027+
9461028
## Presentazione di un documento XML
9471029

9481030
La _presentazione_ (ovvero la _grafica_ detto beceramente) di un documento XML viene specificata separatamente utilizzando uno dei due modi:
9491031

950-
- CSS: Cascading Style Sheet
951-
- EXtensible Stylesheel Language (XLS)
1032+
- CSS: Cascading Style Sheet (come per HTML). CSS per XML è un pò complicato essendo che i tags sono personalizabili.
1033+
- EXtensible Stylesheel Language (XSL) è un XML application ossia se stesso è un XML application. Esso (XSL) non solamente definisce gli elementi che si possono avere nel XML ma anche include
9521034

953-
Gli stili di rpesentazione vengono scritti su un documento a parte e poi inclusi all'inizio del file XML, ad esempio se ho due file di stile `mystyle.css` e `mystyle.xsl`potrò includerli nel seguente modo:
1035+
Gli stili di presentazione vengono scritti su un documento a parte e poi inclusi all'inizio del file XML, ad esempio se ho due file di stile `mystyle.css` e `mystyle.xsl`potrò includerli nel seguente modo:
9541036

9551037
```
9561038
<?xml:stylesheet type="text/css" href="mystyle.css"?>
@@ -978,6 +1060,14 @@ XSL è certamente uno dei più importanti linguaggi standard del W3C. Esso risul
9781060

9791061
![](immagini/lezione-02/13.png)
9801062

1063+
Nel primo esempio si hanno due file i quali passano per il XSLT processor e processa i documenti in altri documenti che in questo caso in un html che può essere visto attraverso un browser. E associato al html ci può essere un css file.
1064+
1065+
1066+
1067+
Nel secondo caso si ha sempre un processore XSLT che fornisce in output un file che deve essere processato da qualche cosa (che nel disegno è rapresentato da un ovale vuoto) il quale fornisce in output il file desiderato in questo caso un .pdf.
1068+
1069+
1070+
9811071
## XSLT
9821072

9831073
L'XSLT (eXtensible Stylesheet Language Transformations) è il linguaggio di trasformazione dell'XML, diventato uno standard web con una direttiva (Recommendation) W3C del 16 novembre 1999.
@@ -988,29 +1078,67 @@ Ci possono essere due casi specifici di trasformazione: da un documento XML a un
9881078

9891079
Per generare una trasformazione XSLT occorrono due file: il documento da trasformare (in XML) ed un documento contenente il foglio di stile XSL, che fornisce la semantica per la trasformazione. Il foglio di stile XSLT vede un documento XML come una serie di nodi strutturati ad albero. È formato da un insieme di modelli (template) che contengono le regole di trasformazione dei tag del documento XML. Nella sintassi XSL, i template sono elementi, a ciascuno dei quali corrisponde l'attributo match, associato al nodo che verrà trasformato. In termini strutturali quindi il foglio di stile XSL specifica la trasformazione di un albero di nodi in un altro albero di nodi.
9901080

991-
È possibile anche aggiungere al documento trasformato elementi completamente nuovi o non prendere in considerazione determinati elementi del documento origine, riordinare gli elementi, fare elaborazioni in base al risultato di determinate condizioni, ecc.
1081+
Più in particolare in ingresso si ha un .xml file (1), il quale passa attraverso un parser XML il quale crea un "DOM TREE" (2). Inseguito c'è un motore (3) per applicare le regole di trasformazione e trasforma l'albero originale in qualcos'altro (4). Per poi essere serializato in un documento (5).
1082+
1083+
1084+
1085+
È possibile anche aggiungere al documento trasformato elementi completamente nuovi o non prendere in considerazione determinati elementi del documento origine, estrapolare informazioni, riordinare gli elementi, fare elaborazioni in base al risultato di determinate condizioni, ecc.
9921086

9931087
![](immagini/lezione-02/14.png)
9941088

9951089
### Esempio di XSLT
9961090

9971091
```xml
998-
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">
999-
<html>
1000-
<head><link rel="stylesheet" href="style.css"/></head> <body>
1001-
<h2>My Articles</h2>
1002-
<table>
1003-
<tr>
1004-
<th>Title</th>
1005-
</tr>
1006-
<xsl:for-each select="bibliography/article">
1007-
<tr>
1008-
<td><xsl:value-of select="title"/></td>
1009-
</tr>
1010-
</xsl:for-each>
1011-
</table>
1012-
</body></html>
1013-
</xsl:template>
1014-
</xsl:stylesheet>
1092+
01<?xml version="1.0" encoding="ISO-8859-1"?>
1093+
02 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
1094+
03 <xsl:template match="/">
1095+
04 <html>
1096+
05 <head><link rel="stylesheet" href="style.css"/></head> <body>
1097+
06 <h2>My Articles</h2>
1098+
07 <table>
1099+
08 <tr>
1100+
09 <th>Title</th>
1101+
10 </tr>
1102+
11 <xsl:for-each select="bibliography/article">
1103+
12 <tr>
1104+
13 <td><xsl:value-of select="title"/></td>
1105+
14 </tr>
1106+
15 </xsl:for-each>
1107+
16 </table>
1108+
17 </body></html>
1109+
18 </xsl:template>
1110+
19 </xsl:stylesheet>
10151111
```
10161112

1113+
1114+
1115+
1116+
1117+
- `<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">`denominato come `name space`. Ossia quando al root combaccia allora html viene generato. Mentre gli altri tags vengono usati all'interno del root elements.
1118+
- la radice del documento è `</xsl:stylesheet>`.
1119+
- In questo esempio c'è una singola regola cha va dalla riga 03 alla riga 18 denominata `template`.
1120+
- `match="/"` per il matching della regola.
1121+
- Dalla riga 04 alla riga 17 si ha il template della pagina htlm. All'interno di queste righe si hanno altri tags che specificano altre cose per XLST processor. Ad esempio alla riga 11 si ha:
1122+
`<xsl:for-each select="bibliography/article">` che significa che per ogni `article` che si trova sotto a `bibliography` viene applicata una regola. Il tutto si trova dentro ad una tabella come viene indicato alla riga 07. Quindi se si ha una tabella nel file di input le righe veranno generate automaticamente insieme alla seguente istruzione:
1123+
`<xsl:value-of select="title"/>`
1124+
1125+
1126+
1127+
**Esempio**:
1128+
1129+
Prodotto finale:
1130+
1131+
![32](immagini/lezione-02/32.png)
1132+
1133+
1134+
1135+
Codice che genera il prodotto finale:
1136+
1137+
![33](immagini/lezione-02/33.png)
1138+
1139+
1) Dove viene "linkato" il file stylesheet. Se si rimuove questa riga si ottine un prodotto finale senza stile.
1140+
1141+
Quindi si vede come questo file passa attraverso XSLT file (visto prima) e come a questo file vengano tolte delle informazioni e vengono mantenute altre. Più in particolare dalla tabella viene mantenuto solo il titolo.
1142+
1143+
1144+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /