ztb:xmlhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ztb:xml spis treści postgresql...

49
I.Wojnicki, ZTB:XML Intro ZTB: XML Igor Wojnicki Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie 6 października 2016 Igor Wojnicki (AGH, KIS) XML 6 października 2016 1 / 49

Upload: others

Post on 22-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Intro

ZTB: XML

Igor Wojnicki

Katedra Informatyki Stosowanej, Akademia Górniczo-Hutnicza w Krakowie

6 października 2016

Igor Wojnicki (AGH, KIS) XML 6 października 2016 1 / 49

Page 2: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Intro

Problem

XML.

DB.

DB → XML.

XML → DB.

XML ↔ DB.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 2 / 49

Page 3: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Wstęp

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 3 / 49

Page 4: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Wstęp

Możliwości

Eksport do XML.

Typ danych XML.

XPath do wyszukiwania.

Integracja z SQL.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 4 / 49

Page 5: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Wstęp

Jak użyć XML

Typ danych: xml

INSERT INTO test VALUES (XMLPARSE (DOCUMENT ’<doc>...</doc>’),...)

SELECT XMLSERIALIZE (DOCUMENT data AS varchar)FROM test;

INSERT INTO test VALUES (’<doc>...</doc>’,...)

SELECT data FROM test;

Domyślnie przetwarzane jako CONTENT, a nie DOCUMENT – pozwalana las.

SET XML OPTION { DOCUMENT | CONTENT };

Igor Wojnicki (AGH, KIS) XML 6 października 2016 5 / 49

Page 6: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Wstęp

Cechy

Brak operatorów porównania.Do pobierania/indeksowania należy użyć:

rzutowania na tekst (text/varchar),wyrażeń XPath.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 6 / 49

Page 7: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 7 / 49

Page 8: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Elementy I

Generacja element(ów) z wiersza danych.Rozwiązanie czołgowe.

SELECT ’<klient id="’ || idklienta || ’">’ || nazwa || ’</klient>’FROM klienci;

Igor Wojnicki (AGH, KIS) XML 6 października 2016 8 / 49

Page 9: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Elementy II

Po prostu rozwiązanie.

xmlelement(name name[, xmlattributes(value [AS attname] [, ... ])][, content, ...])

Przykłady:SELECT xmlelement(name customer);xmlelement-------------<customer/>

SELECT xmlelement(name customer, ’dane klienta’);xmlelement

------------------------------------<customer>dane klienta</customer>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 9 / 49

Page 10: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Elementy III

SELECT xmlelement(name customer, ’dane’,’klienta’);xmlelement

----------------------------------<customer>daneklienta</customer>

SELECT xmlelement(name customer, xmlelement(name name,’nazwa klienta’));xmlelement

-------------------------------------------------<customer><name>nazwa klienta</name></customer>

SELECT xmlelement(name customer,xmlelement(name name,’nazwa klienta’),xmlelement(name address,’adres klienta’));

xmlelement--------------------------------------------------------<customer><name>nazwa klienta</name><address>adres klienta</address></customer>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 10 / 49

Page 11: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Elementy IV

SELECTxmlelement(name customer,xmlelement(name name,xmlelement(name fn,’imie’),xmlelement(name ln,’nazwisko’)),xmlelement(name address,’adres klienta’));

xmlelement-------------------------------------<customer><name><fn>imie</fn><ln>nazwisko</ln></name><address>adres klienta</address></customer>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 11 / 49

Page 12: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Elementy V

SELECTxmlelement(name customer,xmlattributes(’a10’ as id),’dane klienta’);

xmlelement------------------------------------------<customer id="a10">dane klienta</customer>

SELECTxmlelement(name customer,xmlattributes(’a10’ as id,’a11’ as ref), ’dane klienta’);

xmlelement----------------------------------------------------<customer id="a10" ref="a11">dane klienta</customer>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 12 / 49

Page 13: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Elementy VI

Dane z tabeli...SELECTxmlelement(name customer, xmlelement(name name,nazwa))FROM klienci;

