Top Banner
Introduction to XML Technologies www.dreamix.eu Angel Gruev Dreamix ltd.
81
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CrashCourse: XML technologies

Introduction to XML Technologies

www.dreamix.eu

Angel GruevDreamix ltd.

Page 2: CrashCourse: XML technologies

About the author

www.dreamix.eu

Chief Technology Officer @Dreamix

Software Architecture Project Management Oracle Technologies Research and Development Education Snowboarding

Passionate about:

Monika, 04/14/2015
Page 3: CrashCourse: XML technologies

Introduction to XML

www.dreamix.eu

Page 4: CrashCourse: XML technologies

Markup Language

A markup language annotates (or marks up) a text.

A markup language must specify What markup is allowed What markup is required How markup is to be distinguished

from text What the markup means

*XML only specify the first three, the fourth is specified by DTD or Schema

Page 5: CrashCourse: XML technologies

What is XML?

XML is a markup meta-language: It enables you to define your own language It establishes rules about how you can mark

up a document You can use it to extend your language if

you feel the needNote: HTML is a markup language that does not obey the rules of XML

Practical definition: XML consists of a set of standards to exchange and publish information in a structured manner

Page 6: CrashCourse: XML technologies

Dealing with XML

In what way do you get involved with XML? Many configuration files are stored in XML

format. XML text is routinely sent and received

across the Internet. You can generate XML with server-side

programs. You can parse XML to access the

information. You can query XML. You can transform XML.

Page 7: CrashCourse: XML technologies

XML Application – Exchange data

XML is used to Exchange Data Text format Software-independent, hardware-

independent Exchange data between incompatible

systems, given that they agree on the same tag definition.

Can be read by many different types of applications

Benefits: Reduce the complexity of interpreting data Easier to expand and upgrade a system

Page 8: CrashCourse: XML technologies

XML Application 2 –Store Data

XML can be used to Store Data Plain text file Store data in files or databases Application can be written to store and

retrieve information from the store Other clients and applications can access

your XML files as data sources

Benefits: Accessible to more applications

Page 9: CrashCourse: XML technologies

XML Application 3 – Create new language

XML can be used to Create new Languages WML (Wireless Markup Language) used to

markup Internet applications for handheld devices like mobile phones (WAP)

MusicXML - publish musical scores ThML - Theological Markup Language CML - Chemical Markup Language MathML - Mathematical Markup Language

Page 10: CrashCourse: XML technologies

Prolog

Instance

Additions

<?xml version="1.0" encoding="UTF-8" ?><?xml:stylesheet type="text/css" href="s.css" ?><!DOCTYPE test SYSTEM "test.dtd"> stylesheet and document type declaration

Elements (element hierarchy)<author>

<first>Ganyo</first><last>Balkanski</last>

</author>

• Comments <!-- comment -->• Processing Instructions

<?PITarget Status="draft" ?>

General Construction Plan for an XML Document

Page 11: CrashCourse: XML technologies

Escaping characters

Predefined entities for special characters&amp;&amp; && (ampersand)&lt;&lt; << (less than)&gt;&gt; >> (greater than)&apos;&apos; '' (apostrophe)&quot;&quot; "" (quotation mark)

Page 12: CrashCourse: XML technologies

CDATA

CDATA refers to character data. CDATA (Character DATA) comes from

SGML, too Starts with <![CDATA[<![CDATA[ Ends with ]]>]]>

CDATA contents are ignored by the parser and are given as-is to the application

Page 13: CrashCourse: XML technologies

Elements or Attributes?

How should data be encapsulated? <book> <title><title>The Forty-nine Steps</title></title> … </book>

<book title="title="The Forty-nine Steps""> …</book>

Depends upon what document type is designed for

Page 14: CrashCourse: XML technologies

Elements or Attributes ?

General rules:

If all markup is stripped away, the document If all markup is stripped away, the document

should still be readable and useableshould still be readable and useable

If all markup is stripped away, the document If all markup is stripped away, the document

should still be readable and useableshould still be readable and useable

If in doubt, use an elementIf in doubt, use an elementIf in doubt, use an elementIf in doubt, use an element

Page 15: CrashCourse: XML technologies

Elements or Attributes?

Attributes versus elements: Elements can be nested; attributes cannot

be. Metadata is usually stored as attributes

(developers may disagree on what data is to considered metadata).

When in doubt, use elements; when XML documents are transformed, some transformers may ignore attributes.

Page 16: CrashCourse: XML technologies

Processing Instructions

Information required by an external application

Processing Instructions Format

<? … ?>

XML PI

<?xml version='1.0’ ?>

Confusingly, this is called the XML declaration, but is a processing instruction

Page 17: CrashCourse: XML technologies

XML Namespaces

www.dreamix.eu

Page 18: CrashCourse: XML technologies

Avoiding duplication of names

People create their XML dictionaries Many name duplications, with different

semantics Example:

Our XML context XHTML contextfirsttitle

lastbody title

html

Page 19: CrashCourse: XML technologies

