46
1 Introduktion til XML Copyright © Lund & Bendsen Introduktion til XML 2 Introduktion til XML Copyright © Lund & Bendsen Introduktion til XML Hvad er XML og hvad kan XML bruges til? XML-syntaks: Elementer og tags XML-syntaks: Attributter XML-syntaks: Kommentarer XML-syntaks: Escapes (entities og CDATA) XML-syntaks: Declarations Wellformed XML XML-syntaks: XML namespaces Detaljer om begreberne relateret til namespaces XML vocabularies (XML applications) Overblik over schema languages og schemas Opsamling på sammenhængen mellem centrale XML-begreber Styrker og svagheder ved XML

01- Introduktion til XML

Embed Size (px)

DESCRIPTION

2 1 Introduktion til XML Introduktion til XML Copyright © Lund & Bendsen Copyright © Lund & Bendsen • XML står for Extensible Markup Language – Med markup language menes et sprog, som er baseret på tags og attributter som det fx kendes fra HTML Fx: … – Ordet extensible skal signalere, at XML er et sprog, som man kan bygge videre på, og dermed bruge til at definere helt nye sprog. 3 Introduktion til XML Copyright © Lund & Bendsen

Citation preview

Page 1: 01- Introduktion til XML

1Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML

2Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

Page 2: 01- Introduktion til XML

3Introduktion til XMLCopyright © Lund & Bendsen

Hvad er XML?

• XML står for Extensible Markup Language– Med markup languagemenes et sprog, som er baseret på

tags og attributter som det fx kendes fra HTMLFx: <tag attribute = ”…”> … </tag>

– Ordet extensibleskal signalere, at XML er et sprog, som man kan bygge videre på, og dermed bruge til at definere helt nye sprog.

• XML er altså et udvideligt markup-sprog, som man kan bruge til at definere nyemarkup-sprog med

• Et markup-sprog, som er baseret på XML, kalder man for et XML Vocabulary.

• XHTML er et eksempel på et XML Vocabulary(XTML er en XML-udgave af HTML)

4Introduktion til XMLCopyright © Lund & Bendsen

• Her et eksempel på et markup-sprog i XML, som vi selv har fundet på (dvs. et XML Vocabulary):

• Vi har selv bestemt, at der i vores XML-sprog er noget der hedder contact, name, phoneNo og type.

• Omvendt er det fx XML, der bestemmer, at vi skallave vores tags vha. tegnene <…> og </…>.

• Vi har også data i dokumentet. Det svarer til, hvis vi fx sætter en String i Java til at være lig ”Hans Jensen”

Eksempel på eget XML-baserede sprog

<contact>

<name>Hans Jensen</name>

<phoneNo type=”mobile” >12345678</phone>

</contact>

<contact>

<name>Hans Jensen</name>

<phoneNo type=”mobile” >12345678</phone>

</contact>

Page 3: 01- Introduktion til XML

5Introduktion til XMLCopyright © Lund & Bendsen

Hvorfor er XML smart?

Byggeblokkene i XML er nemme at forståog det er nemt at lave nye sprog med dem

Der findes masser af værktøjer, der kan læse og skrive XML

Da ens sprog er baseret på XML, er det ofte nemt at lære for andre folk

Det er ikke helt ligetil at finde på en ny syntaks helt fra bunden

Man bliver nødt til selv at lave kode, der kan læse filer skrevet i det nye sprog

Andre folk skal lære et sprog, hvis syntaks måske ikke ligner noget de har set før

Vores sprog må nøjes med at bruge XML-komponenter som tags og attributter

Vi kan lave en syntaks, der passer 100% til vores nye markupsprog

Nye markup-sprog som er baseret på XML

Nye markup-sprog som ikke er baseret på XML

6Introduktion til XMLCopyright © Lund & Bendsen

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

<text><bold>Hej <italics>med</italics>dig min</bold> ven!

</text>

<text><bold>Hej <italics>med</italics>dig min</bold> ven!

</text>

Hvad kan XML bruges til i praksis?

XML kan bruges til markup af dokumenter:– Tags bruges fx til at angive

formatering (fx fed skrift) og struktur (fx header og body)

– Fx XHTML og DocBook

XML kan bruges til markup af data:– Fx data der skal lagres i filer– Fx data der udveksles med

andre via netværk

Hej med dig min ven!Hej med dig min ven!

Page 4: 01- Introduktion til XML

7Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

8Introduktion til XMLCopyright © Lund & Bendsen

Hvad er elementer og tags?

<city>Copenhagen</city>

city start-tag city end-tag

city element

NB: Tag-navnet bestemmer vi selv.

Navnet kan fx bruges til at beskrive hvad det er for nogle data elementetindeholder – her en by.

Page 5: 01- Introduktion til XML

9Introduktion til XMLCopyright © Lund & Bendsen

Tomme elementer kan skrives på 2 måder

<is-alive></is-alive> <is-alive />=

tomt element tomt element

Det er placeringen af skråstregen, der gør forskell en

10Introduktion til XMLCopyright © Lund & Bendsen

Regler for navne i XML

Krav til navne i XML:– Skalbegynde med et bogstav eller underscore– Må ikkestarte med ”xml”– Må i øvrigt indeholde næsten alle Unicode-

tegn bortset fra fx /, <, >, ?, ”, ’, @, & m.fl.– Må således gerne bruge tal, underscore,

bindestreg og punktum.– Det er principielt tilladt at bruge kolon (:)

i navne – men det er en dårlig idé, da det konflikter med XML namespaces

Page 6: 01- Introduktion til XML

11Introduktion til XMLCopyright © Lund & Bendsen

Elementer må indlejres i andre elementer

I XML kan man have elementer i andre elementer:

first-name og last-name er indlejret i name

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

12Introduktion til XMLCopyright © Lund & Bendsen

Vha. indlejring kan man lave en træstruktur

<name>

<first-name> <last-name>

Hans Jensen

<bold>

Hej <italics>

med

dig min

<text>

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

<text><bold>Hej <italics>med</italics>dig min</bold> ven!

</text>

<text><bold>Hej <italics>med</italics>dig min</bold> ven!

</text>Hej med dig min ven!Hej med dig min ven!

ven!

Page 7: 01- Introduktion til XML

13Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

14Introduktion til XMLCopyright © Lund & Bendsen

Hvad er en attribut?

• Ud over elementer kan man også bruge attributter i XML

• Attributter står altid i start-tag’et på et element

