Tipi di Attributo di Contenuto

Do It The jAPS Way

Andrea Dessì

Prima stesura del documento 
AgileTec S.r.l.

Alessandra Fadda

Revisione del documento 
AgileTec S.r.l.

Santoboni Eugenio

Seconda Revisione del documento 
AgileTec S.r.l.

Legal Notice

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the Appendix entitled "GNU Free Documentation License".

The copyright holders make no representation about the suitability of this Document for any purpose. It is provided «as is» without expressed or implied warranty. If you modify this Document in any way, identify your resulting Document as a variant of this Document.

2011-03-03

Diario delle Revisioni
Revisione 0.32011-03-03MEM

Revisione per il rilascio di jAPS 2.2.0

Revisione 0.22010-03-19MEM

Revisione per il rilascio di jAPS 2.0.10

Revisione 0.12009-07-09AD

Prima bozza

Revisione 0.22009-08-03AF

Revisione, pubblicazione seconda bozza

Revisione 0.32010-01-21ES

Seconda Revisione

Estratto

I Contenuti in jAPS si differenziano per struttura e sono organizzati in Tipi di Contenuto ciascuno dei quali esprime quali e quante informazioni avranno.

Per poter costituire i Tipi di Contenuto è necessario avere a disposizione diversi tipi di informazione gestibili dal sistema nelle loro forme base.

Entrano così in gioco i Tipi di Attributo di Contenuto ognuno con il compito di rappresentare l'informazione in una precisa forma.


Capitolo 1. Scopo del Documento

Introduzione

Questo documento illustrerà i Tipi di Attributo di Contenuto nel dettaglio delle caratteristiche e delle configurazioni guidando nella scelta e nell'utilizzo.

Target audience

La lettura è consigliata a chi sta effettuando lo studio dell'informazione per un nuovo portale e si sta preparando alla definizione i Tipi di Contenuto.

Inoltre potrà essere utile per modificare la configurazione esistente.

Ulteriori Riferimenti

Ulteriori informazioni possono essere richieste attraverso la mailing list ufficiale Google Group "japs-platform".

Per mandare un messaggio ai membri della lista, invia una mail a .

È inoltre possibile consultare la documentazione presente in:

jAPS 2.0 entando Project - Sito per gli sviluppatori

Capitolo 2. Tipi di Attributo di Contenuto

Tipi di Attributo di Contenuto

Lo studio dell'organizzazione dell'informazione e del contenuto è una parte importante dello sviluppo di un portale web ed è fondamentale comprendere che un portale funziona se i suoi contenuti sono ben organizzati.

Organizzare i contenuti in jAPS significa mettere insieme i tipi di informazione necessari per costruire la struttura dei Tipi di Contenuto.

I Tipi di Attributo di Contenuto rappresentano l'informazione nella sua minima forma; mettendoli insieme si strutturano le informazioni nel portale.

Dopo aver effettuato lo studio sull'informazione e pensato a quali Tipi e ciò che dovranno rappresentare, si procede a tradurre queste necessità in XML per jAPS.

Inserimento e Configurazione

I Tipi di Attributo di Contenuto sono elementi contenuti nel XML della configurazione dei Tipi di Contenuto, nel database Port, mappata nel campo "config" del record con item "contenttypes" della tabella "sysconfig".

Di seguito si farà sempre riferimento a tale XML.

Le Proprietà Comuni

La configurazione di ogni elemento Tipo di Attributo prevede che siano specificati degli attributi che ne determinano le proprietà.

Gli attributi comuni sono:

  • name
  • required
  • searcheable
  • indexingtype

Esempio 2.1. attribute, esempio sintassi base

<attribute name="" required="" searcheable="" indexingtype="">

name

E' il nome dell'attributo, si utilizza per identificare l'informazione.

Il name deve sempre iniziare con la prima lettera maiuscola e non può contenere spazi e caratteri speciali.

Name è obbligatorio e il suo valore è arbitrario.

Esempio 2.2. name, sintassi XML di esempio

<attribute name="Titolo"..........
<attribute name="Autore"..........
<attribute name="DataPubblicazione"..........

attributetype

Dichiara la natura dell'attributo.

Il suo valore deve essere uno a scelta tra quelli fra i Tipi di Attributo di Contenuto presenti nel sistema.

Esempio 2.3. attributetype, sintassi XML di esempio

<attribute name="Titolo" attributetype="Text" />
<attribute name="Autore" attributetype="Monotext" />
<attribute name="Data" attributetype="Date" />

required

Dichiara se l'attributo è obbligatorio, ovvero è un campo che deve essere sempre riempito.

Viene utilizzato per le informazioni caratteristiche, senza le quali il Tipo di Contenuto non avrebbe senso.

Impedisce di avere Contenuti incompiuti e frammentari.

Può assumere due valori: true o false. Quando required non è presente nella configurazione l'attributo è considerato come non obbligatorio prendendo il valore di false come valore predefinito.

Esempio 2.4. required, sintassi XML di esempio

Se stabilissimo che le informazioni necessarie per formare un contenuto Notizia sono il titolo, la data del fatto e il testo dell'articolo dovremmo dichiararle come obbligatorie.

<!-- attributo obbligatorio -->
<attribute name="Titolo" attributetype="Text" required="true" />

<!-- attributo non obbligatorio -->
<attribute name="Autore" attributetype="Monotext" />

<!-- attributo obbligatorio -->
<attribute name="Data" attributetype="Date" required="true" />

searcheable

Dichiara se l'attributo può essere utilizzato per ordinare o filtrare liste di contenuti.

Questa proprietà consente di poter aggiungere filtri basati su quel Tipo di Attributo durante la pubblicazione di liste di contenuti o per l'utilizzo con il tag wp:contentList.

I valori possibili sono: true o false. Il valore predefinito è false.

Esempio 2.5. searcheable, sintassi XML di esempio

La creazione dei filtri può avvenire ed avere senso solo quando i valori dell'informazione sono ordinabili.

<attribute name="Titolo" attributetype="Text" searcheable="true"
<attribute name="Data" attributetype="Date" searcheable="true"
<attribute name="Fotografia" attributetype="Image"

Ha senso ordinare in modo crescente i titoli, poiché ha senso creare un insieme ordinato alfabeticamente di stringhe, lo stesso vale per le informazioni di tipo numerico ordinate in modo crescente e decrescente.


indexingtype

Dichiara se l'informazione deve essere indicizzata dal motore di ricerca.

Gli attributi indicizzati dal motore di ricerca saranno utilizzati come chiavi di ricerca per trovare i contenuti.

I valori possibili sono: text e unstored. Il valore di default è unstored.

Altri valori dipendono dall'implementazione dell'indicizzazione. Attualmente il motore di ricerca indicizza solo i tipi testuali.

Esempio 2.6. indexingtype, sintassi XML di esempio

<attribute name="Titolo" attributetype="Text" indixingtype="text" ...
<attribute name="Data" attributetype="Date" indixingtype="text" ...
<attribute name="Fotografia" attributetype="Image" ...

Titolo e Data saranno indicizzati, Fotografia sarà escluso dall'indicizzazione.

Capitolo 3. I Tipi Semplici

I Tipi Semplici

Attach

Rappresenta l'informazione sotto forma di file, che sarà allegato al Contenuto.

è composto da un URL corrispondente al file desiderato e da un testo che può indicare il titolo o la descrizione.

In fase di redazione sarà possibile selezionare un allegato già presente nell'Archivio delle Risorse o inserirne uno nuovo.

Esempio 3.1. Tipo Attach

<attribute name="FileAllegato" attributetype="Attach" />

Boolean

Rappresenta l'informazione in forma booleana, esprime il concetto di vero o falso.

