XML

XML: Extensible Markup Language: è un linguaggio che consente la rappresentazione di documenti e dati strutturati su supporto digitale. è uno strumento potente e versatile per la creazione, memorizzazione e distribuzione di documenti digitali. La sua sintassi rigorosa e al contempo flessibile consente di utilizzarlo nella rappresentazione di dati strutturati anche molto complessi.

XML è un linguaggio a marcatori (markup) un linguaggio a marcatori (markup). Un linguaggio di markup è composto di istruzioni, è composto di istruzioni, definite tag o marcatori, che descrivono la struttura e la forma di un documento.

Ogni marcatore (o coppia di marcatori) identifica un elemento o componente del documento.

I marcatori vengono inseriti all'interno del documento. Sia il testo, sia i marcatori sono memorizzati in formato testuale. XML usa la codifica dei caratteri UNICODE

Un documento XML è “leggibile” da un utente umano da un utente umano senza la mediazione di software specifico. XML è case sensitive, nei nomi dei tag distingue fra maiuscole e minuscole

Un documento XML è leggibile chiaro e intubile:

Elementi. Gli elementi sono componenti indispensabili per il linguaggio. Ogni documento XML deve infatti contenerne almeno uno. Nella sua forma più semplice, un elemento viene marcato per mezzo di due tag: un tag di apertura che posiziona il nome tra i simboli “< ”, e ">" un tag di chiusura, che è identico al precedente ad eccezione del simbolo “ / ” che appare prima del nome dell'elemento.

Ogni qualvolta un elemento viene dichiarato, il nome deve essere specificato in accordo a 2 semplici regole:

  • i nomi non possono contenere spazi e non dovrebbero iniziare per xml o XML, in quanto i nomi aventi tale prefisso sono riservati;
  • poiché i nomi sono case-sensitive, le stringhe contenute nei tag iniziale e finale devono corrispondere perfettamente.

In caso di elementi privi di contenuto, è possibile utilizzare una sintassi alternativa:

Viceversa, in caso di elementi il cui contenuto non è vuoto, è possibile prevedere un nesting (“annidamento”) di elementi, ovvero dichiarare uno o più elementi all'interno di un altro elemento. In questo caso è fondamentale seguire quella che viene definita regola di nesting: non è possibile terminare un elemento (ovvero inserire il relativo tag finale) prima che sia stata indicata la terminazione di tutti gli elementi in esso annidati. In altre parole, situazioni come la seguente non sono ammesse:

Mentre questa si:

Attributi. Ogni elemento presente in un documento XML può essere arricchito mediante l'associazione di uno o più attributi. Gli attributi sono sostanzialmente delle coppie nome-valore la cui occorrenza è vincolata alla presenza del relativo elemento.

  • Gli attributi non possono contenere più valori (elementi figlio possono)
  • Gli attributi non sono facilmente espandibili (per le future modifiche)
  • Gli attributi non possono descrivere strutture (elementi figlio possono)

