Newsgroup: it.comp.retrocomputing
Titolo: Archivio Polveroso: proposta per struttura in XML

Salute a tutti.
Dopo aver buttato l'idea di scrivere il file dell'Archivio Polveroso in
XML non potevo esimermi (sebbene in passato l'abbia fatto piu` volte...)
da postarne una proposta di formato. Spero di essere abbastanza chiaro.
Il formato XML e` pensato per poter essere sia rigoroso che informale, oltre 
che facilmente estensibile. Puo` essere impiegato sia per rappresentare dati 
che per la visualizzazione (assieme ad un foglio di stile CSS o XSL).
Nel nostro caso vogliamo un formato rigoroso per la rappresentazione di dati, 
quindi non ci serve il foglio di stile, ma e` indispensabile la DTD, cioe` la 
definizione della struttura dei dati, che forniro` alla fine. La DTD e` 
piuttosto complessa da spiegare: guardate su 
http://w3c.org
.
L'elemento base dell'XML e` il tag: il tag e` una stringa che racchiude un 
contenuto dandogli un significato. Nell'XML i tag sono nella forma:
<tag> ... contenuto ... </tag>
Dove al posto di "tag" ci puo` stare qualsiasi parola. Quindi <tag> definisce 
l'inizio, mentre </tag> definisce la fine. I tag possono essere vuoti di 
contenuto: in tal caso vanno scritti nella forma:
<tag/>
Infine i tag possono avere degli attributi:
<tag attributo="valore"> ...
Dove "attributo" e` una parola qualsiasi e "valore" (sempre racchiuso da " o 
da ') e` una stringa qualsiasi.
Passiamo quindi ad un esempio pratico, cioe` ad un entry nell'archivio 
polveroso che si riferisce all'Indigo R4000 sia come macchina di per se sia 
come a quella che ho io:
<computer date="1992" update="20010326">
 <model>Indigo R4000</model>
 <brand>Silicon Graphics</brand>
 <cpu>MIPS R4000 100MHz o MIPS R4400 150MHz (1993)</cpu>
 <descr>
  Successore dell'Indigo: l'upgrade comporta la sostituzione di scheda madre, 
  RAM e alimentatore. 2 slot di espansione GIO32, 2 seriali RS-232/RS-422, 
  SCSI I, audio 16 bit stereo con I/O digitale e analogico e DSP 56001, 12 
  slot per SIMM standard 72 pin a 36 bit. Usa tastiera e mouse proprietari.
 </descr>
 <board type="video">
  <model>LG1</model>
  <brand>Silicon Graphics</brand>
  <descr>1024x768 8bpp, accelerata 2D</descr>
 </board>
 <board type="video">
  <model>XS</model>
  <brand>Silicon Graphics</brand>
  <descr>1280x1024 24bpp, accelerata 2D, ma più lenta della LG1</descr>
 </board>
 <board type="video">
  <model>XS-Z</model>
  <brand>Silicon Graphics</brand>
  <descr>
   1280x1024 24bpp, accelerata 2D e 3D con 1 GE, ma più lenta nel 2D della 
   LG1
  </descr>
 </board>
 <board type="video">
  <model>XZ</model>
  <brand>Silicon Graphics</brand>
  <descr>1280x1024 24bpp, accelerata 2D e 3D con 2 GE</descr>
 </board>
 <board type="video">
  <model>Elan</model>
  <brand>Silicon Graphics</brand>
  <descr>1280x1024 24bpp, accelerata 2D e 3D con 4 GE</descr>
 </board>
 <machine date="1992" acq="1999">
  <propr type="nome">Davide G. Borin</propr>
  <status>Batteria CMOS scarica</status>
  <descr>R4000, 64MB RAM, 1GB HD, LG1, tastiera e mouse</descr>
  <avail>no</avail>
  <software>
   IRIX 5.2, IRIX 6.2, IDO 5.3, IDL e IDF per IRIX 6.2, patch complete, vario 
   software free
  </software>
 </machine>
</computer>
 Credo che i tag siano in buona parte auto-esplicativi, ma li commento tutti 
 (tutti gli attributi sono facoltativi):
<computer date="anno_mese_giorno" update="anno_mese_giorno">
 rappresenta ovviamente un computer, nella sua descrizione generale. date e` 
 la data di rilascio, nel formato standard annomesegiorno, con giorno e mese 
 facoltativi (ma non puo` esserci il giorno se non c'e` il mese!), mentre 
 update e` la data di ultimo aggiornamento della entry.
 Questo tag puo` solo contenere altri tag e per la precisione tutti, tranne 
 <computer> stesso, <for> e <status>, <avail>, <propr> e <software>, che sono 
 specifici per ciascuna <machine>. I tag <model> e <brand> devono essere 
 presenti
<model>
 il modello del computer. Deve essercene uno e solo uno per ciascun <computer> 
 o <board>
<brand>
 la marca o ditta costruttrice. Deve essercene una e solo una per ciascun 
 <computer> o <board>
<cpu>
 la descrizione di tutte le cpu possibile del computer. Questo tag puo` 
 apparire solo una volta per ciascun <computer>
<descr>
 la descrizone del computer. Questo tag puo` apparire solo una volta per 
 ciascun <computer>, <machine> o <board>
<link src="URL">
 specifica un link relativo al <computer>, <board> o <machine>. src specifica 
 l'URL, mentre in contenuto e` la relativa descrizione (come in <a> dell'HTML)
<board type="tipo" date="anno_mese_giorno" update="anno_mese_giorno">
 descrizione di una scheda o periferica di tipo "tipo" e rilasciata in data 
 specificata da date, con entry aggiornata in data specificata update. Questo 
 tag puo` essere presente anche piu` volte dentro <computer>, ma puo` anche 
 apparire al di fuori, come entry a se stante: in tal caso puo` essere 
 opportuno specificare a che computer si riferisce con il tag <for>. Questo 
 tag non puo` contenere testo, ma solo altri tag e per la precisione gli 
 stessi di <computer> tranne <cpu> e <board> stesso. I tag <model> e <brand> 
 devono essere presenti
<for>
 indica un computer per il quale e` stata creata la <board>. Ci potra` essere 
 un <for> per ciascun <computer> che puo` usufruire della <board>, a meno che 
 essa sia generica, tipo un HD SCSI esterno: in tal caso <for> non va 
 specificato
<machine date="anno_mese_giorno" acq="anno_mese_giorno">
 specifica un singolo oggetto, cioe` il computer o scheda o periferica 
 posseduto da un certo retrocomputerista, acquisito in data specificata da 
 acq e acquistato da nuovo in data specificata da date. Questo tag puo` 
 contenere solo i tag <propr>, <status>, <software>, <avail>, <descr>, 
 <link>, tutti una sola volta per ciascuno, tranne <link>
<propr type="tipo_di_nome">
 specifica il proprietario di una <machine>. type indica il tipo di nome 
 specificato dal tag, che puo` essere un nome, un nick IRC, in UIN ICQ o 
 altro
<status>
 lo stato di funzionamento
<software>
 il software posseduto per la <machine> specifica
<avail>
 indica la disponibilta` della <machine> per vendita, scambio o che altro
Il file XML dell'archivio polveroso dovra` avere la struttura:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE computer SYSTEM "URLdellaDTD">
<archiviopolveroso update="annomesegiorno">
...
</archiviopolveroso>
Dove al posto di URLdellaDTD andra` l'URL dove sara` disponibile la DTD, al 
posto di annomesegiorno andra` la data di ultimo aggiornamento e al posto dei 
... andranno la varie entry di <computer> e <board>.
Per concludere, ecco la DTD dell'XML proposto:
<!DOCTYPE computer [
<!-- Versione Alpha 20010402 -->
<!-- Modello (es.: C-64) -->
<!ELEMENT model (#PCDATA)>
<!-- Marca, ditta costruttrice (es.: Commodore) -->
<!ELEMENT brand (#PCDATA)>
<!-- Descrizione di UN link con informazioni relative all'oggetto -->
<!ELEMENT link (#PCDATA)>
 <!-- URI (URL) del link -->
 <!ATTLIST link
  src CDATA #IMPLIED>
<!-- Le CPU presenti o disponibili (es.: Motorola 68000 7,5MHz) -->
<!ELEMENT cpu (#PCDATA)>
<!-- Computer al quale è destinata la periferica o la scheda -->
<!ELEMENT for (#PCDATA)>
<!-- Periferica o scheda sostituibile, di base o di espansione -->
<!ELEMENT board (model, brand, (for* | descr | machine* | link*))>
 <!-- type: Tipo di scheda (es.: audio) -->
 <!-- date: Data di rilascio per il computer in questione -->
 <!ATTLIST board
  type CDATA #IMPLIED
  date CDATA #IMPLIED
  update CDATA #IMPLIED>
<!-- Descrizione -->
<!ELEMENT descr (#PCDATA)>
<!-- Proprietario -->
<!ELEMENT propr (#PCDATA)>
 <!-- type: Tipo di nome (es.: nome, nick, e-mail) -->
 <!ATTLIST propr
  type CDATA #IMPLIED>
<!-- Stato di funzionamento -->
<!ELEMENT status (#PCDATA)>
<!-- Disponibilità per scambio, vendita o altro -->
<!ELEMENT avail (#PCDATA)>
<!-- Software posseduto -->
<!ELEMENT software (#PCDATA)>
<!-- Il singolo computer o periferica posseduta da un retrocomputerista -->
<!ELEMENT machine (propr, (status | avail | descr | software | link*))>
 <!-- date: Data di acquisto da nuovo -->
 <!-- acq: Data di acquisizione da parte del retrocomputerista -->
 <!ATTLIST machine
  date CDATA #IMPLIED
  acq CDATA #IMPLIED>
<!-- La descrizione generale del computer -->
<!ELEMENT computer (model, brand, (cpu | board* | descr | machine* | link*))>
 <!-- date: Data di rilascio sul mercato -->
 <!-- update: Data di ultimo aggiornamento -->
 <!ATTLIST computer
  date CDATA #IMPLIED
  update CDATA #IMPLIED>
<!-- Elemento che racchiude tutto, obbligatorio nell'XML -->
<!ELEMENT archiviopolveroso (computer* | board*))>
 <!ATTLIST archiviopolveroso
  update CDATA #IMPLIED>
<!--
Note:
 1) tutte le date vanno specificate nella forma standard "anno mese giorno", 
 senza spazi e con padding a 0; puo` essere omessa la parte terminale 
 ("giorno" o "mese giorno")
 es.: 1991 198303 19710123
 È anche possibile, qualora la data esatta sia incerta, specificare un range 
 di tempo nella forma "data_inizio-data_fine"
 es.: 1991-1992
 2) sebbene l'indentazione non sia obbligatoria, è meglio utilizzarla per 
 una maggiore leggibilità
