xml och frågespråk

32
IV1351 ht2010 nikos dimitrakas KTH/ICT/SCS 1 XML och frågespråk nikos dimitrakas [email protected] 08-162099 Rum 6626 Connolly/Begg (3rd edition) Kapitel 29.2, 29.3.1, 29.3.2, 29.3.3, 29.3.4, 29.3.8, 29.4.5 (obs! upplaga 3 täcker inte allt) (4th edition) Kapitel 30.2, 30.3.1, 30.3.2, 30.3.3, 30.3.4, 30.4 (dock inte 30.4.1), 30.5.3, (30.6) (5th edition) Kapitel 31.2, 31.3.1, 31.3.2, 31.3.3, 31.3.4,

Upload: vin

Post on 18-Mar-2016

29 views

Category:

Documents


4 download

DESCRIPTION

XML och frågespråk. nikos dimitrakas [email protected] 08-162099 Rum 6626. Connolly/Begg(3rd edition) Kapitel 29.2, 29.3.1, 29.3.2, 29.3.3, 29.3.4, 29.3.8, 29.4.5 (obs! upplaga 3 täcker inte allt) (4th edition) Kapitel 30.2, 30.3.1, 30.3.2, 30.3.3, 30.3.4, - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

1

XML och frågespråk

nikos dimitrakas [email protected]

08-162099Rum 6626

Connolly/Begg (3rd edition) Kapitel 29.2, 29.3.1, 29.3.2, 29.3.3, 29.3.4,29.3.8, 29.4.5 (obs! upplaga 3 täcker inte allt)

(4th edition) Kapitel 30.2, 30.3.1, 30.3.2, 30.3.3, 30.3.4,30.4 (dock inte 30.4.1), 30.5.3, (30.6)

(5th edition) Kapitel 31.2, 31.3.1, 31.3.2, 31.3.3, 31.3.4, 31.4 (dock inte 31.4.1), 31.5.3, (31.6)

Page 2: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

2

XML

• Står för Extensible Markup Language• Ett språk för att definiera dokumentstrukturer• XML är en textuell representation av data• Används i olika områden:

– Datalagring– Webb (XHTML)– Konfigurationsfiler– Transportformat

• Regler kan specificeras via– DTD (Document Type Definition)– XML Schema

• Case sensitive

Page 3: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

3

XML syntax• Element

<Person>Kalle</Person>• Attribut

<Person namn="Kalle"></Person>

• Nästlade element<Person id="59">

<Fnamn>Kalle</Fnamn><Enamn>Lindblim</Enamn><Adress>

<Gata>Kungsgatan 53</Gata><Postnr>12332</Postnr><Ort>Stockholm</Ort>

</Adress></Person>

• Tomt element<Person namn="Kalle"></Person><Person namn="Kalle" />

Page 4: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

4

XML-dokument

• XML-deklaration<?xml version="1.1" encoding="UTF-8" ?>

• DOCTYPE – referens till regler<!DOCTYPE Person SYSTEM "Person.dtd">

• Namespaces– kvalificering av element- och attributnamn<iv1351:Person iv1315:namn="Kalle"></iv1351:Person>– default och andra namespaces<Root xmlns="default ns URI" xmlns:iv1351="iv1351 ns URI">…</Root>

Page 5: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

5

XML-referenser

• ID<Person namn="Kalle" id="39"></Person>

• IDREF<Organisation namn="KTH" chef="39"></Organisation>

Page 6: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

6

DTD (Document Type Definition)

Definierar XML-strukturen (element och attribut)

<!ELEMENT db (Person*)><!ELEMENT Person (Adress)><!ELEMENT Adress EMPTY><!ATTLIST Person

namn CDATA #REQUIREDid ID #REQUIREDfdatum CDATA #IMPLIEDpappa IDREF #IMPLIED>

<!ATTLIST Adress gatuadress CDATA #REQUIREDpostnr CDATA #REQUIREDpostort CDATA #REQUIRED>

Page 7: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

7

XML Schema• Starkare än DTD

– flexiblare strukturer – datatyper

• XML-syntax

<element name="db" type="dbType"/><complexType name="dbType">

<sequence><element name="Person" type="PersonType" minOccurs="0" maxOccurs="unbounded"/>

</sequence></complexType><complexType name="PersonType">

<sequence><element name="Adress" type="AdressType" />

</sequence><attribute name="namn" type="string" use="required"/><attribute name="id" type="id" use="required"/><attribute name="fdatum" type="date" use="optional"/><attribute name="pappa" type="idref" use="optional"/>

