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.
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:
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 Sì per migrare alla nuova versione del profilo.
Per eseguire la trasformazione:
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.
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.
È 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.
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.
Questa trasformazione utilizza come origine un modello UML che contiene almeno un pacchetto o uno o più pacchetti UML.
Questa trasformazione utilizza come destinazione un progetto.
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. |
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 o 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, maxLength, pattern 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. |
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. |
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.
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
|
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
|
Identità di oggetti | L'utente ha specificato i campi chiave o un meccanismo di identità esplicita (non ancora implementato). |
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. |
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. |
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à. |
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.
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. |
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. |
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. |
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. |
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. |
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. |
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à. |
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 |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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 . |
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>> . |
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>> . |
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.
Questa trasformazione non ha ancora implementato le regole per generare i seguenti elementi XSD:
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 |
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 |