Attributi XSD
Tutti gli attributi sono dichiarati come tipi semplici.
Che cos'è un attributo?
Gli elementi semplici non possono avere attributi. Se un elemento ha attributi, è considerato di tipo complesso. Ma l'attributo stesso è sempre dichiarato come un tipo semplice.
Come definire un attributo?
La sintassi per definire un attributo è:
<xs:attribute name="xxx" type="yyy"/>
dove xxx è il nome dell'attributo e yyy specifica il tipo di dati dell'attributo.
XML Schema ha molti tipi di dati integrati. I tipi più comuni sono:
- xs: stringa
- xs:decimale
- xs: intero
- xs: booleano
- xs: data
- xs: tempo
Esempio
Ecco un elemento XML con un attributo:
<lastname lang="EN">Smith</lastname>
Ed ecco la definizione dell'attributo corrispondente:
<xs:attribute name="lang" type="xs:string"/>
Valori predefiniti e fissi per gli attributi
Gli attributi possono avere un valore predefinito OPPURE un valore fisso specificato.
Un valore predefinito viene assegnato automaticamente all'attributo quando non viene specificato nessun altro valore.
Nell'esempio seguente il valore predefinito è "EN":
<xs:attribute name="lang" type="xs:string" default="EN"/>
All'attributo viene assegnato automaticamente anche un valore fisso e non è possibile specificare un altro valore.
Nell'esempio seguente il valore fisso è "EN":
<xs:attribute name="lang" type="xs:string" fixed="EN"/>
Attributi opzionali e obbligatori
Gli attributi sono facoltativi per impostazione predefinita. Per specificare che l'attributo è obbligatorio, utilizzare l'attributo "use":
<xs:attribute name="lang" type="xs:string" use="required"/>
Restrizioni sui contenuti
Quando un elemento o un attributo XML ha un tipo di dati definito, pone restrizioni al contenuto dell'elemento o dell'attributo.
Se un elemento XML è di tipo "xs:date" e contiene una stringa come "Hello World", l'elemento non verrà convalidato.
Con gli schemi XML, puoi anche aggiungere le tue restrizioni ai tuoi elementi e attributi XML. Queste restrizioni sono chiamate faccette. Puoi leggere di più sulle sfaccettature nel prossimo capitolo.