ASIX-M4-UF2-4b-XML-BDD-Relacionals
-
Upload
xavier-sala -
Category
Documents
-
view
25 -
download
2
Transcript of ASIX-M4-UF2-4b-XML-BDD-Relacionals
![Page 1: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/1.jpg)
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
![Page 2: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/2.jpg)
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”;
![Page 3: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/3.jpg)
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
– ...
![Page 4: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/4.jpg)
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
![Page 5: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/5.jpg)
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
![Page 6: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/6.jpg)
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
![Page 7: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/7.jpg)
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);
![Page 8: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/8.jpg)
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...
![Page 9: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/9.jpg)
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;
![Page 10: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/10.jpg)
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()
![Page 11: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/11.jpg)
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;/
![Page 12: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/12.jpg)
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";
![Page 13: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/13.jpg)
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')));
![Page 14: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/14.jpg)
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
![Page 15: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/15.jpg)
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';
![Page 16: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/16.jpg)
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
![Page 17: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/17.jpg)
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;
![Page 18: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/18.jpg)
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;
![Page 19: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/19.jpg)
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>
![Page 20: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/20.jpg)
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
![Page 21: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/21.jpg)
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;
![Page 22: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/22.jpg)
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>
![Page 23: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/23.jpg)
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>
![Page 24: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/24.jpg)
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> ...
![Page 25: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/25.jpg)
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>
![Page 26: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/26.jpg)
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
![Page 27: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/27.jpg)
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));
![Page 28: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/28.jpg)
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)
![Page 29: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/29.jpg)
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
![Page 30: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/30.jpg)
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]')
![Page 31: ASIX-M4-UF2-4b-XML-BDD-Relacionals](https://reader033.fdocuments.es/reader033/viewer/2022042623/5460c008b1af9f09598b5588/html5/thumbnails/31.jpg)
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>