Specifiche di protocollo
Versione 1.1 , Giugno 2011
Questa versione: SpamProtocol11
Ultima versione: SpamProtocol11
Versione Precedente: SpamProtocol10
Autori: FabioVitali, AngeloDiIorio, SilvioPeroni, GioeleBarabucci
<span resource="audio" src="link_audio" /> : per risorse audio
<span resource="video" src="link_video" /> : per risorse video
<span resource="image" src="link_immagine" /> : per risorse immagine
http://ltwxxxx.web.cs.unibo.it/login
Header:
Content-Type: application/x-www-form-urlencodedBody:
username=username
HTTP/1.1 200 OKBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/logout
Header:
Content-Type: application/x-www-form-urlencodedBody:
vuoto
HTTP/1.1 200 OKBody:
vuotoL'utente che ha eseguito la richiesta non deve essere mai specificato nell'URL della richiesta ma usando i meccanismi appositi di HTTP. Il server che creerà la sessione dovrà nominare il proprio cookie col seguente nome: ltwlogin
http://ltwxxxx.web.cs.unibo.it/post
Header:
Content-Type: application/x-www-form-urlencodedBody:
article= <article> Testo di un post contenente <span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>, altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio <span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere" rel="skos:inScheme" resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">portiere</span> </span>) o del tesauro esteso (ad esempio <span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere/roma" rel="skos:inScheme" resource="http://ltw11.web.cs.unibo.it/thesaurus">roma</span></span>) o link sparsi (ad esempio, http://www.example.com), e perché no un po' di audio (ad esempio, <span resource="audio" src="http://www.example.com/song.mp3" />), o un po' di video (ad esempio, <span resource="video" src="http://www.example.com/video.ogv" />), e immagini (ad esempio, <span resource="image" src="http://www.example.com/pic.png" />). </article>
HTTP/1.1 201 CreatedBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/respamHeader:
Content-Type: application/x-www-form-urlencodedBody:
serverID=<serverID>&userID=<userID>&postID=<postID>
HTTP/1.1 201 CreatedBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/replytoHeader:
Content-Type: application/x-www-form-urlencodedBody:
serverID=<serverID>& userID=<userID>& postID=<postID>& article= <article> Testo di un post contenente <span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>, altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio <span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere" rel="skos:inScheme" resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">portiere</span> </span>) o del tesauro esteso (ad esempio <span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere/roma" rel="skos:inScheme" resource="http://ltw11.web.cs.unibo.it/thesaurus">roma</span></span>) o link sparsi (ad esempio, http://www.example.com), e perché no un po' di audio (ad esempio, <span resource="audio" src="http://www.example.com/song.mp3" />), o un po' di video (ad esempio, <span resource="video" src="http://www.example.com/video.ogv" />), e immagini (ad esempio, <span resource="image" src="http://www.example.com/pic.png" />). </article>
HTTP/1.1 201 CreatedBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/search/<limit>/<type>/[<param>/]*dove:
* <limit>: all | 1 | 2 | ... * <type>: author | following | recent | related | fulltext | affinityEsistono infatti sei chiavi di ricerca. I parametri variano a seconda della chiave usata, secondo il seguente schema: author
http://ltwxxxx.web.cs.unibo.it/search/<limit>/author/<serverID>/<userID>
http://ltwxxxx.web.cs.unibo.it/search/10/author/tw18/pippo: restituiscimi i dieci più recenti post dell'utente "tw18/pippo".
following
http://ltwxxxx.web.cs.unibo.it/search/<limit>/following
http://ltwxxxx.web.cs.unibo.it/search/10/following : restituiscimi i dieci più recenti post degli utenti seguiti dall'utente che fa la richiesta (HTTP basic).
recent
http://ltwxxxx.web.cs.unibo.it/search/<limit>/recent/<term>
http://ltwxxxx.web.cs.unibo.it/search/10/recent/fc_roma: restituiscimi i dieci più recenti post che abbiano come argomento "fc_roma".
related
http://ltwxxxx.web.cs.unibo.it/search/<limit>/related/<term>
http://ltwxxxx.web.cs.unibo.it/search/10/related/fc_roma: restituiscimi i dieci post più correlati all'argomento "fc_roma" (ottenuti navigando e cercando nel tesauro).
fulltext
http://ltwxxxx.web.cs.unibo.it/search/<limit>/fulltext/<string>
http://ltwxxxx.web.cs.unibo.it/search/10/fulltext/ha%20fatto%20er%20cucchiaio: restituiscimi i dieci che contengono la stringa "ha fatto er cucchiaio" o parti di essa. Ogni server implementare politiche diverse, più o meno sofisticate, di ricerca full-text.
affinity
http://ltwxxxx.web.cs.unibo.it/search/<limit>/affinity/<serverID>/<userID>/<postID>
http://ltwxxxx.web.cs.unibo.it/search/10/affinity/tw18/pippo/12: restituiscimi i dieci post più affini al post "tw18/pippo/12".
Header/Body: vuoto.
<archive>
<post>
<content>text/html; charset=UTF8</content>
<affinity>5</affinity>
<article>
bla bla bla bla
</article>
</post>
<post>
<content>text/html; charset=UTF8</content>
<affinity>5</affinity>
<article>
bla bla bla bla
</article>
</post>
<post>
<content>text/html; charset=UTF8</content>
<affinity>5</affinity>
<article>
bla bla bla bla
</article>
</post>
.
.
.
</archive>
Spiegazione dei tag:
http://ltwxxxx.web.cs.unibo.it/post/<serverID>/<userID>/<postID>Header/Body: Body vuoto.
HTTP/1.1 200 OKBody:
<article prefix=" sioc: http://rdfs.org/sioc/ns# ctag: http://commontag.org/ns# skos: http://www.w3.org/2004/02/skos/core# dcterms: http://purl.org/dc/terms/ tweb: http://vitali.web.cs.unibo.it/vocabulary/"
about="/tw12/pippo/11" typeof="sioc:Post" rel="sioc:has_creator" resource="/tw12/pippo"
property="dcterms:created" content="2006-09-07T09:33:30Z">
Testo di un post contenente
<span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>,
altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio
<span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere"
rel="skos:inScheme" resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">portiere</span> </span>)
o del tesauro esteso (ad esempio
<span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere/roma"
rel="skos:inScheme" resource="http://ltw11.web.cs.unibo.it/thesaurus">roma</span></span>)
o link sparsi (ad esempio, http://www.example.com),
e perché no un po' di audio (ad esempio,
<span resource="audio" src="http://www.example.com/song.mp3" />),
o un po' di video (ad esempio,
<span resource="video" src="http://www.example.com/video.ogv" />),
e immagini (ad esempio,
<span resource="image" src="http://www.example.com/pic.png" />).
<span rev="tweb:like" resource="/tw14/pluto" />
<span property="tweb:countLike" content="1" />
<span property="tweb:countDislike" content="5" />
</article>
Importante: obbligatorio specificare tramite RDFa le sequenti informazioni:
setlike si imposta il grado di interesse dell'utente per un dato post.
Metodo: POST
URL:
http://ltwxxxx.web.cs.unibo.it/setlikeHeader:
Content-Type: application/x-www-form-urlencodedBody:
serverID=<serverID>&userID=<userID>&postID=<postID>&value=<value>dove:
<value> : +1 (like) | 0 (neutral) | -1 (dislike)
HTTP/1.1 200 OKBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/serversHeader/Body: vuoto
HTTP/1.1 200 OKBody:
Content-type: application/xml <servers> <server serverID="tw2" /> <server serverID="tw3" /> <server serverID="tw4" /> <server serverID="tw11" /> </servers>
http://ltwxxxx.web.cs.unibo.it/serversHeader:
Content-type: application/xmlBody:
servers= <servers> <server serverID="tw2" /> <server serverID="tw3" /> <server serverID="tw4" /> <server serverID="tw11" /> </servers>
HTTP/1.1 200 OKBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/setfollowHeader:
Content-Type: application/x-www-form-urlencodedBody:
serverID=<serverID>&userID=<userID>&value=<value>dove:
<value> : 0 (unfollow) | 1 (follow)
HTTP/1.1 200 OKBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/addtermHeader:
Content-Type: application/x-www-form-urlencodedBody:
parentterm=<parentterm>&term=<term>Esempi:
http://ltwxxxx.web.cs.unibo.it/addterm parentterm=fc_roma term=totti http://ltwxxxx.web.cs.unibo.it/addterm parentterm=totti&term=cucchiaio
HTTP/1.1 201 CreatedBody:
vuoto
thesaurus contiene il tesauro (sia condiviso che esteso) in formato SKOS, come descritto.
Metodo: GET
URL:
http://ltwxxxx.web.cs.unibo.it/thesaurusHeader/Body: Body vuoto.
HTTP/1.1 200 OKBody:
L'intero tesauro, nel formato SKOS descritto in sez. [XXX].
http://ltwxxxx.web.cs.unibo.it/searchserver/<limit>/<type>/[<param>/]*dove:
* <limit>: all | 1 | 2 | ... * <type>: author | recent | related | fulltext | affinityEsistono infatti sei chiavi di ricerca. I parametri variano a seconda della chiave usata, secondo il seguente schema: author
http://ltwxxxx.web.cs.unibo.it/searchserver/<limit>/author/<serverID>/<userID>
http://ltwxxxx.web.cs.unibo.it/searchserver/10/author/tw18/pippo: restituiscimi i dieci più recenti post dell'utente "tw18/pippo".
recent
http://ltwxxxx.web.cs.unibo.it/searchserver/<limit>/recent/<term>
http://ltwxxxx.web.cs.unibo.it/searchserver/10/recent/fc_roma: restituiscimi i dieci più recenti post che abbiano come argomento "fc_roma".
related
http://ltwxxxx.web.cs.unibo.it/searchserver/<limit>/related/<term>
http://ltwxxxx.web.cs.unibo.it/searchserver/10/related/fc_roma: restituiscimi i dieci post più correlati all'argomento "fc_roma" (ottenuti navigando e cercando nel tesauro).
fulltext
http://ltwxxxx.web.cs.unibo.it/searchserver/<limit>/fulltext/<string>
http://ltwxxxx.web.cs.unibo.it/searchserver/10/fulltext/ha%20fatto%20er%20cucchiaio: restituiscimi i dieci che contengono la stringa "ha fatto er cucchiaio" o parti di essa. Ogni server implementare politiche diverse, più o meno sofisticate, di ricerca full-text.
affinity
http://ltwxxxx.web.cs.unibo.it/searchserver/<limit>/affinity/<serverID>/<userID>/<postID>/<k>/<j>
http://ltwxxxx.web.cs.unibo.it/searchserver/10/affinity/tw18/pippo/12/10/80: restituiscimi i dieci post più affini al post "tw18/pippo/12" usando come parametri k=1 e j=3
Header/Body: vuoto.
<archive>
<post>
<content>text/html; charset=UTF8</content>
<affinity>5</affinity>
<article>
bla bla bla bla
</article>
</post>
<post>
<content>text/html; charset=UTF8</content>
<affinity>5</affinity>
<article>
bla bla bla bla
</article>
</post>
<post>
<content>text/html; charset=UTF8</content>
<affinity>5</affinity>
<article>
bla bla bla bla
</article>
</post>
.
.
.
</archive>
Spiegazione dei tag:
http://ltwxxxx.web.cs.unibo.it/postserver/<userID>/<postID>Header/Body: Body vuoto.
HTTP/1.1 200 OKBody:
<article prefix="
sioc: http://rdfs.org/sioc/ns#
ctag: http://commontag.org/ns#
skos: http://www.w3.org/2004/02/skos/core#
dcterms: http://purl.org/dc/terms/
tweb: http://vitali.web.cs.unibo.it/vocabulary/"
about="/tw12/pippo/11" typeof="sioc:Post" rel="sioc:has_creator" resource="/tw12/pippo"
property="dcterms:created" content="2006-09-07T09:33:30Z">
Testo di un post contenente
<span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>,
altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio
<span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere"
rel="skos:inScheme" resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">portiere</span> </span>)
o del tesauro esteso (ad esempio
<span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere/roma"
rel="skos:inScheme" resource="http://ltw11.web.cs.unibo.it/thesaurus">roma</span></span>)
o link sparsi (ad esempio, http://www.example.com),
e perché no un po' di audio (ad esempio,
<span resource="audio" src="http://www.example.com/song.mp3" />),
o un po' di video (ad esempio,
<span resource="video" src="http://www.example.com/video.ogv" />),
e immagini (ad esempio,
<span resource="image" src="http://www.example.com/pic.png" />).
<span rev="tweb:like" resource="/tw14/pluto" />
<span property="tweb:countLike" content="1" />
<span property="tweb:countDislike" content="5" />
</article>
Importante: obbligatorio specificare tramite RDFa le sequenti informazioni:
dell'utente che ha settato la preferenza. Ogni server può comunque scegliere le proprie policy di gestione delle preferenze (caching, limiti, etc.).
Metodo: POST
URL:
http://ltwxxxx.web.cs.unibo.it/propagatelike/Dove nel body dovranno essere inserite le informazioni per fulluserID, value, e fullpostID che, tenendo conto dei meccanismi di identificazione di server, utenti e post, si espande in:
http://ltwxxxx.web.cs.unibo.it/propagatelike/Dove nel body dovranno essere inserite le informazioni per serverID1, userID1, value, serverID2, userID2, e postID2 Un esempio è mostrato in seguito:
serverID1=tw11&userID1=pippo&value=+1&serverID2=tw8&userID2=pluto&postID2=4
http://lwtxxxx.cs.unibo.it/hasreply/dove nel Body si avrà la struttura :
<serverID>=value&<userID>=value&..... <serverID> = Id del server su cui risiede la risposta <userID> = Id dell'user che ha generato la risposta <postID> = Id del post di Risposta <userID2Up> = Id dell'user che ha generato il post da aggiornare <postID2Up> = Id del post da aggiornareIl server arricchisce il post con:
<span rel="sioc:has_reply" resource="/serverID/userID/postID" />
HTTP/1.1 200 OK
Testo di un post contenente #hashtag, altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio #portiere) o del tesauro esteso (ad esempio #roma) e altro html sparso (ad esempio, http://www.example.com)Questo testo viene (automaticamente o semi-automaticamente) arricchito con opportuni elementi HTML:
<article> Testo di un post contenente #hashtag, altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio #portiere) o del tesauro esteso (ad esempio #roma) e altro html sparso (ad esempio, <a href="http://www.example.com">http://www.example.com</a>) </article>Oltre a ciò, è necessario indicare, in qualche modo, le altre informazioni relative al post, ad esempio che i tag liberi ("hashtag" nell'esempio) e i termini del tesauro usati ("/sport/calcio/portiere" dal tesauro controllato e "/sport/calcio/portiere/roma" dal tesauro esteso) siano resi esplicitamente argomenti di questo post. Questo deve essere fatto usando RDFa:
<article>
Testo di un post contenente
<span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>,
altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio
<span rel="sioc:topic">#
<span typeof="skos:Concept"
about="/sport/calcio/portiere"
rel="skos:inScheme"
resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">
portiere</span>
</span>)
o del tesauro esteso (ad esempio
<span rel="sioc:topic">#
<span typeof="skos:Concept"
about="/sport/calcio/portiere/roma"
rel="skos:inScheme"
resource="http://ltw11.web.cs.unibo.it/thesaurus">roma</span></span>)
e altro html sparso (ad esempio, <a href="http://www.example.com">http://www.example.com</a>)
</article>
Inoltre, una volta arrivato al server, vengono aggiunte ulteriori asserzioni RDFa (riguardanti l'autore, l'uri della risorsa che identifica il post, ecc.) in modo da meglio descrivere il post stesso, es:
<article prefix=" sioc: http://rdfs.org/sioc/ns# ctag: http://commontag.org/ns# skos: http://www.w3.org/2004/02/skos/core# dcterms: http://purl.org/dc/terms/ tweb: http://vitali.web.cs.unibo.it/vocabulary/"
about="/tw12/pippo/11" typeof="sioc:Post" rel="sioc:has_creator" resource="/tw12/pippo"
property="dcterms:created" content="2006-09-07T09:33:30Z">
Testo di un post contenente
<span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>,
altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio
<span rel="sioc:topic">#
<span typeof="skos:Concept"
about="/sport/calcio/portiere"
rel="skos:inScheme"
resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">portiere</span></span>)
o del tesauro esteso (ad esempio
<span rel="sioc:topic">#
<span typeof="skos:Concept"
about="/sport/calcio/portiere/roma"
rel="skos:inScheme"
resource="http://ltwxxxx.web.cs.unibo.it/thesaurus">roma</span></span>)
e altro html sparso (ad esempio, <a href="http://www.example.com">link</a>)
</article>
Gli oggetti e le relazioni, minimi ed obbligatori, da usare per le varie descrizioni di un post sono i seguenti:
http://vitali.web.cs.unibo.it/vocabulary/.
Ogni server deve registrarsi alla federazione SPAM, per potere rendere disponibili i propri contenuti e servizi.
La registrazione non avviene in maniera automatica ma modificando manualmente un file XML condiviso da tutti i gruppi. E' compito del working group decidere l'URL del registro SPAM. Alla fine di ogni fiera, i gruppi sono tenuti a redarre il file XML condiviso. I gruppi dovranno inoltre consegnare una copia del file al docente o pubblicarlo sul wiki. Questa versione NON DEVE essere ulteriormente modificata. Ogni server dovrà richiedere questo file (tramite un GET HTTP) e usarlo per riconoscere i file della federazione. Il registro XML è stato caricato in questo file.TRAM è la test suite di SPAM. Il suo scopo è accertarsi che le implementazioni di SPAM siano conformi alle richieste del protocollo.
La test suite è composta da una serie di test.
<!ELEMENT test-suite (test)*>
Ognuno di questi test ha:
<!ELEMENT test (name, action+, expect)>
<!ELEMENT name (#PCDATA)>
L'azione da compiere e` descritta da:
<!ELEMENT action (method, uri, headers, body?)> <!ELEMENT method (#PCDATA)> <!ELEMENT uri (#PCDATA)> <!ELEMENT headers (header)> <!ELEMENT header EMPTY> <!ATTLIST header name CDATA #REQUIRED value CDATA #REQUIRED > <!ELEMENT body (#PCDATA)>
La descrizione di ciò che ci si aspetta in risposta è composta da:
<!ELEMENT expect (status, body?)> <!ELEMENT status (#PCDATA)> <!ELEMENT body (#PCDATA)>
All'interno di ogni test posso comparire variabili che, al momento del lancio dei test, saranno sostituite con valori appropriati.
Le variabili possibili sono:
${serverID-ok}${userID-ok}${postID-ok}${serverID-err}${userID-err}${postID-err}Si e' deciso al fine di semplificare il processo di testing di usare un valore di default riconosciuto come errato, e che quindi non potrà mai essere considerato come cme userID, postID o come serverID valido.
${serverID-err}: ltw0000${userID-err}: user0${postID-err}: 0000Retweet di un post non esistente ad un server esistente deve restituire un errore.
<test>
<name>Retweet di un post non esistente ad un server esistente deve restituire un errore</name>
<action>
<method>put</method>
<uri>/retweet/lw18/admin/${postID-err}</uri>
<headers/>
</action>
<expect>
<status>404</status>
</expect>
</test>
TRAM-PAM testa il protocollo client/server PAM.
TRAM-UPIM testa il protocollo server/server UPIM. Include tutti i test di TRAM-PAM piu` altri specifici del protocollo UPIM.
Testo di un post contenente #hashtag, altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio #portiere) o del tesauro esteso (ad esempio #roma) o link sparsi (ad esempio, http://www.example.com), e perché no un po' di audio (ad esempio, http://www.example.com/song.mp3), o un po' di video (ad esempio, http://www.example.com/video.ogv), e immagini (ad esempio, http://www.example.com/pic.png).
<article>
Testo di un post contenente <span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>, altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio <span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere" rel="skos:inScheme" resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">portiere</span> </span>) o del tesauro esteso (ad esempio <span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere/roma" rel="skos:inScheme" resource="http://ltw11.web.cs.unibo.it/thesaurus">roma</span></span>) o link sparsi (ad esempio, http://www.example.com), e perché no un po' di audio (ad esempio, <span resource="audio" src="http://www.example.com/song.mp3" />), o un po' di video (ad esempio, <span resource="video" src="http://www.example.com/video.ogv" />), e immagini (ad esempio, <span resource="image" src="http://www.example.com/pic.png" />). </article>
<article prefix="
sioc: http://rdfs.org/sioc/ns#
ctag: http://commontag.org/ns#
skos: http://www.w3.org/2004/02/skos/core#
dcterms: http://purl.org/dc/terms/
tweb: http://vitali.web.cs.unibo.it/vocabulary/"
about="/tw12/pippo/11" typeof="sioc:Post" rel="sioc:has_creator" resource="/tw12/pippo"
property="dcterms:created" content="2006-09-07T09:33:30Z">
Testo di un post contenente
<span rel="sioc:topic">#<span typeof="ctag:Tag" property="ctag:label">hashtag</span></span>,
altri hashtag che si riferiscono a concetti del tesauro condiviso (ad esempio
<span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere"
rel="skos:inScheme" resource="http://vitali.web.cs.unibo.it/TechWeb11/thesaurus">portiere</span> </span>)
o del tesauro esteso (ad esempio
<span rel="sioc:topic">#<span typeof="skos:Concept" about="/sport/calcio/portiere/roma"
rel="skos:inScheme" resource="http://ltw11.web.cs.unibo.it/thesaurus">roma</span></span>)
o link sparsi (ad esempio, http://www.example.com),
e perché no un po' di audio (ad esempio,
<span resource="audio" src="http://www.example.com/song.mp3" />),
o un po' di video (ad esempio,
<span resource="video" src="http://www.example.com/video.ogv" />),
e immagini (ad esempio,
<span resource="image" src="http://www.example.com/pic.png" />).
</article>
Content-type: text/html, application/xml, application/rdf-xml, text/html+xml, ...; charset=UTF-8al posto di:
Content-type: text/html; charset=UTF-8Questo perché i gruppi da 12CFU devono poter soddisfare richieste di vario tipo, oltre al semplice text/html.
<span id="geolocationspan" long="0000.0000" lat="0000.0000" />I progetti da 6CFU dovranno ignorare questi particolari hashtag.