xmlelement-----------------------------------------------------<customer><name>Magdalena Sowinska</name></customer><customer><name>Malgorzata Babik</name></customer>

SELECTxmlelement(name customer,xmlattributes(idklienta as id),xmlelement(name name,nazwa))

FROM klienci;xmlelement

-----------------------------------------------------------------<customer id="msowins"><name>Magdalena Sowinska</name></customer><customer id="mbabik"><name>Malgorzata Babik</name></customer>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 13 / 49

Page 14: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Elementy VII

Atrybuty na podstawie kolumnSELECT xmlelement(name customer,xmlattributes(idklienta), nazwa)FROM klienci;

xmlelement-----------------------------------------------------------<customer idklienta="msowins">Magdalena Sowinska</customer><customer idklienta="mbabik">Malgorzata Babik</customer>

Znaki niedozwoloneSELECT xmlelement(name customer,’<>&’);

xmlelement------------------------------------<customer>&lt;&gt;&amp;</customer>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 14 / 49

Page 15: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Wiele elementów I

xmlforest(content [AS name] [, ...])

Przykłady:SELECT xmlforest(’Nowak’ as customer,’Wielicka 25’ as address);

xmlforest----------------------------------------------------------<customer>Nowak</customer><address>Wielicka 25</address>

SELECT xmlforest(idklienta, nazwa) FROM klienci;xmlforest

-------------------------------------------------------------------<idklienta>msowins</idklienta><nazwa>Magdalena Sowinska</nazwa><idklienta>mbabik</idklienta><nazwa>Malgorzata Babik</nazwa>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 15 / 49

Page 16: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Wiele elementów II

zwykle w połączeniu z xmlelement():SELECT xmlelement(name customer,xmlforest(idklienta, nazwa)) FROM klienci;

xmlelement-------------------------------------------------------------------<customer><idklienta>msowins</idklienta><nazwa>Magdalena Sowinska</nazwa></customer><customer><idklienta>mbabik</idklienta><nazwa>Malgorzata Babik</nazwa></customer>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 16 / 49

Page 17: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Root

xmlroot(xml, version text | no value [, standalone yes|no|no value])

Przykład

SELECT xmlroot(xmlelement(name test,’content’), version 1.1,standalone yes);xmlroot

------------------------------------------------------------<?xml version="1.1" standalone="yes"?><test>content</test>

Wartości: version i standalone modyfikują dane w elemencie <?xml>.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 17 / 49

Page 18: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Łączenie

xmlconcat(xml[, ...])

Przykład

SELECT xmlconcat(’<abc/>’, ’<bar>foo</bar>’);

xmlconcat----------------------<abc/><bar>foo</bar>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 18 / 49

Page 19: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Agregacja XMLŁączy dane XML z wielu wierszy.xmlagg(xml)

Problem: generacja całego dokumentu za pomocą 1-go zapytania.SELECT xmlroot(xmlelement(name customer,nazwa), version 1.1) FROM klienci;

xmlroot----------------------------------------------------------------<?xml version="1.1"?><customer>Magdalena Sowinska</customer><?xml version="1.1"?><customer>Malgorzata Babik</customer>

Rozwiązanie:SELECT xmlroot(xmlelement(name data,

xmlagg(xmlelement(name customer,nazwa))),version 1.1) FROM klienci;

<?xml version="1.1"?><data><customer>Magdalena Sowinska</customer><customer>Malgorzata Babik</customer>...</data>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 19 / 49

Page 20: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

XML Processing Instructions

xmlpi(name target [, content])

Przykład:

SELECT xmlpi(name "xml-stylesheet",’type="text/xsl" href="style.xsl"’);

xmlpi-----------------------------------------------------<?xml-stylesheet type="text/xsl" href="style.xsl"?>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 20 / 49

Page 21: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Eksport

Komentarze

xmlcomment(text)

Przykład:

SELECT xmlcomment(’dane orientacyjne’);xmlcomment

--------------------------<!--dane orientacyjne-->

Igor Wojnicki (AGH, KIS) XML 6 października 2016 21 / 49

Page 22: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Porównywanie własności

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 22 / 49

Page 23: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Porównywanie własności

Czy jest dokumentem?

xml IS DOCUMENT

Przykład:

SELECT ’<a></a>’ IS DOCUMENT;?column?----------t

SELECT ’<a></a><b></b>’ IS DOCUMENT;?column?----------f

Igor Wojnicki (AGH, KIS) XML 6 października 2016 23 / 49

Page 24: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Porównywanie własności

Czy jest poprawnie sformułowany

Czy podany tekst jest dokumentem XML? Czy rzutowanie na typ XMLbędzie działać.

xml_is_well_formed(text)

Przykład:

SELECT xml_is_well_formed_document(’<pg:foo xmlns:pg="http://postgresql.org/stuff">bar</my:foo>’);xml_is_well_formed_document-----------------------------f

Igor Wojnicki (AGH, KIS) XML 6 października 2016 24 / 49

Page 25: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Porównywanie własności

Czy dane istnieją?

Czy wyrażenie XPath zwróci jakieś dane?

XMLEXISTS(text PASSING [BY REF] xml [BY REF])

Przykład:

SELECT xmlexists(’//town[text() = ’’Toronto’’]’PASSING BY REF’<towns><town>Toronto</town><town>Ottawa</town></towns>’);

xmlexists------------t

Nawiasy kwadratowe w XPath oznaczają użycie predykatu; określeniewarunku.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 25 / 49

Page 26: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 26 / 49

Page 27: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Tabele, zapytania i XML I

table_to_xml(tbl regclass, nulls boolean, tableforest boolean, targetns text)query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)cursor_to_xml(cursor refcursor, count int, nulls boolean,

tableforest boolean, targetns text)

nulls wartości null reprezentowane przez element<nazwaKolumny xsi:nil="true"/>

tableforest każdy wiersz osobnym elementem,

targetns namespace.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 27 / 49

Page 28: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Tabele, zapytania i XML II

Przykład:

SELECT table_to_xml(’odbiorcy’, false, false, ’’);table_to_xml

------------------------------------------------------------------<odbiorcy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+<row> +<idodbiorcy>1</idodbiorcy> +<nazwa>Slawomir Zeganek</nazwa> +<miasto>Krakow</miasto> +<kod>30-059</kod> +<adres>Al A. Mickiewicza 4/3</adres> +</row> +<row> +<idodbiorcy>2</idodbiorcy> +<nazwa>Dorota Pszczolka</nazwa> +<miasto>Slomniki</miasto> +<kod>32-090</kod> +<adres>ul. Wiosenna 8</adres> +</row> +... +</odbiorcy> +

Igor Wojnicki (AGH, KIS) XML 6 października 2016 28 / 49

Page 29: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Tabele, zapytania i XML III

Przykład:

SELECT table_to_xml(’odbiorcy’, false, true, ’’);table_to_xml

------------------------------------------------------------------<odbiorcy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+<idodbiorcy>1</idodbiorcy> +<nazwa>Slawomir Zeganek</nazwa> +<miasto>Krakow</miasto> +<kod>30-059</kod> +<adres>Al A. Mickiewicza 4/3</adres> +</odbiorcy> +<odbiorcy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+<idodbiorcy>2</idodbiorcy> +<nazwa>Dorota Pszczolka</nazwa> +<miasto>Slomniki</miasto> +<kod>32-090</kod> +<adres>ul. Wiosenna 8</adres> +</odbiorcy> +

Igor Wojnicki (AGH, KIS) XML 6 października 2016 29 / 49

Page 30: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Tabele, zapytania i XML IV

Przykład:

SELECT query_to_xml(’SELECT idodbiorcy,nazwa FROM odbiorcy’,false, false, ’’);

query_to_xml---------------------------------------------------------------<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">+

+<row> +<idodbiorcy>1</idodbiorcy> +<nazwa>Slawomir Zeganek</nazwa> +</row> +

+<row> +<idodbiorcy>2</idodbiorcy> +<nazwa>Dorota Pszczolka</nazwa> +</row> +...

