Category Archives: xml

Cosa è un feed rss

RSS fu lanciato per la prima volta da Netscape. Si trattava di un formato derivato da RDF (un linguaggio generico per rappresentare informazioni su Web) per la gestione dei contenuti del portale My Netscape Network: il formato permetteva la visualizzazione sul portale di headline e link relativi a notizie pubblicate su altri siti e rese disponibili attenendosi a specifiche ben precise. Fu subito un grande successo: in breve, centinaia di fornitori di contenuti aderirono all'iniziativa e il portale My Netscape poté beneficiare di una vasta raccolta di notizie a disposizione dei propri utenti registrati.

Nel frattempo, lo stesso formato (e le sue variazioni successive) fu adottato progressivamente dalla comunità dei blogger: i post di un blog potevano essere facilmente esportati in RSS, in modo da essere resi disponibili a servizi di raccolta di contenuti. La popolarità dei blog è forse una delle ragioni principali del successo di RSS: migliaia di weblog iniziarono a produrre contenuti in RSS e iniziarono a proliferare siti che raccoglievano una selezione di post dai blog più seguiti (i cosiddetti blog aggregator) e programmi per fruire i contenuti di un blog direttamente sul proprio desktop o su altri dispositivi (RSS reader).

Oggi RSS è lo standard de facto per l'esportazione di contenuti Web. I principali siti di informazione, i quotidiani online, i fornitori di contenuti, i blog più popolari: tutti sembrano aver adottato il formato RSS. Gli utenti possono oggi accedere a migliaia di feed RSS: alcuni siti (directory) raccolgono i riferimenti agli innumerevoli feed RSS disponibili sul Web..

 

Fruizione di un feed RSS

La fruizione di un documento RSS è un processo molto semplice. Le modalità più diffuse sono due: attraverso appositi software che interpretano un feed permettendo agli utenti di visualizzarne i contenuti, o integrando i contenuti del feed all'interno di un sito Web.

Come viene interpretato un documento RSS

Un'applicazione in grado di interpretare un documento RSS ne effettua il parsing, ovvero una scansione del documento che individua i tag e isola i diversi elementi, per poi convertire i contenuti decodificati nel formato utile all'obiettivo: ad esempio un feed reader può estrarre i titoli di tutti gli elementi item per visualizzare la lista degli articoli di un giornale online, mentre un aggregatore Web può estrarre i contenuti del feed per convertirli in linguaggio HTML e incorporarli all'interno delle proprie pagine.

Feed reader

Un feed reader è un programma in grado di effettuare il download di un feed RSS (è sufficiente che l'utente indichi al programma l'URL del feed), effettuarne il parsing e visualizzarne i contenuti in base alle preferenze dell'utente.

Spesso i feed reader sono dotati di funzionalità avanzate; ad esempio sono in grado di rilevare automaticamente se il produttore del feed ha effettuato aggiornamenti al feed stesso, effettuandone il download a intervalli di tempo regolari. In questo modo l'utente può essere informato quasi in tempo reale quando un sito è stato aggiornato, un po' come avviene per le pagine web del browser Opera, aggiornabili - con un apposito comando - secondo una preordinata scansione temporale. Il browser Opera integra, dalla versione 8.0, un ottimo feed reader.

Ci sono molti feed reader in circolazione: alcuni sono applicazioni stand-alone, altri funzionano come plug-in all'interno di altri programmi (ad esempio plug-in per programmi di posta elettronica o browser Web). Altri, addirittura, sono applicazioni in grado di convertire un feed RSS in una serie di post in formato leggibile dai più popolari newsreader (come, ad esempio, Mozilla Thunderbird, Forté Agent, et cetera): un esempio di questi software è nntp//rss, oppure RSS Feed Converter uno script per il popolare mail-newsserver Hamster. Un esempio di feed reader stand alone è, invece, FeedReader, programma free (distribuito con licenza GNU GPL) per piattaforme Microsoft Windows. Nella parte sinistra dell'interfaccia è mostrato l'elenco dei feed impostati dall'utente; nella parte in alto a destra l'elenco dei singoli contenuti del feed selezionato; nella parte principale l'intero contenuto testuale di un articolo. Alcuni feed reader, come ad esempio RssFeedEater, un programma shareware per Windows, permettono addirittura di inviare via mail o scrivendo su un blog le informazioni ricevute dai feed. Un altro esempio di feed reader stand-alone è Ticker per piattaforme Linux/GNUstep.