<contact>

<name>Hans Jensen</name>

<phoneNo type = ”mobile” >12345678</phone>

</contact>

<contact>

<name>Hans Jensen</name>

<phoneNo type = ”mobile” >12345678</phone>

</contact>

En attribut i start-tag’et på elementet phoneNo

Page 8: 01- Introduktion til XML

15Introduktion til XMLCopyright © Lund & Bendsen

Syntaksen for attributter 1/2

• Syntaksen for attributter er:

• En attribut må gerne stå i et tomt element:

• Man må gerne bruge ’…’ frem for ”…” – fx:

<elementName attributeName = ”AttributeValue” >ElementContent

</elementName>

<elementName attributeName = ”AttributeValue” >ElementContent

</elementName>

<elementName attributeName = ”AttributeValue” /><elementName attributeName = ”AttributeValue” />

<elementName attributeName = ’AttributeValue’ /><elementName attributeName = ’AttributeValue’ />

bemærk

16Introduktion til XMLCopyright © Lund & Bendsen

Syntaksen for attributter 2/2

• Man må gerne have flere attributter i samme tag:

• Hver attribut må kun forekomme én gang per tag:

• Attributter må indeholde space-adskilte lister:

<elementName attA=”val1” attB=”val2” attC=”val3” /><elementName attA=”val1” attB=”val2” attC=”val3” />

<elementName attA=”val1” attA=”val2” /><elementName attA=”val1” attA=”val2” />

<elementName myList = ”val01 val02 val03 val04” /><elementName myList = ”val01 val02 val03 val04” />

samme navn

Page 9: 01- Introduktion til XML

17Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

18Introduktion til XMLCopyright © Lund & Bendsen

Syntaks for kommentarer i XML

Man kan skrive kommentarer i XML.– En kommentar startes med <!-- (som /* i Java)

– En kommentar afsluttes med --> (som */ i Java)

– Kommentarer må ikke indeholde --

<name><first-name>Hans</first-name><!-- dette er en kommentar rettet mod vores menneskelige læsere --><last-name>Jensen</last-name>

</name>

<name><first-name>Hans</first-name><!-- dette er en kommentar rettet mod vores menneskelige læsere --><last-name>Jensen</last-name>

</name>

Page 10: 01- Introduktion til XML

19Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

20Introduktion til XMLCopyright © Lund & Bendsen

Entities

• En entity i XML er en navngiven bid tekst

• Man indsætter værdien af en entity ved at skrive en entity referencei sin XML

• En entity referenceskrives med følgende syntaks: &entityNavn;

• Hvad kan entities bruges til?– Til genbrugelig tekst (gøres sjældent i praksis)

– Til tegn som normalt ikke må stå i XML

Page 11: 01- Introduktion til XML

21Introduktion til XMLCopyright © Lund & Bendsen

Prædefinerede entities

• Det er sjældent man selv definerer entities, så det springer vi over. Læs selv om det på:

http://www.w3.org/TR/REC-xml/ (sektion 4.5)

• XML har 5 prædefinerede entites, der står for tegn, som ellers kan være ulovlige i XML:

quotation mark ”&quot;

apostrophe’&apos;

greater than>&gt;

less than<&lt;

ampersand&&amp;

Hvad står entity navnet for?Står for tegnetEntity reference

22Introduktion til XMLCopyright © Lund & Bendsen

Brugen af entities til escape af ulovlige tegn

<logical-expression>y < 12 && z >= 12

</logical-expression>

<logical-expression>y < 12 && z >= 12

</logical-expression>

<logical-expression>y &lt; 12 &amp;&amp; z &gt;= 12

</logical-expression>

<logical-expression>y &lt; 12 &amp;&amp; z &gt;= 12

</logical-expression>

Lovligt

Ulovligt

Page 12: 01- Introduktion til XML

23Introduktion til XMLCopyright © Lund & Bendsen

CDATA i XML

• Som alternativ til at bruge entities til escape, kan man angive at en større mængde tekst skal ”escapes”

• Får at escape en større mængde indholdet i et element startes elementet med <![CDATA[ og afsluttes med ]]>

<logical-expression>y < 12 && z >= 12</logical-expression> <logical-expression>y < 12 && z >= 12</logical-expression>

Lovligt

Ulovligt

<logical-expression> <![CDATA[

y < 12 && z >= 12]]>

</logical-expression>

<logical-expression> <![CDATA[

y < 12 && z >= 12]]>

</logical-expression>

24Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

Page 13: 01- Introduktion til XML

25Introduktion til XMLCopyright © Lund & Bendsen

XML Declaration• Et eksempel på en XML Declaration:

<?xml version="1.0" encoding="UTF-8" ?>

• Et XML-dokument:• Må starte med en declaration, men behøver ikke

• Hvis man har en declaration, såskal den stå som det absolut førstei dokumentet

• En declaration kan fx indeholde følgende:– Hvilke version af XML dokumentet er skrevet i

(næsten alle bruger XML 1.0 selvom 1.1 findes)

– Hvilken tegnsæt (encoding) dokumentet bruger.XML-værktøjerskalundersøtte UTF-8 og UTF-16.

NB: XML Declarations er udeladt i de fleste eksemple r, da de fylder så meget ☺☺☺☺

26Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

Page 14: 01- Introduktion til XML

27Introduktion til XMLCopyright © Lund & Bendsen

Sammenliging af Wellformed XML og Java

• Java-sprogets syntaks angiver hvordan lovlige Java-programmer skalse ud.Dvs. en række regler vi skal overholde, hvis vores kode skal være lovlig Java-kode.

• XML angiver hvordan lovlige XML-dokumenterskalse ud (wellformed).Dvs. en række regler vi skal overholde, når vi laver XML-dokumenter.

28Introduktion til XMLCopyright © Lund & Bendsen

Wellformed XML

• XML har nogle regler for hvordan man skal bruge elementer og attributter (XMLs syntaks)

• Hvis et XML-dokument overholder alle disse regler siger man, at dokumentet er wellformed

• Hvis man kender HTML vil man bemærke, der er ting man må i HTML, der ikkeer lovligt i XML

• På de følgende slides ser vi på hvilke regler der skal overholdes, hvis XML skal være wellformed

Page 15: 01- Introduktion til XML

29Introduktion til XMLCopyright © Lund & Bendsen

Ulovligt eksempel:<text>Hej med dig min ven!<p>Hvordan har du det?</text>