Igor Wojnicki (AGH, KIS) XML 6 października 2016 30 / 49

Page 31: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Schematy XML i schematy bazy I

table_to_xmlschema(tbl regclass, nulls boolean, tableforest boolean,targetns text)

query_to_xmlschema(query text, nulls boolean, tableforest boolean,targetns text)

cursor_to_xmlschema(cursor refcursor, nulls boolean, tableforest boolean,targetns text)

Igor Wojnicki (AGH, KIS) XML 6 października 2016 31 / 49

Page 32: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Schematy XML i schematy bazy II

Przykład:

SELECT table_to_xmlschema(’odbiorcy’, false, false, ’’);table_to_xmlschema

-----------------------------------------------------------------------------<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:simpleType name="INTEGER"><xsd:restriction base="xsd:int"><xsd:maxInclusive value="2147483647"/><xsd:minInclusive value="-2147483648"/></xsd:restriction></xsd:simpleType>

<xsd:simpleType name="VARCHAR"><xsd:restriction base="xsd:string"></xsd:restriction></xsd:simpleType>

<xsd:simpleType name="CHAR"><xsd:restriction base="xsd:string">

Igor Wojnicki (AGH, KIS) XML 6 października 2016 32 / 49

Page 33: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Schematy XML i schematy bazy III

</xsd:restriction></xsd:simpleType>

<xsd:complexType name="RowType.wojnicki.public.odbiorcy"><xsd:sequence><xsd:element name="idodbiorcy" type="INTEGER" minOccurs="0"></xsd:element><xsd:element name="nazwa" type="VARCHAR" minOccurs="0"></xsd:element><xsd:element name="miasto" type="VARCHAR" minOccurs="0"></xsd:element><xsd:element name="kod" type="CHAR" minOccurs="0"></xsd:element><xsd:element name="adres" type="VARCHAR" minOccurs="0"></xsd:element></xsd:sequence></xsd:complexType>

<xsd:complexType name="TableType.wojnicki.public.odbiorcy"><xsd:sequence><xsd:element name="row" type="RowType.wojnicki.public.odbiorcy"minOccurs="0" maxOccurs="unbounded"/>

</xsd:sequence></xsd:complexType>

<xsd:element name="odbiorcy" type="TableType.wojnicki.public.odbiorcy"/>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 33 / 49

Page 34: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

Schematy XML i schematy bazy IV

</xsd:schema>

Igor Wojnicki (AGH, KIS) XML 6 października 2016 34 / 49

Page 35: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Mapowanie tabel i XML

I jeszcze kilka innych funkcji

table_to_xml_and_xmlschema(tbl regclass, nulls boolean, tableforest boolean,targetns text)

query_to_xml_and_xmlschema(query text, nulls boolean, tableforest boolean,targetns text)

schema_to_xml(schema name, nulls boolean, tableforest boolean, targetns text)schema_to_xmlschema(schema name, nulls boolean, tableforest boolean, targetns text)schema_to_xml_and_xmlschema(schema name, nulls boolean, tableforest boolean,

targetns text)

database_to_xml(nulls boolean, tableforest boolean, targetns text)database_to_xmlschema(nulls boolean, tableforest boolean, targetns text)database_to_xml_and_xmlschema(nulls boolean, tableforest boolean, targetns text)

Igor Wojnicki (AGH, KIS) XML 6 października 2016 35 / 49

Page 36: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Przetwarzanie XML

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 36 / 49

Page 37: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Przetwarzanie XML

Przetwarzanie danych XML

xpath(xpath, xml [, nsarray])

Zwraca tablice wybranych elementów, zgodnych z wyrażeniem XPath.

xpath_exists(xpath, xml [, nsarray])

Przykład:

