Il nuovo blog lo trovate su www.melodycode.com!
Non sei loggato | | Login

Il DTD dello standard RSS 0.91 Aggiungi

Tutorials / Standards

Benvenuto! Se sei un nuovo visitatore ti consiglio di iscriverti al mio Feed RSS in modo da essere sempre aggiornato riguardo l'uscita di nuovi articoli oppure sbirciare tra i tutorials ed i progetti.
Per avere un'idea del best-content presente in questo blog puoi leggere il post intitolato "Ed ora è il momento di rilanciare alcune iniziative! (1a parte e 2a parte)".
Buona navigazione e grazie per la visita!

Requisiti

  • Conoscenza base dell'xml (cos'è un elemento, attributo, ecc...);
  • Un po di tempo libero;
  • Molta calma ;-)

Introduzione

Bene...eccoci qua insieme per capire cos'è lo standard RSS (in questo caso la versione 0.91). Diciamo che in linea di principio ha la stessa funzione dei bloggers, ossia la condivisione delle news. Il file contenente le news in formato rss non è altro che un file .xml che segue delle regole ben precise. A questo punto viene da chiederci: ma dove sono scritte stè regole? Semplice, in un file .dtd (Document Type Definition).
Un file .xml che oltre ad essere conforme alle regole dettate dal DTD deve anche essere conforme a tutti i limiti di validità identificati dalle specifiche relative all’XML (quindi tutti i tag di apertura e di chiusura devono corrispondere, tutti i valori degli attributi devono essere racchiusi tra virgolette, ecc... ecc...).
Ultimamente il formato rss (e blogger) si stà espandendo sempre di più perchè rende molto più semplice la condivisione delle news, infatti basta sapere l'indirizzo del file .xml e costruirsi un parser (in qualsiasi linguaggio) ed il gioco è fatto.
Comunque sia per scrivere e per leggere il formato rss, prima bisogna sapere come funziona; Ed è appunto per questo che ci dobbiamo studiare per bene il DTD relativo allo standars RSS 0.91.

Il DTD

Il link al file DTD lo trovate qua http://my.netscape.com/publish/formats/rss-0.91.dtd . Una volta aperto vi verrà spontaneo spegnere il monitor e lanciarlo contro il muro :) comunque se vi soffermate un minuto in più a leggerlo, vedrete che alla fine non è poi così difficile capirlo :)
Bene cominciamo subito a cercar di capire cosa cappero c'è scritto in questo file DTD :)

  1. <!--
  2. Rich Site Summary (RSS) 0.91 official DTD, proposed.
  3. RSS is an XML vocabulary for describing
  4. metadata about websites, and enabling the display of
  5. "channels" on the "My Netscape" website.
  6. RSS Info can be found at http://my.netscape.com/publish/
  7. XML Info can be found at http://www.w3.org/XML/
  8. copyright Netscape Communications, 1999
  9. Dan Libby - danda@netscape.com
  10. Based on RSS DTD originally created by
  11. Lars Marius Garshol - larsga@ifi.uio.no.
  12. $Id: rss-0.91.dtd,v 1.1.2.2 2001/11/09 08:10:07 dprusak Exp $
  13. -->

Questo non è altro che un commento nella quale ci sono le varie info su chi ha fatto il DTD (autore, copyright, info varie). In poche parole non ci serve ad una mazza leggere cosa c'è scritto all'interno del commento :)

Ora prendiamo in esame la prima riga che è molto semplice:

  1. <!ELEMENT rss (channel)>

Possiamo notare che per la dichiarazione degli elementi viene utilizzato il tag "<!ELEMENT" alla quale corrisponde il tag di chiusura ">".
La sintassi generalizzata è la seguente:

  1. <!ELEMENT nome_elemento contenuto_elemento>

In questo caso come nome dell'elemento è associato l'elemento "rss" mentre per il suo contenuto c'è "channel".
Ciò significa che all'interno dell'elemento "rss" ci deve essere un solo (obbligatorio) elemento "channel" (che sarà il nodo figlio di "rss"). Di conseguenza il nodo di root è "rss".
Ora con la seconda riga del DTD ci verranno imposte altre regole:

  1. <!ATTLIST rss version CDATA #REQUIRED> <!-- must be "0.91"> -->

Bene...con il tag "<!ATTLIST" si definisce le regole per gli attributi (in questo caso gli attributi di rss).
La sintassi generalizzata è la seguente:

  1. <!ATTLIST nome_elemento nome_attributo tipo_attributo valore_default>