Lovlige eksempler:

<text><p>Hej med dig min ven!</p><p>Hvordan har du det?</p></text>

<text>Hej med dig min ven!<p/>Hvordan har du det?</text>

Elementer skal altid afsluttes i XML

Start-tag uden slut-tag

Start og afslutning i ét tag

30Introduktion til XMLCopyright © Lund & Bendsen

Sørg for at skrive start tag og slut tag

helt ens mht. store og små bogstaver:

Ulovligt eksempel:

<Text><p>Hej med dig min ven!</p><p>Hvordan har du det?</p></text>

XML er følsom mht. store/små bogstaver

Text og text matcher ikke hinanden i XML

Page 16: 01- Introduktion til XML

31Introduktion til XMLCopyright © Lund & Bendsen

Ulovligt eksempel:<text><bold>Hej <italics>med</bold> dig min ven!</italics></text>

Lovligt eksempel:<text><bold>Hej </bold><italics><bold>med</bold> dig min ven!</italics></text>

Elementer må ikke ”krydse” hinanden

Krydser hinanden (ulovligt)

Står indlejret (nested) i hinanden (ok)

32Introduktion til XMLCopyright © Lund & Bendsen

Attributværdier skal stå i ”..” eller ’..’

• Mange HTML-browsere tager det ikke såtungt, hvis man fx skriver noget i stil med:<table border = 1>…</table>

• Hvis man vil skrive wellformed XML, såskalattributværdier indrammes af ” eller ’:<table border = ”1”>…</table><table border = ’1’>…</table>

Page 17: 01- Introduktion til XML

33Introduktion til XMLCopyright © Lund & Bendsen

Netop ét root element

• Det yderste element i et XML-dokument kaldes for ”root element” (rodelement)

• Et XML-dokument skal altid have præcis ét root-element (hverken mere eller mindre)

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

<name><first-name>Hans</first-name><last-name>Jensen</last-name>

</name>

<first-name>Hans</first-name><last-name>Jensen</last-name>

<first-name>Hans</first-name><last-name>Jensen</last-name>

Lovligt Ulovligt

Forsøg på at have to rod-elementer

34Introduktion til XMLCopyright © Lund & Bendsen

Opsamling mht. wellformed XML

• Et wellformed element er et element:– Der åbnes <e> og dernæst lukkes </e> eller

et tomt element sammentrukket i ét tag <e/>

– Der ikke krydser andre elementer

• Værdien i en wellformed attribut er omgivet af gåseøjne (”) eller pinger (’)

• Et wellformed XML-dokument:– Består af wellformed elementer og attributter– Har netop ét rodelement (root element)

Page 18: 01- Introduktion til XML

35Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

36Introduktion til XMLCopyright © Lund & Bendsen

XML Namespace

Begrebet XML namespace forklares lettest ved at sammenligne med noget vi kender:

• Ingen relation ml. namespaces og mapper• Mappestruktur skal afspejle pakkenavne

• Namespaces minimerer risikoen for navnesammenfald

• Pakkenavne minimerer risikoen for navnesammenfald

• I XML behøver man ikke placere et element eller en attribut i et namespace

• I Java behøver man ikke placere en klasse i en pakke (= default package)

• Et element eller en attribut identificeres ved dens expanded name(namespace name + local name)

• En klasse identificeres ved dens fully qualified classname(pakkenavn + klassenavn)

• Elementer og attributter kan placeres i et namespace

• Klasser og interfaces kan placeres i en pakke

• Et namespace har et navn• En pakke har et navn

XML NamespaceJava package

Page 19: 01- Introduktion til XML

37Introduktion til XMLCopyright © Lund & Bendsen

Udfordringer med navnesammenfald

<Person><InternetContactInfo>

<Address type=”web”>www.lundogbendsen.dk</Address><Address type=”email”>[email protected]</Address>

</InternetContactInfo ><PostalContactInfo>

<Address><Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></PostalContactInfo>

</Person>

<Person><InternetContactInfo>

<Address type=”web”>www.lundogbendsen.dk</Address><Address type=”email”>[email protected]</Address>

</InternetContactInfo ><PostalContactInfo>

<Address><Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></PostalContactInfo>

</Person>

Eksempel på to meget forskelligeAddress-elementer

Navnesammenfalder fx problematiskehvis et værktøj skalvalidere, hvorvidt et Address-elementhar en gyldig struktur

Næste slide viserhvordan namespacesafhjælper problemet

Næste slide viserhvordan namespacesafhjælper problemet

38Introduktion til XMLCopyright © Lund & Bendsen

Namespaces forhindrer navnekonflikter

<Person xmlns:a=”http://lundogbendsen.dk/InternetAddresses”xmlns:b=”http://lundogbendsen.dk/PostalAddresses” >

<InternetContactInfo><a:Address type=”web”>www.lundogbendsen.dk</a:Address><a:Address type=”email”>[email protected]</a:Address>

</InternetContactInfo ><PostalContactInfo>

<b:Address><Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</b:Address></PostalContactInfo>

</Person>

<Person xmlns:a=”http://lundogbendsen.dk/InternetAddresses”xmlns:b=”http://lundogbendsen.dk/PostalAddresses” >

<InternetContactInfo><a:Address type=”web”>www.lundogbendsen.dk</a:Address><a:Address type=”email”>[email protected]</a:Address>

</InternetContactInfo ><PostalContactInfo>

<b:Address><Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</b:Address></PostalContactInfo>

</Person>

Nu er det tydeligt,at der er tale om toforskellige slagsadresser

Detaljeret forklaringaf syntaksen fornamespaces følger

Detaljeret forklaringaf syntaksen fornamespaces følger

Page 20: 01- Introduktion til XML

39Introduktion til XMLCopyright © Lund & Bendsen

Namespace attributter

• En namespace attributer en specielt type attribut, som bruges i forbindelse med namespaces

• Namespace attributter bruger det reserverede navn xmlns, som står for XMLNamespace

<?xml version="1.0" encoding="UTF-8" ?><Person xmlns="http://lundogbendsen.dk/schemas/2004/08/02/Person” >

</Person>

<?xml version="1.0" encoding="UTF-8" ?><Person xmlns="http://lundogbendsen.dk/schemas/2004/08/02/Person” >

</Person>

For eksempel

40Introduktion til XMLCopyright © Lund & Bendsen

Syntaksen for namespace attributter

• Der findes to varianter af namespace attributter:1. xmlns = ”namespaceName”