Nell'interfaccia per la compilazione del Contenuto verranno visualizzati due radio button che consentiranno la selezione dei valori "si/no".

Esempio 3.2. Tipo Boolean

<attribute name="Importante" attributetype="Boolean" />
<attribute name="EventoPermanente" attributetype="Boolean" />

Checkbox

Rappresenta l'informazione in forma booleana, vero o falso.

Può essere utilizzato alternativamente al Boolean.

Nell'interfaccia per la compilazione del Contenuto verrà visualizzato un checkbox che consentirà di "attivare" e "disattivare".

Esempio 3.3. Tipo Checkbox

<attribute name="Importante" attributetype="Checkbox" />
<attribute name="EventoPermanente" attributetype="Checkbox" />

Date

l'informazione in forma di data.

Molto utilizzata quando si deve collocare nel tempo un'informazione.

Spesso utilizzata per specificare data di fine pubblicazione utile per filtrare i contenuti nelle liste automatiche

Esempio 3.4. Tipo Date

<attribute name="DataEvento" attributetype="Date" searcheable="true" />
<attribute name="DataFinePubblicazione" attributetype="Date" searcheable="true" />

Enumerator

Rappresenta un'informazione testuale la cui scelta è obbligata fra un insieme predefinito.

Nel CMS la selezione avviene tramite una select.

E' di tipo monolingua, ovvero esiste un valore unico per tutte le lingue.

Supporta gli attributi standard, ed ha due attributi aggiuntivi:

separator

I valori vanno elencati separati gli uni dagli altri da un separatore. Il valore predefinito è la virgola ",".

extractorBean

Quando specificato indica il nome del bean estrattore degli items che verranno aggiunti alla lista specificata staticamente. L'estrattore è definito nella configurazione di Spring Framework.

Un caso di utilizzo una lista di Nazioni.

Esempio 3.5. Tipo Enumerator, base

<attribute name="Country" attributetype="Enumerator">
<![CDATA[Italy,France,Germany,U.K.,Switzerland,Belgium,Netherland]]>
</attribute>

Esempio 3.6. Tipo Enumerato, separatore personalizzato

<attribute name="Country" separator="-" attributetype="Enumerator">
<![CDATA[Italy-France-Germany-U.K.-Switzerland-Belgium-Netherland]]>
</attribute>

Esempio 3.7. Tipo Enumerator, con extractorBean

<attribute name="Country" extractorBean="MyItems" attributetype="Enumerator">
<![CDATA[Italy,France,Germany,U.K.,Switzerland,Belgium,Netherland]]>
</attribute>

Hypertext

Rappresenta l'informazione in forma di ipertesto in grado di contenere tag html.

Per farne un buon uso, è consigliato l'utilizzo dei soli tag che forniscono esclusivamente significato e non costituiscono elementi grafici. Ad esempio: p,b,em ed a che semplicemente aggiungono semantica al testo.

Nei rispettivi Contenuti verrà visualizzato una textarea per l'inserimento dell'ipertesto per ciascuna lingua presente. Quando l'editor FCKEditor è attivo sarà possibile inserire velocemente link esterni, alle pagine ed ai contenuti esistenti.

Esempio 3.8. Tipo Hypertext

<attribute name="DescrizioneCompleta" attributetype="Hypertext" />

Image

Rappresenta l'informazione sotto forma di immagine.

Durante la compilazione del Contenuto sarà possibile accedere all'Archivio delle Immagini e scegliere l'immagine desiderata.

Sarà necessario specificare la descrizione di corredo all'immagine.

Solitamente gli attributi di tipo Image non vengono indicizzati e non vengono resi disponibili per nei filtri per le liste automatiche.

Esempio 3.9. Tipo Image

<attribute name="Foto" attributetype="Image" />

Link

un collegamento ipertestuale.

