Relations dans un schema XML

fdev9 Messages postés 20 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 26 juin 2006 - 9 sept. 2005 à 14:40
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 - 12 sept. 2005 à 18:52
Salut. Je n'ai pas trouvé de rubrique XMl donc je pose ma question ici étant donné qu'elle concerne mon application c#.



Donc voilà, je fais une application qui utilise une base XMl, dont j'ai
défini le schema avec VS (une dizaine de tables) et que je charge dans
un Dataset. Mais je n'ai pas défini les relations entre les tables dans
mon schema et du coup lorsque je veux créer des DataView je dois a
chaque coup définir mes relations. J'ai tenté de créer les relations
dans mon schéma mais j'ai une erreur très explicite :



Invalid Key Node Inside constraint Name



Je dois très mal m'y prendre pour définir la relation et je cherche
donc de l'aide là dessus. Mon code est, en gros, le suivant :



<xs:element name="Table1">....... </xs:element>

<xs:element name="Table2">....... </xs:element>

<xs:key name="Table1key">

<xs:selector xpath=".//mstns:Table1" />

<xs:field xpath="mstns:IDTABLE1" />

</xs:key>

<xs:key name="Table2key">


<xs:selector xpath=".//mstns:Table2" />


<xs:field xpath="mstns:IDTABLE2" />


</xs:key>

<xs:keyref name="Relation1" refer="mstns:Table2Key">

<xs:selector xpath=".//mstns:Table1" />

<xs:field xpath="mstns:id_table2" />

</xs:keyref>



* avec id_table2 un champ de la table1



Le problème vient-il du fait que je crée une mauvaise relation entre
l'id de la table2 et une propriété de la table1 que je veux faire
correspondre?



Dsl de la longueur du message mais je tenais a etre clair. Merci pour
votre lecture et pour les réponses, j'espere que quelqu'un pourra
m'aider la dessus .



fd.

3 réponses

cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
12 sept. 2005 à 13:33
Salut,



Question stupide, tu as essayé de créer tes relations avec l'interface graphique??

Pour ma part, voici un exemple complet de ce que j'obtient:



<?xml version="1.0" encoding="utf-8"?>

<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

<xs:element name="Table1">

<xs:complexType>

<xs:sequence>


<xs:element name="IDTABLE1" type="xs:int" />


<xs:element name="Desc" type="xs:string" />

</xs:sequence>

</xs:complexType>

<xs:key name="Table1Key1" msdata:PrimaryKey="true">

<xs:selector xpath="." />

<xs:field xpath="mstns:IDTABLE1" />

</xs:key>

</xs:element>

<xs:element name="Table2">

<xs:complexType>

<xs:sequence>


<xs:element name="IDTABLE2" type="xs:int" />


<xs:element name="id_table2" type="xs:int" />


<xs:element name="Desc" type="xs:string" />

</xs:sequence>

</xs:complexType>

<xs:keyref name="Table1Table2" refer="Table1Key1">

<xs:selector xpath="." />

<xs:field xpath="mstns:IDTABLE2" />

</xs:keyref>

<xs:key name="Table2Key1" msdata:PrimaryKey="true">

<xs:selector xpath="." />

<xs:field xpath="mstns:IDTABLE2" />

</xs:key>

</xs:element>

</xs:schema>


Chris


N'oubliez pas de cloturer votre post.
0
fdev9 Messages postés 20 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 26 juin 2006
12 sept. 2005 à 18:41
Salut, merci pour ta réponse.



En fait j'ai créé tout mon schéma via l'éditeur de schéma de Visual
Studio et je note quelques différences avec ton code: Dans mon code le
xpath n'est pas vide et contient le nom de la table sur laquelle je
crée la clé



Exemple :



<xs:key name="Table2Key1" msdata:PrimaryKey="true">

<xs:selector xpath=". //mstns:Table2"/>

<xs:field xpath="mstns:IDTABLE2" />

</xs:key>



C'est bizarre cette différence non? Je vais essayer en éditant mon
schéma à la main et en retirant les xpath mais ca me parait plus
logique qu'ils soient renseignés en fait :/



Une question trés stupide : est-ce que le blem ne vient pas de mon
fichier xml? Car avec ou sans relation je ne modifie pas le contenu de
mon fichier XML et peut etre qu'il n'est plus conforme avec les
relations? Ca me parait bancal aussi ca mais bon...



En tout cas pour le moment je continue a créer mes propres relations à
la main dans mon code, lorsque j'en ai beosin pour remplir mes
dataview, et je ne comprends pas pourquoi mes relations, créés avec
l'éditeur, en suivant les consignes de msdn, ne fonctionnent pas :/



Merci



fd.
0
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
12 sept. 2005 à 18:52
Essai de sauvergarder le dataset, après avoir mis les relations, dans un fichier XML. Tu verras si il y a des différences.

Sinon, pour valider ton fichier XML avec un schéma, il faut utiliser la classe XmlValidatingReader.



Chris

N'oubliez pas de cloturer votre post.
0
Rejoignez-nous