Trasformazione UML a XSD

Indice

Panoramica

Questa trasformazione utilizza come origine un pacchetto UML e genera uno schema XML attraverso la conversione delle classi del pacchetto appropriate in elementi dello schema. Lo schema generato viene memorizzato in una cartella definita, schema, di un progetto specificato come destinazione della trasformazione. Il file che contiene lo schema ha lo stesso nome del pacchetto ed ha un'estensione .xsd.

Ad esempio, si supponga di avere definito un pacchetto UML PurchaseOrder che contiene una classe definita Address. Quando si esegue la trasformazione con questo pacchetto come origine, viene generato il seguente schema XML.

Se si sceglie un modello UML (che contiene almeno un pacchetto) come origine, questa trasformazione genera uno schema XML per ciascun pacchetto del modello che ha uno stereotipo <<XSDProfile::schema>> o una parola chiave schema. La trasformazione genera uno schema XML per ciascun pacchetto, se si imposta il valore della proprietà di trasformazione, Elabora pacchetti non contrassegnati su true.

Indice

Esplorazione dei modelli di esempio

Il software raccoglie una serie di modelli UML di esempio che è possibile utilizzare come origini per la trasformazione da UML a XSD. Una volta installata la trasformazione UML a XSD, sarà necessario copiare gli esempi dalla directory di installazione nello spazio di lavoro. Ad esempio, se è stato installato il software in RSA/eclipse, gli esempi saranno contenuti nella cartella RSA/eclipse/plugins/com.ibm.xtools.transform.samples.uml2.xsd/examples. Per copiare gli esempi nello spazio di lavoro, procedere nel modo seguente:

  1. Creare un progetto semplice: File > Nuovo > Progetto...  e selezionare Semplice > Progetto e fare clic su Avanti.
  2. Assegnare un nome al progetto (indicare uml2xsd.examples) e fare clic su Fine.
  3. Copiare la directory <install-dir>/rsa/eclipse/plugins/com.ibm.xtools.transform.uml2.xsd/examples in cui <install-dir> indica il percorso in cui viene installato Rational Software Development Platform.
  4. Aprire uno o più modelli. Facendo doppio clic sui modelli e pacchetti verranno aperti i diagrammi associati che mostrano i modelli, lo schema generato e le diverse proprietà di stereotipo e di trasformazione, utilizzate per generare lo schema.

NOTA: quando si apre un modello di esempio è possibile che sia visualizzata una finestra in cui viene indicato che il modello utilizza una versione obsoleta di XSDProfile e viene richiesto di migrare al nuovo profilo. È necessario fare clic su per migrare alla nuova versione del profilo.

Indice

Esecuzione della trasformazione

Per eseguire la trasformazione:

  1. Nello spazio di lavoro, creare un modello UML che contiene uno o più pacchetti. Creare poche classi UML in tutti i pacchetti.
  2. Facoltativamente, procedere nel modo seguente:

    Questa procedura è necessaria se si desidera creare un modello UML di uno schema XML significativo. Per ulteriori informazioni sul modellamento dello schema XML in UML, consultare la sezione, Modellamento dello schema XML in UML: Procedure ottimali.

  3. Passare alla vista Modellamento, se non è stata ancora attivata.
  4. Fare clic con il tasto destro del mouse sul modello o un pacchetto, quindi fare clic su Trasforma > Esegui trasformazione > UML a XSD.
  5. Nella finestra Esegui trasformazione, nella pagina Destinazioni specificare il progetto in cui scrivere i file dello schema XSD di output.
  6. Fare clic su Esegui.

La trasformazione genera lo schema XSD e lo inserisce nel progetto specificato in una cartella definita schema. Utilizzare una vista Selezione per esaminare lo schema generato.

Indice

Utilizzo del modello di esempio XSD

È anche possibile creare un modello UML utilizzando il modello di esempio XSD. Il vantaggio di questa procedura è che la libreria di modello necessaria, XSDDataTypes, è già importata ed ai pacchetti viene applicato il profilo XSD.

  1. Creare un modello UML.
    1. File > Nuovo > Progetto >Progetto UML.
    2. Nella finestra Progetto di modellamento UML, immettere il nome del progetto e fare clic su Avanti.
    3. Nella finestra risultante, selezionare  Modello XSD  ed assegnare un nome appropriato per il modello. (Nella versione di RSA/RSM, è possibile visualizzare due istanze del Modello XSD nel pannello Modelli. Si tratta di un difetto noto che è stato risolto nelle versioni successive di RSA/RSM. Basta selezionare una delle due voci "Modello XSD").
    4. Fare clic su Fine.
  2. Il modello UML appena creato è basato su un modello di esempio e contiene le librerie di modello necessarie importate. Quindi, è necessario creare uno o più pacchetti. Per effettuare tale operazione:
    1. Aprire il pacchetto, Infrastruttura di modello XSD.
    2. Trascinare il pacchetto ${schema.name} e rilasciarlo nel modello principale.  Verrà creato un pacchetto con il profilo di trasformazione XSD già applicato.
    3. Mediante la funzione Trova/Sostituisci modificare il nome del pacchetto da ${schema.name} in uno più appropriato.
    4. Inserire nel pacchetto le classi UML necessarie.
  3. Passare alla vista Modellamento, se non è stata ancora attivata.
    1. Fare clic con il tasto destro del mouse sul modello o un pacchetto, quindi fare clic su Trasforma > Esegui trasformazione > UML a XSD.
    2. Nella finestra Esegui trasformazione, nella pagina Destinazioni specificare il progetto in cui scrivere i file dello schema XSD di output.
    3. Fare clic su Esegui.

La trasformazione genera lo schema XSD e lo inserisce nel progetto specificato in una cartella definita schema. Utilizzare una vista Selezione per esaminare lo schema generato.

Indice

Dettagli della trasformazione

Origine della trasformazione

Questa trasformazione utilizza come origine un modello UML che contiene almeno un pacchetto o uno o più pacchetti UML.

Destinazione della trasformazione

Questa trasformazione utilizza come destinazione un progetto.

Indice

Proprietà della trasformazione

Questa trasformazione definisce le seguenti proprietà di trasformazione:

Proprietà Descrizione
Spazio dei nomi di destinazione Lo spazio dei nomi di destinazione dello schema generato dalla trasformazione. Il valore di questa proprietà è una stringa, quale http://www.ibm.com/SampleXSDTransformation.
Prefisso di spazio dei nomi di destinazione Il prefisso dello spazio dei nomi di destinazione dello schema generato dalla trasformazione. Il valore di questa proprietà è una stringa, quale, sxt.
Elabora classe UML senza stereotipo o parola chiave

Questa proprietà determina se la trasformazione elabora una classe UML quando la classe non dispone di stereotipi o parole chiave associati.

Il valore di questa proprietà può essere true o false. Per impostazione predefinita, il valore è impostato su true e la trasformazione elabora tutte le classi in un pacchetto di livello superiore. (Attualmente, la trasformazione non gestisce i pacchetti nidificati).

Se non è necessario applicare la trasformazione a tutte le classi di un pacchetto, occorre impostare il valore su false ed applicare gli stereotipi appropriati da XSDProfile oppure le parole chiave alle classi da trasformare.

Elabora pacchetto UML senza stereotipi o parole chiave

Questa proprietà determina se la trasformazione elabora un pacchetto UML quando il pacchetto non dispone di stereotipi o parole chiave associati.

Il valore di questa proprietà può essere true o false. Per impostazione predefinita, il valore è impostato su true e la trasformazione elabora tutti i pacchetti di livello superiore. (Attualmente, la trasformazione non gestisce i pacchetti nidificati).

Se non è necessario applicare la trasformazione a tutti i pacchetti di livello superiore di un modello, è necessario impostarlo su false ed applicare lo stereotipo appropriato <<schema>> da XSDProfile o schema della parola chiave ai pacchetti che si desidera trasformare.

Converti implicitamente una classe nidificata in tipo anonimo

Questa proprietà determina se la trasformazione converte una classe nidificata in un tipo anonimo quando non è presente alcuna associazione esplicita tra la classe nidificata e la classe che la include.

Il valore di questa proprietà può essere true o false. Per impostazione predefinita, il valore viene impostato su false e la trasformazione converte una classe nidificata in un tipo anonimo solo se esiste un'associazione ad essa da una classe di nidificazione. Se il valore è impostato su true, tutte le classi nidificate vengono convertite in tipi anonimi con i tipi XSD corrispondenti alle classi nidificate che contengono gli elementi i cui tipi sono questi tipi anonimi.

La generazione implicita di tipi anonimi impostando il valore di questa proprietà su true ha diverse limitazioni e, quindi, è preferibile utilizzarla con cautela.

Indice

Profilo XSD

Il modellamento di uno schema XML significativo in UML supportato dalla trasformazione UML a XSD utilizza un piccolo sottoinsieme di costrutti UML per rappresentare gli elementi dello schema XML. Questo sottoinsieme include i seguenti elementi UML: classe, proprietà, generalizzazione, associazione e dipendenza. Per rappresentare gli elementi dello schema XML, quali, tipo semplice, tipo complesso, attributo e elemento, gruppi riutilizzabili, ecc., utilizzando questo sottoinsieme, è necessario applicare il profilo XSD al modello UML di origine e incrementarlo utilizzando stereotipi da questo profilo e impostando le proprietà di stereotipi ai valori appropriati.

Il seguente diagramma di classi mostra il modello UML del profilo XSD.

La seguente tabella descrive gli stereotipi e le relative proprietà.

Stereotipo Estensioni metaclassi Proprietà Commenti
annotation Commento kind
language
source

Il commento è convertito in informazioni sull'applicazione o in una annotazione della documentazione.

La proprietà kind determina il tipo di annotazione: documentation e appinfo. Le proprietà language e source specificano rispettivamente la lingua naturale della documentazione e l'origine di ulteriore documentazione.

attribute Proprietà (di classe) form
use

La proprietà UML viene convertita in un attributo di tipo complesso o un gruppo odi attributi se è di tipo semplice e la molteplicità della proprietà è [0..1].

La proprietà di stereotipo form determina se il nome dell'attributo deve essere qualificato nel documento dell'istanza. Il valore può essere uno tra qualified, unqualified o default. Se è default, l'impostazione predefinita è attributeFormDefault di schema che viene impostato su unqualified.

La proprietà use determina se l'attributo sia facoltativo o richiesto. Il valore può essere optional o prohibited o required.  Per impostazione predefinita il valore è optional. Il valore prohibited è ignorato nell'implementazione corrente.

attributeGroup Classe
La classe è convertita in un gruppo di attributi.
complexType Classe anonymous
block
final
modelGroup
maxOccurs
minOccurs
mixed

La classe viene convertita in un tipo complesso.

La proprietà anonymous determina se una dichiarazione di tipo complesso di livello superiore viene creata nello schema. Il valore può essere true o false. Se è true, nessuna dichiarazione di tipo viene generata e qualsiasi riferimento a questa classe viene convertito in un attributo o dichiarazione di elemento con il tipo anonimo come tipo di attributo o elemento. Per impostazione predefinita il valore è false.

La proprietà block determina se bloccare la sostituzione di tipo. Può avere uno dei seguenti valori: #all o extension restriction o un elenco separato da spazi di extension e restriction. Il valore #all evita la sostituzione di tipi derivati, extension evita la sostituzione delle estensioni di questo tipo e restriction evita la sostituzione della limitazione di questo tipo. L'elenco, "extension restriction", ha lo stesso effetto di #all. Se non è stata specificata alcuna proprietà block, il valore predefinito viene impostato sulla proprietà blockDefault di schema.

La proprietà final determina se gli altri tipi possono essere derivati da questo. Il valore può essere #all o un elenco di  (extension o restriction).  Se il valore è #all, la derivazione dei tipi non è consentita. Per un controllo più specifico, il valore può essere impostato per essere un elenco separato da spazi di parole chiave restriction o extension . L'impostazione predefinita è finalDefault di schema.

La proprietà modelGroup determina il modello di contenuto del tipo. Il valore di modelGroup può essere all o choice o sequence. Il valore predefinito è sequence.