</complexType><complexType name="AdressType">…

Page 8: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

8

Well-formed & Valid• Well-formed XML

– Syntaktiskt korrekt– Börjar med XML-deklarationen– Innehåller endast ett rot-element– Matchade öppnings- och stängningstaggar

• Valid XML– Följer reglerna i den kopplade DTD eller XML Schema

Page 9: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

9

XML Språk

Språk för att komma åt innehållet i XML-dokument

•XPath•XSLT•XQuery•SQL/XML (SQL 2003c) (SQL 2008)•Proprietary languages (IBM, Oracle, etc.)•…

Page 10: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

10

XPath

• Path expressions för navigering i XML-strukturer• Stödjer villkor och wildcards• Inkluderar många funktioner

• Exempel:– /Book[@Price=500]/Author/@Name

Page 11: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

11

XSLT

• Möjliggör transformationer mellan olika XML-strukturer• Exempel:

<books><book title=“x”>

<author name=“a”/></book><book title=“y”>

<author name=“b”/></book>

</books>

<authors><author>a</author><author>b</author>

</authors>

<xsl:template match=“/”><authors><xsl:for-each select=“books/book/author”>

<author><xsl:value-of select=“name”></author></xsl:for-each></authors>

</xsl:template>

Page 12: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

12

XQuery

• Frågespråk för XML• Kombinerar XPath och FLWOR-uttryck

– FLWOR: For Let Where Order by Return

• Stödjer alla funktioner som ingår i XPath• Baserat på andra språk som SQL, OQL, Lorel, etc.

Page 13: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

13

SQL/XML

• SQL 2003 & 2008 (ISO standard)– Stöd för XML i relationsdatabaser

» Lagring» Hantering via XQuery

– Stöd för komposition av XML-dokument från vanliga relationsdata med SQL

• Funktioner för generering av XML-dokument i SQL:– XMLELEMENT– XMLFOREST– XMLATTRIBUTES– XMLAGG– XMLCONCAT– …

Bonusmaterial om SQL/XML finns i Bilda

Page 14: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

14

Proprietära Språk/Teknologier

• Stöd för lagring och hantering av XML-data, samt transformationer mellan XML och relationsdata

• IBM:– SQL UDFs: Extract-funktioner, Update-funktion– Mappning XML-RDB: DAD-filer

• Oracle:– SQL UDFs: Extract-funktioner, existsNode, etc.

• Microsoft– Egen variant av SQL/XML– Egen variant av XQuery-stöd

• … och många andra

Page 15: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

15

Exempeldata<Filmer>

<Film Titel="Driven" År="2001"><Skådis Namn="Burt Reynolds" Födelseår="1936" Land="USA"/><Skådis Namn="Silvester Stallone" Födelseår="1946" Land="USA"/><Skådis Namn="Kip Pardue" Födelseår="1976" Land="Canada"/><Regissör Namn="Silvester Stallone" Födelseår="1946" Land="USA"/><Produktionsbolag>Tri-Star</Produktionsbolag>

</Film><Film Titel="Antz" År="1998">

<Skådis Namn="Woody Allen" Födelseår="1935" Land="USA"/><Skådis Namn="Silvester Stallone" Födelseår="1946" Land="USA"/><Skådis Namn="Sharon Stone" Födelseår="1958" Land="USA"/><Regissör Namn="Eric Darnell" Födelseår="1961" Land="Ireland"/><Produktionsbolag>Universal</Produktionsbolag>

</Film><Film Titel="Picking Up the Pieces" År="2000">

<Skådis Namn="Woody Allen" Födelseår="1935" Land="USA"/><Skådis Namn="Sharon Stone" Födelseår="1958" Land="USA"/><Skådis Namn="Alfonso Arau" Födelseår="1948" Land="USA"/><Regissör Namn="Eric Darnell" Födelseår="1961" Land="Ireland"/><Produktionsbolag>Tri-Star</Produktionsbolag>

</Film>…

</Filmer>

Page 16: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

16

XPath• /• //• @• /element/@attribut• /elementX//elementY• Wildcards * nodes()• Predicates: [predicate]:

– /element[1]– /element[@attribute=value]

• . och .. ("current node" och "parent node")• | (konkatenering)

Page 17: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

17

XPath Exempel

• Alla Filmer (Film-noder):– //Film

• Alla Filmer (Film-noder) från år 2000– //Film[@År=2000]

• Året för filmer av Universal– //Film[Produktionsbolag='Universal']/@År

