• Non ci sono risultati.

Librerie per l'elaborazione di file XML

2.2 Librerie adoperate

2.2.1 Librerie per l'elaborazione di file XML

JTidy: JTidy[3] è una libreria esterna di Java che implementa delle classi che realizzano un HTML Tidy. Questo strumento si occupa di correggere tutti gli errori che tipicamente si fanno durante la scrittura di codice web. Si occupa anche di rendere leggibile il codice generato da un editor HTML, e di segnalare

all'utente dove deve prestare più attenzione. Riesce a riconoscere una grande gamma di errori, segnalandoli come warning, indicando riga e colonna in cui li ha individuati. Nel caso in cui trovi problemi per cui non riesce a generare una soluzione, il motore Tidy non genererà codice, ma li metterà in evidenza

etichettandoli come errors. Tidy come feature principale ha quella di correggere il linguaggio di markup rispettando la sintassi osservata in alcuni browser quali Firefox, Internet Explorer, Opera, Netscape. Questo avviene attraverso le seguenti operazioni: correzione dei tag di chiusura mancanti o non accoppiati, correzione dell'ordine di chiusura dei tag, correzione dei problemi nei tag heading, correzione di tag posizionati male, coretto posizionamento dei tag hr, aggiunta di '/' finale nelle ancore, correzione di liste. Dal punto di vista della grammatica invece implementa:

- Aggiunta di “: inserisce gli apici dove mancano, anche quelli finali dove dimenticati.

- Attributi sconosciuti/proprietari segnalati: conosce tutti gli attributi HTML e XHTML, e aiuta lo sviluppatore a trovare subito dove ha sbagliato grazie a segnalazioni.

- Elementi proprietari segnalati: riconosce quale versione HTML si sta usando, segnalando e aggiungendo il coretto DOCTYPE al documento.

- Segnalazione di '>' mancanti: Tidy corregge anche la mancanza di > nei tag Inoltre offre la possibilità di decidere quale stile si vuole usare nella generazione di markup, inizialmente costruisce un albero di parsing pulito, direttamente dal file sorgente. Il quale viene poi visualizzato a seconda delle impostazioni nel file di configurazione. Per finire implementa anche le seguenti features:

- Internazionalizzazione: Offre una vasta scelta di caratteri tra cui scegliere, e si preoccupa di correggere eventuali errori nell'utilizzo degli stessi all'interno del documento.

- Accessibilità: Offre soluzioni a problemi riguardanti le persone che non usano browser text_based. Ad esempio, suggerisce sempre di inserire un sommario per gli attributi delle tabelle, in modo da favorire la navigazione a chi usa browser “aural”.

- Pulizia: L'opzione -clean consente di rimuovere gli eccessi di font, style e color e di inserirli piuttosto in un foglio di stile CSS. Inoltre, cancella paragrafi ed heading vuoti, inserendo lo stile corretto nei fogli di stile, o usando il tag.

- XML: aiuta a correggere gli errori di well-formedness, che causano il rifiuto di file XML. Purtroppo non riconosce ancora tutte le funzionalità XML; per esempio, non comprende sezioni CDATA o sottogruppi DTD.

Nel progetto che si è andato a realizzare, JTidy è stato usato principalmente per questa feature, di seguito un codice di esempio che l'implementa:

figiura2.1: esempio JTidy usato su XML

Come mostrato in figura 2.1 questo si fa creando un’istanza della classe Tidy, poi si imposta makeClean che serve per dire a Tidy di pulire il file XML. Dopo si imposta che il file generato da Tidy, sia un XML impostando XmlOut sempre a true. Infine si chiama il metodo parseDOM della classe Tidy al quale passiamo un

file in input dal quale leggere il codice XML da correggere ed un file in output su il quale scrivere il codice coretto.

Jsoup: È un parser HTML5 [4] le cui API consentono di estrarre dati e manipolare in maniera estremamente semplice documenti sfruttando le potenzialità di DOM, CSS e metodi di accesso simili a quelli offerti da Jquery. In Jsoup un documento è rappresentato dalla classe document, i nodi del documento da istanze della classe node e i tag da istanze della classe element. Esistono tre modi per effettuare il parsing di un documento XML ed ottenere così il document che lo rappresenta:

- Caricare il documento da un URL: Si utilizza il metodo connect della classe Jsoup.

- Caricare il documento da un file: Si utilizza il metodo parse della classe Jsoup passando come argomenti il file di input, il charset e il base-uri. - Effettuare il parsing da una stringa rappresentante il contenuto del

documento XML o una parte di esso: Si utilizza il metodo parse passando una

String rappresentante il contenuto del documento e il base-uri.

Una volta ottenuto il document è possibile procedere alla navigazione del documento sfruttando diversi metodi. Ad esempio si può accedere al titolo, al body, recuperare l'elemento figlio i-esimo, recuperare l'elemento successivo o precedente a ad uno selezionato, recuperare tutti gli elementi di un dato tag, recuperare un elemento a partire dall'id o recuperare il padre di un dato elemento. Poi Jsoup permette anche di recuperare elementi che abbiano un dato attributo o che abbiano un dato attributo valorizzato in modo ben preciso. Queste sono le principali operazioni per accedere agli elementi, se si vuole invece operare sugli attributi abbiamo le seguenti operazioni: recuperare tutti gli attributi di un elemento, recuperare l'attributo con un determinato nome. In più a questi metodi tradizionali introduce uno strumento molto potente per recuperare uno o più elementi attraverso l'uso di selettori. Un selettore è un’espressione che individua un sotto insieme degli elementi presenti nel documento. Accanto a questi metodi per selezione e navigare un documento XML, mette a disposizione un insieme di metodi per manipolarne il contenuto.

Jsoup è stato utilizzato per connettersi e caricare i documenti dai siti web e per estrarre gli elementi di un determinato tag.

Figura 2.2: esempio utilizzo jsoup per estrarre tag

Il primo come già detto sopra usando il metodo connect al quale passiamo l'URL del sito e facciamo la get, il secondo attraverso il metodo select della classe document al quale passiamo la tag richiesta, in maniera simile a quella mostrata in figura 2.2.

Documenti correlati