Problème avec l'ordre des éléments d'un fichier XML [XML] - Programmation
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.
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.
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.
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.
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
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 ?
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?
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.
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.
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