[XML] Problème avec l'ordre des éléments d'un fichier XML

Problème avec l'ordre des éléments d'un fichier XML [XML] - Programmation

Marsh Posté le 21-01-2002 à 16:04:53    

Bonjour à tous.
 
Voila mon problème. J'ai créé un document XML dont la structure est vérifié par un fichier DTD. Or, cette vérification m'impose un ordre des éléments.
 
Par exemple, si le fichier DTD est:
 
<!ELEMENT personne (nom,prenom)>
  <!ELEMENT nom (#PCDATA)>
  <!ELEMENT prenom (#PCDATA)>
 
Ce fichier XML fonctionne:
 
<personne>
  <nom>Dupond</nom>
  <prenom>Antoine</prenom>
</personne>
 
mais celui-ci ne fonctionne pas:
 
<personne>
  <prenom>Antoine</prenom>
  <nom>Dupond</nom>
</personne>
 
Comment puis-je faire pour que la DTD ne se soucie pas de l'ordre ?
 
Merci d'avance.
 
PS: J'utilise le parseur MSXML 3.0 sous C++ Builder 5.0

Reply

Marsh Posté le 21-01-2002 à 16:04:53   

Reply

Marsh Posté le 21-01-2002 à 16:07:19    

up ca m'intéresse aussi. Je me souviens avoir eu le meme probleme et j'ai pas (encore) trouvé la réponse.


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 21-01-2002 à 16:50:01    

up  :(

Reply

Marsh Posté le 21-01-2002 à 17:25:22    

Visiblement, cela doit fonctionner avec les schemas XML. Mais bon, ca m'a l'air assez compliqué et ça me ferait pas mal de changements.
 
Y'a quelqu'un qui pourrait me donner un exemple clair de schéma XML ? Ou alors c'est possible avec les DTD (ce qui me parait problable).
 
Merci encore, c'est assez urgent.

Reply

Marsh Posté le 21-01-2002 à 18:01:56    

matrixfan2k1 a écrit a écrit :

Visiblement, cela doit fonctionner avec les schemas XML. Mais bon, ca m'a l'air assez compliqué et ça me ferait pas mal de changements.
 
Y'a quelqu'un qui pourrait me donner un exemple clair de schéma XML ? Ou alors c'est possible avec les DTD (ce qui me parait problable).
 
Merci encore, c'est assez urgent.  




 
 
un petit schema pour faire la même chose...
 
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 
<xsd:element name="Personne">
 <xsd:complexType>
  <xsd:sequence>
 <xsd:element name="prenom" type="xsd:string" minOccurs="0"/>
 <xsd:element name="nom" type="xsd:string" minOccurs="0"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>
 
L'ordre a une importance puisque l'on fait une sequence...
Donc on peut ecrire les 2 cas:
 
 
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 
<xsd:element name="Personne">
 <xsd:complexType>
 
<xsd:choice>
  <xsd:sequence>
 <xsd:element name="prenom" type="xsd:string" minOccurs="0"/>
 <xsd:element name="nom" type="xsd:string" minOccurs="0"/>
  </xsd:sequence>
  <xsd:sequence>
 <xsd:element name="nom" type="xsd:string" minOccurs="0"/>
        <xsd:element name="prenom" type="xsd:string" minOccurs="0"/>
 
  </xsd:sequence>
</xsd:choice>  
 </xsd:complexType>
</xsd:element>
 
 
ouala. J'ai pas testé, mais ça doit marcher.

Reply

Marsh Posté le 21-01-2002 à 18:04:44    

J'ai vu qu'on pouvait mettre "all" à la place de "sequence" pour ne pas prendre en compte de l'ordre. C'est d'ailleurs cela qui m'a attiré vers les schémas.
Mais je ne comprends pas l'intérêt de la ligne:
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  
 
A quoi sert l'url ? Et la propriété elementFormDefault?
 
En tout cas, merci beaucoup de ton aide.

Reply

Marsh Posté le 21-01-2002 à 18:13:31    

matrixfan2k1 a écrit a écrit :

J'ai vu qu'on pouvait mettre "all" à la place de "sequence" pour ne pas prendre en compte de l'ordre. C'est d'ailleurs cela qui m'a attiré vers les schémas.
Mais je ne comprends pas l'intérêt de la ligne:
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">  
 
A quoi sert l'url ? Et la propriété elementFormDefault?
 
En tout cas, merci beaucoup de ton aide.  




 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" c'est le namespace schema. Tu definis xsd (ou toto si tu veux!) comme le namespace de tes primitives schema.
 
l'attribut sus-cité est mis par defaut partout, il definit si ton namespace connait l'element form (rien à secouer ici, mais c un copier-cller)...
 
l'element all marche bien mais si tu utilise des generateur des 'binders' Java, il provoque des erreurs. c pourquoi je vise au plus simple avec sequences et choice...
 
une tite URL:
http://www.xml.com/pub/a/2000/11/2 [...] tml?page=8

Reply

Marsh Posté le 22-01-2002 à 09:58:37    

OK, je regarde ça tout de suite. Merci.

Reply

Marsh Posté le 22-01-2002 à 10:54:31    

Je pense avoir compris les schémas XML mais malheureusement, lorsque je fais des tests, aucune erreur apparait. Est-ce que c'est mon code qui ne fonctionne pas. Voici un exemple:
 
Schema XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="personne">
<xsd:complexType>
 <xsd:sequence>
  <xsd:element name="nom" type="xsd:string" minOccurs="0"/>
  <xsd:element name="prenom" type="xsd:string" minOccurs="0"/>
 </xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

 
Les fichiers XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<personne  
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="schema.xsd">
 <nom>Dupond</nom>
 <prenom>Antoine</prenom>
</personne>
 
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<personne  
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="schema.xsd">
 <nom>Dupond</nom>
 <adresse>Antoine</adresse>
</personne>
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<personne  
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="schema.xsd">
 <prenom>Dupond</prenom>
 <nom>Antoine</nom>
</personne>

 
Et tous les fichiers XML ne provoquent aucune erreur, alors qu'avec la DTD seul le 1er fonctionnait.
 
Quelqu'un aurait-il une idée ?

Reply

Marsh Posté le 22-01-2002 à 10:56:10    

matrixfan2k1 a écrit a écrit :

Je pense avoir compris les schémas XML mais malheureusement, lorsque je fais des tests, aucune erreur apparait. Est-ce que c'est mon code qui ne fonctionne pas. Voici un exemple:
 
Schema XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="personne">
<xsd:complexType>
 <xsd:sequence>
  <xsd:element name="nom" type="xsd:string" minOccurs="0"/>
  <xsd:element name="prenom" type="xsd:string" minOccurs="0"/>
 </xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

 
Les fichiers XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<personne  
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="schema.xsd">
 <nom>Dupond</nom>
 <prenom>Antoine</prenom>
</personne>
 
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<personne  
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="schema.xsd">
 <nom>Dupond</nom>
 <adresse>Antoine</adresse>
</personne>
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<personne  
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="schema.xsd">
 <prenom>Dupond</prenom>
 <nom>Antoine</nom>
</personne>

 
Et tous les fichiers XML ne provoquent aucune erreur, alors qu'avec la DTD seul le 1er fonctionnait.
 
Quelqu'un aurait-il une idée ?  




 
 
Tu testes comment?

Reply

Marsh Posté le 22-01-2002 à 10:56:10   

Reply

Marsh Posté le 22-01-2002 à 11:12:50    

J'utilise le parseur MSXML 3.0 inclus dans IE et j'ai fait un petit programme sous C++ Builder 5.0 qui charge le fichier XML et le vérifie.

Reply

Marsh Posté le 22-01-2002 à 14:52:14    

matrixfan2k1 a écrit a écrit :

J'utilise le parseur MSXML 3.0 inclus dans IE et j'ai fait un petit programme sous C++ Builder 5.0 qui charge le fichier XML et le vérifie.  




 
Visiblement, il ne valide pas...
Verifie les parametres.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed