asix-m4-uf2-4b-xml-bdd-relacionals
TRANSCRIPT
Llenguatge de marques i sistemes de gestió d'informació
XML en les BDD Relacionals
Xavier Sala PujolarIES Cendrassos
UF 2: Àmbits d'aplicació de l'XMLPart 2b
Administració de Sistemes Informàtics i Xarxes
Sistemes Gestors de BDD● Tradicionalment les dades s'emmagatzemen en
Sistemes Gestors de Base de Dades● Moltes de les dades actuals estan en SGBDD
– Els SGBD fan servir SQL per accedir a les dades
SELECT nom, cognom, telefon FROM agendaWHERE nom=”Filomenu” and cognom=”Pi”;
Administració de Sistemes Informàtics i Xarxes
Sistemes Gestors de BDD● La majoria de SGBD tenen algun tipus de
suport per emmagatzemar XML
– Suport d'XQuery i/o XPath
– Suport SQL/XML
– Extensions i tipus de dades específics
– ...
Administració de Sistemes Informàtics i Xarxes
Oracle● Podem afegir els documents XML a una Base
de dades
● Defineix la classe de dades XMLType per emmagatzemar XML✔ A partir dels seus mètodes podem recuperar
i manipular dades del fitxer XML
● Suporta l'estàndard SQL/XML
● Pot generar XML a partir de dades de la base de dades relacional
Administració de Sistemes Informàtics i Xarxes
SQL/XML● En l'estàndard SQL (des de SQL 2003) s'hi han
definit una sèrie d'extensions de XML
● Van ser desenvolupades per INCITS H2.3 amb la participació de Microsoft, Oracle, IBM, Sybase i DataDirect Technologies
– Tot i que Microsoft no té previst implementar-lo
SQL/XML
Administració de Sistemes Informàtics i Xarxes
SQL/XML● En general podem resumir el que podem fer
en:– Afegir les dades XML a la Base de dades
directament● Ens permetrà afegir dades XML com a columnes
relacionals● Després podrem treballar-hi de la forma habitual
– Interrogar als documents XML de la Base de Dades
● Podrem operar amb els camps XML
– Generar XML a partir de dades relacionals● En comptes d'obtenir resultats tabulats podrem
obtenir documents XML
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● L'estàndard SQL/XML defineix un tipus de
dades XML que en Oracle s'anomena XMLType
– Aquest tipus de dades permet:● Fer servir dades XML a partir d'eines relacionals● Fer servir eines XML en camps de taules
relacionals
– Això ens permet afegir fitxers XML en camps de bases de dades relacionals i treballar-hi
CREATE TABLE exemple (ID INT NOT NULL, Valor XMLTYPE);
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● Els tipus de dades XMLType
– Es pot fer servir com un tipus de dades de la base de dades
● Es pot fer servir en consultes normalment barrejat amb altres tipus
● Només poden contenir XML ben format (no s'hi poden posar fragments)
– Es pot entrar:● XML basat en un esquema● XML sense esquema
– Es pot fer servir en PL/SQL, procediments emmagatzemats, variables, retornar valors, etc...
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● El XMLType es pot emmagatzemar a la Base
de Dades de dues formes:– CLOB: Es guarda el document directament tal
com és ● no permet modificacions internes● No cal que el document sigui ben format
– Estructuradament: Es converteix internament en taules però manté l'arbre DOM
CREATE TABLE exemple (ID INT NOT NULL, Valor XMLType); XMLSCHEMA "http://iescendrassos.net/persona.xsd" ELEMENT "persona";
CREATE TABLE exemple (ID INT NOT NULL, Valor XMLType) XMLType Valor STORE AS CLOB;
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● Per tant en Oracle es permet que els camps
XML puguin ser controlats a través d'XSD o de DTD
● L'esquema s'ha de registrar prèviament i s'ha d'associar l'esquema a la taula
– Hi ha funcions per validar els documents: XMLIsValid(), schemavalidate()
Administració de Sistemes Informàtics i Xarxes
SQL/XML Registrar esquema● Per poder fer servir un esquema cal registrar-lo
amb registerSchema
– Les connexions als esquemes es fan a través de:● http://localhost:8080● ftp://localhost:2100
CREATE OR REPLACE DIRECTORY xsd_dir AS 'c:\';/BEGINDBMS_XMLSCHEMA.registerSchema(SCHEMAURL=>'persona.xsd',SCHEMADOC=> bfilename('xsd_dir','persona.xsd'),CSID=>nls_charset_id('AL32UTF8'));END;/
Administració de Sistemes Informàtics i Xarxes
SQL/XML Esquema● Un cop registrat l'esquema el podem fer servir
per crear taules:
● I al afegir-hi dades comprovarà que realment segueixin l'esquema
– En cas de no seguir l'esquema l'insert o l'update fallaran
Error SQL: ORA-30937: No hay ninguna definición de esquema para 'alumne' (espacio de nombres '') en el principal '/'
CREATE TABLE exemple (ID INT NOT NULL, Valor XMLType) xmltype column Valor XMLSCHEMA "persona.xsd" ELEMENT "persona";
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● Podem treballar amb dades d'aquest tipus amb
la forma habitual:
● Es poden carregar fitxers amb bfilename:
INSERT INTO gent VALUES (1, XMLType(' <persona> <nom>Federicu</nom> <cognom>Pi</cognom> </persona>'));
CREATE DIRECTORY XMLDIR AS 'C:\XML\';INSERT INTO exemple VALUES(1,XMLType(bfilename('XMLDIR','alumnes.xml'), nls_charset_id('AL32UTF8')));
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● Tenim varies formes d'extreure dades de dintre
dels camps XML– existsnode()
● Comprova si la expressió XPath retorna algun valor i si ho fa retorna 1
● Sinó retorna 0
– extract()● És similar a l'anterior però retorna un grup de
nodes, atributs o valors
– extractvalue()● Retorna un valor escalar resultat d'avaluar
l'expressió Xpath
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● Això ens permet obtenir-ne els valors a través
d'expressions Xpath
● Que es pot fer servir en qualsevol lloc. Per exemple en les condicions
SELECT a.Valor.extract('//nom') “noms” FROM exemple a;
DELETE FROM exemple WHERE Valor.extract('//nom/text()').getStringVal() = 'Federicu';
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● També es proporcionen funcions per actualitzar
dades de dins dels camps XML
updatexml Reemplaça nodes XML
insertChildXML Insereix un element XML com a fill del node especificat
insertXMLBefore Insert XML nodes of any kind immediately before a given node (other than an attribute node)
appendChildXML Insert XML nodes of any kind as the last child nodes of a given element node
deleteXML Delete XML nodes of any kind
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● Per tant podem modificar valors amb la
comanda updateXML – especificant quin valor volem canviar en XPath i
el nou valor:
– Això ens modificaria el nom de l'alumne que té de cognom “Pi” en el cas en que n'hi hagi algun
UPDATE exemple SET Valor = updateXML(Valor,'//alumne/nom/text()','Filomenu') WHERE existsNode(Valor,'//alumne[cognom=”Pi”])=1;
Administració de Sistemes Informàtics i Xarxes
SQL/XML: XMLType● El mateix fent servir la funció insertChildXML
UPDATE exemple SET Valor = insertChildXML(Valor, '/alumnes','alumne' XMLType('<alumne> <nom>Pere</nom> <cognom>Boix</cognom> </alumne>) WHERE existsNode(Valor,'//alumne[position()=2]) = 1;
Administració de Sistemes Informàtics i Xarxes
SQL/XML: Generar XML● La idea consisteix en afegir a les comandes
SELECT el que cal per fer que surtin els resultats en XML en comptes de en taules
SELECT ....<persones> <nom>Pere</nom> <nom>Joan</nom> <nom>Frederic</nom></persones>
Administració de Sistemes Informàtics i Xarxes
SQL/XML● Les funcions que ofereix són:
xmlelement() Crea un element i en permet especificar el nom
xmlattributes() Crea un atribut a partir de les columnes fent servir el nom de la columna com a nom d'atribut
xmlroot() Crea l'arrel d'un document XML
xmlcomment() Crea un comentari XML
xmlpi() Crea una instrucció de procés
xmlparse() Processa una cadena com si fos un XML i en torna la estructura corresponent
xmlforest() Crea elements XML a partir de les columnes fent servir el nom de la columna com etiqueta
xmlconcat() Barreja valors XML individuals per crear un arbre
xmlagg() Combina una col·lecció de files, cada una amb un sol valor, per crear un valor que conté un arbre
Administració de Sistemes Informàtics i Xarxes
SQL/XML:Generarnom cognom
Filomenu Pi
Federicu Garcia
Alumne
<alumne> <nom>Filomenu</nom> <cognom>Pi</cognom></alumne><alumne> <nom>Federicu</nom> <cognom>Garcia</cognom></alumne>
SELECT xmlelement('alumne', xmlforest(a.nom, a.cognom)) FROM Alumne a;
Administració de Sistemes Informàtics i Xarxes
SQL/XML● També poden generar resultats amb
XMLConcat
SELECT xmlconcat( xmlelement('nom',al.nom), xmlelement('cognom',al.cognom)) FROM alumnes al
<nom>Filomenu</nom><cognom>Pi</cognom><nom>Federicu</nom><cognom>Garcia</cognom>
Administració de Sistemes Informàtics i Xarxes
SQL/XML:Generar● Combinant podem definir atributs
SELECT xmlelement('alumne', xmlattributes(c.descripcio as classe), xmlforest(a.nom, a.cognom)) FROM Alumne a, Classe cWHERE c.id = a.classe;
<alumne classe=”1r”> <nom>Filomenu</nom> <cognom>Pi</cognom></alumne><alumne classe=”1r”> <nom>Federicu</nom> <cognom>Garcia</cognom></alumne>
Administració de Sistemes Informàtics i Xarxes
SQL/XML:Generar● O fer-hi jerarquies:
SELECT xmlelement("curs", xmlattributes(c.id), (SELECT xmlagg(xmlelement("alumne", xmlforest(a.nom, a.cognom))) from alumne a where a.curs = c.id) ) from classe c;
<curs id=”1”> <alumne> <nom>Filomenu</nom> <cognom>Garcia</cognom> </alumne> ...
Administració de Sistemes Informàtics i Xarxes
Oracle● Oracle també proporciona formes “no
estàndard” de generar XML
● A través dels objectes XMLFormat podem controlar la visualització, etc...
SELECT SYS_XMLGEN(nom) FROM Alumne a;
<?xml version=”1.0” ?><nom>Federicu</nom><nom>Filomenu</nom>
Administració de Sistemes Informàtics i Xarxes
Microsoft SQL Server
● Defineix la classe de dades XML per emmagatzemar XML✔ A partir dels seus mètodes podem recuperar
i manipular dades del fitxer XML✔ Pot incloure XSD per validar els documents
● Integra OPENXML però no suporta SQL/XML
● Afegeix 'FOR' XML per generar resultats en XML
Administració de Sistemes Informàtics i Xarxes
Microsoft SQL Server● El tipus de dades XML de SQL Server permet
emmagatzemar tant documents com fragments de documents XML
● Pot ser:– Tipat: Associat a un fitxer d'esquema
– No Tipat: No associat a un fitxer d'esquema
CREATE XML SCHEMA COLLECTION nom AS N'<?xml version=”1.0”?><xs:schema ... ...CREATE TABLE a (ID INT, B XML(nom));
Administració de Sistemes Informàtics i Xarxes
Microsoft SQL Server● Podem inserir XML en una taula fàcilment amb
el tipus XML:CREATE TABLE alumnes (index INT, dades XML)
DECLARE @xmldata xmlSET @xmldata = '<persona> <nom>Xavier</nom> <cognom>Sala</cognom></persona>'INSERT INTO alumnes VALUES(1,@xmldata)
Administració de Sistemes Informàtics i Xarxes
Microsoft SQL Server
SELECT dades.query('//nom') FROM alumne
SELECT dades.value('//persona','varchar(255)') FROM taula
SELECT dades.exists('/gent/persona/nom') FROM taula
● SQL Server ofereix unes extensions que permeten treballar amb camps XML.
● Fa diferències entre els que tenen XSD (on s'optimitza internament) o els que no
Administració de Sistemes Informàtics i Xarxes
Microsoft SQL Server● També podem modificar dades individuals dins
dels XML amb insert, replace i delete
UPDATE taulaSET MyXML.MODIFY('insert<persona> <nom>Filomenu</nom> <cognom>Garcia</nom></persona>after (/persona)[1]')
Administració de Sistemes Informàtics i Xarxes
Microsoft SQL Server● Podem exportar dades relacionals a XML de
diferents formes. La més senzilla és RAW
SELECT c.nom, c.cognomFROM alumne.nom AS cFOR XML RAW('alumne'), ROOT('alumnes');
nom cognom
Filomenu Pi
Federicu Garcia
Alumne
<alumnes> <alumne nom=”Filomenu” cognom=”Pi” /> <alumne nom=”Federicu” cognom=”Garcia” /></alumnes>