SELECT id, name , (xpath(’//comments/en/text()’, description))[1]FROM printer;id | name | xpath-----+------------------------------+----------------------------1 | Canon-BJ-100.xml | Seems more or less compatible| | to the BJ-200.2 | Canon-BJ-10e.xml | Note that some report it working| | properly in epson mode only.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 37 / 49

Page 38: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

PostgreSQL Przetwarzanie XML

Wyszukiwanie i indeksowanie XML

SELECT ... FROM ...WHERE (xpath(’//element/text()’, description))[1]::text LIKE ’value’

CREATE INDEX idx_xml_printer_des ON printer USING btree ((xpath(’//element/text()’, description))[1]::text);

select * from (select unnest(ARRAY[1,5,3])) as a;create index xmltest_idx on xmltest ( unnest(cast( (xpath(’/d/text()’,xml)) as text[])) ) <- fixme doesnt work

Igor Wojnicki (AGH, KIS) XML 6 października 2016 38 / 49

Page 39: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Natywne BD XML EXist

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 39 / 49

Page 40: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Natywne BD XML BaseX

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 40 / 49

Page 41: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XPath

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 41 / 49

Page 42: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XPath

XPath

http://www.w3.org/TR/xpath/ Wyszukiwanie informacji wdokumentach XML.

Wyrażenia do wyszukiwania (zbiorów) węzłów,podobne do ścieżek w systemach plików.

Wbudowane funkcje: ekstrakcja i konwersja danych, porównywanieitp.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 42 / 49

Page 43: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XPath

Podstawy XPath

Węzłem jest:

element,

atrybut,

tekst,

przestrzeń nazw,

instrukcja przetwarzania (PI, processing instruction),

komentarz,

dokument.

Igor Wojnicki (AGH, KIS) XML 6 października 2016 43 / 49

Page 44: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XPath

Wybieranie węzłów

nazwa_węzła węzeł o określonej nazwie/ korzeń// lokalizacja nieistotna. aktualny węzeł.. rodzic@ atrybut

Igor Wojnicki (AGH, KIS) XML 6 października 2016 44 / 49

Page 45: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XPath

Predykaty stosowalności

Występują w nawiasach kwadratowych, wykorzystują funkcje.

//pcl[@level] elemnty pcl mające atrybut level//node()[@level] dowolne elementy mające atrybut level/printer[.//@level] elementy printer zawierające element z atr. level//dpi/node()[last()] ostatnie elementy w elementach dpi//dpi/*

Igor Wojnicki (AGH, KIS) XML 6 października 2016 45 / 49

Page 46: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XPath

Wiele ścieżek

//dpi | //make//city[population>8000000][name="Moscow"]/(name | population)

Igor Wojnicki (AGH, KIS) XML 6 października 2016 46 / 49

Page 47: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XPath

XPath

//resolution[dpi/x>2000]//model[..//resolution/dpi/x>2000]//model[resolution/dpi/x>2000]

podciągi, zobacz: http://www.w3.org/TR/xpath-functions//printer[fn:starts-with(make,"B")]//printer[fn:matches(make,"B")]

Igor Wojnicki (AGH, KIS) XML 6 października 2016 47 / 49

Page 48: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XQuery

Spis Treści

1 Intro

2 PostgreSQLWstępEksportPorównywanie własnościMapowanie tabel i XMLPrzetwarzanie XML

3 Natywne BD XMLEXistBaseX

4 Wyszukiwanie i transformacjeXPathXQuery

Igor Wojnicki (AGH, KIS) XML 6 października 2016 48 / 49

Page 49: ZTB:XMLhome.agh.edu.pl/~wojnicki/wiki/_media/pl:ztb:dxml.pdf · ZTB:XML Spis Treści PostgreSQL Wstęp 1 Intro 2 PostgreSQL Wstęp Eksport Porównywanie własności Mapowanie tabel

I.Wojnicki, ZTB:XML

Wyszukiwanie i transformacje XQuery

XQUery

for $p in //printerwhere $p/mechanism/colorreturn ($p/make, $p/model)

for $p in //printerwhere $p/mechanism/colorreturn <p> { $p/make, $p/model } </p>

for $p in //printerwhere $p/mechanism[not(color)]return <p> { $p/make, $p/model } </p>

http://www.w3.org/TR/xquery-update-10/

Igor Wojnicki (AGH, KIS) XML 6 października 2016 49 / 49