-->
]>
Ricordo che questa e` una proposta e io stesso nutro alcuni dubbi, ed in
particolare:
1) tag in Italiano o in Inglese?
2) contenuto degli attributi in Italiano o Inglese?
3) il tag <cpu> serve? Deve addirittura essercene uno per ciascuna
   possibile CPU?
A risentirci
\  Davide G. Borin
\\ !!Scudo anti-spam attivo!! Togliere le x e "eliminami" dall'indirizzo
\\\_____________________________________________________________________

 che per la visualizzazione
L'idea non è affatto male, ma tieni conto che pochi browser sono in
grado di visualizzare l'XML (IE dalla 5 in su e Netscape 6). Essendo un
retroarchivio, con un retrocomputer non credo sia possibile consultarlo.
Correggetemi se sbaglio...
-- 
Ciao!
Walla
-------=* Roberto Waha - roberto.waha(a)
rcm.dsi.unimi.it
 *=-------
        El Senyor és la meva força, el Senyor el meu cant.
     Ell m'ha estat la salvació. En Ell confío, i no tinc por.
------------------------------------------------------------------
PGP Fingerprint: A6C8 4BD6 06D0 D51F 0F41 B69F 2530 FB6A 6442 627B
------------------------------------------------------------------

 consultarlo.
Lo leggi come file di testo, ma essendo strutturato rigorosamente e`
anche piu` facile fare le ricerche: per esempio se cerci il C-64 basta
che fai un ricerca su "<model>C-64" o se cerchi i miei computer cerchi la
stringa "<propr>Davide G. Borin".
A tal proposito, mi sa che <propr> doveva essere <owner>...


 dell'XML in, per esempio, HTML.
Si, da parte di un server web dotato di un motore XML, pero'. :)
Non avendo un server web, si possono usare tool come eXtrans, che con
suoi file di configurazione puo' convertire in qualsiasi formato, ASCII
o query SQL per ficcare in un DB.
Per chi e' curioso, consiglio un salto ad "
http://www.w3schools.com
".
Tra l'altro, per entrare nel merito del DTD proposto (che gia' stanno
pensando di sostituire con dei cosi chiamati Scheme), il sito di cui
sopra suggerisce di limitare l'uso degli attributi di un tag per
riferimenti interni del codice XML, non per contenere dati. Il motivo
principale, che condivido, e' che processare i tag e' piu' semplice che
non processare gli attributi di un tag.
Espandere poi la data in tre tag mi sembra il minimo. :)
Considerazione personale: mi piace ma a farlo a mano mi sa che ci si
intrecciano gli occhi facile. Sarebbe molto d'aiuto una pagina PHP che
permettesse l'input in maniera semplificata, generando poi da se l'XML.
Nel frattempo, comunque, compilo la lista nel formato Gifagra V1.0. :)
	stilatamente,
	   Cthulhu
-- 
       Ph'nglui mglw'nafh Cthulhu 
http://www.rlyeh.it
 wgah'nagl fhtgan!
		        <cthulhu at rlyeh dot it>

 permettesse l'input in maniera semplificata, generando poi da se l'XML.
Tutto lavoro che qualcuno dovrebbe fare, mentre esistono gia` degli
editor XML:
http://www.leanedit.de/
http://www.merlotxml.org/
http://213.25.227.147/en/treenotes/index.jsp
http://gexml.cx/
Rimane comunque il vantaggio di poterlo leggere e modificare con quasiasi
editor ASCII.
D'altra parte, quale formato alternativo proporresti?


 D'altra parte, quale formato alternativo proporresti?