Entity reference. determinati caratteri (per esempio, i simboli “ <", "> ”, “ " ” e “ ' ”) sono fondamentali per la marcatura. Ne segue che non è possibile utilizzarli per specificare il contenuto testuale di un elemento. Per ovviare a questo tipo di inconveniente, sono stati introdotti i cosiddetti entity reference.

Istruzioni di processing. Le istruzioni di processing (o processing instruction) si indicano mediante tag il cui inizio e fine sono denotati con <? e ?>

Commenti: Un commento viene infatti inserito all'interno di un tag che inizia con la stringa <!-- e termina con -->

Sezioni da interpretare come caratteri. Il linguaggio XML consente di specificare intere sezioni del documento da in terpretare come caratteri.

Prologo. ogni documento deve cominciare con la dichiarazione del prologo che contine la versione dell'XML e la relativa codifica dei caratteri

Namespace. Lo scopo dei namespace è quello di evitare confusione ed equivoci nel caso siano necessarie molte entità con nomi simili, fornendo il modo di raggruppare i nomi per categorie.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity" >
    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        app:showAsAction="never" />
</menu>

Un documento XML è ben formato se rispetta tutte le regole sintattiche viste fino ad adesso.

Definire lo schema (DTD e XSD)

La sezione precedente ha mostrato come memorizzare informazioni in un documento XML seguendo alcune semplici regole. In accordo a tali regole è infatti possibile strutturare un documento XML posizionandovi elementi e attributi, e ottenere una struttura che non sia ambigua.

Un documento che soddisfa le regole sintattiche di XML e che rispetta il document type (“tipo del documento”) ad esso associato, è da considerarsi un documento “valido”.

Esistono 2 modi per definire lo schema:

  • Document Type Definition (o DTD) è un linguaggio di markup che consente di specificare la struttura di un documento XML, in termini di elementi e/o attributi in esso contenuti. DTD consente infatti di definire delle regole grammaticali che, se seguite, conferiscono al documento XML una predeterminata struttura
  • XML Schema Definition (o XSD) è un linguaggio di markup utilizzabile per descrivere la struttura del contenuto di un file XML. Come DTD, XSD ha lo scopo di prescrivere quali elementi e attributi sono consentiti e come è strutturato il loro contenuto. A differenza di DTD, però, lo schema di un documento XML viene definito utilizzando XML stesso. Inoltre, XSD contiene un supporto per l'utilizzo dei namespace, ha una tipizzazione più ricca e consente allo sviluppatore di definire il proprio sistema di tipi nel caso in cui quelli disponibili non fossero sufficienti.

XSD

A differenza di DTD (in cui i dati sono interpretati come semplici stringhe di caratteri), XSD consente un maggiore controllo sui contenuti di un documento XML grazie ad un vasto insieme di tipi di dato predefiniti. I tipi di dato predefiniti potrebbero risultare non sufficienti durante la modellazione delle informazioni di interesse. XSD prevede quindi la possibilità di estendere il sistema dei tipi derivando nuovi tipi di dato (semplici o complessi).

Esempi: https://gitlab.com/simonebortolin/xml-gui-java/blob/master/README.md

Definire lo stile (CSS eXSL)

Il W3C definisce due standard per i fogli di stile:

  • CSS (Cascading Style Sheets)
  • XSLT (Extensible Stylesheet Language for Trasformation).

I CSS sono generalmente associati alle pagine web per definire quelle che sono le caratteristiche della pagina dal punto di vista della presentazione dei contenuti: utilizzando i CSS ad esempio è possibile definire tutte le proprietà degli elementi di markup come colori, bordi, posizionamento, font utilizzati e molto altro ancora.

I CSS tuttavia convivono con alcuni limiti di non poco conto:

  • non possono cambiare l’ordine con i quali gli elementi di markup appariranno all’interno del documento
  • non possono effettuare operazioni logiche ed in generale computazionali
  • non possono operare su più documenti contemporaneamente

XSLT (Extensible Stylesheet Language for Trasformation) è un linguaggio xml-based proposto dal World Wide Web Consortium per applicare delle trasformazioni a documenti xml. XSLT nasce per colmare tali lacune permettendo trasformazioni più potenti e flessibili dei documenti.

Il linguaggio XSLT può essere ad esempio utilizzato per definire una serie di regole che interpretate dal processore XSLT permettono di trasformare il contenuto di un documento xml in un altro formato quale potrebbe essere un file html, un pdf, una jpeg o altro ancora.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html style="background: #10d81a"> 
<body>
<h2> Dati Computer ITST Bortolin </h2>
<table border="1">
    <tr bgcolor="lightblue">
      <th style="text-align:left">Tipologia</th>
      <th style="text-align:left">Modello</th>
      <th style="text-align:left">Marca</th>
      <th style="text-align:left">Matricola</th>
      <th style="text-align:left">Data di acquisizione</th>
      <th style="text-align:left">RAM</th>
      <th style="text-align:left">HD</th>
    </tr>
  <xsl:for-each select="inventario/computer">
<xsl:sort select="data_acquisizione"/>
    <tr bgcolor="#123456">
      <td><xsl:value-of select="tipologia"/></td>
      <td><xsl:value-of select="modello"/></td>
      <td><xsl:value-of select="marca"/></td>
      <td><xsl:value-of select="matricola"/></td>
      <td><xsl:value-of select="data_acquisizione"/></td>
      <td><xsl:value-of select="quantitativo_ram"/> <xsl:value-of select="quantitativo_ram/@unita"/></td>
      <td><xsl:value-of select="quantitativo_hd"/> <xsl:value-of select="quantitativo_hd/@unita"/></td>
    </tr>
   </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Parsing (SAX e DOM)

I documenti XML possono essere elaborati anche tramite accesso da programma. Utilizzando il linguaggio Java, l'elaborazione di documenti XML è effettuabile mediante la Java API for XML Processing (JAXP). JAXP consente di effettuare operazioni quali la validazione di un documento rispetto ad uno schema XSD, l'interpretazione dei dati in esso contenuti, la trasformazione di un documento, e la generazione dinamica di un nuovo documento. Tutto ciò è possibile grazie alle API contenute in JAXP e che implementano le interfacce definite nel package predefinito java.xml.parsers. Tra le API di parsing di un documento XML contenute in JAXP si distinguono la Simple API per XML, o SAX e il Document Object Model, o DOM.

SAX effettua il parsing di un documento utilizzando un sistema ad eventi. Più precisamente, un parser SAX scansiona sequenzialmente un documento e genera eventi che, se opportunamente gestiti, consentono di interpretarne il contenuto. Il sistema che ne risulta è estremamente efficiente in termini di tempo di esecuzione, ma è anche molto rigido e non consente elaborazioni complesse.

Viceversa, DOM è un sistema molto più flessibile. DOM, infatti, non consente solo parsing, ma anche la modifica e la generazione di nuovi documenti. Ciò è ottenibile grazie alla memorizzazione dell'intero documento da elaborare in un albero di nodi. Ne consegue che la flessibilità di DOM si ottiene a discapito di un elevato dispendio di memoria

Validazione di documenti XML con JAXP. Per evitare situazioni di errore, è possibile impiegare lo stesso JAXP per effettuare la validazione di ogni documento utilizzato rispetto al relativo schema XSD.

Esempi: https://gitlab.com/simonebortolin/xml-gui-java/blob/master/README.md

results matching ""

    No results matching ""