Convertir DTD en Schéma

www.altova.com Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Manuel de l'utilisateur et référence > Commandes de menu  > Menu DTD/Schéma >

Convertir DTD en Schéma

La commande Convertir DTD en Schéma est activée lorsqu'une DTD est le document actif. Elle convertit une DTD en un document de Schéma XML (XSD).

 

La commande ouvre le dialogue Convertir DTD en Schéma W3C (capture d'écran ci-dessous), dans laquelle vous pouvez sélectionner si vous souhaitez convertir des éléments complexes dans des éléments ou dans des types complexes. Cliquer sur OK, pour recevoir une invitation à choisir un emplacement où enregistrer le fichier généré XSD. Cliquer sur Enregistrer pour exécuter la conversion. Le fichier XSD est généré et ouvert dans XMLSpy.

dlgDTD2XSD

Lorsque vous convertissez une DTD en Schéma XML, XMLSpy fait quelques hypothèses seulement en raison du peu d'informations disponibles. En particulier, les valeurs de certains composants de DTD sont traitées littéralement au lieu de parser leur sémantique. Cela est dû au fait que le programme ne peut pas savoir laquelle des utilisations possibles sera utilisée. Dans ces cas, vous devriez modifier la conversion générée.

 

Dans tous les cas, vous devriez examiner avec soin la conversion générée pour voir si vous pouvez l'améliorer. Quelques domaines dans lesquels des améliorations peuvent être nécessaires sont rassemblées ci-dessous.

 

Types de données Attribut

Les DTD permettent uniquement 10 types de données d'attribut, alors que les Schémas XML, par exemple, permettent plus de 40 types de données plus les types de données dérivés. Vous pouvez souhaiter améliorer une Schéma XML généré, par exemple, en utilisant un type de données plus restrictif. Veuillez noter que lorsqu'un Schéma XML est converti en DTD, l'information de type de données sera perdue.

 

 

Espaces de noms

Les DTD ne sont pas conscients de l'espace de noms. En conséquence, si des espaces de noms doivent être spécifiés dans une DTD, ils doivent être hard-coded dans des noms élément et attribut. Cela peut poser des défis lors de la conversion d'un schéma à un autre.

 

 

Entités

Le Schéma XML n'a pas d'équivalent pour les déclarations d'entités générale de DTD. Lorsque XMLSpy convertit une DTD en un Schéma XML, il ignore les déclarations d'entité.

 

 

Déclarations de données non parsées

Les DTD et les Schémas XML utilisent des mécanismes différents pour gérer des données non parsées. Cela est expliqué plus en détail ci-dessous.

 

Les DTD utilisent le mécanisme suivant :

 

Une notation est déclarée consistant d'un nom et d'un identifiant, par exemple :
<!NOTATION gif SYSTEM "image/gif">
Vous déclarez l'entité, par exemple :
<!ENTITY cover_img SYSTEM "graphics/cover_img.gif" NDATA gif>
Généralement, vous spécifiez un type d'attribut de ENTITY sur l'attribut pertinent, par exemple :<!ELEMENT img EMPTY>

      <!ATTLIST img format ENTITY #REQUIRED>

 

Dans le Schéma XML, le mécanisme correspondant est comme suit :

 

Déclarer une notation. Cela fonctionne de la même manière que pour la DTD.

<xs:notation name="gif" public="image/gif"/>

Veuillez noter que l'attribut public est obligatoire et maintient l'identifiant. Un attribut system optionnel conserve l'identifiant de système et est généralement un programme d'exécution qui peut se charger des ressources du type de notation.

Vous associez la déclaration notation avec une valeur d'attribut donnée en utilisant le type de données NOTATION. Néanmoins, vous ne pouvez pas utiliser le type de données NOTATION directement, mais vous devez dériver un autre type de données depuis le type de données NOTATION.

<xs:simpleType name="formatType">

  <xs:restriction base="xs:NOTATION">

     <xs:enumeration value="gif"/>

     <xs:enumeration value="jpeg"/>

  </xs:restriction>

</xs:simpleType>

Vous associez l'attribut avec le type de données dérivé depuis le type de données NOTATION, par ex.

<xs:complexType name="imgType">

  <xs:attribute name="height"/>

  <xs:attribute name="width"/>

  <xs:attribute name="location"/>

  <xs:attribute name="format" type="formatType" use="required"/>

</xs:complexType>

<xs:element name="img" type="imgType"/>

 

Lorsque vous convertissez une DTD en un Schéma XML, XMLSpy fait :

 

un exemple comme

<!ATTLIST image format ENTITY #REQUIRED

...>

est converti en

<xs:attribute name="format" type="xs:ENTITY" use="required"/>

 

et un autre de type

<!NOTATION gif SYSTEM "image/gif">

est converti en

<xs:notation name="gif" system="image/gif"/>

 

Vous devriez donc effectuer les modifications suivantes :

 

1.Dans des notations comme <xs:notation name="gif" system="image/gif"/> remplacer system par public, et ajouter un identifiant de système optionnel le cas échéant.
2.Dériver un type de données depuis le type de données NOTATION tel que décrit ci-dessus pour formatType.
3.Associer le type de données dérivé avec l'attribut pertinent.

 

Note :Conformément à la spécification de Schéma XML, vous ne nécessitez pas ou ne devez pas, selon le point de vue, déclarer une entité externe.

 


© 2018 Altova GmbH