Transfert de données XML => SGBD relationnel INF7115-10 : Bases de données Maryse Durocher Guy Lafontaine Etienne Morency-Bachand Plan • Problématique • Solutions et produits existants • Solutions choisies – Intergiciels (middlewares) – BD relationnelles supportant XML • Analyse et comparaison • Questions Présentation de la problématique • XML vs SGBD • Remplacement ou coopération? • Exportation / importation • Pourquoi utiliser XML? • Pourquoi utiliser une BD? Problématique: exemple Vidéotron • Partie client en Flash – Fichier de configuration XML • Partie serveur Perl ou Java + SGBD Oracle – Données de configuration + données de participations enregistrées dans la BD Problématique: module de votes sur illico SQL HTTP illico Serveur load <?xml... <?xml... FTP XML XML BD importation Problématique: module de votes (alternatives) SQL HTTP illico BD Serveur <?xml... HTTP SQLX illico Serveur XML Serveur, wrapper Problématique: solution adoptée… • Besoin XML: simplicité, contraintes technologiques, portabilité, performances • Besoin BD: accès serveur, gestion des transactions, sécurité, relationnel, index • Besoin de transfert des données du XML à la BD (importation) – Réutilisation de l’information – Risques d’erreurs réduits Problématique: module de votes (détails) DNCS DHCT bst/res/star/star.swf vote.swf (Flash) XML.load("bfs://...") bst/res/vote/vote_config.xml xml.load("http://...") FTP xml.load("http://...") HTTP Server INP-ING HTTP Server VSI vote_config.xml Deloitte courriel http get_votes_for_verif.pl (Perl) load FTP create_voting_session.pl (Perl) check_votes_illico.cgi (CGI Perl) telnet SQL SQL SQL SQL PC (réseau VSI) Opérations INP Note: tous les composants réseau ne sont pas illustrés PC (réseau VSI) GestionVoteServlet.xml (Java) VerifVotesServlet.xml (Java) SQL telnet http WAS Server VSI DIP (DB2 DB) (VSI) SQL employé SAC Problématique: …solution adoptée • Solution de middleware maison (Perl) • Insertion + mise à jour • Librairies Perl XML::*** + DBI • Souplesse, rapidité de développement : ) • Parsing spécifique, besoin de réutilisation… : ( Solutions et produits existants • • • • • • • Intergiciels (middlewares) Bases de données relationnelles supportant XML Bases de données XML natives Serveurs XML Couches enveloppantes (wrappers) Systèmes à base de requêtes XML Systèmes de correspondance XML-objets Solutions choisies • • • • • • • Intergiciels (middlewares) Bases de données relationnelles supportant XML Bases de données XML natives Serveurs XML Couches enveloppantes (wrappers) Systèmes à base de requêtes XML Systèmes de correspondance XML-objets Solutions choisies: pourquoi? • XML centré données vs XML centré document • Données => importation dans BD => intergiciel (ou outils SGBD-XML) • Documents => préservation de la structure => BD natives, wrappers, serveurs… Solutions choisies intergiciels (middlewares) • XML-DBMS – code source libre • XMLSpy ® 2004 – produit commercial • … Solutions choisies SGBD - XML • Oracle • … XML-DBMS XML-DBMS XML-DBMS • Principale raison d’existence: XML (données) <=> BD • Perl ou Java • Besoins: XML-DBMS, JDK, SGBD, JDBC, parser XML (+ DOM ou SAX) • Clé: mapping (correspondance XML => relationnel) XML-DBMS: mapping • XML => tables <?xml version="1.0"?> <A> <a1></a1> <a2></a2> <a3></a3> </A> Table: A a1 a2 a3 <?xml version="1.0"?> <root> <A a1="" a2="" .../> <A a1="" a2="" .../> <A a1="" a2="" .../> </root> XML-DBMS: étapes 1. ConvertSchema.java • Schema XML => DTD 2. GenerateMap.java • DTD => .map + .sql 3. Transfer.java • .xml + .map => BD XML-DBMS: exemple (XML) <?xml version="1.0" encoding="ISO-8859-1"?> <vote_config> <voting_session id="1" app="starac2" time_start="200401150900" time_end="200402012100"> <vote_question question="Quel académicien voulez-vous sauver?"/> <vote_candidate id="1" name="Wilfred"/> <vote_candidate id="2" name="Jimbo"/> <vote_candidate id="3" name="Bob"/> </voting_session> </vote_config> XML-DBMS: exemple (DTD) <?xml version="1.0" encoding="ISO-8859-1"?> <!ELEMENT broadcast EMPTY> <!ATTLIST broadcast days CDATA #REQUIRED time_start CDATA #REQUIRED time_end CDATA #REQUIRED > <!ELEMENT broadcasts (broadcast+)> <!ELEMENT vote_app (broadcasts, voting_session)> <!ATTLIST vote_app app CDATA #REQUIRED > <!ELEMENT vote_candidate EMPTY> <!ATTLIST vote_candidate id CDATA #REQUIRED (…) XML-DBMS: exemple (.sql) CREATE TABLE `broadcast` (`broadcastOrder` INTEGER, `time_start` VARCHAR(255), `time_end` VARCHAR(255), `broadcastsFK` INTEGER, `days` VARCHAR(255)) CREATE TABLE `vote_question` (…) CREATE TABLE `vote_config` (…) CREATE TABLE `voting_session` (…) CREATE TABLE `vote_candidate` (…) CREATE TABLE `broadcasts` (…) CREATE TABLE `vote_app` (…) XML-DBMS: exemple (BD) • Structure de tables réelle… XML-DBMS: exemple (.map) <?xml version='1.0' ?> <!DOCTYPE XMLToDBMS SYSTEM "xmldbms.dtd" > <XMLToDBMS Version="1.0"> <Options> </Options> <Maps> <ClassMap> <ElementType Name="broadcast"/> <ToClassTable> <Table Name="broadcast"/> </ToClassTable> <PropertyMap> <Attribute Name="time_start"/> <ToColumn> <Column Name="time_start"/> </ToColumn> (…) XML-DBMS: exemple (Transfer.java) • Transfer.java (.xml + .map => BD) – Configuration d’une connexion ODBC – Configuration du parser XML utilisé (Oracle, Sun ou Xerces) – Compilation et: java Transfer –todbms fich.map fich.xml XMLSpy ® 2004 XMLSpy ® 2004 • Altova - Depuis 1992 - Logiciel XML 1998 - Série Spy 1999 - 1 291 135 utilisateurs XMLSpy ® 2004 • Développement • Service Web • Édition intelligente • Connectivité ODBC ADO XMLSpy ® 2004 • Génération d’un schéma DTD XMLSpy ® 2004 • Exportation du document - XML => Base de données relationnel Oracle Oracle XML DB - Architecture Oracle XML DB - Architecture Oracle XML DB - Repository Oracle XML DB - Fonctionnalités XMLType : • Type de colonnes ou tables. • Fonctions pour créer, extraire et indexer des données XML. • Paramètre, valeur de retour ou type de variable pour PL/SQL. CREATE TABLE example1 ( key_column VARCHAR2(10) primary key, xml_column XMLType ); CREATE TABLE example2 of XMLType; Oracle XML DB – Fonctionnalités • XMLType permet de valider le document XML selon son schéma. isSchemaValid() schemaValidate() Oracle XML DB – Fonctionnalités public void doInsert(Connection conn, Document doc) throws Exception { String SQLTEXT = "insert into PURCHASEORDER values (?)"; XMLType xml = null; xml = XMLType.createXML(conn,doc); OraclePreparedStatement sqlStatement = null; sqlStatement = (OraclePreparedStatement) conn.prepareStatement(SQLTEXT); sqlStatement.setObject(1,xml); sqlStatement.execute(); } Oracle XML DB – Fonctionnalités • Schéma XML – Entreposage structuré Vs. – Entreposage non structuré Oracle XML DB - Fonctionnalités •XML et SQL – existsNode() – extract() – extractValue() – updateXML() – XMLSequence() Oracle XML DB Analyse et comparaison XMLSpy ® 2004 XML-DBMS Maison Oracle Internet Internet N/A Oracle 9i v.2 + $59 - $999 US Coûts de dev. Coûts de dev. 521 $ - 52 000 $ * Facile Moyen Facile Facile Apprentissage Facile-moyen Moyen Facile Facile-moyen Documentation Beaucoup Peu, mais bien N/A Beaucoup Élevée Moyenne Moyenne Très élevée N/A N/A N/A N/A Moyenne Faible N/A Élevée Fiable N/A Excellent (!) : ) Excellent Oui Groupes seul. Maison Oui Disponibilité Coût Utilisation Fiabilité Performance Maturité Compagnie Support technique * Par processeur… Références • http://www.rpbourret.com/xml/XMLAndDatabases.htm • http://www.rpbourret.com/xmldbms/ • http://www.xml.com/databases/ • http://www.xmlspy.com/manual/exportingxmldatatoextern aldata.htm • http://otn.oracle.com/tech/xml/xmldb/index.html Discussion et conclusion Questions ?