In questo caso come nome dell'elemento c'è "rss", come nome dell'attributo c'è "version", come tipo dell'attributo c'è "CDATA" e come valore di default c'è "#REQUIRED". Per dirla in parole povere questo tag dice che il tag "rss" deve per forza contenere l'attributo "version" del tipo "CDATA".
"CDATA" stà ad indicare che in questo attributo possono essere utilizzati solo dati in formato carattere. Mentre il valore di default "#REQUIRED" dice che in questo attributo deve essere specificato un valore (obbligatoriamente).
Il commento in questo caso ha un'importanza fondamentale infatti ci ricorda di inserire come valore dell'attributo la versione 0.91, ossia la versione che viene trattata da questo DTD.
Quindi ora siamo in grado di scrivere in formato RSS le prime due righe del nostro XML:

  1. <rss version="0.91">
  2. <channel>
  3. <!-- ... >
  4. <!-- ... >
  5. <!-- ... >
  6. </channel>

Ora la prossima riga è da paura :)

  1. <!ELEMENT channel (title | description | link | language | item+ | rating? | image? | textinput? | copyright? | pubDate? | lastBuildDate? | docs? | managingEditor? | webMaster? | skipHours? | skipDays?)*>

Come potete notare la sintassi è molto simile alla prima riga che abbiamo esaminato, con la sola differenza che compaiono alcuni simboli nuovi.
Studiamoci prima tutti questi simboletti strani altrimenti si rischia di impazzire ehehe:

  • Le parentesi come avete notato servono a racchiudere un gruppo di elementi (e come vedremo tra poco, anche a raggruppare un gruppo di alternative);
  • La virgola separa un elemento dall'altro e ne identifica l'ordine;
  • Il pipe (il simbolo "|") separa gli elementi individuandoli come alternative (dopo capirete meglio);

Ora passiamo all'altro gruppo di simboletti (si inseriscono subito dopo il nome dell'elemento):

  • Il punto di domanda (ossia "?") indica che un elemento deve essere visualizzato una sola volta o non apparire mai;
  • L'asterisco (ossia il "*") indica che l'elemento può essere visualizzato più volte o non apparire mai;
  • Il segno di più (ossia il "+") indica che l'elemento deve essere visualizzato una o più volte (almeno una volta deve esserci);
  • La mancanza di simbolo significa che deve apparire solo una volta;

Bene ora possiamo capire la riga di prima....anzi no.... è meglio frammentarla :) Come vedete i simboli di pipe separono le varie alternative (in questo caso le alternative sono title , description, link, ecc...ecc... e sono tutte racchiuse tra le parentesi tonde). Ma se notate bene alla chiusura della parentesi c'è il simbolo "*" che significa che la scelta (la scelta delle alternative) può essere fatta più volte oppure mai. In poche parole il tag "channel" può non contenere alcun tag figlio.
Bene ora passiamo ad esaminare più attentamente ciò che stà all'interno delle parentesi (prendo solo alcuni tag). Come potete notare ci sono alcuni tag "strani", essi sono:

  • Il tag "item" è seguito dal simbolo "+", questo stà a significare che l'elemento (nel caso in cui lo scegliamo) deve comparire una o più volte.
  • Il tag "rating" (come image, textinput,ecc...ecc...) è seguito dal punto di domanda, questo stà a significare che l'elemento (sempre nel caso in cui lo scegliamo) deve apparire una sola volta oppure mai.
  • Gli altri tag , ossia quelli in assenza di simboli (nel caso in cui la scelta viene fatta su di loro) indicano che deve essere visualizzato l'elemento indicato.

Per capire di più, è meglio fare un esempio XML del tag "channel" conforme allo standard RSS 0.91:

  1. <channel>
  2. <title>titolo</title>
  3. <link>link</link>
  4. <description>descrizione</description>
  5. <language>lingua</language>
  6. <image>...</image>
  7. <item>...</item>
  8. <item>...</item>
  9. <item>...</item>
  10. </channel>