2. xmlns:namespacePrefix = ”namespaceName”

• Den første form bruges til at angive et default namespace namefor elementet selv og for alle dets subelementer

• Den anden form bruges til at binde et namespacenametil et namespace prefix, som herefter kan bruges foran element- og attributnavne til at angive, at de tilhører det namespace prefix’et er bundet til

Page 21: 01- Introduktion til XML

41Introduktion til XMLCopyright © Lund & Bendsen

Lidt om de følgende slides

• Namespaces er (desværre) ikke verdens nemmeste ting at forstå

• Og det er en skam, da det er vigtigt at forstånamespaces, hvis man skal arbejde med XML

• De følgende slides forklarer syntaksen for namespaces grundigt, og forsøger at gøre det forståeligt ved at vise masser af eksempler

42Introduktion til XMLCopyright © Lund & Bendsen

XML-dokument uden namespaces

<?xml version="1.0" encoding="UTF-8" ?><Person cprNo= ”231172-2957”>

<FirstName>Ole</FirstName><LastName>Jensen</LastName><Address>

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

<?xml version="1.0" encoding="UTF-8" ?><Person cprNo= ”231172-2957”>

<FirstName>Ole</FirstName><LastName>Jensen</LastName><Address>

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

• Nedenfor har vi et eksempel på et dokument, hvor ingen elementer eller attributter er i et namespace.

• På de flg. slides sætter vi namespaces på XML-dokumentet

Page 22: 01- Introduktion til XML

43Introduktion til XMLCopyright © Lund & Bendsen

Default namespace på rod-elementet

<?xml version="1.0" encoding="UTF-8" ?><Person xmlns=”http://lundogbendsen.dk/schemas/2004/08/02/Person”

cprNo= ”231172-2957” ><FirstName>Ole</FirstName><LastName>Jensen</LastName><Address>

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

<?xml version="1.0" encoding="UTF-8" ?><Person xmlns=”http://lundogbendsen.dk/schemas/2004/08/02/Person”

cprNo= ”231172-2957” ><FirstName>Ole</FirstName><LastName>Jensen</LastName><Address>

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

• En namespace-attribut på formen xmlns=”..” bruges til at angive et default namespace for elementet selv og alle dets subelementer

• Bemærk at attributter ikke kommer med i default namespace.• Farverne viser hvilket namespace elementer og attributter tilhører.

Sort signalerer at komponenten ikkeer i et namespace.

Attributterne cprNo og isAppartment”arver” ikke default namespace

Alle subelementer ”arver”default namespace’et

44Introduktion til XMLCopyright © Lund & Bendsen

Default namespace på nested element

<?xml version="1.0" encoding="UTF-8" ?><Person cprNo= ”231172-2957”>

<FirstName>Ole</FirstName><LastName>Jensen</LastName><Address xmlns=”http://lundogbendsen.dk/schemas/2004/08/02/Address” >

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

<?xml version="1.0" encoding="UTF-8" ?><Person cprNo= ”231172-2957”>

<FirstName>Ole</FirstName><LastName>Jensen</LastName><Address xmlns=”http://lundogbendsen.dk/schemas/2004/08/02/Address” >

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

• Erklæring af default namespace behøver ikke stå på rod-elementet• Default namespaces må gerne erklæres på nestede elementer• Elementet der erklærer default namespace’et og alle elementer

under det, kommer som default med i det angivede namespace

Address og dets subelementer kommer med i default namespace’et i Address

Elementer udenfor Address påvirkes ikke af namespace-erklæringen i Address

Page 23: 01- Introduktion til XML

45Introduktion til XMLCopyright © Lund & Bendsen

Overriding af default namespaces

<?xml version="1.0" encoding="UTF-8" ?><Person xmlns= ”http://lundogbendsen.dk/schemas/2004/08/02/Person”

cprNo=”231172-2957” ><FirstName>Ole</FirstName><LastName>Jensen</LastName><Address xmlns= ”http://lundogbendsen.dk/schemas/2004/08/02/Address” >

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

<?xml version="1.0" encoding="UTF-8" ?><Person xmlns= ”http://lundogbendsen.dk/schemas/2004/08/02/Person”

cprNo=”231172-2957” ><FirstName>Ole</FirstName><LastName>Jensen</LastName><Address xmlns= ”http://lundogbendsen.dk/schemas/2004/08/02/Address” >

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></Person>

Hvis man definerer et default namespace på et nested element, vil det overrideet evt. default namespace, der er erklæret af et ydre element

46Introduktion til XMLCopyright © Lund & Bendsen

Brug af namespace prefixes

<?xml version="1.0" encoding="UTF-8" ?><prs:Person xmlns:prs=”http://lundogbendsen.dk/schemas/2004/08/02/Person”

prs:cprNo= ”231172-2957” ><prs:FirstName>Ole</prs:FirstName><prs:LastName>Jensen</prs:LastName><Address>

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></prs:Person>

<?xml version="1.0" encoding="UTF-8" ?><prs:Person xmlns:prs=”http://lundogbendsen.dk/schemas/2004/08/02/Person”

prs:cprNo= ”231172-2957” ><prs:FirstName>Ole</prs:FirstName><prs:LastName>Jensen</prs:LastName><Address>

<Street isAppartment=”false” >Bakkevej 78</Street><Zip>7000</Zip><City>Fredericia</City>

</Address></prs:Person>

• En namespace-attribut på formen xmlns:namespacePrefix = ”..”bruges til at binde et namespace nametil et namespace prefix

• Namespace prefix’et bruges som en del af navnet på et element eller en attribut. Det vil medføre, at attributten eller elementet bliver en del af det namespace, som prefix’et er bundet til.

Attributten cprNo er også prefixet og bliver derfor en del af det namespacesom prs er bundet til

Alle elementer og attributter der ikke erprefixet kommer ikke med i namespace’et

Page 24: 01- Introduktion til XML

47Introduktion til XMLCopyright © Lund & Bendsen

Man kan godt have flere prefixes

<?xml version="1.0" encoding="UTF-8" ?><prs:Person

xmlns:prs=”http://lundogbendsen.dk/schemas/2004/08/02/Person”xmlns:addr=”http://lundogbendsen.dk/schemas/2004/08/02/Address”cprNo= ”231172-2957” ><prs:FirstName>Ole</prs:FirstName><prs:LastName>Jensen</prs:LastName><addr:Address>