Feed reader per dispositivi mobili

Un aspetto particolarmente interessante è la disponibilità di applicazioni per la lettura di feed RSS su dispositivi mobili (telefoni cellulari, palmari, ecc.). Ciò consente l'accesso a notizie e informazioni da qualunque luogo. Ad esempio, mReader è un'applicazione gratuita compatibile con tutti i dispositivi che supportano J2ME (Java 2 Micro Edition).

Nell'immagine viene mostrata la lettura di un feed RSS tramite un telefono cellulare Nokia 3650 su cui è installato mReader: date le limitate dimensioni dello schermo è necessario il passaggio attraverso tre schermate successive, ma i contenuti sono perfettamente fruibili.

Aggregatori Web

Un feed RSS proveniente da un sito può essere facilmente importato da un altro sito Web, per incorporarne i contenuti all'interno delle proprie pagine.

Tecnicamente le strade percorribili sono diverse; generalmente, un apposito software si occupa di effettuare, automaticamente, il parsing dei feed RSS, ne estrae i contenuti (ad es. titolo degli articoli e descrizione) e li inserisce all'interno del codice HTML delle pagine, applicando le opportune trasformazioni. Sostanzialmente, si tratta del procedimento opposto a quello utilizzato per la produzione del feed.

In seguito all'aumento di popolarità del formato RSS e alla sua standardizzazione, sono nati diversi servizi online che fungono da "collettori" di contenuti: i cosiddetti aggregatori. L'obiettivo è quello di fornire un unico punto d'accesso a notizie provenienti da varie fonti; la standardizzazione del formato e la sua diffusione sono gli ingredienti che hanno reso possibile perseguire tale obiettivo.

Il vantaggio per l'utente è notevole, poiché ha la possibilità di accedere a tutte le notizie attraverso un unico sito Web (l'aggregatore), evitando dunque di dover visitare, uno per uno, i siti da cui provengono le notizie stesse (magari solo per scoprire che non ci sono stati aggiornamenti dopo la sua ultima visita).

Esistono anche servizi come RssPress.it [1] e Kataweb Fido che consentono, a chi si registra, di personalizzare la propria home page selezionando le fonti da visualizzare all'interno di una vasta raccolta suddivisa per categorie.

Esistono anche portali che consentono un'organizzazione razionale dei feed a directory, la lettura direttamente dallo stesso web, la creazione di canali feed RSS in maniera gratuita e via web, ulteriori servizi come l'inoltro di notizie RSS anche via SMS.

Un formato, tanti “dialetti”

Il formato inizialmente adottato da Netscape era una semplificazione del primo draft proposto dal W3C. Netscape denominò la versione 0.9: mentre la proposta del W3C era del tutto conforme a RDF, la versione di Netscape ne eliminava gli aspetti più complessi, ed era totalmente slegato da esso.

Nel 2000 il W3C ha pubblicato la prima versione ufficiale di RSS (versione 1.0): la versione era conforme a RDF, integrava la possibilità di estendere il formato con nuovi moduli e il supporto ai namespace XML. Quasi contemporaneamente, Dave Winer (CEO di Userland Software, società produttrice del popolare blog publisher Radio Userland), ha rilasciato una versione di RSS, figlia del formato utilizzato da Netscape, denominata 0.91. A causa della popolarità del formato adottato da Netscape prima, e da Userland poi, il formato 0.91 ha iniziato a convivere accanto a quello proposto dal W3C. I due formati sono incompatibili (sebbene i principali feed reader siano in grado di interpretarli entrambi correttamente).

Il formato 0.91 si è evoluto perdendo alcune limitazioni nella versione 0.92 ed è stato ulteriormente perfezionato nella versione 2.0 (rilasciato da Userland nel 2002). Di fatto, oggi abbiamo a che fare con almeno tre differenti “dialetti”:

  • RSS 0.91: il più vecchio tra gli standard oggi in uso, diretta evoluzione del formato usato originariamente da Netscape. In alcuni casi si è preferito usare il successivo RSS 0.92;
  • RSS 2.0: rilasciato da Userland nel 2002, è l'evoluzione del formato 0.92, di cui eredita la semplicità, ma a cui aggiunge il supporto per moduli aggiuntivi;
  • RSS 1.0: è il formato ufficiale del W3C, conforme ad RDF, estensibile e modulare.

