Je me demande quelles sont les meilleures pratiques pour stocker une structure de données relationnelle en XML. Particulièrement, je m'interroge sur les meilleures pratiques pour faire respecter l'ordre des nœuds. Par exemple, dire que j'ai trois objets: School
, Course
et Student
, qui sont définis comme suit:Stockage de données relationnelles en XML
class School
{
List<Course> Courses;
List<Student> Students;
}
class Course
{
string Number;
string Description;
}
class Student
{
string Name;
List<Course> EnrolledIn;
}
Je stockerait une telle structure de données en XML comme ceci:
<School>
<Courses>
<Course Number="ENGL 101" Description="English I" />
<Course Number="CHEM 102" Description="General Inorganic Chemistry" />
<Course Number="MATH 103" Description="Trigonometry" />
</Courses>
<Students>
<Student Name="Jack">
<EnrolledIn>
<Course Number="CHEM 102" />
<Course Number="MATH 103" />
</EnrolledIn>
</Student>
<Student Name="Jill">
<EnrolledIn>
<Course Number="ENGL 101" />
<Course Number="MATH 103" />
</EnrolledIn>
</Student>
</Students>
</School>
Avec la XML ordonné de cette façon, je peux d'abord analyser Courses
. Ensuite, lorsque j'analyse Students
, je peux rechercher chaque Course
répertorié dans EnrolledIn
(par son Number
) dans la liste School.Courses
. Cela me donnera une référence d'objet à ajouter à la liste EnrolledIn
dans Student
. Si Students
, cependant, vient avantCourses
, une telle recherche pour obtenir une référence d'objet n'est pas possible. (Puisque School.Courses
n'a pas encore été rempli.)
Alors, quelles sont les meilleures pratiques pour stocker des données relationnelles en XML? - Devrais-je exiger que Courses
doive toujours précéder Students
? - Dois-je tolérer toute commande et créer un objet Course
chaque fois que j'en rencontre un que je n'ai pas encore vu? (A être étendu lorsque la définition du Course
sera finalement atteinte plus tard.) - Existe-t-il un autre moyen de persister/charger mes objets de/vers XML? (Je suis actuellement implémenté Save
et Load
méthodes sur tous mes objets métier et de faire tout cela manuellement à l'aide System.Xml.XmlDocument
et ses classes associées.)
Je suis habitué à travailler avec des données relationnelles sur SQL, mais c'est ma première expérience éprouvante pour stocker une structure de données relationnelle non triviale en XML. Tout conseil que vous pourriez fournir sur la façon dont je devrais procéder serait grandement apprécié.
J'ai entendu parler de YAML, mais je ne l'ai pas utilisé. A-t-il intégré le support dans .NET? –
Il existe une implémentation sourceforge .NET de YAML: http://yaml-net-parser.sourceforge.net/default.html – Instantsoup