• Regissörer för filmer från 2000 och 2003– //Film[@År=2000]/Regissör | //Film[@År=2003]/Regissör

• Titel på filmer med Woody Allen– //Skådis[@Namn='Woody Allen']/../@Titel

Page 18: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

18

XPath Axes

• child, ancestor, descendant, parent– /Filmer/child::Film (ekvivalent med /Filmer/Film)– //Skådis/ancestor::Film

Page 19: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

19

XQuery

• For– Loopar igenom en nodsekvens (eller värdesekvens)

• Let– Tilldelningar

• Where– Villkor

• Order By– Sordering av resultatet

• Return– Konstruktion av resultatet

Page 20: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

20

XQuery

• FLWOR-uttryck kan nästlas.• Ingen klausul är obligatorisk.• XPath-uttryck kan användas i alla klausuler.• Resultatet kan vara well-formed XML, men behöver

inte vara det.• Funktionen doc() kan användas för att definiera

källan (ett XML-dokument). Annars kan man använda exekveringsmiljön för att konfigurera källan.

Page 21: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

21

XQuery

• Variabler börjar med $:– for $s in //Film/Skådis– let $n := $s/@Namn

• Sekvenser:– for $x in (1, 2, 3)– let $y := (1, 2, 3)

• Utverdering av uttryck:– Lägg uttrycket inuti { }:– <resultat>{$x*3}</resultat>

Page 22: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

22

XQuery – Flera resultat

• return-klausulen genererar ett resultat per värde i for-loopen:

for $x in (1,2,3)return <värde>{$x}</värde>

• Placera resultatet i ett annat resultat som kan fungera som rot-nod:

<resultat>{for $x in (1,2,3)return <värde>{$x}</värde>}</resultat>

Page 23: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

23

XQuery/XPath-funktioner

• Sekvens-funktioner:– distinct-values(s)– min(s), max(s), sum(s), avg(s)– empty(s), exists(s)– union(s1,s2), instersect(s1,s2), except(s1,s2)– concat(s1,s2)

• Nod-funktioner:– name(n), local-name(n), node-name(n)

Page 24: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

24

XQuery/XPath-funktioner

• String-funktioner:– matches(s, regexp)– concat(s1,s2)– starts-with(s1,s2), ends-with(s1,s2), contains(s1,s2) – substring(s, start), substring(s, start, length)– lower-case(s), upper-case(s)– replace(s, pattern, replacement)– tokenize(s, pattern)

Page 25: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

25

XQuery/XPath-funktioner

• Other functions:– doc(URI)– not(e)– Många datum/tid-funktioner– Många numeriska funktioner– data(ns) – Seqvens av noder till seqvens av enkla (atomic) värden– number(n) – Värdet av noden som nummer eller NaN– string(n) – Nodens värde som string– current-time(), current-date(), current-dateTime()

Page 26: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

26

XQuery/XPath-operatorer

• +, -, *, div, mod• =, !=, >, <, <=, >=• eq, ne, lt, le, gt, ge • or, and, not• is, >>, <<

Page 27: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

27

XQuery-funktioner

• element()– /element() (samma som /*)

• attribute()– //Film/attribute() (samma som //Film/@*)

• node()– /node() – element-noder och text-noder– /@node() – attribut-noder

Page 28: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

28

XQuery – Computed Constructors

• element– element name value:let $a := "a", $b := 2return <x>{element {$a} {$b}}</x>

• attribute– attribute name value:let $a := "a", $b := 2return <x>{attribute {$a} {$b}}</x>

Page 29: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

29

XQuery – Flödeskontroll

• if-then-elsefor $a in (1 to 5)return if ($a mod 2 = 0)then <even>{$a}</even>else <odd>{$a}</odd>

Page 30: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

30

XQuery – Kvantifierare

• somefor $a in //Filmwhere some $b in $a/Skådis/@Land satisfies string($b) = "Austria"return $a

• everyfor $a in //Filmwhere every $b in $a/Skådis/@Land satisfies string($b) = "USA"return $a

Page 31: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

31

XQuery – Nesting

• Ett uttrycks resultat blir källa för ett annat uttryck:for $x in distinct-values(for $a in (1 to 6), $b in (1 to 6)return <summa>{$a + $b}</summa>)return <unik>{$x}</unik>

Page 32: XML och frågespråk

IV1351 ht2010nikos dimitrakasKTH/ICT/SCS

32

Mer Information• XPath

– http://www.w3schools.com/xpath/

• XQuery– http://www.w3schools.com/xquery/– http://www.stylusstudio.com/xml_tutorial.html