Vincolo: Se il valore di modelGroup è all, il valore di anonymous deve essere impostato su false. Diversamente, si verificherà una violazione del vincolo.

I valori di minOccurs e maxOccurs determinano il numero minimo e massimo di ricorrenze del gruppo sequence e choice nel tipo complesso. Per un gruppo di modelli all, maxOccurs deve essere 1 e minOccurs può essere solamente 0 o 1.

La proprietà boolean mixed specifica se il tipo complesso consente contenuto misto. Per impostazione predefinita il valore è false.

element Proprietà (di classe) block
final
form
nillable

La proprietà è convertita in un elemento.

La proprietà final viene applicata solo agli elementi globali e non agli elementi locali. Determina se gli altri tipi possono essere derivati da questo. Il valore può essere #all o un elenco di  (extension | restriction).  Se il valore è #all, la derivazione dei tipi non è consentita. Per un controllo più specifico, il valore può essere impostato per essere un elenco separato da spazi di parole chiave restriction o extension . L'impostazione predefinita è finalDefault di schema.

La proprietà di stereotipo form determina se il nome dell'elemento deve essere qualificato nel documento dell'istanza. Il valore può essere uno tra qualified, unqualified o default. Se è default, l'impostazione predefinita è elementFormDefault di schema che viene impostato su unqualified.

La proprietà boolean nillable determina se xsi:nil può essere utilizzato nell'istanza per questo elemento. Per impostazione predefinita il valore è false.

enumeration Classe anonymous

La classe viene convertita in un'enumerazione XSD se la classe ha la relazione di generalizzazione ad un'altra classe che rappresenta un tipo semplice.

La proprietà anonymous determina se una dichiarazione di tipo semplice di livello superiore con gli aspetti di enumerazione viene creata nello schema. Il valore può essere true o false. Se è true, nessuna dichiarazione di tipo viene generata e qualsiasi riferimento a questa classe viene convertito in un attributo o dichiarazione di elemento con il tipo anonimo come tipo di attributo o elemento. Per impostazione predefinita il valore è false.

global Classe

Una classe con questo stereotipo viene convertita in una dichiarazione di attributi o di elementi di livello superiore. La classe deve avere soltanto una proprietà. Se la proprietà dispone di uno stereotipo o parola chiave <<attribute>>, la classe viene convertita in un attributo di livello superiore. Diversamente, diventa un elemento di livello superiore.

Il nome dell'elemento o dell'attributo è lo stesso del nome della proprietà ed il tipo è  il tipo della proprietà.

listOf Dipendenza
Il client della dipendenza viene convertito in un elenco XSD il cui tipo di elemento è il fornitore della dipendenza. È possibile che si verifichi una dipendenza di questo tipo solo tra le due classi che rappresentano un tipo semplice.
modelGroup Classe anonymous
modelGroup

La classe viene convertita in un gruppo di modelli definito riutilizzabile con un modello di contenuto sequence.

La proprietà anonymous determina se una dichiarazione di gruppo di livello superiore viene creata nello schema. Il valore può essere true o false. Se è true, nessuna dichiarazione di gruppo viene generata, e qualsiasi riferimento a questa classe è convertito in un gruppo di modelli nidificati. Se il valore è false, un riferimento alla classe viene convertito in un riferimento del gruppo di modelli. Per impostazione predefinita il valore è false.

La proprietà modelGroup determina il modello di contenuto del gruppo. Il valore di modelGroup può essere all o choice o sequence. Il valore predefinito è sequence.

Vincolo : Se il valore di modelGroup è all, il valore di anonymous deve essere impostato su false. Diversamente, si verificherà una violazione del vincolo.

schema Pacchetto attributeFormDefault
blockDefault
elementFormDefault
finalDefault
targetNamespace
targetNamespacePrefix

Il pacchetto ed il relativo contenuto sono convertiti in uno schema XSD. Il nome del pacchetto diventa il nome dello schema (file).

La proprietà attributeFormDefault specifica se le dichiarazioni di attributi locali devono utilizzare nomi qualificati. Il valore può essere qualified o unqualified. Il valore predefinito è unqualified.

La proprietà  blockDefault imposta il valore predefinito per l'attributo block utilizzato nel tipo complesso e nelle dichiarazioni di elementi. L'attributo block determina se bloccare la sostituzione di tipi o di elementi. Può avere i seguenti valori: #all o un elenco separato da spazi di uno o più (extension o restriction o substitution).

La proprietà elementFormDefault specifica se le dichiarazioni dell'elemento locale devono utilizzare i nomi qualificati. Il valore può essere qualified o unqualified. Il valore predefinito è unqualified.

La proprietà  finalDefault imposta il valore predefinito per l'attributo final utilizzato nel tipo complesso, semplice e nelle dichiarazioni di elementi. L'attributo final determina se vietare la derivazione del tipo. Può avere i seguenti valori: #all o un elenco separato da spazi di uno o più (extension o restriction o substitution o list o union).

Se si impostano i valori di targetNamespace e targetNamespacePrefix, questi valori potrebbero sovrascrivere quelli impostati dall'utente per le corrispondenti proprietà di trasformazione, targetNamespace e targetNamespacePrefix rispettivamente.

simpleType Classe anonymous
final
fractionDigits
length
maxExclusive
maxInclusive
maxLength
minExclusive
minInclusive
minLength
pattern
totalDigits
whiteSpace

La classe è convertita in un tipo semplice se la classe ha una generalizzazione su un tipo di dati integrati XSD o un altro tipo semplice o un tipo di enumerazione XSD.

Il valore della proprietà anonymous può essere true o false. Se è true, la classe viene gestita come tipo anonimo e nessuna dichiarazione di tipo di livello superiore viene generata.

La proprietà final determina se gli altri tipi possono essere derivati da questo. Il valore può essere#all o un elenco di  (extension o restriction o list o union).  Se il valore è #all, la derivazione dei tipi non è consentita. Per ulteriore controllo, il valore può essere impostato per essere un elenco separato da spazi di parole chiave restriction, extension, list o union.