Alternativo all'XML? Nessuno!
Lo ritengo senz'altro migliore del formato Gifagra V1.0, tuttavia
ribadisco che non avendo tempo per poter poi partecipare anche al lato
pratico della faccenda, mi limito a fare un po' il Mugghini della
situazione. :)
	indubbiamente,


 BTW, prova pure epcEdit (lo trovi da FreshMeat).
Cercato, ma non trovato.


 Cercato, ma non trovato.
http://www.tksgml.de/
Ho dato un occhiata al tuo DTD.
Dopo qualche tentativo di rappresentare graficamente la cosa, ho
rinunciato!
Hai creato una cosa ricorsivamente autoreferenziante! :)
Prima dell'XML, deve venire la struttura dei dati, che prendendo spunto
dalla tua, esce fuori cosi':
hw-part ---> machine ---+
                        |---> item ----+
             sw-part ---+              |---> retroentry
	                      owner ---+
Per associare un proprietario ad una "hw-part" o una "sw-part", sara'
necessario creare delle voci "machine" ed "item" concettualmente
comparabili a NULL, che si limiteranno ad incapsulare i dati dei livelli
precedenti.
La ramificazione profonda lascia la possibilita' di generare archivi e
cataloghi che non sono legati a persone.
Se questa necessita' proprio non la si prevede ne ora ne mai, l'albero
si semplifica notevolmente:
hw-part ---+
           |