Viene utilizzato quando è necessario specificare un link, durante la compilazione del Contenuto; sarà possibile inserire tre tipi di link: esterno, a pagina e a contenuto.

Con il link esterno si indica un URL che sta al di fuori del portale jAPS.

Il link a pagina si riferisce ad una pagina del portale.

Mentre il link a contenuto fa rifermento ad un singolo contenuto presente.

Esempio 3.10. Tipo Link

<attribute name="IndirizzoWebAziendale" attributetype="Link" />
<attribute name="Homepage" attributetype="Link" />

Longtext

Rappresenta l'informazione in forma di semplice testo.

multilingua e si utilizza per piccole descrizioni o testi che sono più lunghi di un titolo.

Supporta maxLength, minLength e regexp. Vedere l'attributo Text (la sezione chiamata «Text»)

Esempio 3.11. Tipo Longtext

<attribute name="Abstract" attributetype="Longtext" />

Monotext

Rappresenta l'informazione in forma testuale.

stretto parente di Text con l'unica differenza di essere monolingua.

Si utilizza per quelle informazioni che hanno un valore ed un senso unico in tutte le lingue.

Anche questo supporta maxLength, minLength e regexp. Vedere Text (la sezione chiamata «Text»).

Esempio 3.12. Tipo Monotext

<attribute name="RagioneSociale" attributetype="Monotext" />

Number

Rappresenta l'informazione in forma numerica.

monolingua, ovvero un valore unico per tutte le lingue.

Si utilizza quando l'informazione deve essere espressa con un solo numero. Si pensi al numero di pratica, al codice utente oppure al numero di chilometri di distanza.

Esempio 3.13. Tipo Number

<attribute name="NumPratica" attributetype="Number" required="true" />
<attribute name="CodiceUtente" attributetype="Number" />
<attribute name="KmDalCentro" attributetype="Number" />

Text

Rappresenta l'informazione sotto forma di testo multilingua.

Sarà possibile inserire un valore in ciascuna lingua configurata.

Viene utilizzato per i più diversi scopi come titoli, nomi, luoghi.

Esempio 3.14. Tipo Text

<attribute name="Titolo" attributetype="Text" />
<attribute name="LuogoEvento" attributetype="Text" />

Oltre a supportare required, indexingtype e searcheable, proprietà comuni a tutti i Tipi di Attributi, ha altre tre possibili configurazioni:

Lunghezza Minima
Esprime la lunghezza minima del testo (in caratteri). un attributo dell'elemento <attribute>.
Lunghezza Massima
Esprime la lunghezza massima del testo (in caratteri). un attributo dell'elemento <attribute>
Validazione Espressione Regolare
Esprime un modello al quale il testo deve aderire. Tale configurazione va inserita come elemento figlio di <attribute>.

Esempio 3.15. Tipo Text, con minLength e maxLength

<attribute 
	name="Abstract" attributetype="Text" minLength="10"	maxLength="100"
/>

Esempio 3.16. Tipo Text, con regexp