Le proprietà restanti rappresentano gli aspetti definiti dallo schema XSD. Utilizzando questi aspetti, è possibile specificare un intervallo valido di valori, limitare la lunghezza e la precisione dei valori , specificare un'espressione regolare con cui devono corrispondente i valori validi o specificare l'elaborazione dello spazio di tipi semplici che sono derivati dalla limitazione dai tipi XSD integrati. Per ulteriori dettagli, consultare la tabella Significato degli aspetti.

Alcuni di questi aspetti sono applicabili a tutti i tipi semplici. Ad esempio, per i tipi semplici che sono derivati da string, normalizedString e token, gli aspetti applicabili sono length, minLength, maxLengthpattern e whitespace. Per ulteriori dettagli, consultare la tabella Tipi semplici e aspetti applicabili.

unionOf Dipendenza
Il client della dipendenza viene convertito in un'unione XSD con il fornitore della dipendenza come uno dei relativi membri. Una classe che rappresenta un tipo semplice può avere più di una dipendenza su diverse classi (tipo semplice).
wildcard Proprietà (di classe) processContents
namespace

La proprietà UML viene convertita in un carattere jolly di elemento. Se la proprietà ha la parola chiave attribute o lo stereotipo <<attribute>> oltre a wildcard, viene convertita in un carattere jolly di attributo.

La proprietà processContents determina come convalidare gli elementi o gli attributi di sostituzione. Se è skip, il processore dello schema non esegue alcuna convalida. Se è lax, il processore dello schema convalida gli attributi o gli elementi per cui esso può rilevare dichiarazioni ed errori se sono errati. Se è strict, il processore dello schema tenta di rilevare un documento dello schema associato allo spazio dei nomi e convalida tutti gli attributi o gli elementi. Per impostazione predefinita, il valore è impostato su strict.