Come potete notare la scelta viene fatta più volte (le alternative sono contenute all'interno delle parentesi). Il tag "title" appare solo una volta (come language, link e description), il tag image è facoltativo (ossia può apparire solo una volta oppure mai) mentre il tag "item" può essere ripetuto più volte.

Bene, la parte difficile l'abbiamo fatta :) ora tutto ciò che spiegherò sarà molto più semplice :)

  1. <!ELEMENT title (#PCDATA)>

Ovviamente tutti i tag sono da definire (i tag "title", "description", "item", ecc...): in questo caso il contenuto del tag title è di tipo #PCDATA ossia l'elemento può contenere solo testo (quindi non può avere dei tag figli). Tutte le altre dichiarazione sono simili quindi mi sembra inutile spiegarle :) Passiamo a qualcosa di diverso:

  1. <!ELEMENT image (title | url | link | width? | height? | description?)*>

Mmmm...alla fine non è molto diverso dal tag di prima :) Qua, come potete notare, la scelta può essere fatta più volte oppure mai, e le alternative sono "title", "url", "width", "height" e "description". Il punto di domanda stà a significare, come prima, che la scelta di quell'elemento può essere fatta una volta oppure mai.

I tag successivi sono simili quindi mi soffermo su uno leggermente diverso (alla fine sono tutti uguali eheheh):

  1. <!ELEMENT skipDays (day+)>

Ciò stà a significare che il tag "skipDays" deve contenere uno o più tag "day".

Bene abbiamo quasi finito (visto che se avete capito tutto ciò che ho detto prima, riuscite anche a capire le altre righe del DTD). L'unica cosa che manca è la definizione delle entità (ossia di una sorta di parole riservate).

  1. <!ENTITY frac12 "&#189;"> <!-- fraction one-half -->

Prima di spiegare ecco la sintassi generalizzata:

  1. <!ENTITY nome_entità definizione_entità>

Le entità servono per facilitare e rendere più "intuitiva" la lettura e la scrittura dell'xml. Nella riga presa in esame ogni volta che nell'xml viene fatto riferimento all'entità (in questo caso "½" ) quest'ultima verrà sostituita dal relativo contenuto ossia "&#189" che corrisponde alla frazione 1/2 (½).
Bene, ora in teoria leggendo un DTD riusciamo (dopo ovvi tentativi) a scrivere un XML ben formato che segua le regola da esso segnate.

Mi sa che questo tutorial ve lo dovete leggere come minimo un paio di volte per due motivi:

  1. Alle superiore avevo 4 in italiano :P
  2. L 'argomento trattato non è molto semplice

Mmm...mi manca qualcosa da dire? No, quindi vi saluto...bye bye

Daniele Simonin 3 Settembre 2005 alle 11:12 Trackback URI

Scrivi un commento

Tags di formattazione:










* Sono ammessi solo commenti contenenti opinioni, correzioni e ogni forma di supporto al tutorial; è quindi vietato porre quesiti personali.

Leggi i 2 commenti

Grazie davvero dell'ottimo post... ora non ho tempo di rileggerlo la seconda volta come consigliato, ma è già tra i miei segnalibri :D
GRAZIE!

Commento di MTB Vulture 17 Dicembre 2007 alle 15:05

[...] Nato nel 1986 all’età di 14 anni ha collaborato per la stesura delle specifiche RSS 1.0: uno dei più popolari formati per la distribuzione di contenuti Web (in onore di ciò, a breve, porterò su questo nuovo sito il tutorial che feci riguardante il DTD del RSS 0.91 utile a capire anche altri formati XML). Da qui si deduce che questo “bambino” prodigio avrebbe fatto della sua vita un manifesto per la libertà d’espressione ed infatti è sempre stato contro la SOPA, ha reso pubblico parte del database di PACER (che conteneva dati giuridici a pagamento per il pubblico statunitense) ed infine nel 2011 venne accusato di aver scaricato illegalmente 4 milioni di articoli accademici da JSTOR (biblioteca digitale) utilizzando la rete del MIT. L’accusa di fronde informatica distrusse quest’anima rivoluzionaria che nel 11 Gennaio 2013 decise di suicidarsi facendo un eco spaventoso tra il mondo accademico e globalizzato di Internet. [...]

Pingback da In ricordo di Aaron Swartz by Melodycode 28 Gennaio 2013 alle 07:58

Feed

infoPillole (by Wikipedia)

Ultimi commenti

  • ViZ: Sei un grande!
  • enzo: ORA puoi provare JAMP ottimo framework scritto da...
  • Federico: PHP & template engine comparison:...
  • Federico: PHP & template engine compared:...
  • Ionela: interessante! volevo segnalarvi una nuova...

Calendario

Giugno 2013
L M M G V S D
« Gen    
 12
3456789
10111213141516
17181920212223
24252627282930

Archivio

Categorie

Tutorials casuali

Ultime news

Progetti

Alcuni miei lettori