<addr:Street isAppartment=”false” >Bakkevej 78</addr:Street><addr:Zip>7000</addr:Zip><addr:City>Fredericia</addr:City>

</addr:Address></prs:Person>

<?xml version="1.0" encoding="UTF-8" ?><prs:Person

xmlns:prs=”http://lundogbendsen.dk/schemas/2004/08/02/Person”xmlns:addr=”http://lundogbendsen.dk/schemas/2004/08/02/Address”cprNo= ”231172-2957” ><prs:FirstName>Ole</prs:FirstName><prs:LastName>Jensen</prs:LastName><addr:Address>

<addr:Street isAppartment=”false” >Bakkevej 78</addr:Street><addr:Zip>7000</addr:Zip><addr:City>Fredericia</addr:City>

</addr:Address></prs:Person>

• Man må gerne definere flere forskellige prefixes, som er bundet til hver deres namespace name – gerne i samme element!

• Brugen af prefixes fylder mere, men gør det omvendt meget tydeligt hvilke elementer og attributter, der hører til hvilke namespaces.

48Introduktion til XMLCopyright © Lund & Bendsen

Binding af prefixes behøver ikke stå i root

<?xml version="1.0" encoding="UTF-8" ?><prs:Person

xmlns:prs=”http://lundogbendsen.dk/schemas/2004/08/02/Person”cprNo= ”231172-2957” ><prs:FirstName>Ole</prs:FirstName><prs:LastName>Jensen</prs:LastName><addr:Address

xmlns:addr=”http://lundogbendsen.dk/schemas/2004/08/02/Address” ><addr:Street isAppartment=”false” >Bakkevej 78</addr:Street><addr:Zip>7000</addr:Zip><addr:City>Fredericia</addr:City>

</addr:Address></prs:Person>

<?xml version="1.0" encoding="UTF-8" ?><prs:Person

xmlns:prs=”http://lundogbendsen.dk/schemas/2004/08/02/Person”cprNo= ”231172-2957” ><prs:FirstName>Ole</prs:FirstName><prs:LastName>Jensen</prs:LastName><addr:Address

xmlns:addr=”http://lundogbendsen.dk/schemas/2004/08/02/Address” ><addr:Street isAppartment=”false” >Bakkevej 78</addr:Street><addr:Zip>7000</addr:Zip><addr:City>Fredericia</addr:City>

</addr:Address></prs:Person>

• Bindingen af et namespace prefix til et namespace name må ståi et hvilket som helst elements starttag.

• Prefix’et kan kun bruges inden i det element, hvor det er defineret

Page 25: 01- Introduktion til XML

49Introduktion til XMLCopyright © Lund & Bendsen

Man må godt blande default og prefixes

<?xml version="1.0" encoding="UTF-8" ?><Person

xmlns=”http://lundogbendsen.dk/schemas/2004/08/02/Person”xmlns:addr=”http://lundogbendsen.dk/schemas/2004/08/02/Address”cprNo= ”231172-2957” ><FirstName>Ole</FirstName><LastName>Jensen</LastName><addr:Address>

<addr:Street isAppartment=”false” >Bakkevej 78</addr:Street><addr:Zip>7000</addr:Zip><City>Fredericia</City>

</addr:Address></Person>

<?xml version="1.0" encoding="UTF-8" ?><Person

xmlns=”http://lundogbendsen.dk/schemas/2004/08/02/Person”xmlns:addr=”http://lundogbendsen.dk/schemas/2004/08/02/Address”cprNo= ”231172-2957” ><FirstName>Ole</FirstName><LastName>Jensen</LastName><addr:Address>

<addr:Street isAppartment=”false” >Bakkevej 78</addr:Street><addr:Zip>7000</addr:Zip><City>Fredericia</City>

</addr:Address></Person>

Man kan override default namespaces vha. namespace prefixes

Bemærk - default namespace

NB: City ”arver” default namespace’et

50Introduktion til XMLCopyright © Lund & Bendsen

Namespace name er kun et navn

• Der er tradition for at bruge en http-adresse som namespace name – fx http://example.com/myNs

• Men et namespace name er bareet navn• Hvis man bruger en http-adresse som navn,

måman gerne placere noget på adressen – fx:– En web-side med beskrivelse af det XML vocabulary,

som namespace-navnet bruges til– Et schema der specificerer reglerne for det XML

vocabulary, der bruger namespace-navnet

• Vigtigst er dog, at man finder på et namespace-navn, som andre ikke bruger / ikke vil bruge

Page 26: 01- Introduktion til XML

51Introduktion til XMLCopyright © Lund & Bendsen

Hvordan undgår man navnekonflikter?

• Det er elementers Expanded Name,der ikke må kollidere:

Expanded Name = Namespace Name + Local Name

• Sørg derfor for følgende:– Brug altid namespace til dit XML vocabulary

– Lad dine namespace names indeholde et DNS-navn, som du ejer (som med pakker i Java)Fx http://www.lundogbendsen.dk/Address

52Introduktion til XMLCopyright © Lund & Bendsen

Hvorfor bruger man prefixes?

• Hvorfor har folkene bag XML besluttet, at man skal bruge namespace prefixfrem for namespace name? Fx: <myns:Person>Frem for: <http://example.com/myNs:Person>

• For det første fylder det ekstremt meget

• For det andet vil mange namespace namesindeholde tegn, der ikke er lovlige.Fx er ”/” et ulovligt tegn i names

Page 27: 01- Introduktion til XML

53Introduktion til XMLCopyright © Lund & Bendsen

Kode bør bruge namespace name (ikke prefix)

• Det er vigtigt at huske, at det er namespace name(og ikke prefix), der er en del af elementets navn

• Derfor er det næsten altid namespace name og ikke prefix, der er relevant at bruge i ens kode

• Fx bør applikationskode man skriver se nedenstående to dokumenter som helt ens

<a:Addressxmlns:a=“ http://demo.com/adr” >

<a:Street>Bakkevej 78</a:Street>

<a:Zip>7000</a:Zip>

</a:Address>

<a:Addressxmlns:a=“ http://demo.com/adr” >

<a:Street>Bakkevej 78</a:Street>

<a:Zip>7000</a:Zip>

</a:Address>

<b:Addressxmlns:b=“ http://demo.com/adr” >

<b:Street>Bakkevej 78</b:Street>

<b:Zip>7000</b:Zip>

</b:Address>

<b:Addressxmlns:b=“ http://demo.com/adr” >