La proprietà namespace specifica quali spazi dei nomi possono essere compresi negli elementi o negli attributi di sostituzione. Il valore consentito è uno dei seguenti  (##any, ##other, elenco di anyURI o ##targetNamespace o ##local). Se è ##any, gli attributi o gli elementi di sostituzione possono essere contenuti in uno degli spazi dei nomi o in nessun spazio dei nomi. Se è ##other, gli attributi o gli elementi di sostituzione possono essere contenuti in uno spazio dei nomi diverso dallo spazio dei nomi di destinazione del documento, ma devono trovarsi in uno spazio dei nomi. Se il documento dello schema  non ha spazio dei nomi di destinazione, gli attributi o gli elementi di sostituzione possono avere qualsiasi spazio dei nomi, ma non devono averne uno. Diversamente, può essere un elenco separato da spazi di valori che include uno o tutti i seguenti elementi: ##targetNamespace, #local o spazi dei nomi specifici. ##targetNamespace indica che gli attributi o gli elementi di sostituzione potrebbero trovarsi nello spazio dei nomi di destinazione del documento dello schema e ##local indica che gli attributi o gli elementi di sostituzione potrebbero non trovarsi in uno spazio dei nomi.

Indice

Parole chiave

Se lo schema che si sta modellando non deve specificare i propri elementi in dettagli, è possibile utilizzare le parole chiave invece di stereotipi. La seguente tabella descrive le parole chiave supportate dalla trasformazione UML a XSD.

Parola chiave Applicabile all'elemento UML Commenti
annotation Commento Il commento è convertito in un'annotazione "appinfo" o "documentation".
attribute Proprietà (di Classe) La proprietà viene convertita in un attributo di tipo complesso se la molteplicità della proprietà è [0..1].
attributeGroup Classe La classe è convertita in un gruppo di attributi.
complexType Classe La classe viene convertita in un tipo complesso.
element Proprietà La proprietà è convertita in un elemento di tipo complesso.
enumeration Classe La classe viene convertita in un'enumerazione XSD se la classe ha la relazione di generalizzazione ad un'altra classe che rappresenta un tipo semplice.
global Classe

Una classe con questa parola chiave viene convertita in una dichiarazione di attributi o di elementi di livello superiore. La classe deve avere soltanto una proprietà. Se la proprietà dispone di uno stereotipo o parola chiave <<attribute>>, attribute, la classe viene convertita in un attributo di livello superiore. Diversamente, diventa un elemento di livello superiore.

Il nome dell'elemento o dell'attributo è derivato dal nome della proprietà ed il tipo è derivato dal  tipo della proprietà.

listOf La dipendenza tra le due classi che rappresenta due tipi semplici Il client della dipendenza viene convertito in un elenco XSD il cui tipo di elemento è il fornitore della dipendenza. È possibile che si verifichi una dipendenza di questo tipo solo tra le due classi che rappresentano un tipo semplice.
modelGroup Classe La classe viene convertita in un gruppo di modelli definito riutilizzabile con un modello di contenuto sequence.
schema Pacchetto

Il pacchetto ed il relativo contenuto sono convertiti in uno schema XSD. Il nome del pacchetto diventa il nome dello schema (file).

Se si utilizza la parola chiave schema, sarà necessario specificare lo spazio dei nomi di destinazione ed il relativo prefisso impostando le proprietà di trasformazione, targetNamespace e targetNamespacePrefix rispettivamente, ai valori appropriati.

simpleType Classe La classe è convertita in un tipo semplice se la classe ha una generalizzazione su un tipo di dati integrati XSD o un altro tipo semplice.
unionOf La dipendenza tra le due classi che rappresenta due tipi semplici Il client della dipendenza viene convertito in un'unione XSD con il fornitore della dipendenza come uno dei relativi membri. Una classe che rappresenta un tipo semplice può avere più di una dipendenza su diverse classi (tipo semplice).
wildcard Proprietà

La proprietà UML viene convertita in un carattere jolly di elemento. Se la proprietà ha la parola chiave attribute oltre a wildcard, viene convertita in un carattere jolly di attributo.

Indice

Libreria Modello: tipi di dati integrati XSD

I quarantaquattro tipi semplici sono integrati nel Suggerimento di schema XML. Queste semplici tipi rappresentano i tipi di dati comuni quali stringhe, numeri, valori di data ed ora ed includono anche i tipi legacy per i tipi di attributi in XML 1.0. XSD fornisce anche dodici facet di limitazione che possono essere utilizzati per specificare un intervallo valido di valori di tipi semplici, limitare la lunghezza e la precisione dei relativi valori, enumerare un elenco di valori validi o specificare un'espressione regolare con cui devono corrispondere i valori validi.

È possibile derivare i nuovi tipi semplici dai tipi integrati o altri tipi semplici limitandoli mediante l'impostazione degli aspetti in valori appropriati. Per effettuare tale operazione, è necessario disporre della rappresentazione dei tipi integrati disponibili nei modelli UML.

I tipi semplici integrati sono modellati come classi e resi disponibili in una libreria di modello definita XSDDataTypes. È necessario importare la libreria XSDDataTypes nel modello per accedere a questi tipi. Per importare la libreria modelli XSDDataTypes, in Esplora modello fare clic con il tasto destro del mouse sull'elemento principale del modello (il modello stesso), selezionare Importa libreria di modello... e scegliere XSDDataTypes dall'elenco a discesa.

Per definire i nuovi semplici tipi (tipi semplici definiti dall'utente) è necessario specializzare dalle classi appropriate nel modello XSDDataTypes e utilizzare le proprietà dello stereotipo <<simpleType>> per limitare il valore dei tipi definiti. Ad esempio:

È possibile limitare il valore massimo di Quantity a 100 impostando la proprietà maxInclusive di <<simpleType>> a 100.

Indice

Regole di mappatura da UML a XSD

Lo scopo del modellamento dello schema XML in UML è di creare una rappresentazione visiva di uno schema XML e quindi generare lo schema utilizzando una trasformazione UML a XSD. L'analisi mostra che la maggior parte delle funzionalità di base dello schema XML può essere rappresentata dagli elementi del modello UML. La seguente tabella mostra un sottoinsieme della mappatura tra i concetti presenti in UML e i concetti corrispondenti in XSD (XML Schema Definition).

Concetti UML Concetti dello schema XML
Pacchetto Singolo spazio dei nomi con un prefisso
Classe Tipi e gruppi riutilizzabili
  • Tipo complesso e dichiarazione di elementi corrispondenti
  • Tipo semplice
  • Gruppo di attributi, gruppo di sostituzione e gruppo del modello definito
Enumerazione Limitazione di un tipo semplice di stringa XSD con aspetti di enumerazione uguali ai letterali di enumerazione UML. Notare che il comportamento è diverso per una classe UML con applicato lo stereotipo <<enumeration>> dal profilo XSD. L'utilizzo di una classe UML stereotipata consente enumerazioni XSD più generali.
Proprietà di una classe Elementi ed attributi di un tipo complesso
Associazione (Aggregazione) Elemento secondario di un elemento contenuto (tipo complesso)
Generalizzazione Derivazione di tipi
  • Derivazione in base all'estensione del tipo complesso
  • Derivazione in base alla limitazione del tipo complesso
  • Derivazione in base alla limitazione del tipo semplice
Identità di oggetti L'utente ha specificato i campi chiave o un meccanismo di identità esplicita (non ancora implementato).

Regola di mappatura: Pacchetto -> Schema XSD

Elemento UML Elemento XSD Commenti
Pacchetto con stereotipo <<schema>> Schema con uno spazio dei nomi di destinazione e prefisso di spazio di nomi di destinazione Il contenuto di un pacchetto crea uno schema in un file .xsd. Il nome file dello schema è identico a quello del pacchetto.

Le proprietà dello stereotipo <<schema>>, attributeFormDefault e elementFormDefault, possono essere utilizzate per specificare gli attributi attributeFormDefault e elementFormDefault sullo schema generato.

Se si utilizza la parola chiave schema, invece dello stereotipo, è necessario fornire lo spazio dei nomi di destinazione e il relativo prefisso impostando i valori di  proprietà di trasformazione, targetNamespace e targetNamespacePrefix rispettivamente.

Regole di mappatura: Classe -> Tipo complesso, Proprietà -> Elemento e Proprietà -> Attributo

Elemento UML Elemento XSD Commenti
Classe con stereotipo <<complexType>> Tipo complesso Se la proprietà di stereotipo, modelGroup, non è impostata su uno dei valori possibili, all, choice o sequence, il tipo complesso viene generato con un gruppo di modelli sequence.
Classe con parola chiave complexType Tipo complesso Il tipo complesso viene generato con un gruppo di modelli sequence.
Classe senza parola chiave o stereotipo Tipo complesso Un tipo complesso viene generato solo se il valore della proprietà di trasformazione Elabora classe non contrassegnata, è impostato su true. Diversamente, la classe viene ignorata. Se un tipo complesso viene generato, il gruppo di modelli è impostato su sequence.
Proprietà Elemento del tipo complesso
Proprietà con stereotipo o parola chiave <<attribute>>, attribute. Attributo del tipo complesso

La proprietà viene convertita in un attributo soltanto se il tipo della proprietà è un tipo semplice e ha una molteplicità di [0..1]. Altrimenti, viene convertita in un elemento.

Se viene fornito un valore predefinito, la proprietà viene convertita  in un attributo facoltativo con un valore predefinito. Se si crea la proprietà di sola lettura e viene fornito un valore predefinito, essa viene convertita in un attributo con il relativo valore fisso sul valore predefinito. In entrambi i casi, è necessario impostare la molteplicità della proprietà su [0..1].

È possibile utilizzare la proprietà, use, dello stereotipo <<attribute>> per creare l'attributo facoltativo o richiesto. Se si imposta il valore di use su required, oltre a fornire un valore predefinito e definire la proprietà di sola lettura, il valore predefinito e la specifica di sola lettura saranno ignorati.

Regola di mappatura: Classe con <<global>>  -> Attributo o elemento globale

Elemento UML Elemento XSD Commenti
Una classe con un stereotipo <<global>> o una parola chiave "global" che contiene una proprietà. Attributo o elemento globale (livello superiore).

La classe deve avere soltanto una proprietà. Se la proprietà dispone di uno stereotipo o parola chiave <<attribute>>, attribute, la classe viene convertita in un attributo di livello superiore. Diversamente, diventa un elemento di livello superiore.

Il nome dell'elemento o dell'attributo è derivato dal nome della proprietà ed il tipo è derivato dal  tipo della proprietà.


Regola di mappatura: Relazioni di generalizzazione tra classi <<global>>  -> Gruppo di sostituzione

Elemento UML Elemento XSD Commenti
Relazioni di generalizzazione tra classi a cui si applica lo stereotipo <<global>>. Un gruppo di sostituzione composto di elementi globali rappresentati da classi con stereotipi <<global>>. Per creare un gruppo di sostituzione di elementi globali, i loro stessi tipi (classi) devono presentare una relazione di generalizzazione equivalente.

Nell'esempio riportato di seguito, l'elemento globale dress è a capo del gruppo di sostituzione e gli elementi globali, shirt e trouser, ne sono membri. Notare che i tipi di questi elementi sono in una relazione di generalizzazione equivalente alla relazione di generalizzazione tra gli elementi globali.


Regole di mappatura: Classe -> Tipo semplice

Elemento UML Elemento XSD Commenti
Classe con uno stereotipo <<simpleType>> o una parola chiave, simpleType

Tipo semplice definito dall'utente.

Limitazione di un tipo semplice integrato o un altro tipo semplice definito dall'utente

È necessario disporre della relazione di generalizzazione ad in tipo semplice integrato o un altro tipo semplice definito dall'utente o un tipo di enumerazione XSD.

Regola di mappatura: Classe -> Enumerazione XSD

Elemento UML Elemento XSD Commenti
Classe con stereotipo <<enumeration>> o parola chiave enumeration Enumerazione XSD.
Un tipo semplice con l'aspetto di enumerazione specificato
È necessario disporre della relazione di generalizzazione ad in tipo semplice integrato o un altro tipo semplice definito dall'utente.

Regola di mappatura: Enumerazione UML -> Enumerazione XSD

Elemento UML Elemento XSD Commenti
Enumerazione UML Enumerazione XSD, un tipo semplice con xsd:string di base di limitazione e con l'aspetto di enumerazione specificato Non necessita di generalizzazione ad un altro tipo semplice.

Regole di mappatura: Classe -> Gruppi riutilizzabili: gruppo attributi e gruppo modelli

Elemento UML Elemento XSD Commenti
Classe con stereotipo <<modelGroup>> Gruppo modelli definito Se la proprietà di stereotipo, modelGroup, non è impostata su uno dei valori possibili, all, choice o sequence, il gruppo modelli viene generato con un gruppo di modelli sequence.
Classe con parola chiave modelGroup Gruppo modelli definito Il gruppo modelli definito viene generato con un gruppo modelli sequence.
Classe con stereotipo <<attributeGroup>> o con parola chiave attributeGroup Gruppo attributi Ciascuna proprietà della classe viene convertita in un membro del gruppo attributi, ammesso che sia di un tipo che può essere convertito in un tipo semplice ed abbia una molteplicità [0..1]. Diversamente, la proprietà viene ignorata.

Poiché le proprietà possono essere convertite solo in attributi XSD, non è necessario applicare lo stereotipo <<attribute>> alle proprietà. Se, tuttavia, si desidera specificare ulteriori proprietà (quali required, form, ecc.) per gli attributi, è necessario applicare lo stereotipo <<attribute>> ed impostare le proprietà dello stereotipo sui valori appropriati.

Regola di mappatura: Derivazione di classi

Elemento UML Elemento XSD Commenti
La classe A deriva da un'altra classe B.

Un tipo complesso B che è l'estensione del contenuto complesso del tipo complesso A.

La classe A o la classe B può avere uno stereotipo <<complexType>> o una parola chiave complexType.

Né la classe A né la classe B possono avere un modello di contenuto o un gruppo modelli "all". Il tentativo di estendere le classi con i gruppi modelli "all" provoca la violazione del vincolo.

La classe B non può avere lo stereotipo <<modelGroup>> o <<attributeGroup>> né può avere una parola chiave modelGroup o attributeGroup. In altri termini, un tipo complesso non può estendere un gruppo attributi o un gruppo modelli.

La classe A deriva da un'altra classe B con uno stereotipo <<simpleType>> o una  parola chiave simpleType.

Un tipo complesso B che è l'estensione di contenuto semplice di un tipo semplice. Qualsiasi proprietà della classe B diventa un attributo dell'estensione di contenuto semplice.

L'unico scopo della derivazione da un tipo semplice è aggiungere gli attributi. Di conseguenza, il tipo di una proprietà della classe B deve essere semplice e la sua molteplicità deve essere [0..1]. Diversamente, il modello viola il vincolo.

Regola di mappatura: Associazione -> Elemento di tipo complesso

Elemento UML Elemento XSD Commenti
Associazione (aggregazione diretta o composta) Classe A -> Classe B Elemento nel tipo complesso A di tipo complesso B Il nome dell'elemento è determinato dal nome di ruolo della fine dell'associazione.

Regola di mappatura: Proprietà -> Elemento del tipo complesso

Elemento UML Elemento XSD Commenti
La classe A contiene una o più proprietà di classe B Elemento nel tipo complesso A di tipo complesso B Il nome dell'elemento è determinato dal nome della proprietà.

Regola di mappatura: Associazione -> Riferimento del gruppo Attributo e riferimento del gruppo Modello

Elemento UML Elemento XSD Commenti

Associazione (associazione diretta o aggregazione composta) dalla classe A alla classe B con uno stereotipo <<modelGroup>>.

Classe A -> Classe C con stereotipo <<attributeGroup>>.

Riferimento del gruppo di modelli nel tipo complesso A.

Riferimento del gruppo di attributi nel tipo complesso A.


Associazione (associazione diretta o aggregazione composta) dalla classe A con stereotipo <<modelGroup>> alla classe B con stereotipo  <<modelGroup>> Un riferimento al gruppo di modelli nel gruppo di modelli rappresentato dalla classe A
Associazione (associazione diretta o aggregazione composta) dalla classe A con stereotipo <<attributeGroup>> alla classe B con stereotipo  <<attributeGroup>> Un riferimento al gruppo di attributi nel gruppo di attributi rappresentato dalla classe A



Regola di mappatura: Dipendenza -> Tipi List e Union

Elemento UML Elemento XSD Commenti
Dipendenza con uno stereotipo <<listOf>> o una parola chiave listOf tra due tipi semplici

Tipo List.

Il client della dipendenza viene convertito in un tipo semplice che è un elenco del fornitore della dipendenza

Il client ed il fornitore della dipendenza devono essere di tipi semplici ed è necessario che sia presente almeno una dipendenza <<listOf>> tra loro. Non sono necessarie altre relazioni tra queste due classi.

La dipendenza con uno stereotipo <<unionOf>> o una parola chiave unionOf tra un tipo semplice di client ed uno o più fornitori Tipo Union.

Il client della dipendenza viene convertito in un tipo semplice che è un'unione dei fornitori della dipendenza.

Il client ed i fornitori della dipendenza devono essere di tipo semplice e possono essere una o più dipendenze <<unionOf>> tra di essi. Non sono necessarie altre relazioni tra queste classi.

Indice

Regola di mappatura: Classe -> Tipo complesso anonimo

Elemento UML Elemento XSD Commenti

Classe A con uno stereotipo <<complexType>> e proprietà di stereotipo anonymous = true e a cui si fa riferimento in un'altra classe B che rappresenta un tipo complesso.

La classe A viene convertita  in un tipo complesso anonimo.

Il riferimento viene convertito in un attributo o elemento del tipo complesso (rappresentato dalla classe B). Il tipo dell'elemento o dell'attributo è definito da questo tipo anonimo.

Il nome dell'elemento o dell'attributo è determinato dal nome del ruolo della fine dell'associazione o del nome della proprietà.

Poiché la classe A viene specificata come anonima, nessuna dichiarazione di tipo complesso di livello superiore viene generata per questa classe.

Regola di mappatura: Classe -> Tipo semplice anonimo

Elemento UML Elemento XSD Commenti
Classe A con uno stereotipo <<simpleType>> e proprietà di stereotipo anonymous = true a cui si fa riferimento in un'altra classe B che rappresenta un tipo complesso

La classe A viene convertita  in un tipo semplice anonimo.

Il riferimento viene convertito in un attributo o elemento del tipo complesso (rappresentato dalla classe B). Il tipo dell'elemento o dell'attributo è definito da questo tipo anonimo.

Il nome dell'elemento o dell'attributo è determinato dal nome del ruolo della fine dell'associazione o del nome della proprietà.

Poiché la classe A viene specificata come anonima, nessuna dichiarazione di tipo semplice di livello superiore viene generata per questa classe.

Regola di mappatura: Classe -> Enumerazione anonima

Elemento UML Elemento XSD Commenti
Classe A con uno stereotipo <<enumeration>> e proprietà di stereotipo anonymous = true a cui si fa riferimento in un'altra classe B che rappresenta un tipo complesso

La classe A viene convertita  in un'enumerazione anonima.

Il riferimento viene convertito in un attributo o elemento del tipo complesso (rappresentato dalla classe B). Il tipo dell'elemento o dell'attributo è definito da questo tipo anonimo.

Il nome dell'elemento o dell'attributo è determinato dal nome del ruolo della fine dell'associazione o del nome della proprietà.

Poiché la classe A viene specificata come anonima, nessuna dichiarazione di tipo semplice di livello superiore con aspetto di enumerazione viene generata per questa classe.

Regola di mappatura: Riferimento a gruppo modelli anonimi -> Nidificazione dei gruppi sequence e choice

Elemento UML Elemento XSD Commenti

Associazione (aggregazione diretta o composta) tra una classe A ed una classe B con uno stereotipo <<modelGroup>> e il valore della proprietà anonymous = true.

Un tipo complesso che rappresenta la classe A che contiene il gruppo modelli del gruppo modelli definito rappresentato dalla classe B.

Questa mappatura è valida soltanto se né A né B hanno un modello di contenuto  all.
Associazione (aggregazione diretta o composta) tra una classe A con uno stereotipo <<modelGroup>> ed una classe B con uno stereotipo <<modelGroup>> ed il valore della proprietà anonymous = true. Un gruppo modelli definito  che rappresenta la classe A che contiene il gruppo modelli del gruppo modelli definito rappresentato dalla classe B. Questa mappatura è valida soltanto se  né A né B hanno un modello di contenuto all.

Il riferimento sopra riportato ai gruppi modelli può essere modellato utilizzando le proprietà di classe.

Elemento UML Elemento XSD Commenti
La classe A che contiene una proprietà il cui tipo è la classe B con uno stereotipo <<modelGroup>> ed il valore della proprietà anonymous = true. Un tipo complesso che rappresenta la classe A che contiene il gruppo modelli del gruppo modelli definito rappresentato dalla classe B. Questa mappatura è valida soltanto se  né A né B hanno un modello di contenuto all.
La classe con uno stereotipo <<modelGroup>> che contiene una proprietà il cui tipo è la classe B con uno stereotipo <<modelGroup>> ed il valore della proprietà anonymous = true. Un gruppo modelli definito  che rappresenta la classe A che contiene il gruppo modelli del gruppo modelli definito rappresentato dalla classe B. Questa mappatura è valida soltanto se  né A né B hanno un modello di contenuto all.

Regola di mappatura: Classe nidificata -> Tipo complesso anonimo

Elemento UML Elemento XSD Commenti
La classe A che contiene una classe B nidificata con un'associazione tra A e B. Elemento nel tipo complesso A di tipo anonimo B.

È necessaria un'associazione tra la classe di nidificazione e la classe nidificata.

Lo stesso componente dello schema è ottenuto se la classe A contiene una proprietà di tipo B invece di un'associazione.



Regola di mappatura: Classe nidificata -> Tipo semplice anonimo

Elemento UML Elemento XSD Commenti
La classe A che contiene una classe nidificata B con uno stereotipo <<simpleType>> o parola chiave, simpleType, e con un'associazione tra A e B. Elemento nel tipo complesso A di un tipo semplice anonimo B.

È necessaria un'associazione tra la classe di nidificazione e la classe nidificata.

Lo stesso componente dello schema è ottenuto se la classe A contiene una proprietà di tipo B invece di un'associazione.

Regola di mappatura: Commento UML -> Annotazione

Elemento UML Elemento XSD Commenti
Commento Annotazione Un commento in un elemento UML viene convertito in un'annotazione di documentazione XSD.
Commento con stereotipo <<annotation>> Annotazione Il tipo di annotazione, documentation o appinfo, dipende dal valore della proprietà kind dello stereotipo <<annotation>>. Un elemento documentation viene creato se il valore di kind è documentation. Un elemento appinfo viene creato se il valore è applicationInfo. Il valore predefinito di kind è documentation.




Regola di mappatura: Proprietà -> Carattere jolly elemento

Elemento UML Elemento XSD Commenti
La proprietà con uno stereotipo <<wildcard>> o la parola chiave wildcard. Il carattere jolly dell'elemento è un tipo complesso di inclusione oppure un gruppo di modelli Lo spazio dei nomi nel quale si possono trovare gli elementi di sostituzione e le modalità di convalida delle sostituzioni, sono determinate dalle proprietà namespace e processContents dello stereotipo <<wildcard>>.



Regola di mappatura: Proprietà -> Carattere jolly attributo

Elemento UML Elemento XSD Commenti
Proprietà con stereotipi <<attribute>> e <<wildcard>> o parole chiave attribute e wildcard. Il carattere jolly dell'attributo è un tipo complesso di inclusione o un gruppo di attributi Lo spazio dei nomi nel quale si possono trovare gli attributi di sostituzione e le modalità di convalida delle sostituzioni, sono determinate dalle proprietà namespace e processContents dello stereotipo <<wildcard>>.



Modellamento dello schema XML in UML: Procedure ottimali

Lo scopo del modellamento dello schema XML in UML è di creare una rappresentazione visiva di uno schema XML e quindi generare lo schema utilizzando una trasformazione UML a XSD. Di solito, il modello dispone di elementi che rappresentano gli elementi XSD oltre agli elementi che non sono relativi a XSD. Si consiglia di tenere in considerazione queste linee guida durante la creazione di un modello.

  1. Inserire gli elementi relativi a XSD e non XSD in pacchetti separati.
  2. Inserire gli elementi relativi XSD appartenenti a diversi spazi dei nomi di destinazione in diversi pacchetti.
  3. Applicare il Profilo XSD ai pacchetti che contengono gli elementi relativi a XSD. In alternativa, è anche possibile applicare il Profilo XSD al modello stesso.
  4. Applicare lo stereotipo <<schema>> dal profilo XSD a ciascun pacchetto che contiene gli elementi relativi a XSD.
  5. Specificare lo spazio dei nomi di destinazione ed il relativo prefisso impostando i valori appropriati alle proprietà, targetNamespace e targetNamespacePrefix, dello stereotipo <<schema>>.
  6. Utilizzare le proprietà di trasformazione per controllare il contenuto della serie di pacchetti e classi che la trasformazione UML a XSD deve elaborare.

Indice

Limitazioni

Questa trasformazione non ha ancora implementato le regole per generare i seguenti elementi XSD:

Indice

Appendice A. Significato degli aspetti

Aspetti Significato
fractionDigits il numero di cifre frazionarie deve essere inferiore o uguale a x
length la lunghezza del valore deve essere x
maxExclusive il valore deve essere inferiore a x
maxInclusive il valore deve essere inferiore o uguale a x
maxLength la lunghezza del valore deve essere inferiore o uguale a x
minExclusive il valore deve essere superiore a x
minInclusive il valore deve essere superiore o uguale a x
minLength la lunghezza del valore deve essere superiore o uguale a x
pattern x è una delle espressioni regolari a cui il valore potrebbe corrispondere
totalDigits il numero di cifre significative deve essere inferiore o uguale a x
whitespace il processore dello schema deve conservare, sostituire o comprimere gli spazi in funzione di x

Indice

Appendice B: Tipi semplici e aspetti applicabili

La seguente tabella enumera i tipi di dati integrati e gli aspetti applicabili. Anche se la preferenza W3C specifica enumeration come aspetto, non è inclusa enumeration nella tabella. enumeration viene rappresentato utilizzando una classe con stereotipo <<enumeration>> oppure utilizzando l'enumerazione UML.

Tipi di dati (Base di limitazione) Aspetti applicabili
ENTITY, ID, IDREF length, maxlength, minlength
whitespace è fisso su un valore di collapse
pattern è [\i-[:]][\c-[:]]*
IDREFS length, maxlength, pattern
minlength è 1
whitespace è fisso su un valore di collapse
Name length, maxlength, minlength
whitespace è collapse
pattern è \i\c*
NCName length, maxlength, minlength
whitespace è collapse
pattern è [\i-[:]][\c-[:]]*
NMTOKEN length, maxlength, minlength
whitespace è fisso su un valore di collapse
pattern è \c+
NMTOKENS length, maxlength
minlength è 1
whitespace è fisso su un valore di collapse
NOTATION length, maxlength, minlength, pattern
whitespace è fisso su un valore di collapse
QNAME length, maxlength, minlength, pattern
whitespace è fisso su un valore di collapse
anyURI, base64Binary, hexBinary length, maxlength, minlength, pattern
whitespace è fisso su un valore di collapse
language length, maxlength, minlength
whitespace è collapse
pattern è ([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]{1,8})(-[a-zA-Z]{1,8})*
float, double maxExclusive, maxInclusive, minExclusive, minExclusive, pattern
whitespace è fisso su un valore di collapse
decimal maxExclusive, maxInclusive, minExclusive, minExclusive, fractionDigits, totalDigits, pattern
whitespace è fisso su un valore di collapse
tipi di dati interi (integer, byte, int, long, negativeInteger, nonNegativeInteger, nonPositiveInteger, positiveInteger, unsignedByte, unsignedInt, unsignedLong,unsignedShort)

maxExclusive, maxInclusive, minExclusive, minExclusive, totalDigits, pattern
fractionDigits è fisso su un valore 0
whitespace è fisso su un valore di collapse
tipi di dati di data ed ora (date, time, dateTime, gYear,gYearMonth, gMonth, gMonthDay, gDay, duration)
maxExclusive, maxInclusive, minExclusive, minExclusive, pattern
whitespace è fisso su un valore di collapse
string, normalizedString, token length, maxLength, minLength, pattern
whitespace è preserve per string, replace per normalizedString e collapse per token


Indice