You are on page 1of 31

Llenguatge de marques i sistemes de gesti d'informaci

UF 2: mbits d'aplicaci de l'XML Part 2b

XML en les BDD Relacionals


Xavier Sala Pujolar IES Cendrassos

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 agenda WHERE nom=Filomenu and cognom=Pi;

Administraci de Sistemes Informtics 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 especfics ...

Administraci de Sistemes Informtics 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 mtodes podem recuperar i manipular dades del fitxer XML

Suporta l'estndard SQL/XML Pot generar XML a partir de dades de la base de dades relacional
Administraci de Sistemes Informtics i Xarxes

SQL/XML

En l'estndard SQL (des de SQL 2003) s'hi han definit una srie d'extensions de XML

SQL/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

Administraci de Sistemes Informtics 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 Desprs podrem treballar-hi de la forma habitual

Interrogar als documents XML de la Base de Dades

Podrem operar amb els camps XML En comptes d'obtenir resultats tabulats podrem obtenir documents XML
Administraci de Sistemes Informtics i Xarxes

Generar XML a partir de dades relacionals

SQL/XML: XMLType

L'estndard 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

CREATE TABLE exemple (ID INT NOT NULL, Valor XMLTYPE);

Aix ens permet afegir fitxers XML en camps de bases de dades relacionals i treballar-hi
Administraci de Sistemes Informtics 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 Noms poden contenir XML ben format (no s'hi poden posar fragments) XML basat en un esquema XML sense esquema

Es pot entrar:

Es pot fer servir en PL/SQL, procediments emmagatzemats, variables, retornar valors, etc...
Administraci de Sistemes Informtics 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

CREATE TABLE exemple (ID INT NOT NULL, Valor XMLType) XMLType Valor STORE AS CLOB;

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";
Administraci de Sistemes Informtics i Xarxes

SQL/XML: XMLType

Per tant en Oracle es permet que els camps XML puguin ser controlats a travs d'XSD o de DTD L'esquema s'ha de registrar prviament i s'ha d'associar l'esquema a la taula

Hi ha funcions per validar els documents: XMLIsValid(), schemavalidate()


Administraci de Sistemes Informtics i Xarxes

SQL/XML Registrar esquema

Per poder fer servir un esquema cal registrar-lo amb registerSchema


CREATE OR REPLACE DIRECTORY xsd_dir AS 'c:\'; / BEGIN DBMS_XMLSCHEMA.registerSchema( SCHEMAURL=>'persona.xsd', SCHEMADOC=> bfilename('xsd_dir','persona.xsd'), CSID=>nls_charset_id('AL32UTF8')); END; /

Les connexions als esquemes es fan a travs de:


http://localhost:8080 ftp://localhost:2100
Administraci de Sistemes Informtics i Xarxes

SQL/XML Esquema

Un cop registrat l'esquema el podem fer servir per crear taules:


CREATE TABLE exemple (ID INT NOT NULL, Valor XMLType) xmltype column Valor XMLSCHEMA "persona.xsd" ELEMENT "persona";

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 definicin de esquema para 'alumne' (espacio de nombres '') en el principal '/'
Administraci de Sistemes Informtics i Xarxes

SQL/XML: XMLType

Podem treballar amb dades d'aquest tipus amb la forma habitual:


INSERT INTO gent VALUES (1, XMLType(' <persona> <nom>Federicu</nom> <cognom>Pi</cognom> </persona>'));

Es poden carregar fitxers amb bfilename:


CREATE DIRECTORY XMLDIR AS 'C:\XML\'; INSERT INTO exemple VALUES(1,XMLType(bfilename('XMLDIR','alumnes.xml' ), nls_charset_id('AL32UTF8')));
Administraci de Sistemes Informtics 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 s similar a l'anterior per retorna un grup de nodes, atributs o valors Retorna un valor escalar resultat d'avaluar l'expressi Xpath

extract()

extractvalue()

Administraci de Sistemes Informtics i Xarxes

SQL/XML: XMLType

Aix ens permet obtenir-ne els valors a travs d'expressions Xpath


SELECT a.Valor.extract('//nom') noms FROM exemple a;

Que es pot fer servir en qualsevol lloc. Per exemple en les condicions
DELETE FROM exemple WHERE Valor.extract('//nom/text()').getStringVal() = 'Federicu';

Administraci de Sistemes Informtics i Xarxes

SQL/XML: XMLType

Tamb es proporcionen funcions per actualitzar dades de dins dels camps XML
updatexml insertChildXML Reemplaa nodes XML 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 Informtics 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:

UPDATE exemple SET Valor = updateXML(Valor,'//alumne/nom/text()','Filomenu') WHERE existsNode(Valor,'//alumne[cognom=Pi])=1;

Aix ens modificaria el nom de l'alumne que t de cognom Pi en el cas en que n'hi hagi algun

Administraci de Sistemes Informtics 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 Informtics 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 Informtics i Xarxes

SQL/XML

Les funcions que ofereix sn:


xmlelement() xmlattributes() xmlroot() xmlcomment() xmlpi() xmlparse() xmlforest() xmlconcat() xmlagg()
Crea un element i en permet especificar el nom Crea un atribut a partir de les columnes fent servir el nom de la columna com a nom d'atribut Crea l'arrel d'un document XML Crea un comentari XML Crea una instrucci de procs Processa una cadena com si fos un XML i en torna la estructura corresponent Crea elements XML a partir de les columnes fent servir el nom de la columna com etiqueta Barreja valors XML individuals per crear un arbre Combina una collecci de files, cada una amb un sol valor, per crear un valor que cont un arbre
Administraci de Sistemes Informtics i Xarxes

SQL/XML:Generar
Alumne
nom cognom

Filomenu Federicu

Pi Garcia

SELECT xmlelement('alumne', xmlforest(a.nom, a.cognom)) FROM Alumne a;


<alumne> <nom>Filomenu</nom> <cognom>Pi</cognom> </alumne> <alumne> <nom>Federicu</nom> <cognom>Garcia</cognom> </alumne>
Administraci de Sistemes Informtics 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 Informtics 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 c WHERE 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 Informtics 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 Informtics i Xarxes

Oracle

Oracle tamb proporciona formes no estndard de generar XML


SELECT SYS_XMLGEN(nom) FROM Alumne a; <?xml version=1.0 ?> <nom>Federicu</nom> <nom>Filomenu</nom>

A travs dels objectes XMLFormat podem controlar la visualitzaci, etc...

Administraci de Sistemes Informtics i Xarxes

Microsoft SQL Server

Defineix la classe de dades XML per emmagatzemar XML


A partir dels seus mtodes 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 Informtics 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

CREATE XML SCHEMA COLLECTION nom AS N'<?xml version=1.0?> <xs:schema ... ... CREATE TABLE a (ID INT, B XML(nom));

No Tipat: No associat a un fitxer d'esquema

Administraci de Sistemes Informtics i Xarxes

Microsoft SQL Server

Podem inserir XML en una taula fcilment amb el tipus XML:


CREATE TABLE alumnes (index INT, dades XML) DECLARE @xmldata xml SET @xmldata = ' <persona> <nom>Xavier</nom> <cognom>Sala</cognom> </persona> ' INSERT INTO alumnes VALUES(1,@xmldata)

Administraci de Sistemes Informtics i Xarxes

Microsoft SQL Server

SQL Server ofereix unes extensions que permeten treballar amb camps XML. Fa diferncies entre els que tenen XSD (on s'optimitza internament) o els que no
SELECT dades.query('//nom') FROM alumne SELECT dades.value('//persona','varchar(255)') FROM taula SELECT dades.exists('/gent/persona/nom') FROM taula

Administraci de Sistemes Informtics i Xarxes

Microsoft SQL Server

Tamb podem modificar dades individuals dins dels XML amb insert, replace i delete
UPDATE taula SET MyXML.MODIFY ( ' insert <persona> <nom>Filomenu</nom> <cognom>Garcia</nom> </persona> after (/persona)[1] ' )

Administraci de Sistemes Informtics i Xarxes

Microsoft SQL Server

Podem exportar dades relacionals a XML de diferents formes. La ms senzilla s RAW


Alumne
nom cognom

Filomenu Federicu

Pi Garcia

SELECT c.nom, c.cognom FROM alumne.nom AS c FOR XML RAW('alumne'), ROOT('alumnes');


<alumnes> <alumne nom=Filomenu cognom=Pi /> <alumne nom=Federicu cognom=Garcia /> </alumnes>
Administraci de Sistemes Informtics i Xarxes

You might also like