<b:Street>Bakkevej 78</b:Street>

<b:Zip>7000</b:Zip>

</b:Address>

Expanded name = http://demo.com/adr + Zip

Expanded name = http://demo.com/adr + Zip

54Introduktion til XMLCopyright © Lund & Bendsen

Namespace aware vs. unaware

• Namespace aware parsingParseren forstår og respekterer namespaces, dvs. parseren:– ser kolon (:) i navne som adskillelse i prefix og local name– ser <odr:Address> som Address i det namespace, som odr er bundet til– ser xmlns:odr =”…” som bindingen af prefix’etodr til en namespace name

• Namespace unaware parsingParseren forstår ikke / ignorerer namespaces, dvs. parseren:– ser ikke kolon (:) i navne som noget særligt– ser ikke et navn prefixet med namespace som prefix og local name,

men ser det i stedet som ét langt navn – fx ser parseren<order:Address> som et element med navnet “order:Address”

– ser xmlns-attributter som alle andre attributter – fx ser parserenxmlns:odr =“…” som en attribut med navnet “xmlns:odr”

Namespaces er kommet tilefter første version af XML

Page 28: 01- Introduktion til XML

55Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

56Introduktion til XMLCopyright © Lund & Bendsen

Hvad betyder QName?

• Når man bruger namespacesskal alleattribut-navne og elementnavne være lovlige QNames

• QName står for Qualified Name

• Her to eksempler på lovlige QNames:

• Mere om QName-syntaksen på næste slide

<myPrefix:MyElement>

prefix local name

QName

<MyElement>

local name

QName

Page 29: 01- Introduktion til XML

57Introduktion til XMLCopyright © Lund & Bendsen

Syntaksen for QName og NCName

• Når man bruger namespacesskal alleattribut-navne og elementnavne være lovlige QNames

• Den præcise syntaks for et QName er:

QName ::= [NCName:]NCName

Hvad betyder NCName?– NCName står for Non Colonized Name

– NCName er et navn, som ikke indeholder et kolon (:)

prefix(optional) local name

58Introduktion til XMLCopyright © Lund & Bendsen

Hvad betyder Expanded Name?

• Hvis et element/en attribut er i et namespace,så består elementets/attributtens expanded name af:

