Specifiche di protocollo
Versione 0.9.1 , Maggio 2011
Questa versione: SpamProtocol091
Ultima versione: SpamProtocol11
Versione Precedente: SpamProtocol09
Autori: FabioVitali, AngeloDiIorio, SilvioPeroni, GioeleBarabucci
Note di Versione: Questa versione è stabile ma non completa. La versione completa e ultimata sarà rilasciata più avanti dai Working Group come versione 1.0.
<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/post
Header:
Content-Type: text/html; charset=UTF-8Body:
<article xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" typeof="sioc:Post"> 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/retweet/<serverID>/<userID>/<postID>Header:
Content-Type: text/html; charset=UTF-8Body:
<article xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" typeof="sioc:Post"> 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/replyto/<serverID>/<userID>/<postID>Header:
Content-Type: text/html; charset=UTF-8Body:
<article xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" typeof="sioc:Post"> 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.
ARTICLE
(da HTML 5). Inoltre DEVE includere contenuto RDFa per identificare il post e le informazioni collegate. Vedi sezione [XXX.RDFa]*
Content-Type: multipart/form-data; boundary="aXFFS" --aXFFS Content-Type: text/html; charset=UTF-8 <article xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dcterms="http://purl.org/dc/terms/" xmlns: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"> <div about="/tw12/pippo/11"> 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" /> </div> </article> --aXFFS Content-Type: text/html; charset=UTF-8 <article> ... </article> --aXFFS
http://ltwxxxx.web.cs.unibo.it/post/<serverID>/<userID>/<postID>Header/Body: Body vuoto.
HTTP/1.1 200 OKBody:
<article xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dcterms="http://purl.org/dc/terms/" xmlns: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"> <div about="/tw12/pippo/11"> 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" /> </div> </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/setlike/<value>/<serverID>/<userID>/<postID>dove:
<value> : +1 (like) | 0 (neutral) | -1 (dislike)Header/Body: Body vuoto.
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>
<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/follow/<serverID>/<userID>Header/Body: Body vuoto.
HTTP/1.1 200 OKBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/unfollow/<serverID>/<userID>Header/Body: Body vuoto.
HTTP/1.1 200 OKBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/addterm/<parentterm>/<newterm>
http://ltwxxxx.web.cs.unibo.it/term/fc_roma/totti http://ltwxxxx.web.cs.unibo.it/term/totti/cucchiaioHeader/Body: Body vuoto.
HTTP/1.1 201 CreatedBody:
vuoto
http://ltwxxxx.web.cs.unibo.it/term/<term>Se il tesauro include, ad esempio, il termine "sport/calcio/roma/totti/cucchiaio" è lecito cancellare "cucchiaio" ma non si può eliminare "totti" (a meno di cancellare il termine "cucchiaio"). L'applicazione Ajax può rendere le cancellazioni multiple trasparenti all'utente, ma il protocollo ne supporta una alla volta.
http://ltwxxxx.web.cs.unibo.it/term/cucchiaio
OK
http://ltwxxxx.web.cs.unibo.it/term/totti
ERRORE
Header/Body: Body vuoto.
HTTP/1.1 200 OKBody:
vuoto
thesaurus
contiene il tesauro (sia condiviso che esteso) in formato SKOS, come descritto in sez. [XXX].
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].
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/<fulluserID>/<value>/<fullpostID>che, tenendo conto dei meccanismi di identificazione di server, utenti e post, si espande in:
http://ltwxxxx.web.cs.unibo.it/propagatelike/<serverID>/<userID>/<value>/<serverID>/<userID>/<postID>Un esempio è mostrato in seguito:
http://ltwxxxx.web.cs.unibo.it/propagatelike/tw18/pippo/+1/tw2/pluto/4
Header/Body: Body vuoto.
# Tesauro <http://vitali.web.cs.unibo.it/TechWeb11/thesaurus> a skos:ConceptScheme ; skos:prefLabel "Tesauro per il progetto di Tecnologie Web 2011" . </sport> ; skos:topConceptOf <http://vitali.web.cs.unibo.it/TechWeb11/thesaurus> ; skos:prefLabel "Sport" ; skos:narrower </sport/calcio> , </sport/pallavolo> , </sport/nuoto> , </sport/tennis> . </sport/calcio> ; skos:prefLabel "Calcio" ; skos:broader </sport> ; skos:narrower </sport/portiere> , </sport/difensore> ...
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 xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" typeof="sioc:Post"> 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 xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dcterms="http://purl.org/dc/terms/" about="/tw12/pippo/11" typeof="sioc:Post" rel="sioc:has_creator" resource="/tw12/pippo" property="dcterms:created" content="2006-09-07T09:33:30Z"> <div about="/tw12/pippo/11"> 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>) </div> </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 deve avere la seguente struttura XML:<servers> <server serverID="tw2" serverURL="http://tw2.web.cs.unibo.it/"> <server serverID="tw3" serverURL="http://pippo.web.cs.unibo.it/"> <server serverID="tw4" serverURL="http://pluto.web.cs.unibo.it/"> </servers>
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>
Rimuovere un termine appena creato non crea problemi
<test> <name>Rimuovere un termine appena creato non crea problemi</name> <action> <method>put</method> <uri>/term/venezia/san_marco</uri> <headers/> </action> <action> <method>delete</method> <uri>/term/venezia/san_marco</uri> <headers/> </action> <expect> <status>200</status> </expect> </test>
TRAM-PAM testa il protocollo client/server PAM.
<testsuite name="TRAM-PAM"> <test> <name>Un nuovo post</name> <action> <method>put</method> <uri>/post</uri> <headers> <header name="Content-Type" value="text/html"/> </headers> <body> <article>Un nuovo post</article> </body> </action> <expect> <status>200</status> </expect> </test> <test> <name>Un nuovo post con caratteri non ASCII</name> <action> <method>put</method> <uri>/post</uri> <headers> <header name="Content-Type" value="text/html"/> </headers> <body> <article>Un nuovo post con àccenti</article> </body> </action> <expect> <status>200</status> </expect> </test> <test> <name>I post devono essere XHTML ben formato</name> <action> <method>put</method> <uri>/post</uri> <headers> <header name="Content-Type" value="text/html"/> </headers> <body> <article>Un nuovo post <non ben formato </article> </body> </action> <expect> <status>200</status> </expect> </test> <test> <name>I post non si possono cancellare</name> <action> <method>delete</method> <uri>/post/${serverID-ok}/${userID-ok}/${postID-ok}</uri> <headers/> </action> <expect> <status>405</status> </expect> </test> <test> <name>Rimuovere un termine appena creato non crea problemi</name> <action> <method>put</method> <uri>/term/venezia/san_marco</uri> <headers/> </action> <action> <method>delete</method> <uri>/term/venezia/san_marco</uri> <headers/> </action> <expect> <status>200</status> </expect> </test> <test> <name>Non è possibile rimuovere un termine dal tesauro condiviso.</name> <action> <method>delete</method> <uri>/term/sport</uri> <headers/> </action> <expect> <status>405</status> </expect> </test> <test> <name>Non esiste il tipo di ricerca "since-date"</name> <action> <method>get</method> <uri>/search/all/since-date/2011-02-11</uri> <headers/> </action> <expect> <status>501</status> </expect> </test> </testsuite>
TRAM-UPIM testa il protocollo server/server UPIM. Include tutti i test di TRAM-PAM piu` altri specifici del protocollo UPIM.
<testsuite name="TRAM-UPIM"> <test> <name>Non si puo` propagare un "dislike" di un post che non esiste</name> <action> <method>POST</method> <uri>/propagatelike/${userID-ok}/-1/${postID-err}</uri> <headers/> </action> <expect> <status>404</status> </expect> </test> <test> <name>Si puo` propagare un "like" di un post che esiste</name> <action> <method>POST</method> <uri>/propagatelike/${userID-ok}/+1/${postID-ok}</uri> <headers/> </action> <expect> <status>200</status> </expect> </test>
<test> <name>non si puo'richiedere un post che non esiste</name> <action> <method>get</method> <uri>/post/${serverID-ok}/${userID-ok}/${postID-err}</uri> <headers/> </action> <expect> <status>404</status> </expect> </test> <test> <name>La richiesta di un post che esiste deve andare a buon fine</name> <action> <method>get</method> <uri>/post/${serverID-ok}/${userID-ok}/${postID-ok}</uri> <headers/> </action> <expect> <status>200</status> </expect> </test> </testsuite>
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 xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" typeof="sioc:Post"> 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 xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:ctag="http://commontag.org/ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" mlns:dcterms="http://purl.org/dc/terms/" about="/tw12/pippo/11" typeof="sioc:Post" rel="sioc:has_creator" resource="/tw12/pippo" property="dcterms:created" content="2006-09-07T09:33:30Z"> <div about="/tw12/pippo/11"> 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" />). </div> </article>
<span rel="tweb:retweet_of" resource="/tw34/pluto/76" />