Génération de XML Schéma

L'installation XSD génération convertit un modèle de classe UML à un schéma de W3C XML (XSD). Cela permet modélisateurs de données pour commencer à travailler à un niveau conceptuel en UML, laissant les aspects ennuyeux de création XSD à EA. La génération de schéma peut ensuite être personnalisé, si nécessaire, en utilisant le quot fourni " le profil UML pour XML " comme décrit plus tard.

Un schéma XML correspond à un paquetage d'UML. Donc la génération XSD est une opération de niveau paquetage dans EEnterprise Architect. Pour démontrer l'utilisation du générateur de schéma, nous commençons avec un modèle d'exemple.

Commencer
Pour utiliser la facilité de génération de schéma vous exigerez la chose suivante:

  • Enterprise Architect Professional ou édition Corporate
  • XSDDataTypes Paquetage: Ce paquetage contient des classes représentant XSD des types de données primitifs. Ce paquetage est disponible comme un fichier de XMI. Pour importer le fichier comme un Paquetage UML, utilisez la facilité d'importation de XMI DE L'EA'S qui est disponible from the menu item: Project | Import/Export | Import Package from XMI.
  • UML Profil pour XML: Ce fichier de ressources contient les classes stéréotypées qui permettent la génération de schéma pour être personnalisé. Le profil UML pour XML peut être importé dans un modèle utilisant la Vue de Ressource (voir Importation de profils pour plus de détails sur l'importation de profils UML dans EA).

Étapes pour générer XSD:

  1. Sélectionnez le paquetage à être converti en XSD en cliquant-droit sur le paquetage dans Navigateur de Projet.
  2. Sélectionnez Projet | Générer schéma XML dans le menu principal.
  3. Définir le fichier de sortie souhaité en utilisant le champ Nom du fichier.
  4. Définir le codage xml désiré en utilisant le champ Codage.
  5. Cliquez sur le bouton Générer pour générer le schéma.
  6. Le progrès du générateur de schéma sera montré dans le Progrès à la boîte d'édition.li>

Exemple
Les modèles de diagramme de classes suivantes simple " Détails employés " système, destiné à stocker les informations de contact des employés d'une entreprise. Les classes indiquées forment la " EmployeeDetails " paquetage. Les attributs UML des classes correspondent directement à des éléments ou les attributs XML. Notez que les classes ont pas de méthodes, car il n'y a pas de correspondance significative entre les méthodes de classe et des constructions XSD.

Example

La figure suivante montre le schéma qui est généré pour le paquetage Détails employé par défaut. Remarquez comment chaque classe UML correspond à une définition de complexType dans le schéma. Les attributs de classe sont générées comme éléments de schéma contenues dans un " séquence" groupe de modèles dans la définition. La classe d'énumération est l'exception ici - il correspond directement à une énumération de XSD, contenue dans une définition simpleType.

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:simpleType name="Status">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Full-Time"/>
			<xs:enumeration value="Part-Time"/>
			<xs:enumeration value="Casual"/>
			<xs:enumeration value="Contract"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="Person" type="Person"/>
	<xs:complexType name="Person">
		<xs:sequence>
			<xs:element name="firstName" type="xs:string"/>
			<xs:element name="surName" type="xs:string"/>
			<xs:element name="birthDate" type="xs:string"/>
			<xs:element name="gender" type="xs:string"/>
			<xs:element name="contactDetails" type="ContactInfo"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="Employee" type="Employee"/>
	<xs:complexType name="Employee">
		<xs:complexContent>
			<xs:extension base="Person">
				<xs:sequence>
					<xs:element name="status" type="Status"/>
					<xs:element name="jobTitle" type="xs:string"/>
					<xs:element name="startDate" type="xs:date"/>
					<xs:element name="department" type="xs:string"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="EmployeeRecords" type="EmployeeRecords"/>
	<xs:complexType name="EmployeeRecords">
		<xs:sequence>
			<xs:element name="Employee" type="Employee" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="ContactInfo" type="ContactInfo"/>
	<xs:complexType name="ContactInfo">
		<xs:sequence>
			<xs:element name="homePhone" type="xs:string"/>
			<xs:element name="mobilePhone" type="xs:string"/>
			<xs:element name="officePhone" type="xs:string"/>
			<xs:element name="email" type="xs:string"/>
			<xs:element name="streetAddress" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>

Le tableau suivant décrit la cartographie par défaut de UML construit à XSD constructions. La section suivante décrit un profil UML pour XML qui permet à cette cartographie par défaut à être modifié pour répondre aux besoins individuels. Utilisation du profil, nous allons modifier notre modèle exemple de la classe d'adapter la génération du schéma XML.

UML Construct Les Règles de Production par défaut pour XSD
Paquetage

Un schéma est généré pour le package cible. Si le package cible inclut des classes d'un autre paquetage, qui a les valeurs marquées “targetNamespace” et “targetNamespacePrefix” ensemble, ceux-ci sont inclus comme des attributs de l'élément de schéma.

En outre, une importation ou d'inclure l'élément est créé pour chaque paquetage référencé. (Un élément s'incluant est utilisé si le paquetage externe partage la même valeur étiquetée targetNamespace que le paquetage cible marqué. Un élément import est utilisé lorsque les nom cible diffèrent.)

Classe Un niveau de racine élément déclaration et complexType définition sont générés. L'élément nom et type sont les mêmes que le nom de classe. Un groupe de modèles de séquence XSD est généré pour contenir des attributs UML générés en tant qu'éléments.
Attribute Un élément est déclarée pour chaque attribut de classe. L'élément nom est réglé sur celui de l'UML nom d'attribut. Ceci est préfixé avec le nom de la classe pour faire l'élément unique. Le minOccurs et maxOccurs attributs sont définis pour refléter le cardinal d'attribut. (Remarque: Si laissé non précisée, minOccurs et maxOccurs défaut à 1.) Si l'attribut se réfère à une autre classe, la déclaration d'élément est suivi une définition complexType, qui contient une référence à la complexType appropriée.
Association Un élément est déclarée pour chaque d'association détenue par une classe. L'élément nom est réglée sur celle du rôle de l'association. Le minOccurs et maxOccurs refléter le cardinal de l'association. Note: si la direction de l'association est indéterminée, le propriétaire est assumé pour être la source.
Généralisation (Héritage) Pour les héritages simples, un extension est généré avec le de base attribut défini sur le nom de classe de base. Les attributs UML de la classe de l'enfant sont ensuite ajoutés à un tous groupe de modèles au sein de l'élément d'extension.
<<énumération>> (stéréotype) Un simpleType est déclarée pour la classe d'énumération avec le nom attribut défini sur le nom de classe. Un restriction est généré avec de base réglé sur string . Chacun des attributs de classe sont annexés à l'élément de restriction comme XSD énumération des éléments avec l'ensemble de valeur au nom d'attribut d'UML. Toute spécification de type pour les attributs UML sera ignoré par le générateur de schéma.

Profil UML pour XML
Le profil UML pour XML spécifie un ensemble de stéréotypes, les valeurs et les contraintes qui peuvent être appliquées au modèle UML afin de modifier les aspects particuliers du schéma résultant étiqueté. Par exemple, nous pouvons vouloir avoir des certains attributs de classes UML convertis en XSD ou attributs, nous pourrions avoir besoin d'utiliser un groupe de modèle différent que celui "séquence" par défaut.

Le stéréotype dit explicitement au générateur qu'à lequel XSD structure les maps de construction d'UML. Les valeurs marquées définissent davantage les aspects de la mappage, comme si les éléments doivent être qualifiés. Les contraintes définissent les conditions qui doivent être remplies pour que le stéréotype à appliquer.

Pour démontrer comment le profil pour XML peut affecter la génération de schéma, se référer au schéma de classe suivante - une adaptation de notre exemple précédent. Notez les changements dans le schéma correspondant.

Example

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="ContactInfo" type="ContactInfo"/>
	<xs:complexType name="ContactInfo">
		<xs:all>
			<xs:element name="ContactInfo.homePhone" type="xs:string" maxOccurs="1"/>
			<xs:element name="ContactInfo.email" type="xs:string" maxOccurs="3"/>
			<xs:element name="ContactInfo.streetAddress" type="xs:string"/>
			<xs:choice>
				<xs:element name="ContactInfo.mobilePhone" type="xs:string"/>
				<xs:element name="ContactInfo.officePhone" type="xs:string"/>
			</xs:choice>
		</xs:all>
	</xs:complexType>
	<xs:simpleType name="Gender">
		<xs:restriction base="xs:string">
			<xs:pattern value="male|female"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="Employee" type="Employee"/>
	<xs:complexType name="Employee">
		<xs:complexContent>
			<xs:extension base="Person">
				<xs:sequence>
					<xs:element name="status" type="Status"/>
					<xs:element name="jobTitle" type="xs:string"/>
					<xs:element name="startDate" type="xs:date"/>
					<xs:element name="department" type="xs:string"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="Person" type="Person"/>
	<xs:complexType name="Person">
		<xs:sequence>
			<xs:element name="surName" type="xs:string" maxOccurs="1"/>
			<xs:element name="firstName" type="xs:string" maxOccurs="1"/>
			<xs:element name="birthDate" type="xs:string" maxOccurs="1"/>
			<xs:element name="contactDetails" type="ContactInfo"/>
		</xs:sequence>
		<xs:attribute name="gender" use="optional" type="Gender"/>
	</xs:complexType>
	<xs:element name="EmployeeRecords" type="EmployeeRecords"/>
	<xs:complexType name="EmployeeRecords">
		<xs:all>
			<xs:element name="Employee" type="Employee" minOccurs="0" maxOccurs="unbounded"/>
		</xs:all>
	</xs:complexType>
	<xs:simpleType name="Status">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Full-Time"/>
			<xs:enumeration value="Part-Time"/>
			<xs:enumeration value="Casual"/>
			<xs:enumeration value="Contract"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>

En particulier:

  • Nous avons défini explicitement le stéréotype pour les classes Personne et ContactInfo à XSDcomplexType. EmployeeRecords utilise le modelGroup valeur à utiliser marqué le "tous les" construire au lieu de la valeur par défaut "séquence". La classe ContactInfo utilise également l'étiquette MemberNames pour permettre les noms des éléments de l'attribut d'être préfixés par le nom de la classe.
  • Le stéréotype XSDattribute cause la génération d'un attribut de XSD (au lieu de l'élément par défaut),pour l'attribut de sexe de la classe "Person".
  • Pour restreindre les valeurs possibles pour le sexe attribuent à "male" ou "female", nous avons créé la catégorie de genre. Classe "Gender" est stéréotypée XSDsimpleType et utilise la valeur de modèle étiqueté à limiter ses valeurs possibles. Nous aurions également pu utiliser des expressions régulières dans cette façon de restreindre les valeurs pour le "birthDate", "email" et le numéro de téléphone attributs.
  • L'utilisation du stéréotype de XSDchoice nous permet de générer le "mobilePhone" et "officePhone" attributs comme des options au sein d'une modelGroup choix XSD. Notez comment les memberNames d'attributs contenues par ce modelGroup est qualifié comme déterminé par sa classe complexType contenante. (Ceci arrive pour chaque propriétaire de la modelGroup, où le multiple cours associé.)
  • Moins évident à partir du diagramme est le classement des attributs pour la classe Person. Remarquez comment la "firstName" et "surName" attributs ont échangé leur position dans le schéma. Ceci est parce que la position la valeur étiquetée a été utilisée pour l'attribut de la classe "Person" dans l'exemple modifié.

Le tableau suivant détaille les fonctions du profil UML pour XML. Noms de valeur tag sont indiqués en gras suivie par les valeurs autorisées. Si il est une valeur par défaut utilisée par le générateur de schéma d'EA, il est souligné.

<<XSDschéma>>

UML Construct Paquetage
Description   Toutes les classes dans un paquetage sont définies dans un schéma. Ce stéréotype peut être utilisé pour spécifier les paramètres de schéma à l'échelle.
Les Valeur Tags anonymousRole:
(true | false)
Spécifie si le nom de rôle est inclus dans la déclaration d'élément pour l'attribut d'UML.
anonymousType:
(true | false)
Spécifie si le type de classe est anonyme pour des attributs.
attributeFormDefault:
(qualified | unqualified)
Détermine si les cas d'attribut doivent être qualifiés.
defaultNamespace: Le défaut namespace utilisé dans ce schéma. Cette valeur est utilisée pour spécifier le défaut namespace l'attribut (xmlns=), dans l'élément de schéma.
elementDerivation:
(true | false)
Détermine si les héritages sont générées en utilisant l'extension XSD ou d'héritage de copie vers le bas.
elementFormDefault:
(qualified | unqualified)
Détermine si les cas d'élément doivent être qualifiés.
memberNames:
(qualified | unqualified)
Détermine si les éléments produits d'attributs de Classe font qualifier leur nom par le nom de classe correspondant.
modelGroup:
(all | sequence | choice)
Spécifie que le défaut XSD le groupe modèle a eu l'habitude de produire complexType des définitions.
schemaLocation: L'URI qui identifie l'emplacement du schéma. Cette valeur est utilisée dans l'importation et inclut des éléments.
targetNamespace: L'URI qui identifie uniquement namespace de ce schéma.
targetNamespacePrefix: Le préfixe qui abrège le targetNamespace.
version: Le version de ce schéma.
Constraints Aucun.


<<XSDgroup>>

UML Construct Classe
Description Un XSDgroup est généré pour les classes avec ce stéréotype.
Les Valeur Tags modelGroup:
(sequence | choice | all)
Ignore le défaut XSD le modèle pour produire cette définition de groupe.
Constraints Une classe de groupe peut seulement s'associer à d'autres classes de groupe.
Une classe de groupe peut être associée par une autre classe de groupe ou complexType la classe.
L'association devrait être via un lien d'association.
Une classe de groupe ne peut pas être héritée/agrégé.


<<XSDtopLevelElement>>

UML Construct Classe
Description   Crée un <xs:élément> construction qui agit comme un conteneur pour XSDcomplexType et XSDsimpleType classe.
Les Valeur Tags Aucun.
Constraints Un XSDtopLevelElement classe peut contenir l'un ou l'autre un XSDsimpleType ou un XSDcomplexType comme sa classe d'enfant. Quand une telle classe est présente comme son enfant, toute sa héritage est ignorée. Cette classe ne peut pas être héritée.


<<XSDtopLevelAttribute>>

UML Construct Classe
Description Crée un <xs:attributr> construction qu'agit comme un conteneur pour XSDsimpleType classe
Les Valeur Tags use:
(optional | required | prohibited)
Voir Schéma de W3C XML recommendation.
Constraints Un XSDtopLevelAttribute classe peut contenir seulement un XSDsimpleType classe comme sa classe d'enfant. Quand une telle classe est présente comme son enfant, toute sa succession est ignorée. Cette classe peut hériter de seulement un XSDsimpleType classe.


<<XSDunion>>

UML Construct Classe
Description Crée un <xs:union> construction qui peut agir comme un conteneur pour la classe XSDsimpleType.
Les Valeur Tags Aucun.
Constraints Un XSDunion classe peut contenir seulement unXSDsimpleType comme sa classe d'enfant et peut se généraliser d'autre XSDsimpleType classes seulement.  Toutes les classes que cette classe généralise deviennent les membres de l'attribut memberTypes. Cette classe ne peut pas avoir d'attributs ou associations.


<<XSDattributeGroup>>

UML Construct Classe
Description Crée un <xsattributeGroup> construction qui peut agir comme un conteneur pour un ensemble d'éléments pour le stéréotype XSDattribute.
Les Valeur Tags Aucun.
Constraints Un XSDattributeGroup classe peut contenir seulement les éléments de stéréotype XSDattribute et peut être associé seulement avec d'autre XSDattributeGroup classes. Seulement XSDcomplexType classes peuvent s'associer avec cette classe. Cette classe ne peut pas être héritée.


<<XSDcomplexType>>

UML Construct   Classe
Description complexType définitions sont créées pour le générique des classes d'UML. Ces aides de stéréotypes forment la génération de complexType définition
Les Valeur Tags memberNames:
(qualified | unqualified)
Détermine si les éléments produits des attributs de classe UML et les associations font qualifier leur nom par le nom de classe correspondant pour ce complexType définition.
  mixed:
(true | false)
Détermine si cet élément peut contenir l'élément mixte et le contenu de caractère. Référez-vous à le W3C XML Schema recommendation.
  modelGroup:
(all | sequence | choice)
Remplace le modèle XSD par défaut pour générer cette complexType définition.
Constraints   Aucun.


<<XSDsimpleType>>

UML Construct   Classe
Description   Un XSD simpleType est produit pour des classes avec ce stéréotype.
Les Valeur Tags derivation:
(restriction | list)
Indique la dérivation de lasimpleType. Reportez-vous à la recommandation de W3C XML Schema
  length: Voir la recommandation W3C XML Schema
  minLength: Voir la recommandation W3C XML Schema
  maxLength: Voir la recommandation W3C XML Schema
  minInclusive: Voir la recommandation W3C XML Schema
  minExclusive: Voir la recommandation W3C XML Schema
  maxInclusive: Voir la recommandation W3C XML Schema
  maxExclusive: Voir la recommandation W3C XML Schema
  totalDigits: Voir la recommandation W3C XML Schema
  fractionDigits: Voir la recommandation W3C XML Schema
  whiteSpace: Voir la recommandation W3C XML Schema
  pattern: Voir la recommandation W3C XML Schema
Constraints   Cette classe peut seulement participer à une relation d'héritage avec autre simpleType. Il ne peut pas avoir d'attributs ou posséder n'importe quelles associations. Ils sont ignorés si le présent


<<XSDsequence>>

UML Construct   Classe
Description  

Le générateur de schéma crée un groupe de modèles de séquence que le conteneur pour les attributs et les associations appartenant à cette classe. Le groupe de modèle est à son tour ajouté à des groupes de modèles de propriétaires respectifs cette classe de.

Notez: Les Valeur Tagged spécifiées par les propriétaires de cette classe persistent à travers les éléments de ce groupe de modèle de l'enfant. Ainsi si memberNames sont disqualifié pour un complexType, sont si les enfants de ce groupe modèle quand ajouté à cela complexType.

Les Valeur Tags   Aucun.
Constraints   Cette classe doit être la destination d'associations unidirectionnelles. Si ce n'est pas, cette classe et ses connecteurs sont ignorés, probablement infirmant d'autres classes de groupe modèles. Les relations d'héritage sont ignorés pour cette classe..


<<XSDchoice>>  

UML Construct   Classe
Description   Crée un élément de choix XSD. Référez-vous à XSDsequence pour plus de détails.
Les Valeur Tags   Aucun.
Constraints   Comme pour XSDsequence.


<<XSDelement>>

UML Construct   Attribute; AssociationEnd
Description   En appliquant ce stéréotype à un attribut de classe UML ou AssociationEnd, la correspondance UML l'entité est produite comme un élément dans le parent complexType et pas comme un attribut de XSD.
Les Valeur Tags form:
(qualified | unqualified)
Ignore le schéma elementFormDefault valeur.
  position: Les causes les éléments sont ordonnés dans un groupe de modèles de séquence du contenant complexType . Dupliqué et position non valide étiqueté valeurs sont ignorées et se traduisent par ordre indéfini des attributs UML. Le manque de valeurs de position cause que les positions définies sont allouées comme spécifié, avec les éléments restants occupent les postes manquants dans un ordre défini.
  anonymousRole:
(true | false)
Spécifie si le nom de rôle est inclus dans la déclaration d'élément pour l'attribut d'UML
  anonymousType:
(true | false)
Spécifie si le type de classe est anonyme pour des attributs.
Constraints   Aucun.


<<XSDattribute>>

UML Construct   Attribute; AssociationEnd
Description   En appliquant ce stéréotype à un attribut de classe d'UML ou AssociationEnd , l'entité UML correspondant est généré comme un attribut XSD dans le parent complexType et pas comme un élément XSD.
Les Valeur Tags form:
(qualified | unqualified)
Ignore la valeur du schéma attributeFormDefault.
  use:
(prohibited | optional | required)
Voir la recommandation W3C XML Schema
  default: Voir la recommandation W3C XML Schema
  fixed: Voir la recommandation W3C XML Schema
Constraints   L'attribut que datatype ne devrait pas renvoyer à une spécification de classe, ce sera ignoré autrement.


<<XSDany>>

UML Construct   Classe; Attribute
Description   Si appliqué à un attribut d'UML, un XSD anyAttribute élément est produit. Si appliqué à une classe UML, UN XSD n'importe quel élément est produit.
Les Valeur Tags namespace: Voir la recommandation W3C XML Schema
  processContents:
(skip | lax | strict)
Voir la recommandation W3C XML Schema
Constraints   Aucun.


<<XSDrestriction>>

UML Construct   Généralisation
Description   Ignore l'utilisation par défaut d'extension XSD pour la succession et produit l'enfant commecomplexType avec un élément de restriction au lieu de cela.
Les Valeur Tags   Aucun
Constraints   Applique uniquement aux classes UML relations parent-enfant.

S'il vous plaît noter que cette fonctionnalité est disponible dans Enterprise Architect Professional et Corporate.