Chi produce contenuti da distribuire in formato RSS è così costretto a scegliere quale versione utilizzare o, come avviene nella maggior parte dei casi, a esportare i propri contenuti in tutti i formati disponibili.

Nonostante le differenti implementazioni delle diverse versioni, i documenti RSS condividono tutti la stessa struttura di base, che prevede:

  • un elemento <channel>, che contiene le informazioni sulla fonte dei contenuti (nel caso di un quotidiano online potrebbe contenere il nome della testata, la data di pubblicazione, informazioni sul copyright, ecc.)
  • una serie di elementi <item>, ognuno dei quali corrisponde ad un singolo elemento di contenuto (ad es. l'articolo di un giornale) e ne presenta tutte le informazioni (titolo, testo completo, nome dell'autore, ecc.)

RSS 0.92

RSS 0.92 è stato sviluppato da Dave Winer (di Userland Software) nel 2000. Si tratta di un'espansione del formato originale RSS 0.91 che aggiunge alcuni elementi addizionali e rimuove alcuni limiti per gli elementi imposti nella versione precedente.

Gli elementi addizionali permettono l'implementazione di funzionalità che consentono l'iscrizione al feed (per ricevere notifiche automatiche quando il feed viene aggiornato).

RSS 2.0

RSS 2.0 è un'evoluzione del formato 0.92 (e, a detta dell'autore Dave Winer, non subirà ulteriori variazioni future). In particolare sono presenti alcuni utili elementi aggiuntivi (<comments>, <author>, <ttl>, <guid>) ed è pienamente supportata la modularizzazione (e la conseguente espandibilità) attraverso namespace XML.

Ogni documento RSS 0.92 è anche un documento RSS 2.0 valido.

RSS 1.0

La versione 1.0 di RSS, sviluppata dal World Wide Web Consortium, è basata sul formato RDF, un metalinguaggio - a sua volta derivato da XML - utilizzato per la descrizione e la distribuzione di contenuti generici.

RSS 1.0 è progettato per essere estensibile attraverso i namespace XML: è infatti possibile estendere RSS 1.0 attraverso l'uso di moduli senza dover modificare il “cuore” del formato. È questa la differenza fondamentale con gli altri “dialetti” di RSS.

Fonte: wikipedia 

Motore di ricerca nei file xml con php

In questo articolo tratteremo come creare un motore di ricerca flash + php che
interogga dei dati posti in un file xml.Il nostro esempio cercherà codici o
prodotti.
Il file xml prodotti.xml è il seguente:

<motore>
<item>
<codice>004</codice>
<prodotto>EARTH TERMINAL BLOCK 4 TERMINALS</prodotto>
<prezzo>2,78</prezzo>
</item>
<item>
<codice>012DR</codice>
<prodotto>INSULATED TERMINAL BLOCK 12CONNECT</prodotto>
<prezzo>6,55</prezzo>
</item>
</motore>

In flash creeremo due frame. Nel primo mettiamo una input text con nome
d'istanza word e nel frame metteremo come codice actionscript

stop();
_root.stringa = "";

in piu un bottone che ci rimanderà al secondo frame con action:

on (release) {
_root.stringa = word.text;
gotoAndPlay(2);
}

Nel secondo frame metteremo una dynamic text che mostrerà i risultati e avrà
come var "result".
Il codice del secondo frame è:

loadVariablesNum("cerca.php?stringa="+_root.stringa, 0, "POST");
stop();

dove cerca.php lo definiamo qui.

<?php
$filename="prodotti.xml";
if( ! ($fp = fopen( "$filename" , "r" )) )die("Couldn't open xml file!");
$person_counter = 0;
$person_data = array();
$xml_current_tag_state = '';
function startElementHandler( $parser, $element_name, $element_attribs )
{
global $person_counter;
global $person_data;
global $xml_current_tag_state;
$xml_current_tag_state = $element_name;
}
function endElementHandler( $parser, $element_name )
{
global $person_counter;
global $person_data;
global $xml_current_tag_state;
$xml_current_tag_state = '';
if( $element_name == "ITEM" )
{
$person_counter++;
}
}
function characterDataHandler( $parser , $data )
{
global $person_counter;
global $person_data;
global $xml_current_tag_state;
if( $xml_current_tag_state == '' )
return;
if( $xml_current_tag_state == "CODICE" ) {
$person_data[$person_counter]["codice"] = $data;
}
if( $xml_current_tag_state == "PRODOTTO" ) {
$person_data[$person_counter]["prodotto"] = $data;
}
if( $xml_current_tag_state == "PREZZO" ) {
$person_data[$person_counter]["prezzo"] = $data;
}

}
if( !($xml_parser = xml_parser_create()) )
die("Couldn't create XML parser!");