Example: duplication of <title><?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><person><person> <name id="1"><name id="1"> <title><title>SirSir</title></title> <first>John</first><first>John</first> <middle>Fitzgerald Johansen</middle><middle>Fitzgerald Johansen</middle> <last>Doe</last><last>Doe</last> </name></name> <resume><resume> <html><html> <head><head><title><title>Resume of John DoeResume of John Doe</title></title></head></head> <body><body> <h1>John Doe</h1><h1>John Doe</h1> <p style="FONT-FAMILY: Arial"><p style="FONT-FAMILY: Arial"> John's a great guy, you know?John's a great guy, you know? </p></p> </body></body> </html></html> </resume></resume></person></person>

<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><person><person> <name id="1"><name id="1"> <title><title>SirSir</title></title> <first>John</first><first>John</first> <middle>Fitzgerald Johansen</middle><middle>Fitzgerald Johansen</middle> <last>Doe</last><last>Doe</last> </name></name> <resume><resume> <html><html> <head><head><title><title>Resume of John DoeResume of John Doe</title></title></head></head> <body><body> <h1>John Doe</h1><h1>John Doe</h1> <p style="FONT-FAMILY: Arial"><p style="FONT-FAMILY: Arial"> John's a great guy, you know?John's a great guy, you know? </p></p> </body></body> </html></html> </resume></resume></person></person>

Page 20: CrashCourse: XML technologies

Example: duplication of <title><?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><pers:person <pers:person xmlns:pers=“http://sernaferna.com/pers”xmlns:pers=“http://sernaferna.com/pers” xmlns:html=“http://www.w3.org/1999/xhtml”xmlns:html=“http://www.w3.org/1999/xhtml”>> <pers:name id="1"><pers:name id="1"> <pers:title><pers:title>SirSir</pers:title></pers:title> <pers:first>John</pers:first><pers:first>John</pers:first> <pers:middle>Fitzgerald Johansen</pers:middle><pers:middle>Fitzgerald Johansen</pers:middle> <pers:last>Doe</pers:last><pers:last>Doe</pers:last> </pers:name></pers:name> <pers:resume><pers:resume> <html:html><html:html> <html:head><html:head> <html:title><html:title>......</html:title></html:title> </html:head></html:head> <html:body><html:body> ...... </html:body></html:body> </html:html></html:html> </html:resume></html:resume></html:person></html:person>

<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><pers:person <pers:person xmlns:pers=“http://sernaferna.com/pers”xmlns:pers=“http://sernaferna.com/pers” xmlns:html=“http://www.w3.org/1999/xhtml”xmlns:html=“http://www.w3.org/1999/xhtml”>> <pers:name id="1"><pers:name id="1"> <pers:title><pers:title>SirSir</pers:title></pers:title> <pers:first>John</pers:first><pers:first>John</pers:first> <pers:middle>Fitzgerald Johansen</pers:middle><pers:middle>Fitzgerald Johansen</pers:middle> <pers:last>Doe</pers:last><pers:last>Doe</pers:last> </pers:name></pers:name> <pers:resume><pers:resume> <html:html><html:html> <html:head><html:head> <html:title><html:title>......</html:title></html:title> </html:head></html:head> <html:body><html:body> ...... </html:body></html:body> </html:html></html:html> </html:resume></html:resume></html:person></html:person>

Page 21: CrashCourse: XML technologies

The Idea of Namespaces

Namespaces Abstract notion (category) for groups of

names A name belong to one group only

pers xhtml

pers:first

pers:title

pers:last html:body

html:title

html:htmlpers:name

html:p

Page 22: CrashCourse: XML technologies

Presentation

Elements have to have Qualified Names (called QNames)

QName = namespace_prefix : local_name

See http://www.w3.org/TR/1999/REC-xml-names

But how to assure unique names for a given namespace?? (two companies may use different ‘pers’ namespaces)

Page 23: CrashCourse: XML technologies

Unique Namespace Identification by URL

Most standards have an official URL A URL is unique

Use URL for namespace identification Application doesn’t have to be Internet-aware

to use Namespaces URL becomes a well-known text string

Distinguish elements and attributes by adding a prefix to the name prefix:name (assign short unique name to URL)

xmlns:namespace-prefix="namespaceURI"xmlns:namespace-prefix="namespaceURI"xmlns:namespace-prefix="namespaceURI"xmlns:namespace-prefix="namespaceURI"

Page 24: CrashCourse: XML technologies

Namespaces in XML

Specification of W3C A single schema (DTD) is considered to own

its own namespace in which all element names and all attribute names are unique

Mechanism for identifying namespaces used in document and identifies to which namespace an element or attribute belongs Any reference to an element name is

unambiguous A single document may contain

information defined in a number of namespaces

Page 25: CrashCourse: XML technologies

Default Namespace – xmlns without any Prefix

Default NS

Page 26: CrashCourse: XML technologies

Namespaces for Attributes, too

Page 27: CrashCourse: XML technologies

Uniqueness of Attributes