<attribute name="EMail" attributetype="Text">
	<regexp><![CDATA[[.+@\w.*]]></regexp>
</attribute>

ThreeState

Rappresenta un'informazione che può assumere i valori si,no e non specificato/nessuno.

Si utilizza come il Boolean con l'unica differenza che è contemplato anche il terzo valore non specificato/nessuno.

Nella compilazione di un Contenuto di quel genere si potrà scegliere quando non si è in possesso l'informazione corretta.

Un esempio pratico è la possibilità di introdurre animali in un dato luogo, esempio in un albero:

Esempio 3.17. Tipo ThreeState

<attribute name="PermessoAnimali" attributetype="ThreeState" required="true" />

Capitolo 4. I Tipi Composti

I Tipi Composti

Fino ad ora abbiamo trattato quei Tipi che potevano rappresentare un solo tipo di informazione per volta.

Ma come si procede quando si presenta la necessità di avere un'informazione che ha senso compiuto perché formata da più tipi semplici?

Potrebbe essere accettabile dal punto di vista funzionale inserire i Tipi di Attributo Semplice uno di seguito all'altro. Si riuscirebbe comunque a completare il Contenuto con le informazioni richieste e ad utilizzarle per la visualizzazione nel portale.

Tuttavia non è corretto dal punto di vista formale, poiché gli elementi che compongono quel tipo di informazione rimarrebbero slegati e non contestualizzati.

Per soddisfare questa esigenza sono presenti i Tipi di Attributo Composti, che mettono insieme più Tipi di Attributo di Contenuto Semplici.

List

Questo tipo di attributo rappresenta un'insieme di liste indipendenti di Attributi elementari Omogenei, ciascuna associata ad una delle lingue di sistema definite.

La conseguenza immediata di questa caratteristica è che questo tipo di lista può gestire solo Attributi elementari di tipo Monolingua.

In ciascuna Lista componente l'attributo List, è possibile definire un numero variabile di elementi; dopo aver definito il Tipo di Attributo elemento che la lista gestirà, sarà possibile decidere arbitrariamente per ciascun Contenuto quanti elementi saranno presenti in ciascuna lista associata a ognina delle lingue di sistema.

Per la realizzazione delle configurazione XML si utilizza l'elemento <list>.

<list> supporta le proprietà standard name e required e attributetype.

Per attributetype si deve specificare List.

Non sono supportati invece le proprietà indexingtype e searcheable.

presente una proprietà per specificare il tipo degli elementi della lista chiamata nestedtype. Per nestedtype si deve mettere un Tipo di Attributo monolingua.

Esempio 4.1. Tipo List, lista di attributi semplici

<list name="Allegati" attributetype="List" nestedtype="Monotext" />

Monolist

Questo attributo rappresenta una lista comune per tutte le lingue di sistema.

Questo tipo di lista può gestire sia Attributi elementari di tipo Monolingua che Multilingua.

Si utilizza in tutti quei casi che è richiesta una lista unica per tutte le lingue.

Supporta le stesse proprietà di List, fare riferimento a la sezione chiamata «List»

Esempio 4.2. Tipo List, sintassi Monolist

<list name="Documenti" attributetype="Monolist" nestedtype="Attach" />
<list name="LinkUtili" attributetype="Monolist" nestedtype="Link" />

Monolist Composite

un agglomerato di attributi semplici.

Il suo compito è quello di descrivere una lista di informazioni, ciascuna composta da più attributi semplici.

Come per le altre liste, per la realizzazione della configurazione XML si utilizza l'elemento <list>.

La particolarità è che all'interno di <list> si dovranno posizionare elementi figli di tipo <attribute>.

Le proprietà dei Tipi di Attributo figli rimangono immutate.

Esempio 4.3. Composite, sintassi base

<list name="" attributetype="Monolist" nestedtype="Composite">
	<attribute name="" attributetype="" required="" indexingtype="" />
	[...]
	<attribute />
</list>

Esempio 4.4. Tipo Monolist di Composite, scheda persona con padre

Si immagini di dover descrivere sotto forma di informazione alcuni dati del "padre" di una persona. La persona è descritta nel Tipo di Contenuto "Persona" che avrà un attributo Padre composto da due attributi semplici: Nome ed Età. Rispettivamente di tipo Monotext e Number.

Si procede dichiarando Padre come Tipo di Attributo Composito ed innestando gli attributi Nome ed Età.

<list name="Padre" attributetype="Monolist" nestedtype="Composite">
	<attribute name="Nome" attributetype="Monotext" required="true" />
	<attribute name="Eta" attributetype="Number" required="true" />
</list>

Dichiarati Nome ed Eta obbligatori il sistema interpreterà come corretta l'informazione Padre quando entrambi saranno presenti oltre che quando gli elementi figli saranno espressi correttamente (nel tipo Number non possiamo inserire lettere).