xmltool
Guillaume ABADIE, Thierry CANTENOT, Juliette COURLET,
Rémy DOMINGUEZ, Adrien DUFFY, Ahmed KACHKACH
Architecture XML

Parser XML
-Parse :
Doctype, CData, PI, Commentaire, Balise, Attributs
- Implémentation minimaliste de XPath
- Gestion des erreurs :
- Parser souple
- Classe Log
Algorithme XSD
3 tables de hachage
- Association <nom Type / objet Type>
- Association <nom Element / nom Type>
- Association <nom Attribut / nom Type>
- Construction de l'arbre XSD
- Parcours récursif de l'arbre XML issu du document XSD
- Une passe
- Gestion des références
- Validation d'un document XML
Algorithme XSD
- Choix d'éléments racine multiples
- Présence et type des attributs
- Éléments de types mixed
- Éléments sequence et choice imbriqués
- Nombre d'occurences minimum et maximum par élément
- Références sur des attributs, éléments et types
XML :

XSD :


Algorithme XSL
Parcours récursif des éléments du document XML à transformer, avec application des templates qui matchent.
Au niveau des templates : application des instructions XSL (for-each, apply-templates, value-of)
On switch constamment entre XML et XSL !
Concept clé : le contexte d'application des templates.
XML :
<catalog><cd><title>Dapt Funk</title></cd><cd> ..... </cd> </catalog>
XSL :
<xsl:stylesheet><xsl:template match="catalog"> <ul> <xsl:for-each select="cd"> <li><xsl:value-of select="title"/></li> </xsl:for-each> </ul> </xsl:template></xsl:stylesheet>
Environement de tests
- Assertions dynamique
- Vérifications des contrats
- Vérifications {pre,post} conditions
- Trigger des breakpoints dans gdb
- Tests compilés
- Exécutables distincts
- Assertions de test
- Tests d'intégrations
Assertions dynamiques
Element::ElementList
Element::elements() const
{
ElementList elements;
for(auto const & c : mChildren)
{
app_assert(c != nullptr);
app_assert(c->mParent == this);
if(c->isElement())
{
elements.push_back(static_cast<Element const *>(c));
}
}
return elements;
}
Tests compilés
std::string content(xml_code(
<hello>
<balise1>
</balise3>
<balise2>
</balise2>
</hello>
));
Xml::Log log;
Xml::Document * doc = Xml::parse(content, &log);
test_assert(doc != 0);
test_assert(doc->root()->elements("balise1").size() == 1);
test_assert(doc->root()->elements("balise2").size() == 1);
delete doc;
Démo
Rôles
- Guillaume ABADIE (Chef de projet)
- Développeur, Responsable compilation/tests
- Thierry CANTENOT
- Développeur, Responsable qualité code
- Juliette COULERT
- Développeuse
- Rémi DOMINGUES
- Dévelopeur, Responsable LaTeX
- Adrien DUFFY
- Développeur, Responsable documentation code
- Ahmed KACHKACH
- Développeur
Origanisation
- Groupe XML (Thierry, Guillaume)
- Conception, Implémentation, Tests
- Parser XML
- Groupe XSD (Juliette, Rémi)
- Conception, Implémentation, Tests
- Groupe XSL (Adrien, Ahmed)
- Conception, Implémentation, Tests
- Rapport LaTeX
Technologies utilisées
- C++ 2011
- Fonctionnalitées de GCC 4.7
- Bison, Flex
- RE2:
- Librairie C++ de regex
- Utilisée par Google et Facebook
- Framework Candy Makefile
- Compilation / tests
- LaTeX
Retour d'experience
- Les +
- Mise en application du BISON
- Peu de paperasse
- Opportunité de faire autre chose que du cycle en V à 6
- Les -
- Le BISON représente un volume de code trop petit
- Perte de temps à respecter les standards XML ambigus
Questions ?
XmlTool
By hexamome
XmlTool
- 641