In XML documents conforming to this specification, no tag may contain two attributes which: Have identical names Have qualified names with the same

local part and with prefixes which have been bound to namespace names that are identical.

Page 28: CrashCourse: XML technologies

Uniqueness of AttributesExamples

<!-- http://www.w3.org is bound to n1 and n2 --><!-- http://www.w3.org is bound to n1 and n2 --><x xmlns:n1="http://www.w3.org" <x xmlns:n1="http://www.w3.org"    xmlns:n2="http://www.w3.org" >   xmlns:n2="http://www.w3.org" >  <bad a="1"     a="2" />  <bad a="1"     a="2" />  <bad n1:a="1"  n2:a="2" />  <bad n1:a="1"  n2:a="2" /></x> </x> 

<!-- http://www.w3.org is bound to n1 and n2 --><!-- http://www.w3.org is bound to n1 and n2 --><x xmlns:n1="http://www.w3.org" <x xmlns:n1="http://www.w3.org"    xmlns:n2="http://www.w3.org" >   xmlns:n2="http://www.w3.org" >  <bad a="1"     a="2" />  <bad a="1"     a="2" />  <bad n1:a="1"  n2:a="2" />  <bad n1:a="1"  n2:a="2" /></x> </x> 

<!-- http://www.w3.org is bound to n1 <!-- http://www.w3.org is bound to n1           and is the default -->and is the default --><x xmlns:n1="http://www.w3.org" <x xmlns:n1="http://www.w3.org"    xmlns="http://www.w3.org" >   xmlns="http://www.w3.org" >  <good a="1"     b="2" />  <good a="1"     b="2" />  <good a="1"     n1:a="2" />  <good a="1"     n1:a="2" /></x> </x> 

<!-- http://www.w3.org is bound to n1 <!-- http://www.w3.org is bound to n1           and is the default -->and is the default --><x xmlns:n1="http://www.w3.org" <x xmlns:n1="http://www.w3.org"    xmlns="http://www.w3.org" >   xmlns="http://www.w3.org" >  <good a="1"     b="2" />  <good a="1"     b="2" />  <good a="1"     n1:a="2" />  <good a="1"     n1:a="2" /></x> </x> 

Page 29: CrashCourse: XML technologies

XML Validation – DTD, XSD

www.dreamix.eu

Page 30: CrashCourse: XML technologies

What is a DTD?

A template for document markup A file which contains a formal definition of a

particular type of document

A DTD describes: What names can be used for element types Where element types can occur How element types fit together Specifies document hierarchy and granularity Specifies names and types of element

attributes

Page 31: CrashCourse: XML technologies

Why have a DTD?

Validating XML parser Check the structure of the XML file against a

DTD Check that it is valid and well-formed

DTD Can be a mechanism for standardization And hence document/data manipulation and

exchange

Page 32: CrashCourse: XML technologies

Each tag used in a valid XML document must be declared with an element declaration.

An element declaration specifies the name and the contents of the element (if any).

Element specifications are made using a simple grammar.

The order of element declarations is not relevant.

General DTD Rules

Page 33: CrashCourse: XML technologies

General DTD Rules (2)

DTD is case sensitive, but spacing and indentation in DTDs are not significant.

Comments in DTDs are just like comments in XML (they may not appear inside an element declaration).

Everything not explicitly permitted is forbidden.

Page 34: CrashCourse: XML technologies

DTD Declaration

DTD syntax is stored either in an external file, in the XML file itself, or both Internal DTD overrides or adds to the external

in cases of ENTITY and ATTLIST repetition

DTD parts ELEMENT - Tag definition ATTLIST - Attribute definitions ENTITY - Define common text PCDATA CDATA

Page 35: CrashCourse: XML technologies

Internal DTD