sw-part ---+---> retroentry
           |
owner -----+
Questo pero' ci porta ad una serie di meta-considerazioni, la piu'
importante delle quali e' che ancora una volta abbiamo una visione
completamente diversa della faccenda e ancora una volta rischiamo di
intavolare un dibattito a due che poi si perdera' nel nulla.
Considerando che questa volta pero' faccio fatica a metterci anche una
parvenza di entusiasmo, il mio consiglio e': ignora i miei pensieri e
procedi. :)
	distortamente,


 intavolare un dibattito a due che poi si perdera' nel nulla.
Scusate se mi intrometto, ma mi sembra che per la seconda volta si stia
perdendo la strada .... non si puo' fare le cose semplici semplici terra a
terra ? Mica dobbiamo andare sulla luna :)))
Ciao.alberto.

 procedi. :)
Spero che l'entusiasmo non ti manchi perche` la proposta ti fa schifo, il
progetto non ti interessa o il Retrocomputing non sia piu` una tua
passione. 8-)
Deto questo: spero per oggi pomeriggio o per domani di postare una nuova
versione.


 a terra ? Mica dobbiamo andare sulla luna :)))
E` quello che tento di fare, ma nessuno mi ha dato una risposta a
proposito!


 proposito!
Parere personale: secondo me si discute tanto ed alla fine si arriva a
niente come l'altra volta, perche senza iniziativa non si fa nulla. Se tu
Davide lo fai, e sicuramente non farai una ciofeca visto che sei un
professionista, una volta fatto lo si utilizzera' ed avremo qualcosa. Certo,
qualcuno non sara' daccordo, qualcuno critichera', ma la cosa sara' fatta,
altrimenti si gira intorno e siamo sempre al punto di partenza, con tante
belle idee ma nessun risultato.
Ciao.Alberto.

 e sicuramente non farai una ciofeca visto che sei un professionista
