Non sei loggato | Register | Login

Il DTD dello standard RSS 0.91 Aggiungi

Tutorials / Standards

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 September 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 l'unico commento presente fin'ora

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 December 2007 alle 15:05

Feed

infoPillole (by Wikipedia)

Ultimi commenti

  • byman: Ho trovato molto utile questa raccolta di...
  • Flavio: bella questa!
  • Beta: Thank you.Beautiful CSS form“
  • Daniele Simonin: Per guadagnare molti usano questa...
  • Luca: Per guadagnare bisogna lavorare, io ho raccolto un...

Calendario

September 2010
M T W T F S S
« Aug    
 12345
6789101112
13141516171819
20212223242526
27282930  

Archivio

Categorie

Tutorials casuali

Ultime news

Progetti

Alcuni miei lettori