DTD may be specified internally as a document type declaration following the XML declaration: foo refers to the root element. foo contains parsed character data (#PCDATA) and

may not contain other elements.

<?xml version="1.0" standalone="yes"?><?xml version="1.0" standalone="yes"?><!DOCTYPE foo [<!DOCTYPE foo [    <!ELEMENT foo (#PCDATA)><!ELEMENT foo (#PCDATA)>]>]><foo><foo>    Hello XML!Hello XML!</foo></foo>

<?xml version="1.0" standalone="yes"?><?xml version="1.0" standalone="yes"?><!DOCTYPE foo [<!DOCTYPE foo [    <!ELEMENT foo (#PCDATA)><!ELEMENT foo (#PCDATA)>]>]><foo><foo>    Hello XML!Hello XML!</foo></foo>

Page 36: CrashCourse: XML technologies

External DTD

External DTDs May be on a file system or a Web site Are often shared Are specified at the beginning of an XML

document

<!doctype html PUBLIC "-//w3c//dtd html 4.0 <!doctype html PUBLIC "-//w3c//dtd html 4.0   transitional//en">  transitional//en"><!doctype html PUBLIC "-//w3c//dtd html 4.0 <!doctype html PUBLIC "-//w3c//dtd html 4.0   transitional//en">  transitional//en">

Page 37: CrashCourse: XML technologies

What is Schema?

The purpose of an XML Schema is to define the legal building blocks of an XML document, just like a DTD.

An XML Schema: Defines elements that can appear in a

document Defines attributes that can appear in a

document Defines which elements are child elements

Page 38: CrashCourse: XML technologies

Can DTD Do the Job?

DTD is written with yet another syntax. XSD schemas are well-formed XML documents.

DTD offers limited data types.

DTD has a complex and fragile extension mechanism.

XML schema overcomes the above limitations and offers a richer, expressive constraint-specifying mechanism.

XML schema files are stored with the .xsd extension.

Page 39: CrashCourse: XML technologies

Simple XML

<?xml version="1.0"?><?xml version="1.0"?><note><note>    <to>Tove</to><to>Tove</to>    <from>Jani</from><from>Jani</from>    <heading>Reminder</heading><heading>Reminder</heading>    <body><body>        Don't forget me this weekend!Don't forget me this weekend!    </body></body></note> </note> 

<?xml version="1.0"?><?xml version="1.0"?><note><note>    <to>Tove</to><to>Tove</to>    <from>Jani</from><from>Jani</from>    <heading>Reminder</heading><heading>Reminder</heading>    <body><body>        Don't forget me this weekend!Don't forget me this weekend!    </body></body></note> </note> 

Page 40: CrashCourse: XML technologies

Simple XML with DTD

<?xml version="1.0"?><?xml version="1.0"?><note><note>    <to>Tove</to><to>Tove</to>    <from>Jani</from><from>Jani</from>    <heading>Reminder</heading><heading>Reminder</heading>    <body><body>        Don't forget me this weekend!Don't forget me this weekend!    </body></body></note> </note> 

<?xml version="1.0"?><?xml version="1.0"?><note><note>    <to>Tove</to><to>Tove</to>    <from>Jani</from><from>Jani</from>    <heading>Reminder</heading><heading>Reminder</heading>    <body><body>        Don't forget me this weekend!Don't forget me this weekend!    </body></body></note> </note> 

<!ELEMENT note (to, from, heading, body)><!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)> <!ELEMENT body (#PCDATA)> 

<!ELEMENT note (to, from, heading, body)><!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)> <!ELEMENT body (#PCDATA)> 

XML DocXML DocXML DocXML Doc

DTDDTDDTDDTD

Page 41: CrashCourse: XML technologies

Simple XML with XSD

<?xml version="1.0"?><?xml version="1.0"?><xs:schema <xs:schema         xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema"         targetNamespace=targetNamespace=““http://www.w3schools.comhttp://www.w3schools.com””        xmlns=xmlns=““http://www.w3schools.comhttp://www.w3schools.com””        elementFormDefault="qualified">elementFormDefault="qualified">

    <xs:element name="note"><xs:element name="note">        <xs:complexType><xs:complexType>            <xs:sequence><xs:sequence>                <xs:element name="to" type="xs:string"/><xs:element name="to" type="xs:string"/>                <xs:element name="from" type="xs:string"/><xs:element name="from" type="xs:string"/>                <xs:element name="heading" type="xs:string"/><xs:element name="heading" type="xs:string"/>                <xs:element name="body" type="xs:string"/><xs:element name="body" type="xs:string"/>            </xs:sequence></xs:sequence>        </xs:complexType></xs:complexType>    </xs:element></xs:element></xs:schema> </xs:schema> 

<?xml version="1.0"?><?xml version="1.0"?><xs:schema <xs:schema         xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema"         targetNamespace=targetNamespace=““http://www.w3schools.comhttp://www.w3schools.com””        xmlns=xmlns=““http://www.w3schools.comhttp://www.w3schools.com””        elementFormDefault="qualified">elementFormDefault="qualified">

    <xs:element name="note"><xs:element name="note">        <xs:complexType><xs:complexType>            <xs:sequence><xs:sequence>                <xs:element name="to" type="xs:string"/><xs:element name="to" type="xs:string"/>                <xs:element name="from" type="xs:string"/><xs:element name="from" type="xs:string"/>                <xs:element name="heading" type="xs:string"/><xs:element name="heading" type="xs:string"/>                <xs:element name="body" type="xs:string"/><xs:element name="body" type="xs:string"/>            </xs:sequence></xs:sequence>        </xs:complexType></xs:complexType>    </xs:element></xs:element></xs:schema> </xs:schema> 

Page 42: CrashCourse: XML technologies

Referencing a Schema in an XML Document

<?xml version="1.0"?><?xml version="1.0"?><note xmlns="http://www.w3schools.com" <note xmlns="http://www.w3schools.com"             xmlns:xsi=xmlns:xsi=              "http://www.w3.org/2001/XMLSchema-instance“"http://www.w3.org/2001/XMLSchema-instance“            xsi:schemaLocation=xsi:schemaLocation=              "http://www.w3schools.com"http://www.w3schools.com  note.xsd">note.xsd">

<note><note>    <to>Tove</to><to>Tove</to>    <from>Jani</from><from>Jani</from>    <heading>Reminder</heading><heading>Reminder</heading>    <body>Don't forget me this weekend!</body><body>Don't forget me this weekend!</body></note> </note> 

<?xml version="1.0"?><?xml version="1.0"?><note xmlns="http://www.w3schools.com" <note xmlns="http://www.w3schools.com"             xmlns:xsi=xmlns:xsi=              "http://www.w3.org/2001/XMLSchema-instance“"http://www.w3.org/2001/XMLSchema-instance“            xsi:schemaLocation=xsi:schemaLocation=              "http://www.w3schools.com"http://www.w3schools.com  note.xsd">note.xsd">

<note><note>    <to>Tove</to><to>Tove</to>    <from>Jani</from><from>Jani</from>    <heading>Reminder</heading><heading>Reminder</heading>    <body>Don't forget me this weekend!</body><body>Don't forget me this weekend!</body></note> </note> 

Page 43: CrashCourse: XML technologies

Referencing (2)

Default namespace declaration

xmlns="http://www.w3schools.com" xmlns="http://www.w3schools.com" xmlns="http://www.w3schools.com" xmlns="http://www.w3schools.com"

• XML Schema Instance namespace XML Schema Instance namespace

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

• schemaLocationschemaLocation attribute attribute

xsi:schemaLocation="http://www.w3schools.comxsi:schemaLocation="http://www.w3schools.com//note.xsd"note.xsd"xsi:schemaLocation="http://www.w3schools.comxsi:schemaLocation="http://www.w3schools.com//note.xsd"note.xsd"

Page 44: CrashCourse: XML technologies

XSD Simple Elements

What is simple element Contain only text (cannot contain elements

or attributes) The text can be of different types

Common types: boolean, string, date, integer, time, decimal

Custom types Restriction (facets) can be added

Page 45: CrashCourse: XML technologies

Define a Simple Element

Syntax

Example:

<xs:element name="xxx" type="yyy"/> <xs:element name="xxx" type="yyy"/> <xs:element name="xxx" type="yyy"/> <xs:element name="xxx" type="yyy"/>

<lastname><lastname> RefsnesRefsnes</lastname></lastname><age>34</age><age>34</age><dateborn><dateborn> 1968-03-271968-03-27</dateborn> </dateborn>

<lastname><lastname> RefsnesRefsnes</lastname></lastname><age>34</age><age>34</age><dateborn><dateborn> 1968-03-271968-03-27</dateborn> </dateborn>

XMLXMLXMLXML

<xs:element name="lastname" <xs:element name="lastname" type="xs:string"/>type="xs:string"/><xs:element name="age" <xs:element name="age" type="xs:integer"/>type="xs:integer"/><xs:element name="dateborn" <xs:element name="dateborn" type="xs:date"/> type="xs:date"/>

<xs:element name="lastname" <xs:element name="lastname" type="xs:string"/>type="xs:string"/><xs:element name="age" <xs:element name="age" type="xs:integer"/>type="xs:integer"/><xs:element name="dateborn" <xs:element name="dateborn" type="xs:date"/> type="xs:date"/>

SchemaSchemaSchemaSchema

Page 46: CrashCourse: XML technologies

XSD Attributes

What is an Attribute? declared as simple types only complex elements can have attributes

Define an Attribute

default and fixed attributes use attribute : optional and required

<xs:attribute name="xxx" type="yyy"/> <xs:attribute name="xxx" type="yyy"/> <xs:attribute name="xxx" type="yyy"/> <xs:attribute name="xxx" type="yyy"/>

<xs:attribute name="lang" <xs:attribute name="lang" type="xs:string" type="xs:string" default="EN“default="EN“ use=“required” use=“required”/> /> <xs:attribute name="lang" <xs:attribute name="lang" type="xs:string" type="xs:string" default="EN“default="EN“ use=“required” use=“required”/> />

Page 47: CrashCourse: XML technologies

Restrictions (facets)

Data types restrictions User defined restrictions (facets)

Restrictions on Values Restrictions on a Set of Values Restrictions on a Series of Values Restrictions on White Space Characters Restrictions on Length

Page 48: CrashCourse: XML technologies

Facets – Example

<xs:element name="age"><xs:element name="age"> <xs:simpleType><xs:simpleType> <xs:restriction base="xs:integer"><xs:restriction base="xs:integer"> <xs:minInclusive value="0"/><xs:minInclusive value="0"/> <xs:maxInclusive value="100"/><xs:maxInclusive value="100"/> </xs:restriction></xs:restriction> </xs:simpleType></xs:simpleType></xs:element> </xs:element>

<xs:element name="age"><xs:element name="age"> <xs:simpleType><xs:simpleType> <xs:restriction base="xs:integer"><xs:restriction base="xs:integer"> <xs:minInclusive value="0"/><xs:minInclusive value="0"/> <xs:maxInclusive value="100"/><xs:maxInclusive value="100"/> </xs:restriction></xs:restriction> </xs:simpleType></xs:simpleType></xs:element> </xs:element>

<xs:element name="car" type="carType"/><xs:element name="car" type="carType"/>

<xs:simpleType name="carType"><xs:simpleType name="carType"> <xs:restriction base="xs:string"><xs:restriction base="xs:string"> <xs:enumeration value="Audi"/><xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/><xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/><xs:enumeration value="BMW"/> </xs:restriction></xs:restriction></xs:simpleType> </xs:simpleType>

<xs:element name="car" type="carType"/><xs:element name="car" type="carType"/>

<xs:simpleType name="carType"><xs:simpleType name="carType"> <xs:restriction base="xs:string"><xs:restriction base="xs:string"> <xs:enumeration value="Audi"/><xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/><xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/><xs:enumeration value="BMW"/> </xs:restriction></xs:restriction></xs:simpleType> </xs:simpleType>

Example 1Example 1

Example 2Example 2

Page 49: CrashCourse: XML technologies

Fasets – Example [2]

www.dreamix.eu

<xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction></xsd:simpleType>

<xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction></xsd:simpleType>

Example 3Example 3

Page 50: CrashCourse: XML technologies

XSD Complex Elements

What is a Complex Element? There are four kinds of complex elements:

empty elements elements that contain only other elements elements that contain only text elements that contain both other elements and

text

<product pid="1345"/> <product pid="1345"/> <product pid="1345"/> <product pid="1345"/> <employee> <employee> <lastname>Smith</lastname><lastname>Smith</lastname></employee> </employee>

<employee> <employee> <lastname>Smith</lastname><lastname>Smith</lastname></employee> </employee>

ExampleExampleExampleExample

Page 51: CrashCourse: XML technologies

How to Define a Complex Element?

<employee><employee> <firstname><firstname> JohnJohn </firstname></firstname> <lastname><lastname> SmithSmith </lastname></lastname></employee> </employee>

<employee><employee> <firstname><firstname> JohnJohn </firstname></firstname> <lastname><lastname> SmithSmith </lastname></lastname></employee> </employee>

<xs:element name="employee"><xs:element name="employee"> <xs:complexType><xs:complexType> <xs:sequence><xs:sequence> <xs:element name="firstname" type="xs:string"/><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/><xs:element name="lastname" type="xs:string"/> </xs:sequence></xs:sequence> </xs:complexType></xs:complexType></xs:element> </xs:element>

<xs:element name="employee"><xs:element name="employee"> <xs:complexType><xs:complexType> <xs:sequence><xs:sequence> <xs:element name="firstname" type="xs:string"/><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/><xs:element name="lastname" type="xs:string"/> </xs:sequence></xs:sequence> </xs:complexType></xs:complexType></xs:element> </xs:element>

<xs:element name="employee" type="personinfo"/><xs:element name="employee" type="personinfo"/><xs:element name="student" type="personinfo"/> <xs:element name="student" type="personinfo"/> <xs:element name="member" type="personinfo"/><xs:element name="member" type="personinfo"/>

<xs:complexType name="personinfo"><xs:complexType name="personinfo"> <xs:sequence><xs:sequence> <xs:element name="firstname" type="xs:string"/><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/><xs:element name="lastname" type="xs:string"/> </xs:sequence></xs:sequence></xs:complexType></xs:complexType>

<xs:element name="employee" type="personinfo"/><xs:element name="employee" type="personinfo"/><xs:element name="student" type="personinfo"/> <xs:element name="student" type="personinfo"/> <xs:element name="member" type="personinfo"/><xs:element name="member" type="personinfo"/>

<xs:complexType name="personinfo"><xs:complexType name="personinfo"> <xs:sequence><xs:sequence> <xs:element name="firstname" type="xs:string"/><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/><xs:element name="lastname" type="xs:string"/> </xs:sequence></xs:sequence></xs:complexType></xs:complexType>

Page 52: CrashCourse: XML technologies

Complex Types

Complex type for empty elements

Complex type for elements only Complex type for text only

<xs:simpleContent> Complex type for mixed contend

<xs:complexType mixed="true">

<product prodid="1345“/> <product prodid="1345“/> <product prodid="1345“/> <product prodid="1345“/> <xs:complexType><xs:complexType> <xs:attribute name="prodid" <xs:attribute name="prodid" type="xs:type="xs:iinteger"/>nteger"/></xs:complexType> </xs:complexType>

<xs:complexType><xs:complexType> <xs:attribute name="prodid" <xs:attribute name="prodid" type="xs:type="xs:iinteger"/>nteger"/></xs:complexType> </xs:complexType>

Page 53: CrashCourse: XML technologies

Ref Attribute

To use an existing element or attribute rather than declaring a new element or attribute

Existing element must be global element - an element that is declared under root element

www.dreamix.eu

Page 54: CrashCourse: XML technologies

Ref Example

www.dreamix.eu

<xs:element name="age"><xs:element name="age"> <xs:simpleType><xs:simpleType> <xs:restriction base="xs:integer"><xs:restriction base="xs:integer"> <xs:minInclusive value="0"/><xs:minInclusive value="0"/> <xs:maxInclusive value="100"/><xs:maxInclusive value="100"/> </xs:restriction></xs:restriction> </xs:simpleType></xs:simpleType></xs:element></xs:element>

<xs:element name=“person”><xs:element name=“person”> <xs:complexType><xs:complexType> <xs:sequence><xs:sequence> <xs:element name=“name" type="xs:string"/><xs:element name=“name" type="xs:string"/> <xs:element ref=“age”/><xs:element ref=“age”/> </xs:sequence></xs:sequence> </xs:complexType></xs:complexType></xs:element /></xs:element />

<xs:element name="age"><xs:element name="age"> <xs:simpleType><xs:simpleType> <xs:restriction base="xs:integer"><xs:restriction base="xs:integer"> <xs:minInclusive value="0"/><xs:minInclusive value="0"/> <xs:maxInclusive value="100"/><xs:maxInclusive value="100"/> </xs:restriction></xs:restriction> </xs:simpleType></xs:simpleType></xs:element></xs:element>

<xs:element name=“person”><xs:element name=“person”> <xs:complexType><xs:complexType> <xs:sequence><xs:sequence> <xs:element name=“name" type="xs:string"/><xs:element name=“name" type="xs:string"/> <xs:element ref=“age”/><xs:element ref=“age”/> </xs:sequence></xs:sequence> </xs:complexType></xs:complexType></xs:element /></xs:element />

Page 55: CrashCourse: XML technologies

XSD Complex Types Indicators

Controls HOW elements are to be used in documents.

We have seven types of indicators:

Order indicators: All, Choice, Sequence

Occurrence indicators: maxOccurs, minOccurs

Group indicators: Group name, attributeGroup name

Page 56: CrashCourse: XML technologies

Order Indicators (1)

<xs:all> child elements can appear in any order each child element must occur once and

only once

<xs:complexType><xs:complexType> <xs:all><xs:all> <xs:element name="firstname" type="xs:string"/><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/><xs:element name="lastname" type="xs:string"/> </xs:all></xs:all></xs:complexType> </xs:complexType>

<xs:complexType><xs:complexType> <xs:all><xs:all> <xs:element name="firstname" type="xs:string"/><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/><xs:element name="lastname" type="xs:string"/> </xs:all></xs:all></xs:complexType> </xs:complexType>

Page 57: CrashCourse: XML technologies

Order Indicators (2)

Choice Indicator Specifies that either one child element or

another can occur

Sequence Indicator Specifies that the child elements must

appear in a specific order

<xs:choice><xs:choice> <xs:element name="employee" type="employee"/><xs:element name="employee" type="employee"/> <xs:element name="member" type="member"/><xs:element name="member" type="member"/></xs:choice></xs:choice>

<xs:choice><xs:choice> <xs:element name="employee" type="employee"/><xs:element name="employee" type="employee"/> <xs:element name="member" type="member"/><xs:element name="member" type="member"/></xs:choice></xs:choice>

Page 58: CrashCourse: XML technologies

Occurrence Indicators

maxOccurr Maximum number of times an element can

occur

minOccurr Minimum number of times an element can

occur

<xs:element name="child_name" type="xs:string“<xs:element name="child_name" type="xs:string“ minOccurs="0" maxOccurs="5"minOccurs="0" maxOccurs="5"/> />

<xs:element name="child_name" type="xs:string“<xs:element name="child_name" type="xs:string“ minOccurs="0" maxOccurs="5"minOccurs="0" maxOccurs="5"/> />

Page 59: CrashCourse: XML technologies

Extensible Documents

How to Allow documents to contain additional elements that are not declared in the main XML schema ?

The <any> Element enables us to extend the XML document

with elements not specified by the schema The <anyAttribute> Element

enables us to extend the XML document with attributes not specified by the schema

Page 60: CrashCourse: XML technologies

Xpath Language

www.dreamix.eu

Page 61: CrashCourse: XML technologies

XPath

A scheme for locating in documents and identifying sub-structures within them

Used by other XML specifications XPointer, XQL, XSLT

Page 62: CrashCourse: XML technologies

Element Context

Meaning of element can depend upon its context

Want to search for, e.g. title of book, not title of person XPath exploits sequential and hierarchical context

of XML to specify elements by their context (i.e. location in hierarchy) title book/title person/title

Context node (noted as ‘.’) – the XML section where we begin a XPath expression

<book><<book><titletitle>…</>…</titletitle></book>></book><person><<person><titletitle>…</>…</titletitle></person>></person><book><<book><titletitle>…</>…</titletitle></book>></book>

<person><<person><titletitle>…</>…</titletitle></person>></person>

Page 63: CrashCourse: XML technologies

What is a XPath Node?

XPath Node – any part of a document; can be: Element Attribute Processing-

instruction Text Namespace Comment Document (root)

Page 64: CrashCourse: XML technologies

Relationships - Treeview

Page 65: CrashCourse: XML technologies

XPath Expressions

A text string to select an element, attribute, processing instructions, or text

Expression may appear in URL or attribute http://abc.com/getQuery?/book/title/book/title

'Node' used to describe anything significant in XML that can be selected

<xsl:pattern match="<xsl:pattern match="chapter/titlechapter/title">…</xsl:pattern>">…</xsl:pattern><xsl:pattern match="<xsl:pattern match="chapter/titlechapter/title">…</xsl:pattern>">…</xsl:pattern>

Page 66: CrashCourse: XML technologies

Expressions identify items by their location in the XML hierarchy

Location path may dig down structure skip over siblings go up the structure

Location path may be: Relative – starts from the context node, or Absolute - starts from the root node

Location Path

Page 67: CrashCourse: XML technologies

Location Path Expression

An absolute location path: /step/step/...

A relative location path: step/step/...

Note: Every step is separated by (/)

Page 68: CrashCourse: XML technologies

Selecting Nodes

Expression Expression Description Description

nodenamenodename Selects all child nodes of the node Selects all child nodes of the node

/ / Selects from the root node Selects from the root node

// // Selects nodes in the document from the Selects nodes in the document from the current node that match the selection no current node that match the selection no matter where they are matter where they are

. . Selects the current node Selects the current node

.. .. Selects the parent of the current nodeSelects the parent of the current node

@ @ Selects attributesSelects attributes

Page 69: CrashCourse: XML technologies

Path Expressions - Example

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang="en">…</title><title lang="en">…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>> <book><book> <title lang="en">…</title><title lang="en">…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>></books></books>

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang="en">…</title><title lang="en">…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>> <book><book> <title lang="en">…</title><title lang="en">…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>></books></books>

/books/books/books/books

Page 70: CrashCourse: XML technologies

Path Expressions - Example

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>></books></books>

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </boo</bookk>></books></books>

/books/book or //book/books/book or //book/books/book or //book/books/book or //book

Page 71: CrashCourse: XML technologies

Path Expressions - Example

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title <title lang=“en”lang=“en”>…</title>>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title <title lang=“en”lang=“en”>…</title>>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title <title lang=“en”lang=“en”>…</title>>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title <title lang=“en”lang=“en”>…</title>>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

//@lang //@lang //@lang //@lang

Page 72: CrashCourse: XML technologies

Predicates

Predicates are used to find a specific node or a node that contains a specific value

Predicates are always embedded in square brackets - []

Page 73: CrashCourse: XML technologies

Path Expressions - Example

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

/books/book[1]/books/book[1]/books/book[1]/books/book[1]

Page 74: CrashCourse: XML technologies

Path Expressions - Example

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

/books/book[last()]/books/book[last()]/books/book[last()]/books/book[last()]

Page 75: CrashCourse: XML technologies

Path Expressions - Example

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

<?xml version=“1.0” encoding=“utf-8” ?><?xml version=“1.0” encoding=“utf-8” ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

//title[@lang='eng'] //title[@lang='eng'] //title[@lang='eng'] //title[@lang='eng']

Page 76: CrashCourse: XML technologies

Path Expressions - Example

<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

<?xml version="1.0" encoding="utf-8" ?><?xml version="1.0" encoding="utf-8" ?><books><books> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book> <book><book> <title lang=“en”>…</title><title lang=“en”>…</title> <author>…</author><author>…</author> <pages>…</pages><pages>…</pages> </book></book></books></books>

//book/title | //book///book/title | //book/authorauthor //book/title | //book///book/title | //book/authorauthor

Page 77: CrashCourse: XML technologies

Axis

An axis defines a node-setnode-set relative to the current node. /child::A/child::B /A/B (short version)

There are 13 axis The general syntax for a step is

<A><A> <B></B><B></B> <C></C><C></C> <B></B><B></B><A><A>

<A><A> <B></B><B></B> <C></C><C></C> <B></B><B></B><A><A>

axisname::nodetest[predicate]axisname::nodetest[predicate] axisname::nodetest[predicate]axisname::nodetest[predicate]

Page 78: CrashCourse: XML technologies

Sometimes we don't or can't know names Can use wildcard '**' for any single element

book/intro/titlebook/intro/title and book/chapter/titlebook/chapter/title are matched by book/*/titlebook/*/title (but so is book/appendix/titlebook/appendix/title)

@* - matches any attribute node() - Matches any node of any kind Multiple asterisks can match several levels

But attention for inappropriate matches!

Wildcards

Page 79: CrashCourse: XML technologies

Attributes can be selected feature/@type

Elements can be selected dependant upon attribute value feature[@type="exon"]

Attribute Tests

Page 80: CrashCourse: XML technologies

String Tests

Strings can be tested for characters and substrings

<note>hello there</note>

note[contains(text(), "hello")]

<note><b><b>hello</b></b> there</note>

note[contains(.., "hello")]

The '.' is current node, and will go through all children

Page 81: CrashCourse: XML technologies

XSL Transformation XSL Transformation Language (XSLT)Language (XSLT)

DEMODEMO

www.dreamix.eu