richiesta. Tale elemento ha un singolo attributo “version”, il quale contiene un valore rappresentante la versione del verbo interessato.
• “text/html”: utilizzato in genere nelle risposte alle richieste rivolte all’UI Service (e sono utilizzate per il rendering da un browser).
Altri tipi specifici come ad esempio “application/postscript” e “image/gif”
sono riservati per la disseminazione dei rispettivi oggetti digitali.
5. CODICI DI STATO
I codici di stato ed errore corrispondono a quelli delle risposte HTTP.
Una corretta risposta OLP è rappresentata dal codice 200. Gli errori sono segnalati dall’appropriato codice 4xx o 5xx come specificato dal protocollo HTTP:
• “400” – richiesta OLP mal formattata; ad esempio argomenti non validi o valori per essi non accettabili.
• “401” – se il client non è autorizzato a porre la richiesta.
• “404” – se il documento specificato nella richiesta del Repository Service non è presente nel Repository.
• “415” – se il formato, la codifica, o il binder richiesti per un documento non sono disponibili o non possono essere generati.
• “501” – se l’OLP Service, il verbo, o la versione non sono supportati dal Server.
• “503” – se il Server è capace di generare automaticamente il Content-Type richiesto, ma non ha una copia disponibile e non è in grado di mantenere una connessione per generarlo, in tal caso viene restituito il codice di stato HTTP 503 (Service Unavailable) con un header di tipo Retry-After opportuno.
Ad ogni errore restituito, la HTTP error-message con il codice corrispondente è accompagnata da informazioni utili all’utente.
6. DATE
Tutte le date nelle richieste e risposte del protocollo sono decodificate utilizzando la “Complete date”, variante dell’ISO8601. Questo formato si presenta come CCYY-MM-DD, dove CC è il centenario, YY l’anno, MM il mese dell’anno, compreso fra 01 (gennaio) e 12 (dicembre), e DD è il giorno del mese compreso tra 01 e 31.
7. VERBI INFORMATIVI DEI SERVIZI
Ogni servizio OpenDLib implementa tre verbi preposti alla divulgazione delle informazioni riguardanti il servizio stesso ai restanti componenti dell’architettura: Identify, ListVerbs e DescribeVerb. Questi vengono definiti
“Service Information Verbs”.
• Identify: restituisce il nome del servizio e tutte le altre informazioni specifiche dello stesso.
• ListVerbs: restituisce i nomi di tutti i Verbi appartenenti al servizio.
• DescribeVerb: necessita del nome di un Verbo del servizio come input, e ne restituisce la sintassi.
Tali Verbi sono stati implementati in modo da consentire ad ogni servizio di “presentarsi” agli altri o a chiunque possa volerlo utilizzare. Essi sono pensati per una maggior flessibilità e riusabilità dell’architettura.
UI Service
Login Collection Space
Search
Browse
View Document UI_User
(from Bus ines s Actors)...)
Customize
Render Object Call Method
OLP_Service (from Bus iness Actors )...)
UI_Administrator (from Bus ines s Actors)...) UI_Environment_
Service
(from Business Actors )...) UI_User_Servic e (from Bus iness Actors)...)
Install Services
Update/Deploy Objects
Design Objects UI_Object_Servic
e (from Bus iness Actors)...)
< <uses>>
<<uses>>
UI_Designer (from Business Actors )...) Design Templates
UI_Service (from Business Ac to...
Render Page
<<include>>
: UI_User : UI_Service Page Template
: UI_Object_Service
Object Template
: OLP_Service :
UI_Environment_Service : UI_User_Service 1: requestPage(user,page,environment,profile)
2: [pageTemplate.exists == "true"]/parseTemplate(page, environment, profile)
3: templateHasObjects(page)/requestObject(template)
4: [objectTemplate.exists == "true"]/parseObject()
5: objectMapOLPService(service)/callServiceMethod(...)
6: [defaultParams.environment == "false"]/getEnvParams(environment)
7: [defaultParams.profile == "false"]/getProfileParams(user, profile)
<<objects>>
<<page>>
Figura 17 : UI Service
Il modello da una idea dei casi d’uso possibili e delle macro interazioni fra gli Attori fondamentali dell’architettura che stiamo descrivendo.
Un utente qualsiasi, ha una visione della biblioteca a livello di Macro Attività (Login, Search, Browse, ecc…); ne abbiamo individuato le fondamentali nel diagramma. Si osservi che l’unico servizio a gestire l’interazione con l’utente è l’UI, mentre gli altri si occupano esclusivamente della logica di interazione con i restanti servizi della biblioteca digitale.
In un ottica in cui volessimo suddividere i compiti per la gestione della parte utente in tre categorie distinte:
• Controllo: la parte che si occupa della diretta interazione con l’utente e verifica la validità dei dati.
• Modello: la parte che si occupa della logica necessaria allo svolgimento della funzionalità richiesta, ovvero la parte che scompone la macro attività in chiamate di servizio più semplici e ne gestisce lo svolgimento.
• Vista: la parte che si occupa della presentazione dei risultati all’utente.
Potremmo identificare l’UI Service come componente fondamentale della parte Controllo, l’Object Service come componente della parte Modello, mentre l’Environment e lo User Service come componenti della parte Vista.
Il diagramma di sequenza mostra l’interazione fra i componenti descritti.
La convenzione notazionale utilizzata è la seguente:
evento(parametri_evento)[condizione]/azione(parametri_azione)
Nel Business Object Model è rappresentato un diagramma di interazione delle classi, e nell’Analisys Model vedremo il dettaglio realizzativo di alcuni casi d’uso, in particolare quello riguardante la Visualizzazione del Documento, la cui struttura rappresenta un aspetto caratterizzante dell’Architettura OpenDLib, di cui verrà data una descrizione esplicita e dettagliata.
Install Service Deploy ing
Populate
<<inc lude>>
<<include>>
<<include>>
Update Service Update Objects
Update Env ironments
Update Profiles
Deploy Objec t
Implement Object
<<extend>>
Implement Env ironment
Implement Profile
<<include>>
<<include>>
Configuration
Administrator
UI_Adminis trator (from Business Acto...
Figura 18 : Administrator
Designer
Design Template
UI_Designer (from Business Actors)
Design Object Write Template
Write Object Template
Update Template
Update Object Template
<<extend>>
<<extend>>
Object/Serv ice Properties
Object Env ironments
Object Prof iles
<<include>>
<<include>>
<<include>>
Page/Activ ity Properties
Viewer Env ironments
Viewer Prof iles
<<include>>
<<include>>
<<include>>
Figura 19 : Designer
User
Request Page
UI_User (from Business Actors)
Customize (f rom UI Serv ice)
Modify Page Design
Add/Remove Elements Modify Objects Design
<<extend>> <<extend>>
<<extend>>
Save Changes Update Profile
<<include>>
Figura 20 : User
Business Object-Model
OLP Server base_url capacity
Region
nameoptimalConfiguration Configuration
alternatives OpenDLib
Architecture name
OLP Service serviceTypeInfo server_url verbsInfo protocolVersion useRestrictions textualDescription submissionProcedure harvestingProcedure managerServiceURL adminEMail usedServiceTypes Identify() DescribeVerb() ListVerbs()
comprises has services
Meta has meta
Template pageName profile environment objects UI Service
environment profile new() DESTROY() LoadProtocol() GetIdentifyInfo() ShowHome() Load() ParseTemplate() GetObject()
Object Service environment profile new() DESTROY() LoadProtocol() GetIdentifyInfo() ParseObject() MapOLPService()
ObjectTemplate serviceType profile environment
Profile profileSettings User Service userprofile new() DESTROY() GetProfile() SetProfile() LoadProfile()
<<uses>>
Environment envSettings envType Environment Service environment new() DESTROY() GetEnvironment() SetEnvironment() LoadEnvironment()
<<uses>>
Business Obj ect Model
Il diagramma delle Classi a livello Business Object, quindi ancora ad un livello di astrazione abbastanza elevato, evidenzia alcune delle fondamentali proprietà e funzioni di alcuni degli Attori fondamentali dell’architettura. In particolare osserviamo la schematizzazione concettuale di una Architettura OpenDLib costituita da istanze di servizio, ma attive solo quelle che rispettano alcuni criteri di ottimizzazione stabiliti dalla Regione.
Da notare inoltre come l’Environment Service e lo User Service abbiano delle funzionalità quasi esclusivamente orientate alla gestione delle entità Profile ed Environment, e come l’UI Service invece dipenda in maniera molto forte dall’Object Service per mezzo delle entità Template ed Object Template.
Per il prosieguo dell’analisi, prenderemo ora in esame un caso specifico, ovvero la Visualizzazione del Documento, fino all’implementazione di un prototipo.
Particolare attenzione sarà posta in questa fase sull’OpenDLib Document Model, che evidenzia le caratteristiche peculiari di un documento digitale gestito da una biblioteca digitale di Seconda Generazione, e tutte le problematiche che la sua rappresentazione comporta.
Vediamo dapprima una panoramica a livello Business Object della Macro Attività, per avere un’idea delle Entità con cui avremo a che fare maggiormente e per differenziare le funzionalità e gli oggetti visti dall’utente da quelle viste dall’UI Service. Da questo partiremo per specializzare i casi d’uso ed i modelli di analisi logica e di dettaglio.
User
Query Mediator Select Document
Documents List
Search Document
<<extend>>
Document Visualizzation
Document Version View
<<extend>>
Document Overview
Parse Manifestation
Manifestation Document Views Structure
Document View
Repository
Figura 21 : Document Visualizzation (Business Object Model)
La specializzazione del caso d’uso mostrata nel diagramma, presuppone la ricerca del documento per mezzo del Query Mediator Service. La ricerca produrrà presumibilmente una lista di documenti possibili, tra cui scegliere.
Per prima cosa la scelta di un documento da visualizzare non dovrebbe causare la perdita dei risultati ottenuti dalla ricerca. Secondo notiamo come il documento in realtà sia una Entità complessa composta da diverse Entità elementari quali le Viste del documento e le Manifestazioni. Quindi un Documento può essere consultato nella completezza della sua struttura, analizzandone una singola Vista o Manifestazione.
Tale struttura evidenzia le caratteristiche principali di un Documento OpenDLib, della quale ora forniamo le specifiche, onde comprendere più approfonditamente le peculiarità e gli attributi di tali Entità.
OpenDLib Document Model (DoMDL)
La struttura dei documenti che generalmente popolano lo spazio informativo delle biblioteche digitali, sono di solito molto differenti. Per esempio una biblioteca digitale per i procedimenti di conferenze può contenere documenti (i procedimenti) che sono a loro volta aggregati di altri documenti.
Ogni articolo può essere distribuito in diversi modi. Per esempio può essere distribuito sia in forma testuale semplice che in post-script o addirittura come video in formato MPEG3. Una biblioteca digitale per documenti tecnici di progetto invece potrebbe avere una struttura completamente diversa. Per esempio tali documenti potrebbero essere dei rapporti testuali suddivisi in varie sezioni più le demo dei vari prototipi.
Diverse biblioteche digitali possono a loro volta supportare differenti tipi di metadati. Una biblioteca digitale che intende mantenere la generalità del servizio a prescindere, ma nel rispetto, dello spazio informativo sottostante, deve pertanto essere in grado di supportare vari tipi di organizzazione dell’informazione, nonché una grande varietà di tipologie di documenti e formati metadati descrittivi diversi.
Il Modello di Documento di OpenDLib (DoMDL) viene incontro a tali esigenze. Questi infatti può essere personalizzato all’avvio del sistema sì da rappresentare la specifica struttura dei documenti dell’applicazione ed i loro rispettivi formati metadati descrittivi.
DoMDL distingue quattro aspetti fondamentali per la modellazione del documento, ognuno dei quali può essere visto come un determinato tipo di Entità: Documento, Versione, Vista e Manifestazione.
Figura 22 : OpenDLib Document Model
Nella figura le relazioni “Has_Versions”, “Has_Views” e
“Has_Manifestations” collegano i differenti aspetti del Documento. Notare che tali relazioni sono multiple, cioè possono esserci diversi oggetti connessi ad uno stesso oggetto del dominio. Ciò significa che possiamo avere diverse versioni dello stesso Documento, più Viste della stessa Versione e più Manifestazioni della stessa Vista.
Le Versioni e le Viste possono essere descritte da uno o più metadati in diversi dormati. Tali metadati sono accessibili per mezzo delle relazioni
“Version_Metadata” e “View_Metadata”.
Ognuna delle Entità menzionate ha un insieme di attributi che modellano le proprietà del rispettivo aspetto del Documento.
Documento
L’Entità Documento, rappresenta l’aspetto più generale di un documento, ovvero il Documento come una ben distinta concezione astratta. Ad esempio un articolo, o un libro, o un report. Ogni Entità di questo tipo è referenziata da
un URN (Unified Resource Name). Diversamente dall’URL, un URN è indipendente dalla locazione.
Versione
Una Versione rappresenta una specifica edizione del Documento. Ad esempio la versione preliminare e la pubblicazione del ‘99 di un certo documento, sono diverse Versioni dello stesso Documento. Le Versioni sono lineari e consecutive, rappresentate da numeri interi. La prima versione è la numero 1 e le successive sono la 2, la 3 e così via.
Vista
Una Vista modella la specifica espressione di una data edizione del dato Documento. La Vista prescinde dagli aspetti fisici del Documento, i quali non fanno parte della percezione astratta dello stesso. Una edizione di un Documento può essere percepita attraverso una o più viste. Per fare un esempio pratico, la versione originale dei procedimenti della conferenza ECDL
’99, possono essere riorganizzati in quattro ben distinte tipologie di Vista:
a) una Vista testuale strutturata, contenente una prefazione ed un indice degli argomenti presentati alla conferenza.
b) una Vista testuale strutturata in sessioni tematiche, dove ogni tematica contiene i documenti presentati durante le varie sessioni
c) una Vista delle presentazioni, contenente tutte le slides presentate alla conferenza
d) una Vista dei Metadati, contenente le descrizioni strutturali dei procedimenti.
L’Entità Vista, è specializzata in due sotto-entità: Metadata e Content.
La Vista percepisce una determinata Versione del Documento attraverso la concettualizzazione delle rappresentazioni dei suoi Metadati. Questi possono essere semplicemente un elenco di coppie di parametri (campi, valori), come ad esempio i records Dublin Core, o strutture concettuali più complesse come la IFLA-FRBR. Tipicamente questi sono utilizzati per ricerche
sui campi (Titolo, Autore, ecc…), ma possono avere anche diversi utilizzi, come ad esempio la distribuzione schematica su apparecchi mobili.
Il Content rappresenta invece la vista, appunto, del contenuto del Documento.
Figura 23 : Document View
L’Entità Body rappresenta una visione del Documento come singola Vista nella sua totalità o come aggregato di altre Viste. Ad esempio un certo Documento potrebbe avere una descrizione testuale composta dall’aggregazione delle varie descrizioni testuali delle sue Viste. Niente vieta che talune Viste di tale aggregazione possano essere distribuite da altre biblioteche digitali e non necessariamente dalla medesima.
La relazione “Has_Parts” mantiene la connessione fra la visione completa del Body e delle sue singole Componenti. La relazione “Next” invece indica l’ordinamento fra le varie parti del Contenuto, qualora ve ne sia uno.
Il Body può a sua volta essere specializzato in ulteriori sotto-viste, come indicato dalla relazione “Is_Specialized_By”.
Un’Entità Reference rappresenta una Vista registrata ma non esplicitamente memorizzata nell’attuale Repository. È stata introdotta per evitare duplicati di record. Tale Vista può essere utilizzata ad esempio quando vengono aggiornate solo alcune sotto-viste di un Documento composto. In tal
caso la nuova versione del Documento non deve necessariamente memorizzare anche le vecchie Viste non aggiornate, ma solo I riferimenti ad esse. La relazione “Is_An_Image_Of” sta ad indicare questo particolare aspetto.
Manifestzione
Una Manifestazione modella il formato fisico per mezzo del quale un Documento è distribuito. Esempi di Manifestazioni sono: file MPEG contenenti registrazioni audio e video, file AVI, file post-script e così via.
Use-Case Modeling
Questa fase della modellazione presenta i diagrammi relativi a tutti gli Attori ed a tutti i Casi d’Uso “concreti”, ovvero tutti quelli direttamente “istanziabili”.
In questa sede prenderemo in esame la struttura logico-fisica dei servizi precedentemente citati relativamente all’interfaccia utente, e come caso d’uso specifico la visualizzazione e consultazione di un Documento di OpenDLib.
La trattazione fa riferimento alla progettazione dei servizi UI Service, ObjectService, EnvironmentService, UserService come possibile espansione di una Architettura OpenDLib attualmente esistente, denominata “Scholnet”[Rif-33], per le cui specifiche si rimanda al documento “D2.2.1 - Global System Architecture Report V2” (Gennaio 2002)[Rif-34].
Non verrà riportato in questa sede il dettaglio dell’architettura, in quanto già ampiamente esposti i concetti di una Architettura OpenDLib nei precedenti paragrafi ed in quanto consultabile direttamente dal documento di specifica di cui sopra.
Actors
Use Cases
Figura 24 : Use-Case Modeling
Use-Case Actors
UIService
(f rom Actors)
ObjectService
(f rom Actors)
ProfileService
(f rom Actors)
EnvironmentService
(f rom Actors)
RepositoryService
(f rom Actors)
BrowseService
(f rom Actors)
RegistryService
(f rom Actors)
QueryMediatorService
(f rom Actors)
Actors
Figura 25 : Logical-View Actors
System Use-Cases
Architecturally Significant Use-Cases
UIService (from Actors)
Load Template
Collections
New User Register User
Advanced Simple
Config
Query
Details
Remove Add
Info Space
<<extend>>
<<extend>>
Overview
Views Preview
Manifestations
<<include>>
Single-Type Manifestation Multiple-Type Manifestation ObjectService
(from Actors)
EnvironmentService (from Actors) Object Configuration
ProfileService (from Actors) Object Parameters
BrowseService (from Actors) Browse
(from UI Serv i...
<<extend>>
<<extend>>
RegistryService (from Actors) Authentication
<<extend>> <<extend>>
QueryMediatorService (from Actors)
Search (from UI Servi...
<<extend>>
<<extend>>
RepositoryService (from Actors) Document View
<<include>>
<<include>> <<include>>
Figura 26 : Logical-View Use-Cases
Logical View Analysis Model UI Service
_UIService CONFIG_FILE PROTOCOL_FILE ERROR
WARN LOG VERSION new() DESTROY() LoadProtocol() GetIdentifyInfo() Identify() ListVerbs() DescribeVerb() ShowHome() Load()
Figura 27 : UI Service - Detailed Class Diagram
Una User Interface fornisce le funzionalità di front-end della Architettura OpenDLib. Non solo implementa il framework necessario per la costruzione di interfacce amichevoli per la presentazione dei servizi offerti, ma anche per l’input dell’utente.
Stato
In questa sezione vengono descritte le strutture dati astratte gestite dall’UI Service.
Template
Un Template rappresenta la descrizione formale di una pagina di interfaccia.
Esso è scritto in formalismo XML con degli adeguati TAG che consentono al servizio di accedere in maniera opportuna alla biblioteca digitale oltre che di adeguare la rappresentazione delle pagine al Client ed all’utente connessi.
Ogni Template è costituito da:
1 TAG <window>, che rappresenta la descrizione formale della pagina nella sua globalità, ed imposta il tipo di environment del cliente.
1…n TAG <box>, che rappresentano la descrizione formale delle sotto-finestre costituenti una <window>. I rispettivi attributi consentono di stabilire se essi sono ridimensionabili, spostabili, nascondibili ecc…
1…n TAG <object:type>, i quali consentono il rendering di uno specifico Oggetto all’interno dei Box. Un Oggetto costituisce l’interfaccia di un servizio dell’architettura.
1…n TAG <widget:type>, i quali consentono la rappresentazione di oggetti quali list-box, combo-box, menù, scrollbars, helpers, ecc… all’interno di un Box.
Window
Attribute Costraint Type Value Note
name mandatory String Nome dell’elemento Id mandatory String Id dell’elemento, può
coincidere con il nome
env_type mandatory String Tipo di Environment del cliente
env_id mandatory Integer Id dell’Environment del cliente
version optional String Versione della pagina style mandatory String color
position dimension borders
Impostazioni di Profilo dell’elemento
Box
Attribute Costraint Type Value Note
name mandatory String Nome dell’elemento id mandatory String Id dell’elemento, può
coincidere con il nome style mandatory String color
position dimension borders
Impostazioni di Profilo dell’elemento
visibile optional Boolean Specifica se l’elemento è visibile o
meno
Object:Type
Attribute Costraint Type Value Note
name mandatory String Nome dell’elemento id mandatory String Id dell’elemento, può
coincidere con il nome
version optional String Versione dell’Oggetto style mandatory String color
position dimension borders
Impostazioni di Profilo dell’elemento
visibile optional Boolean Element Costraint
param mandatory
Attribute Costraint Type Value Note
name mandatory String Specifico del tipo dell’Oggetto
id optional String
value mandatory String Valore del parametro, specifico per l’Oggetto href optional String Se il valore è fornito
da un servizio esterno
Esempio:
<?xml version="1.0" encoding="UTF-8"?>
<window name="" id="" env_type="" env_id="" version="" style="">
<box name="" id="" style="" visible="">
<widget:statusBar name="" id="" style="" visible=""/>
<object:DocumentOverview name="" id="" style="" visible="">
<param name="Title" id="" value="" href=""/>
<param name="handle" id="" value="" href=""/>
<param name="version" id="" value="" href=""/>
…
</object:DocumentOverview>
</box>
…
</window>
UI Verbs
In questa sezione vengono esposti i Verbi dell’UI Service. Essi sono suddivisi in due sottoinsiemi: Verbi Informativi, Verbi Specifici come riportato nella seguente tabella:
Service Information Verbs Service Specific Verbs
Identify ShowHome ListVerbs Load
DescribeVerb
Identify
Version: 0.0 Fixed Args: none Optional Args: none
Return MIME Type: text/xml
Return Status Codes: 200, 400, 501
Restituisce una risposta strutturata contenente il nome ed altre informazioni riguardanti il servizio.
Esempio di richiesta:
/OLP/UI/1.0/Identify
Esempio di risposta:
<?xml version="1.0" encoding="UTF-8"?>
<Identify version="0.0">
<serviceName>Experimental OLP UI Server</serviceName>
<olp_base_url>http://labserv.iei.pi.cnr.it:8119</olp_base_url>
<metaServiceURL>http://labserv.iei.pi.cnr.it:8221</metaServiceURL>
<textualDescription/>
<protocolVersion>1.0</protocolVersion>
<adminEmail>[email protected]</adminEmail>
<verbsInfo>
<verbsSupported>
<description> </description>
<olp_base_url>http://labserv.iei.pi.cnr.it:8119/OLP/UI/0.0/ListVerbs</olp_base_url>
</verbsSupported>
<verbsDescription>
<description> </description>
<olp_base_url>http://…:8119/OLP/UI/0.0/DescribeVerb/DescribeVerb</olp_base_url>
</verbsDescription>
</verbsInfo>
<useRestrictions>Terms and conditions are provided with each document.</useRestrictions>
<documentStructure>
<description>
The UI Service manages documents in accordance with the DoMDL document model.
This logical document model is instantiated in the protocol as reported in the sms dtd .
</description>
<olp_base_url>http://labserv.iei.pi.cnr.it:8119/OLP/htdocs/domdl.html</olp_base_url>
<olp_dtd_url>http://labserv.iei.pi.cnr.it:8119/OLP/htdocs/DTD/sms.dtd</olp_dtd_url>
</documentStructure>
<templateStructure>
<description>
The UI Service manages termplates in accordance with Template model.
This logical template model is instantiated in the protocol as reported in the tmpl dtd .
</description>
<olp_base_url>http://labserv.iei.pi.cnr.it:8119/OLP/htdocs/template.html</olp_base_url>
<olp_dtd_url>http://labserv.iei.pi.cnr.it:8119/OLP/htdocs/DTD/tmpl.dtd</olp_dtd_url>
</templateStructure>
</Identify>
ListVerbs
Version: 0.0 Fixed Args: none Optional Args: none
Return MIME Type: text/xml
Return Status Codes: 200, 400, 501
Restituisce una risposta strutturata contenente i nomi dei Verbi nel servizio.
Esempio di richiesta:
/OLP/UI/0.0/ListVerbs
Esempio di risposta:
<?xml version="1.0" encoding="UTF-8"?>
<ListVerbs version="0.0">
<verb>DescribeVerb</verb>
<verb>Identify</verb>
<verb>ListVerbs</verb>
<verb>Load</verb>
<verb>ShowHome</verb>
</ListVerbs>
DescribeVerb
Version: 0.0 Fixed Args: verb
Optional Args: version Return MIME Type: text/xml
Return Status Codes: 200, 400, 501
Restituisce una risposta strutturata contenente un lista in cui ogni elemento costituisce una informazione sulla versione del verbo specificato supportato dal servizio. Le seguenti informazioni possono essere fornite a livello di Verbo o Versione:
• description, descrizione del verbo o della specifica versione
• note, informazioni aggiuntive pertinenti il verbo o la specifica versione Ogni elemento della lista contiene le seguenti informazioni:
• version, numero di versione del verbo
• arguments, una lista dei nomi degli argomenti fixed ed optional, se esistono, accettai dal verbo nell’attuale versione
• example, modello di richiesta sul servizio, con gli argomenti fixed indicati fra parentesi
• returns, opzioanale, contiene informazioni sul formato della risposta del verbo
Notare che un servizio può implementare più di una versione di un verbo.
Esempio di richiesta:
/OLP/UI/1.0/DescribeVerb/Identify
Esempio di risposta:
<?xml version="1.0" encoding="UTF-8"?>
<DescribeVerb version="0.0">
<verb name="Identify">
<description>
Returns a structured response containing the name and other information about the service.
</description>
<versions>
<version id="0.0">
<example>
<handle>http://../OLP/UI/0.0/Identify/</handle>
</example>
<arguments>
<optional>
<arg name="version"/>
</optional>
</arguments>
</version>
<version id="2.0">
<note>Deprecated</note>
<example>
<handle>http://../OLP/UI/2.0/Identify/</handle>
</example>
</version>
</versions>
</verb>
</DescribeVerb>
ShowHome
Version: 0.0 Fixed Args: none Optional Args: none
Return MIME Type: text/html
Return Status Codes: 200, 400, 501
Restituisce una risposta HTML rappresentante la pagina di partenza dell’interfaccia utente.
Esempio di richiesta:
/OLP/UI/0.0/ShowHome
Esempio di risposta:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>OpenDLib - UI</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="/ODLUI/css/style.css" rel="stylesheet" type="text/css">
<!-- static styles for menu #1-->
<link rel="stylesheet" href="/ODLUI/css/menu1.css">
<!-- static styles for menu #2-->
<link rel="stylesheet" href="/ODLUI/css/menu2.css">
<!-- static styles for menu #3-->
<link rel="stylesheet" href="/ODLUI/css/menu3.css">
</head>
<body bgproperties="fixed">
<base target="document_area">
<!-- Header -->
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="350" rowspan="2"><img src="/ODLUI/img/ODL_LogoColor.gif" width="100" height="50" border="0"
alt="OpenDLib logo"></td>
<td align="right" valign="top" ></td>
</tr>
<tr>
<td align="right" valign="bottom" nowrap>
<b>
| <a href="/ODLUI/index.html" target="_top">About Us</a>
| <a href="/ODLUI/services.html" target="_top">Services</a>
| <a href="/ODLUI/download.html" target="_top">Download</a>
| <a href="/ODLUI/order.html" target="_top">Order</a>
| <a href="/ODLUI/support.html" target="_top">Support</a>
| </b>
</td>
</tr>
<tr><td><img src="" width="1" height="5" border="0"></td></tr>
</table>
<!-- /Header -->
<!-- Body -->
<table width="100%" height="500" border="0" cellpadding="0" cellspacing="0" bgcolor="#4682B4">
<tr>
<td valign="top" width="157" height="100%" background="/ODLUI/img/sfera.gif">
</td>
<td valign="top" bgcolor="#FFFFFF" width="610" height="100%">
<IFRAME name="document_area" SRC="/ODLUI/home.html" border="0" width="100%" height="100%" >
If you can see this, your browser doesn't understand IFRAME. </IFRAME>
</td>
</tr>
</table>
</td>
<!-- /Body -->
<!-- Footer -->
<table cellpadding="3" cellspacing="0" width="100%" border="0">
<tr bgcolor="#4682B4">
<td nowrap><font color="white">Copyright ©2003 ISTI - CNR</font></td>
<td align="right"><a href="mailto:[email protected]" style="color: #FFFFFF;">[email protected]</a></td>
</tr>
</table>
<!-- /Footer -->
<script language="JavaScript" src="/ODLUI/js/menu.js"></script>
<script language="JavaScript" src="/ODLUI/js/menu_tpl3.js"></script>
<script language="JavaScript">
var session_id = "[+ $param[1]->getID() +]";
/* --- menu items --- */
var MENU_ITEMS = [
['Home', "/ODLUI/home.html" ],
['Community', "/OLP/UI/1.0/Load/login/[+ $param[1]->getID() +]" ],
['Information space', "/OLP/UI/1.0/Load/info_space/[+ $param[1]->getID() +]?opt=a" ], ['Search', "/OLP/UI/1.0/Load/search/[+ $param[1]->getID() +]" ],
['Browse', "/OLP/UI/1.0/Load/browse/[+ $param[1]->getID() +]" ], ];
/* --- menu generation ---*/
new menu (MENU_ITEMS, MENU_POS3, MENU_STYLES3);
</script>
</body>
</html>
Load
Version: 0.0 Fixed Args: page
Optional Args: options Return MIME Type: text/html
Return Status Codes: 200, 400, 501
Restituisce una risposta HTML rappresentante la pagina indicata come argomento. La pagina viene generata dal verbo a partire da un Template.
Esempio di richiesta:
/OLP/UI/0.0/Load/DocumentOverview?session=123456&handle=scholnet.test/2002-test-002&ver=1
Esempio di risposta:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="./css/frame.css" rel="stylesheet" type="text/css">
<style type="text/css">
#divManifestations{visibility:hidden}
</style>
<style type="text/css">
.clWin{position:absolute; z-index:2; visibility:hidden; overflow:hidden; background-color:blue}
.clWindow{position:absolute; background-color:blue; overflow:hidden; z-index:15; width:200}
.clWinHead{position:absolute; width:200; top:0; font-family:arial,arial,helvetica; font-size:11px; font-weight:bold; color:white; background-color:transparent}
.clText{position:absolute; z-index:50; font-family:arial,helvetica; font-size:11px; background-color:transparent}
.clWinResize{position:absolute; z-index:30; width:30; height:30; clip:rect(0,30,30,0); background-image:url('resize.gif'); layer-background-image:url(resize.gif)}
.clLogo{position:absolute}
.clUp{position:absolute; width:12; height:12; z-index:60;}
.clDown{position:absolute; width:12; height:12; z-index:60;}
.clWinButtons{position:absolute; font-family:arial,helvetica; font-size:12px}
</style>
<script language="JavaScript" type="text/javascript">
…
//**********************************************************************************************
//**********************************************************************************************
//*********************************** <Document Manifestations> *************************
//**********************************************************************************************
//**********************************************************************************************
//Set the text you want to display on mouseover here.
messages=new Array()
//document: scholnet.test/2002-test-002 - v.1
messages[0] = "<table border='0' cellpadding='1' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' width='99%' id='AutoNumber1'>"
+" <tr>"
+" <td width='10%' align='left' bgcolor='#DAE7D1'><b><font face='Arial' size='2'>"
+" <font color='#008080'>Doc.:</font></b></td>"
+" <td width='90%' align='left' bgcolor='#DAE7D1' colspan='4'><b><font face='Arial' size='2'> scholnet.test/2002-test-002</font></b></td>"
+" </tr>"
+" <tr>"
+" <td width='10%' align='left' bgcolor='#DAE7D1'><b><font face='Arial' size='2'>"
+" <font color='#008080'>ver:</font></b></td>"
+" <td width='90%' align='left' bgcolor='#DAE7D1' colspan='4'><b><font face='Arial' size='2'> 1</font></b></td>"
+" </tr>"
+" <tr>"
+" <td width='100%' align='left' colspan='5'><b><font face='Arial' size='1'>"
+" <font color='#008080'> </font></b></td>"
+" </tr>"
+" <tr>"
+" <td width='5%' align='center' bgcolor='#FFFFFF'><font face='Arial' size='2'><a href='#' onclick='changeText(111)'><img border='0' src='img/element-button-forward.gif' width='22' height='22'></a></font></td>"
+" <td width='20%' align='left' bgcolor='#FFFFFF'><font face='Arial' size='2'><a href='#' onclick='changeText(111)'>bibdata</a></font></td>"
+" <td width='35%' align='left' bgcolor='#FFFFFF'><font face='Arial' size='1'>Bibliographic record</font></td>"
+" <td width='20%' align='left' bgcolor='#FFFFFF'><font face='Arial' size='1'>metadata</font></td>"
+" <td width='20%' align='center' bgcolor='#FFFFFF'><font face='Arial' size='1'>0</font></td>"
+" </tr>"
+" <tr>"
+" <td width='5%' align='center' bgcolor='#DAE7D1'><font face='Arial' size='2'><a href='#' onclick='changeText(1)'><img border='0' src='img/element-button-forward.gif' width='22' height='22'></a></font></td>"
+" <td width='20%' align='left' bgcolor='#DAE7D1'><font face='Arial' size='2'><a href='#' onclick='changeText(1)'>body</a></font></td>"
+" <td width='35%' align='left' bgcolor='#DAE7D1'><font face='Arial' size='1'>The document itself</font></td>"
+" <td width='20%' align='left' bgcolor='#DAE7D1'><font face='Arial' size='1'>body</font></td>"
+" <td width='20%' align='center' bgcolor='#DAE7D1'><font face='Arial' size='1'>0</font></td>"
+" </tr>"
+"</table>"
//View: bibdata
messages[111] = "<table border='0' cellpadding='1' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' width='99%' id='AutoNumber1'>"
+" <tr>"
+" <td width='10%' align='left' bgcolor='#DAE7D1'><b><font face='Arial' size='2'>"
+" <font color='#008080'>View:</font></b></td>"
+" <td width='90%' align='left' bgcolor='#DAE7D1' colspan='4'><b><font face='Arial' size='2'> <a href='#' onclick='changeText(111)'>bibdata</a></font></b></td>"
+" </tr>"
+" <tr>"
+" <td width='10%' align='left' bgcolor='#DAE7D1'><b><font face='Arial' size='2'>"
+" <font color='#008080'>desc.:</font></b></td>"
+" <td width='90%' align='left' bgcolor='#DAE7D1' colspan='4'><b><font face='Arial' size='1'> Bibliographic record</font></b></td>"
+" </tr>"
+" <tr>"
+" <td width='100%' align='left' colspan='5'><b><font face='Arial' size='1'>"
+" <font color='#008080'> </font></b></td>"
+" </tr>"
+" <tr>"
…
//View: body > Part1
messages[81] = "<table border='0' cellpadding='1' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' width='99%' id='AutoNumber1'>"
+" <tr>"
+" <td width='10%' align='left' bgcolor='#DAE7D1'><b><font face='Arial' size='2'>"
+" <font color='#008080'>View:</font></b></td>"
+" <td width='90%' align='left' bgcolor='#DAE7D1' colspan='4'><b><font face='Arial' size='2'> <a href='#' onclick='changeText(1)'>body</a> >
<a href='#' onclick='changeText(81)'>Part1</a></font></b></td>"
+" </tr>"
+" <tr>"
+" <td width='10%' align='left' bgcolor='#DAE7D1'><b><font face='Arial' size='2'>"
+" <font color='#008080'>desc.:</font></b></td>"
+" <td width='90%' align='left' bgcolor='#DAE7D1' colspan='4'><b><font face='Arial' size='1'> TOC</font></b></td>"
+" </tr>"
+" <tr>"
+" <td width='100%' align='left' colspan='5'><b><font face='Arial' size='1'>"
+" <font color='#008080'> </font></b></td>"
+" </tr>"
+" <tr>"
…
+" </tr>"
+"</table>"
</script>
<script language="JavaScript" src="document.js"></script>
</head>
<p>
<b><font face="Arial Black" color="#9BCCCA">Document Overview</font></b>
</p>
<body>
<script>
win_init()
winpage=new lib_doc_size()
…
create_window(wins-1,10,185,560,200,"white","white")
</script>
</body>
</html>
Object Service
_ObjectService VERSION
ERROR WARN LOG USER SESSION new() DESTROY() LoadProtocol() GetIdentifyInfo() Identify() ListVerbs() DescribeVerb() LoadObject()
GetObjectEnvironment() SetObjectProfile() GetObjectProfile()
Figura 28 : Object Service - Detailed Class Diagram
Un Oggetto consente di interagire con un servizio o Funzionalità della biblioteca digitale. Ogni Oggetto è descritto da un modello strutturato in formalismo XML, che indica a quale servizio, Verbo e Versione tale Oggetto riferisce, quali parametri sono specificabili per esso, e come questi può essere rappresentato, sia in base alle possibilità fisiche del cliente (Environment) sia alle impostazioni di visualizzazione possibili specificate (Profile).
Stato
In questa sezione vengono descritte le strutture dati astratte gestite dall’Object Service.
Object-Template
Un Object-Template rappresenta la descrizione formale di un Oggetto di interfaccia. Esso è scritto in formalismo XML con degli adeguati TAG che consentono al servizio di accedere in maniera opportuna alla biblioteca digitale oltre che di adeguare la rappresentazione degli Oggetti al Client ed all’utente connessi.
Ogni Object-Template è costituito da:
1 TAG <object>, che rappresenta la descrizione formale dell’oggetto nella sua globalità.
1…n TAG <environments>, che rappresentano le possibili rappresentazioni dell’Oggetto in base allo specifico environment fisico.
1…n TAG <profiles>, che costituiscono l’insieme delle possibili proprietà di visualizzazione configurabili, attribuibili all’Oggetto. Nota: tali proprietà possono contenere anche degli insiemi di valori per esso; ad esempio un Oggetto che rappresenta il resultset salvato da un utente a seguito di un determinato criterio di ricerca, può prevedere talune proprietà indicanti i valori sia del criterio di ricerca che del resultset salvati. Tali valori non sono ovviamente specificati nell’Object-Template, ma attribuiti in fase di rendering alle opportune proprietà.
Object
Attribute Costraint Type Value Note
name mandatory String Nome dell’elemento id mandatory String Id dell’elemento type mandatory String Tipo dell’oggetto, può
coincidere con il nome, e rappresenta il servizio o la Funzionalità a cui si riferisce.
version mandatory String Versione dell’Oggetto Element Costraint
param mandatory
Attribute Costraint Type Value Note
name mandatory String
id optional String
Environments
Attribute Costraint Type Value Note
name mandatory String Nome dell’elemento id mandatory String Id dell’elemento
Element Costraint
environment mandatory
Attribute Costraint Type Value Note
name mandatory String Nome dell’Env.
id mandatory String Id dell’Env.
type mandatory String Tipo dell’Env.
version optional String Versione dell’Env.
Element Costraint
body mandatory
Profiles
Attribute Costraint Type Value Note
name mandatory String Nome dell’elemento id mandatory String Id dell’elemento
Element Costraint
profile mandatory
Attribute Costraint Type Value Note
name mandatory String Nome del Profilo id mandatory String Id del Profilo version optional String Versione del Profilo
Element Costraint
param mandatory
Attribute Costraint Type Value Note
name mandatory String
min optional Integer
max optional Integer
type optional String
Esempio:
<?xml version="1.0" encoding="UTF-8"?>
<object name="DocumentOverview"id="DCOW"type="Service"version="0.0">
<param name="session"id="session_id"/>
<param name="handle"/>
<param name="version"/>
<param name="DocumentArray"/>
<environments name="DCOW_ENV"id="DCOW_ENV">
<environment name="DCOW_HTML"id="BWS_5.5"type="HTML_3.0"version="1.0">
<body><![CDATA[
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="/ODLUI/css/document.css" rel="stylesheet" type="text/css">
<link href="/ODLUI/css/frame.css" rel="stylesheet" type="text/css">
<style type="text/css">
…
<script language="JavaScript">
<param name="DocumentArray">
<param name="handle"/>
<param name="version"/>
popMessages[0] = "Description of test link 0";
popMessages[1] = "Description of test link 1";
popMessages[2] = "Description of test link 2";
popMessages[3] = "Description of test link 3";
popMessages[4] = '<div class="clCaption">Your caption</div><br>Description of test link 4</div>';
</script>
</head>
<body>
…
</body>
</html>]]></body>
</environment>
</environments>
<profiles name="DCOW_PRF"id="DCOW_PRF">
<profile name="DCOW_USR1"id="TMP_001"version="0.0">
<param name="table"min="30"max="1024"/>
<param name="body-color"/>
<param name="background"/>
</profile>
</profiles>
</object>
Object Verbs
In questa sezione vengono esposti i Verbi dell’Object Service. Essi sono suddivisi in due sottoinsiemi: Verbi Informativi, Verbi Specifici come riportato nella seguente tabella:
Service Information Verbs Service Specific Verbs
Identify LoadObject ListVerbs
DescribeVerb
LoadObject
Version: 0.0
Fixed Args: object Optional Args: options Return MIME Type: text/html
Return Status Codes: 200, 400, 501
Restituisce l’output dell’Oggetto richiesto, nel formato specificato, in base alle impostazioni dell’Environment e del Profile.
Esempio di richiesta:
/OLP/Object/0.0/LoadObject/DocumentViews?handle=scholnet.test/2002-test-002&version=1
Esempio di risposta:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Views</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="/ODLUI/css/frame.css" rel="stylesheet" type="text/css">
<link href="/ODLUI/css/document.css" rel="stylesheet" type="text/css">
<style type="text/css">
/* styles for windows */
#divManifestations{visibility:hidden}
.clWin{position:absolute; z-index:2; visibility:hidden; overflow:hidden; background-color:blue}
.clWindow{position:absolute; background-color:blue; overflow:hidden; z-index:15; width:200}
.clWinHead{position:absolute; width:200; top:0; font-family:arial,arial,helvetica; font-size:11px; font-weight:bold; color:white;
background-color:transparent}
.clText{position:absolute; z-index:50; font-family:arial,helvetica; font-size:11px; background-color:transparent; width:100%;
height:100%}
.clWinResize{position:absolute; z-index:30; width:30; height:30; clip:rect(0,30,30,0); background- image:url(/ODLUI/img/resize.gif); layer-background-image:url(/ODLUI/img/resize.gif)}
.clLogo{position:absolute}
.clUp{position:absolute; width:12; height:12; z-index:60;}
.clDown{position:absolute; width:12; height:12; z-index:60;}
.clWinButtons{position:absolute; font-family:arial,helvetica; font-size:12px}
/* styles for the tree */
SPAN.TreeviewSpanArea A {font-size: 10pt; font-family: verdana,helvetica; text-decoration: none;color: black}
SPAN.TreeviewSpanArea A:hover {color: '#820082';}
TD {font-size: 10pt; font-family: verdana,helvetica;}
/* styles for mouse popup */
.clDescriptionCont {position:absolute; width:200px; visibility:hidden; layer-background-color:#cccccc; z-index:200;}
.clDescription {width:150px; left:0px; top:0px; font-family:verdana,arial,helvetica,sans-serif; overflow:hidden; border: 1px solid
#999999; padding:3px; font-size:11px; background-color:#cccccc; layer-background-color:#cccccc;}
.clLinks {position:absolute; left:100px; top:200px; z-index:1;}
.clCaption {position:absolute; left:0px; top:0px; width:157px; height:15px; clip:rect(0px 157px 15px 0px); font-size:11px;
font-family:verdana,arial,helvetica,sans-serif; background-color:#999999; layer-background-color:#999999;}
</style>
<!-- scripts include -->
<script language="JavaScript" src="/ODLUI/js/DocumentOverview.js"></script>
<script language="JavaScript" src="/ODLUI/js/bar.js"></script>
<script src="/ODLUI/js/ua.js"></script>
<script src="/ODLUI/js/ftiens4.js"></script>
<script language="JavaScript">
document_array[] = “…”;
popMessages[0] = "Description of test link 0";
popMessages[1] = "Description of test link 1";
popMessages[2] = "Description of test link 2";
popMessages[3] = "Description of test link 3";
popMessages[4] = '<div class="clCaption">Your caption</div><br>Description of test link 4</div>';
</script>
</head>
<body>
<script>document.write(messages[0]);</script>
<span class=TreeviewSpanArea>
<div style="position:absolute; top:0; left:0; visibility: hidden"><table border=0><tr><td><font size=-2><a style="font-size:7pt;text-decoration:none;color: silver" href="http://www.treemenu.net/"
target=_blank>JavaScript Tree Menu a</a></font></td></tr></table></div>
<!-- Build the browser's objects and display default view of the tree. -->
<script>initializeDocument()</script>
<noscript>
A tree for site navigation will open here if you enable JavaScript in your browser.
</noscript>
</span>
<script>
if(parent._endProgress){
parent.ProgressDestroy();
}
parent._endProgress = true;
</script>
</body>
</html>