– Namespace name (fx http://www.w3.org/1999/xhtml)– Local name (fx html eller address)

• Hvis et element/en attribut ikke er i et namespace,så består elementets/attributtens expanded name af:

– Local name (fx address eller phoneNo)

Page 30: 01- Introduktion til XML

59Introduktion til XMLCopyright © Lund & Bendsen

Hvordan hænger begreberne sammen?

<myPrefix:MyElement>

Prefix Local Name

QName (Qualified Name)

<... xmlns:myPrefix=”http://lundogbendsen.dk/myNS”>

Expanded name

http://lundogbendsen.dk/myNS MyElement

Namespace Name

+

60Introduktion til XMLCopyright © Lund & Bendsen

URL, URI, URN og IRI 1/2

• URL:– Uniform Resource Locator– Angiver placering på en resurse– Fx http://example.org/ex.html

• URN:– Uniform Resource Name– Angiver navn på en resurse– Fx urn:isbn:0-395-36341-1

• URI:– Uniform Resource Identifier– Fællesbetegnelse for URL og URN– Må kun bruge ASCII-tegn

• IRI:– Internationalized Resource Identifier– Som URI– Må bruge unicode-tegn (heraf ”internationalized”)

IRI

URI

URLURN

Pseudo-UMLViser relation ml. begreber

Page 31: 01- Introduktion til XML

61Introduktion til XMLCopyright © Lund & Bendsen

• Krav til namespace names:– Skaloverholde syntaksen for IRI– Må ikkevære en relative IRI

• URI/IRI-syntaks: schemeName:schemeSpecificPart

• Hvert scheme kan (indenfor visse rammer) selv specificere en scheme-specifik syntaks for den scheme-specifikke del

• Der findes 3 typer af schemes:– Offentlige registrerede – fx http, https, ftp, mailto og ldap

– Offentlige uregistrerede – fx jdbc, pop3 og uuid

– Private (et scheme man kun bruger internt) – fx lbuid

URL, URI, URN og IRI 2/2

62Introduktion til XMLCopyright © Lund & Bendsen

Mere information om namespaces

• Namespace-specifikationen til XML 1.0– http://www.w3.org/TR/xml-names/

• Information om IRIs, URIs, URLs og URNs– http://en.wikipedia.org/wiki/Internationalized_Resource_Identifier– http://en.wikipedia.org/wiki/Uniform_Resource_Identifier– http://www.rfc-editor.org/rfc/rfc3305.txt (URI vs. URL vs. URN)– http://tools.ietf.org/html/rfc3987 (IRI)– http://tools.ietf.org/html/rfc3986 (URI)– http://tools.ietf.org/html/rfc1738 (URL)– http://www.iana.org/assignments/uri-schemes.html (schemes)– http://www.w3.org/Addressing/schemes (uofficielle schemes)

Page 32: 01- Introduktion til XML

63Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

64Introduktion til XMLCopyright © Lund & Bendsen

XML vocabulary (XML application)

• Hvad betyder “vocabulary”?– all the words contained in a language

– the specialist terms used in a given subject

– the words known and used within a particular trade or profession

• Hvad betyder “XML vocabulary ”?– A set of XML tags for a particular industry

or business function

– Synonym: XML application

www.thefreedictionary.com

www.wikipedia.org

Page 33: 01- Introduktion til XML

65Introduktion til XMLCopyright © Lund & Bendsen

Eksempler på XML vocabularies

• Mathematical Markup Language• AML (Astronomical Markup Language) • XHTML (Extensible HTML)• DocBook (XML format for books)• WSDL (Web Services Description Language)• JSML (Java Speech Markup Language) • OMF (Weather Observation Definition Format) • SVG (Scalable Vector Graphics)• XML/EDI (Electronic Data Interchange)• XUL (Extensible UI Language)

66Introduktion til XMLCopyright © Lund & Bendsen

XHTML er et eksempel på et XML Vocabulary

• Ekempel på en instans af XHTML vocabolary’et

• XHTML definerer lovlige navnepå elementer og attributter, samt hvor i strukturen de må bruges

<html>

<head id=“minHeader”>

<title>

Dette er min titel

</title>

</head>

<body>

…udeladt…

</body>

</html>

<html>

<head id=“minHeader”>

<title>

Dette er min titel

</title>

</head>

<body>

…udeladt…

</body>

</html>

• XHTML definerer at ’html’ må bruges som elementnavn (ord i vocabolary’et)

• XHTML definerer at html-elementet skalvære rodelement (struktur)

• XHTML definerer at ’id’ må bruges som attributnavn

• XHTML definerer at id må bruges som attribut i head-elementet

• XHTML definerer at body skal være child i html, og at body skal stå efter head

Page 34: 01- Introduktion til XML

67Introduktion til XMLCopyright © Lund & Bendsen

Hvordan beskriver man et XML vocabolary?

• Et par gode idéer (eller er de…?)– Man kunne lave et illustrativt eksempel-dokument

– Reglerne kunne uddybes i et Word-dokument

• Ulemper ved ovenstående:– Det er svært at få regler beskrevet helt præcist

uden tvetydighed og uden at glemme noget

– Eksempler og beskrivelser er for ustrukturerede til at værktøjer kan gøre brug af reglerne.Og det kunne ellers være dejligt hvis et værktøj fx kunne undersøge om et dokument holder sig til reglerne

68Introduktion til XMLCopyright © Lund & Bendsen

Struktureret definition af et XML vocabolary

• Heldigvis findes der sprog, som kan bruges til at definere XML vocabolaries med

• Disse sprog er præcise nok til, at de kan forstås af værktøjer ☺

• I næste sektion kigger vi på disse sprog

Page 35: 01- Introduktion til XML

69Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

70Introduktion til XMLCopyright © Lund & Bendsen

Hvad er et schema?

• Et schema specificerer hvordan en bestemt type af XML-dokumenter skal se ud. Fx:– En liste over gyldige element- og attributnavne

– Regler om hvilke elementer og attributter må indlejres inden i hvilke elementer

– Regler om hvilke datatyper de forskellige elementer og attributter har – fx at et element eller en attribut skal indholde et positivt heltal

• Man kan altså specificere de regler, der gælder for et XML vocabulary, vha. et schema

Page 36: 01- Introduktion til XML

71Introduktion til XMLCopyright © Lund & Bendsen

Forhold ml. et schema og XML-dokumenter

• Et schema specificerer hvordan en bestemt type af XML-dokumenter skal se ud.

• XML-dokumenter der overholder reglerne fra et schema siges at være instanseraf skemaet

• Se også sammenligningen af schemas med databaser og Java-kode på næste slide

72Introduktion til XMLCopyright © Lund & Bendsen

Schemas, Java-klasser og DB-tabeller

XML-dokument

(Schema-instans)SchemaXML

RækkeTabelRelationelle databaser

ObjektKlasseJava

Instanser af en datastruktur

Specifikation afen datastruktur

Page 37: 01- Introduktion til XML

73Introduktion til XMLCopyright © Lund & Bendsen

Forskellige schema-sprog i XML

• Et schema specificerer en data-struktur for XML-dokumenter

• Et schema skrives i et schema-sprog

• Der findes flere forskellige schema-sprog til at specificere schemas med (se næste slide)

74Introduktion til XMLCopyright © Lund & Bendsen

Forskellige schemasprog til XML

Har faciliteter de andre sprog ikke har.Kan bruges som supplement til bådeW3C XML Schema og RELAX NG.

Schematron

Konkurrent til W3C XML Schema.Ikke specielt udbredt, men har en del

meget passionerede tilhængere.RELAX NG

Det klart mest udbredte schema-sprog.Er både kraftfuldt og kompliceret.

Udbredt support i værktøjer og API’er

W3C XML Schema(ofte bare kaldet Schema)

Var det første schemasprog til XML.Er forældet men endnu ikke udfaset.

Er ikke ret udtryksfuldt.

DTD(Document Type Definition)

Kommentar .Navn

Page 38: 01- Introduktion til XML

75Introduktion til XMLCopyright © Lund & Bendsen

Forholdet mellem schema og namespace

• Et schema vil typisk have et target namespace

• Med target namespace menes det name-space, som schema’et definerer regler for

• Se eksemplet på næste slide, der viser:– Et W3C XML Schema– Et XML-dokument der overholder schemaet– Brugen af tagetNamespace i schema’et

76Introduktion til XMLCopyright © Lund & Bendsen

Eksempel på et W3C XML Schema

<?xml version="1.0" encoding="UTF-8"?><xs:schema targetNamespace="http://www.example.org/Person"

xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="Person"><xs:complexType>

<xs:sequence><xs:element name="FirstName" type="xs:string" /><xs:element name="LastName" type="xs:string" />

</xs:sequence><xs:attribute name="cprNo" type="xs:string" />

</xs:complexType></xs:element>

</xs:schema>

<?xml version="1.0" encoding="UTF-8"?><xs:schema targetNamespace="http://www.example.org/Person"

xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="Person"><xs:complexType>

<xs:sequence><xs:element name="FirstName" type="xs:string" /><xs:element name="LastName" type="xs:string" />

</xs:sequence><xs:attribute name="cprNo" type="xs:string" />

</xs:complexType></xs:element>

</xs:schema><?xml version="1.0" encoding="UTF-8" ?><p:Person

xmlns:p="http://www.example.org/Person"cprNo="231172-2957">

<p:FirstName>Ole</p:FirstName><p:LastName>Jensen</p:LastName>

</p:Person>

<?xml version="1.0" encoding="UTF-8" ?><p:Person

xmlns:p="http://www.example.org/Person"cprNo="231172-2957">

<p:FirstName>Ole</p:FirstName><p:LastName>Jensen</p:LastName>

</p:Person>

Et W3C XML Schema

Et XML-dokument, der overholdershema’et (dvs. en schema-instans)

nam

espace

for X

ML

match

er

targetN

amesp

acefo

r schem

a

Page 39: 01- Introduktion til XML

77Introduktion til XMLCopyright © Lund & Bendsen

Wellformed og valid XML-dokumenter

• Et XML-dokument er wellformed…– …hvis dokumentet overholder de generelle regler for

XML-dokumenter

– fx at elementer ikke må krydse og at start-tags skal efterfølges af tilsvarende slut-tags

• Et XML-dokument er valid (gyldigt)…– …hvis dokumentet er wellformed

– …og dokumentet derudover overholder de ekstra regler og begrænsninger, der er defineret i et schema

78Introduktion til XMLCopyright © Lund & Bendsen

Mere information om schemas

• http://en.wikipedia.org/wiki/XML_schema

Generelt om de forskelige schema-sprog

• http://en.wikipedia.org/wiki/Document_Type_Definition

• http://en.wikipedia.org/wiki/XML_Schema_(W3C)

• http://en.wikipedia.org/wiki/RELAX_NG

• http://en.wikipedia.org/wiki/Schematron

• http://en.wikipedia.org/wiki/XML_Schema_Language_Comparison

• Siderne indeholder mange links til yderligere information

Page 40: 01- Introduktion til XML

79Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

80Introduktion til XMLCopyright © Lund & Bendsen

Overblik over XML-begreber

På de næste slides skal vi se på en figur, der illustrerer sammenhængen ml. de forskellige XML-begreber:

– XML Vocabulary

– Schema language

– Schema

– Namespace

– XML-dokument

– XML-værktøj

Page 41: 01- Introduktion til XML

81Introduktion til XMLCopyright © Lund & Bendsen

Schema specificerer vocabulary

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

S specificerer V

82Introduktion til XMLCopyright © Lund & Bendsen

Schema skrives i et sprog

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

S specificerer V

S er s

krev

et

i spr

oget

L

Page 42: 01- Introduktion til XML

83Introduktion til XMLCopyright © Lund & Bendsen

Namespace identificerer et vocabulary

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

N b

ruge

s so

m u

nikt

nav

n fo

r V

S specificerer V

S er s

krev

et

i spr

oget

L

84Introduktion til XMLCopyright © Lund & Bendsen

Namespace specificeres af et schema

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

N b

ruge

s so

m u

nikt

nav

n fo

r V

Targ

et n

ames

pace

for S

er N

S specificerer V

S er s

krev

et

i spr

oget

L

Page 43: 01- Introduktion til XML

85Introduktion til XMLCopyright © Lund & Bendsen

XML-dokument bruger elementer fra et namespace

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

D bruger elementer fra Nog skal derfor overholde S

N b

ruge

s so

m u

nikt

nav

n fo

r V

Targ

et n

ames

pace

for S

er N

S specificerer V

S er s

krev

et

i spr

oget

L

86Introduktion til XMLCopyright © Lund & Bendsen

Et værktøj kan forstå et schema sprog

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

D bruger elementer fra Nog skal derfor overholde S

N b

ruge

s so

m u

nikt

nav

n fo

r V

Targ

et n

ames

pace

for S

er N

S specificerer V

S er s

krev

et

i spr

oget

L

T har support for Log kan derfor forstå S

Page 44: 01- Introduktion til XML

87Introduktion til XMLCopyright © Lund & Bendsen

Et værktøj kan være namespace aware

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

D bruger elementer fra Nog skal derfor overholde S

N b

ruge

s so

m u

nikt

nav

n fo

r V

Targ

et n

ames

pace

for S

er N

S specificerer V

S er s

krev

et

i spr

oget

L

T har support for Log kan derfor forstå S

T kan se at elementer og

attributter i N er specificeret af S

88Introduktion til XMLCopyright © Lund & Bendsen

Validering af at et XML-dokumenter en lovlig instans af et Schema

S er et schema

D er et XML-dokument

T er et XML-værktøj

L er et schema language§§§

<xml>

V er et XML vocabulary

§

N er et namespace

D bruger elementer fra Nog skal derfor overholde S

N b

ruge

s so

m u

nikt

nav

n fo

r V

Targ

et n

ames

pace

for S

er N

S specificerer V

S er s

krev

et

i spr

oget

L

T har support for Log kan derfor forstå S

T kan validere, at D overholder

reglerne i S, som gælder fo

r NT kan se at elementer og

attributter i N er specificeret af S

Page 45: 01- Introduktion til XML

89Introduktion til XMLCopyright © Lund & Bendsen

Introduktion til XML• Hvad er XML og hvad kan XML bruges til?

• XML-syntaks: Elementer og tags

• XML-syntaks: Attributter

• XML-syntaks: Kommentarer

• XML-syntaks: Escapes (entities og CDATA)

• XML-syntaks: Declarations

• Wellformed XML

• XML-syntaks: XML namespaces

• Detaljer om begreberne relateret til namespaces

• XML vocabularies (XML applications)

• Overblik over schema languages og schemas

• Opsamling på sammenhængen mellem centrale XML-begreber

• Styrker og svagheder ved XML

90Introduktion til XMLCopyright © Lund & Bendsen

Fordele ved XML

• XML består af almindelig tekst, som kan læses af mennesker vha. en teksteditor og som kan håndteres af alle systemtyper

• Det er relativt nemt at skrive XML-parsere (hvorfor XML-parsere også findes i stort set alle sprog på alle platforme)

• XML understøtter Unicode, hvilket gør at XML uden problemer kan bruges til andre sprog end engelsk

• XML kan repræsentere stort set alle datastrukturer: træer, lister, rækker og med lidt besvær også grafer (vha. id og idref)

• XML-dokumenter er selvbeskrivende, hvis man vælger gode elementnavne (modsat fx komma- eller tab-separerede filer)

• XML er en åben standard, som man frit kan anvende

• Der findes adskillige schemasprog til XML, som kan bruges til specificering og validering af nye XML markup languages

Page 46: 01- Introduktion til XML

91Introduktion til XMLCopyright © Lund & Bendsen

Ulemper ved XML

• XML indeholder ofte metadata og redundans, og fylder derfor meget (fx i forhold til kommaseparerede filer)

• Mange datatyper (fx tal) fylder meget, når de repræsenteres som tekst og ikke på binær form

• XML kan læses af mennesker, men bliver let uoverskueligt

• Manglende regler for brugen af whitespacesbesværliggør visse ting – fx – at finde delta på to dokumenter (forskellen)– at understøtte signering af data på XML-form

• XML er ikke specielt velegnet til at repræsentere grafer• Flere dele af XML er svært at forstå (fx namespaces)

92Introduktion til XMLCopyright © Lund & Bendsen

Mere information om XML

• http://en.wikipedia.org/wiki/Xml– Overordnet beskrivelse af XML

– Mange links til yderligere information

• http://www.w3.org/XML/– W3C er organisationen bag XML

– Overblik over de forskellige XML-specifikationer

• http://www.soaglossary.com/default.asp– Forklarer XML og WS-relaterede begreber

• http://www.w3schools.com– Har mange XML-orienterede tutorials