xml_set_element_handler($xml_parser, "startElementHandler",
"endElementHandler");
xml_set_character_data_handler($xml_parser, "characterDataHandler");
while( $data = fread($fp, 4096) )
{
if( !xml_parse($xml_parser, $data, feof($fp)) )
{
break; // get out of while loop if we're done with the file
}
}
xml_parser_free($xml_parser);
?>

<?php
// $person_counter array bidimensionale che contiene i dati
// $person_data[$i]["codice"] contiene il codice
// $person_data[$i]["prodotto"] contiene la descrizione

$result="";
for( $i=0 ; $i < $person_counter ; ++$i )
{
if (ereg($stringa,$person_data[$i]["codice"], $reg) ||
ereg($stringa,$person_data[$i]["prodotto"], $reg)) //cerca la parola da cercare
nel campo del database
{
$result.="codice:".$person_data[$i]["codice"]."\n
prodotto:".$person_data[$i]["prodotto"]."\n prezzo: euro
".$person_data[$i]["prezzo"]."\n";
}
}
echo "&result=".$result;
?>

il documento xml

Obiettivo
In questo articolo tratteremo di cosa e' come funziona un documento xml:

File xml
Un file xml non e' altro che un file di testo che ha determinate caratteristiche.
un file xml ha come intestazione:

<?xml version="1.0"?>

I componenti fondamentali di un documento xml sono gli elementi e gli attributi.
Per esempio:

<autore nome="alberto" cognome="sordi">
un americano a Roma
</autore>

in questo caso "autore" e' un elemento mentre "nome" e "cognome" sono gli attributi.

Le regole di xml
1. la riga <?xml version="1.0"?> deve sempre essere messa in testa al documento
2. deve essere presente nel file xml un unico elemento detto radice ad esempio:

<?xml version="1.0"?>
<film>
<autore nome="alberto" cognome="sordi">
un americano a Roma
</autore>
<autore nome="terence" cognome="hill">
altrimenti ci arrabbiamo
</autore>
</film>

In questo caso l'elemento radice e' "<film>"
3. Tutti i tag aperti vanno chiusi
4. I caratteri speciali non possono essere messi, essi devono essere sostituiti dalle corrispettive rapprsentazioni

Creare un file dtd valido

Obiettivo
In questo articolo tratteremo come creare un file dtd valido.

Cosa è un file dtd?
Un insieme di regole per costruire documenti XML “validi” e non solo sintatticamente (well
formed).In altre parole “limitiamo” la possibilità di creare elementi a piacere definendo la lista dei possibili tag.

Le dtd possono trovarsi dentro al documento XML oppure essere dichiarate in un file esterno .dtd e poi essere richiamate.
Ad esempio per un file html la dtd è richiamata da:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Vediamo come si fa per dichirarle interne al documento

<!DOCTYPE elementroot [ defs ]>

All’esterno del documento XML

<!DOCTYPE elementroot SYSTEM “nomedtd.dtd">

Entrambe le possibilità

<!DOCTYPE elementroot SYSTEM “nomedtd.dtd“[ defs ]>