Piano: la mia professione e` scrivere PHP, HTML, CSS e JavaScript, ma
questo e` praticamente il mio primo XML!


 nessuno la utilizzera`. Ecco perche` vorrei almeno un minimo di feedback.
Per adesso non ho feedback... mi limito ad imparare l'XML dai tuoi
esempi :))
Ciao
-Guglielmo Cancelli
(per tutti gli interessati: la demo del "catalogo" e' quasi pronta,
manca solo un minimo di personalizzazione e RAM piu' idonea per il
server)

 terra ? Mica dobbiamo andare sulla luna :)))
Non e' colpa mia se riesco solo a concepire il meglio. |)
 
	difettatamente,


nessuno la utilizzera`. Ecco perche` vorrei almeno un minimo di feedback.
Parere spassionato.
Mettete su un database (MySQL ad es.), una maschera per l'inserimento,
una per la consultazione. Preparate una form da distribuire via mail
e impegnate qualcuno a popolare il db con le form compilate dai
singoli (ovvero, con un programmino riversa i dati in locale, quindi
li manda al db sul sito), cosi' uno ha due possibili modi di inviare
i dati.
Parallelamente, si puo' discutere sulle finezze della struttura del
sito e degli effetti speciali, pero' intanto qualcosa di concreto
sara' cmq disponibile.
Quindi, 
passo 1: individuare sito e referenti|responsabili;
passo 2: definire i campi indispensabili|utili|necessari;
passo 3: prima implementazione e test;
passo 4: implementazione "finale" e inserimento dati.
-- 
ciriciao from kirone
... e Blue Ribbons a tutti

 impegnate qualcuno a popolare il db con le form compilate dai singoli
Questa era l'idea originale: troppo lavoro e non se ne e` fatto niente.
Mi impegno comunque a produrre un template per l'XML (per quanto
possibile) per semplificare l'inserimento.


 possibile) per semplificare l'inserimento.
Quello fa sempre comodo per il futuro :)
Ciao
-Guglielmo Cancelli

 passione. 8-)
Noo, bisogna scendere ancora piu' in fondo, tutti tranquilli che i miei
VAX da qui non se schiodano. :)
	delusamente,


 Se ne sta facendo... chiedo solo un minimo di pazienza...
Parlavo dell'indea venuta fuori qualche mese fa.