Il mio primo file xml con dtd

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE ElementoRadice [
<!ELEMENT Elemento (#PCDATA)>
]>

La prima riga definisce il tipo di documento che stiamo utilizzando.
La seconda riga (DOCTYPE) specifica la dtd e indica il nome dell'elemento di livello principale del documento.
La terza riga (ELEMENT) specifica un elemento della dtd che diciamo essere di tipo #PCDATA (caratteri)

Un esempio più completo
In questo esempio vedremo come creare una semplice struttura "note" in cui abbiamo 4 campi di tipo carattere

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Pippo</to>
<from>Mario</from>
<heading>Sono la testa</heading>
<body>Sono il corpo</body>
</note>

Elementi caratteristici
Gli elementi caratteristici delle dtd sono:

Tags
Attributi
Entità
PCDATA
CDATA

Questi si dichiarano cosi:

<!ELEMENT element-name (element-content)>

esempio:

<!ELEMENT codicefiscale (#PCDATA)>

Più occorrenze dello stesso elemento:
Element*
Una o + occorrenze dello stesso elemento
Element+
Zero o una occorrenza dell’elemento
Element?

La condizione or è possibile nella dichiarazione dei figli di un elemento tramite
Il simbolo |

<!ELEMENT nome (mario | pippo)

Naturalmente occorre poi definire Pippo e Mario

Altro contenuto: (EMPTY/ANY)
(!ELEMENT elemento EMPTY) Che si traduce nella dichiarazione legale Di <elemento/>
(!ELEMENT elemento ANY) Che significa che dentro ci posso mettere sia testo che altri elementi (purché definiti)

Se volessi “limitare” il contenuto di un Elemento a testo e alcuni elementi fissati
devo scrivere.

<!ELEMENT elemento (#PCDATA|child1|child2|…|childn)*>

Tipi di Attributi
Stringa: CDATA
Token:
ID: verifica che gli l’attributo è univoco.
IDREF(S): verifica che sia uno (o più) valori di qualche id.
ENTITY(IES): lista di una o più entità
NMTOKEN(S): lista di uno o più nomi validi.

Valori
<!ATTLIST element-name attribute-name attribute-type default-value>
Il default value: “value” (può essere cambiato, assente nel qual caso vale “value”
#REQUIRED (non so quale ma ci vuole un valore)
#IMPLIED (non mi importa se c’è)
#FIXED “value” (ci deve essere e deve essere “value”)
Con le dovute cautele
Es. Attributo di tipo ID non possono avere un valore #FIXED

Attributi Enumerati
Attributi enumerati: contengono una lista di valori possibili:
<!ATTLIST element attr (a|b|c) “a”>
Se non voglio mettere un valore di default uso #IMPLIED

creare un file xml per feed rss

Obiettivo
In questo articolo tratteremo come creare un file xml che servirà per essere letto come rss

File rss

Rss ovvero really simple
syndacation e' un file xml caratterizzato da opportuni tag.
Esso viene usato per condividere informazioni su internet.

Validare il codice

Per validare il codice appena scritto,esistono diversi tools a disposione, ne segnalo uno:

http://aggregator.userland.com/validator:

Articolo
Un nuovo file rss deve iniziare con

<rss version="0.92">

che specifica la versione del file rss in uso. Tutte le informazioni che metteremo nel nostro file rss devono essere
racchiuse tra i tag :

<channel>
...
</channel>

Poi dobbiamo mettere un blocco di tag che identificano la provenienza delle informazioni

- <title></title> indica il titolo del documento rss
- <description></description> indica la descrizione
- <link></link> indica il sito di provenienza
- <language></language> indica la lingua
- <copyright></copyright> indica il copyright
- <managingEditor></managingEditor> indica il responsabile delle informazioni

e poi mettere le singole informazioni/notizie tra i tag. Infatti ogni nuova notizia deve iniziare tra i tag

<item>
...
</item>

Ogni nuova notizia deve contenere le seguenti informazioni

- <title></title>  indica il titolo della notizia
- <description>  indica la descrizione della notizia
<![CDATA[
... qui si mette la notizia
 ]]>
</description>
- <link></link>  indica il link da dove proviene
- <author>sandrostracuzzi@hotmail.com</author>  indica email l'autore del documento
- <category></category>  indica la categoria del documento
- <pubDate></pubDate>  indica la data di pubblicazione della notizia

Esempio di notizie

<rss version="0.92">
<channel>
<title>www.sastgroup.com Pagina iniziale</title>
<description>Nuovi prodotti e novita</description>
<link>http://www.sastgroup.com</link>
<language>it</language>
<copyright>Sandro Stracuzzi 2004</copyright>
<managingEditor>sandrostracuzzi@hotmail.com</managingEditor>

<item>
<title>News del sito</title> 
<description> 
<![CDATA[

descrizione qui ...

anche tag html ...

 ]]>
</description>
<link>http://www.sastgroup.com/news.htm</link> 
<author>sandrostracuzzi@hotmail.com</author> 
<category>Php</category> 
<pubDate>16/05/2004</pubDate> 
</item> 

<item> 
<title>Prodotti</title> 
<description> 
<![CDATA[

descrizione qui ...

anche tag html ...

 ]]>
</description>
<link>http://www.sastgroup.com/index.htm</link> 
<author>sandrostracuzzi@hotmail.com</author> 
<category>Php</category> 
<pubDate>16/05/2004</pubDate> 
</item> 

<item> 

...

</item>

</channel>
</rss>