• No results found

Tecnologie per XML. Sara Comai Politecnico di Milano. Tecnologie legate a XML

N/A
N/A
Protected

Academic year: 2021

Share "Tecnologie per XML. Sara Comai Politecnico di Milano. Tecnologie legate a XML"

Copied!
23
0
0

Loading.... (view fulltext now)

Full text

(1)

Tecnologie

Tecnologie

per XML

per XML

Sara

Sara Comai

Comai

Politecnico di Milano

Politecnico di Milano

Tecnologie legate a XML

• DTD

• XHTML

: riformulazione di HTML in

XML

• Namespaces

• CSS

: style sheets per visualizzare

documenti XML

• XSD

: XML schema

(2)

Tecnologie legate a XML /2

• XPath: linguaggio di pattern matching

• XSLT: style sheets per trasformare

documenti XML (più potente di CSS)

• Linguaggi di interrogazione per XML

• DOM: interfaccia per manipolare

documenti XML

• SAX: interfaccia per manipolare

documenti XML

• …

(www.w3.org)

XML Schema (XSD)

• Scopo:definire i blocchi legali di un documento

XML (come in un DTD)

Uno schema XML definisce:

• elementi

• attributi

• Relazioni padre-figlio

• Sequenze di elementi figli

• Numero di elementi figli

• Elementi vuoti, contenenti testi, ecc.

• Tipi di dati di elementi e attributi

• Valori di default/required

(3)

XML Schema: successore del DTD

XML Schemas

• Sono estendibili

• Più ricchi e utili dei DTD

• Scritti in XML

• Supporta tipi di dati

• Supporta i namespaces

Storia di XML Schema

• Originariamente proposto da

Microsoft

• Recommendation ufficiale del W3C

(4)

Esempio: XML document

<?xml version="1.0"?>

<note>

<to>

Tove

</to>

<from>

Jani

</from>

<head>

Reminder

</head>

<body>

this weekend!

</body>

</note>

<!DOCTYPE note SYSTEM

"http://www.w3schools.com/dtd/note.dtd">

<note

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

SchemaLocation =

"http://mysite.com/schema/note.xsd"

>

<to> Sara </to>

<from> Marco</note>

<head> Reminder </note>

<body> See this weekend!

</body>

</note>

Esempio: DTD

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

<!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT head (#PCDATA)>

<!ELEMENT body (#PCDATA)>

(5)

Esempio: XSchema

<?xml version="1.0"?>

<xs:schema

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

<xs:element name="note">

<xs:complexType>

<xs:sequence>

<xs:element name="to" type="xs:string"/>

<xs:element name="from" type="xs:string"/>

<xs:element name="head" type="xs:string"/>

<xs:element name="body" type="xs:string"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

Elementi semplici

• Possono contenere solo testo

• Definizione di elemento:

<xs:element

name

="name"

type

="type"/>

<xs:element

name

="name"

type

=“type”

default

=“xyz” />

<xs:element

name

="name"

type

=“type”

fixed

=“xyz” />

• Esempi di definizione:

<xs:element name=“age" type=“xs:integer"/>

<xs:element name=“lastname” type=“xs:string"/>

• Esempi XML:

<age> 65 </age>

(6)

Tipi di dati XSD

• xs:string

• xs:decimal

• xs:integer

• xs:boolean

• xs:date

• xs:time

Restrizioni di valori

Esempio:

<age> 25 </age>

Definizione di restrizione tra 0 e 100:

<xs:element name="age">

<xs:simpleType>

<xs:restriction base="xs:integer">

<xs:minInclusive value="0"/>

<xs:maxInclusive value="100"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

(7)

Restrizioni di valori

Esempio:

<car> Golf </car>

Definizione di restrizione ad un insieme enumarativo:

<xs:element name="car">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="Audi"/>

<xs:enumeration value="Golf"/>

<xs:enumeration value="BMW"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

Restrizioni di valori

<xs:element name="gender">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:pattern value="male|female"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

(8)

Restrizioni di valori

<xs:element name="password">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:pattern value="[a-zA-Z0-9]{8}"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

Restrizioni di valori

<xs:element name=“code">

<xs:simpleType>

<xs:restriction base="xs:integer">

<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

(9)

Restrizioni di valori

Altri esempi di pattern:

<xs:pattern value="[a-z]"/>

<xs:pattern value="[A-Z][A-Z][A-Z]"/>

<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>

<xs:pattern value="[xyz]"/>

<xs:pattern value="([a-z])*"/>

<xs:pattern value="([a-z][A-Z])+"/>

Restrizioni di valori

Restrizione di lunghezza:

Restrizione di lunghezza:

Restrizione di lunghezza:

Restrizione di lunghezza:

<xs:element name="password">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:length value="8"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

(10)

Restrizioni di valori

Restrizione di lunghezza:

Restrizione di lunghezza:

Restrizione di lunghezza:

Restrizione di lunghezza:

<xs:element name="password">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:minLength value="5"/>

<xs:maxLength value="8"/>

</xs:restriction>

</xs:simpleType>

</xs:element>

Attributi XSD

Definizione di attributo:

<xs:attribute

name

="name"

type

="type"/>

<xs:attribute …

default|fixed

=“xyz”

use

=“required|optional”/>

Esempio di definizione:

<xs:attribute name=“lang” type=“xs:string”/>

Esempio XML:

(11)

Elementi complessi

4 tipi di elementi complessi:

• vuoti

• Contenenti altri elementi

• Contenenti solo testo

• Contenenti altri elementi e testo

• Sintassi:

<xs:element name="name">

<xs:complexType>

. . element content . .

</xs:complexType>

</xs:element>

Elementi complessi

Esempio di elemento vuoto:

<product

<product

<product

<product prodid

prodid

prodid

prodid="1345" />

="1345" />

="1345" />

="1345" />

Definizione:

Definizione:

Definizione:

Definizione:

<<<<xs:element

xs:element

xs:element name="product">

xs:element

name="product">

name="product">

name="product">

<<<<xs:complexType

xs:complexType

xs:complexType

xs:complexType>

>

>

>

<<<<xs:attribute

xs:attribute

xs:attribute

xs:attribute name="

name="

name="prodid

name="

prodid" type="

prodid

prodid

" type="

" type="xs:positiveInteger

" type="

xs:positiveInteger

xs:positiveInteger

xs:positiveInteger"/>

"/>

"/>

"/>

</

</

</

</xs:complexType

xs:complexType

xs:complexType>

xs:complexType

>

>

>

</

</

</

(12)

Elementi complessi

Esempio con sotto-elementi:

<person> < <person> < <person> <

<person> <firstnamefirstnamefirstname>John</firstname>John</>John</firstname>John</firstnamefirstnamefirstname> > > > <<<<lastnamelastnamelastnamelastname>Smith</>Smith</>Smith</>Smith</lastnamelastnamelastname> lastname> > > </person> </person> </person> </person> Definizione: Definizione: Definizione: Definizione:

<<<<xs:elementxs:elementxs:elementxs:element name="person"> name="person"> name="person"> name="person"> <<<<xs:complexTypexs:complexTypexs:complexType> xs:complexType> > >

<<<<xs:sequencexs:sequencexs:sequence>>>>xs:sequence

<<<<xs:elementxs:elementxs:elementxs:element name="name="name="name="firstnamefirstname" type="firstnamefirstname" type="" type="xs:string" type="xs:stringxs:string"/> xs:string"/> "/> "/> <<<<xs:elementxs:elementxs:elementxs:element name="name="name="name="lastnamelastname" type="lastnamelastname" type="" type="xs:string" type="xs:stringxs:stringxs:string"/> "/> "/> "/>

</ </ </

</xs:sequencexs:sequencexs:sequencexs:sequence>>>>

</ </</

</xs:complexTypexs:complexTypexs:complexType> xs:complexType> > > </

</ </

</xs:elementxs:elementxs:elementxs:element>>>>

Elementi complessi

Definizione alternativa:

Definizione alternativa:

Definizione alternativa:

Definizione alternativa:

<<<<xs:element

xs:element

xs:element name="person"

xs:element

name="person"

name="person"

name="person" type="

type="

type="persontype

type="

persontype

persontype

persontype""""/>

/>

/>

/>

<<<<xs:complexType

xs:complexType

xs:complexType name="

xs:complexType

name="

name="

name="persontype

persontype

persontype

persontype"""">

>

>

>

<<<<xs:sequence

xs:sequence

xs:sequence

xs:sequence>

>

>

>

<<<<xs:element

xs:element

xs:element

xs:element name="

name="

name="firstname

name="

firstname" type="

firstname

firstname

" type="

" type="xs:string

" type="

xs:string

xs:string

xs:string"/>

"/>

"/>

"/>

<<<<xs:element

xs:element

xs:element

xs:element name="

name="

name="lastname

name="

lastname" type="

lastname

lastname

" type="

" type="xs:string

" type="

xs:string

xs:string

xs:string"/>

"/>

"/>

"/>

</

</

</

</xs:sequence

xs:sequence

xs:sequence

xs:sequence>

>

>

>

</

</

</

(13)

Elementi complessi

Elementi contenenti solo testo:

Elementi contenenti solo testo:

Elementi contenenti solo testo:

Elementi contenenti solo testo:

<<<<xs:element

xs:element

xs:element name="

xs:element

name="

name="

name="somename

somename

somename

somename">

">

">

">

<<<<xs:complexType

xs:complexType

xs:complexType>

xs:complexType

>

>

>

<<<<xs:simpleContent

xs:simpleContent

xs:simpleContent

xs:simpleContent>>>>

</

</

</

</xs:simpleContent

xs:simpleContent

xs:simpleContent

xs:simpleContent>>>>

</

</

</

</xs:complexType

xs:complexType

xs:complexType>

xs:complexType

>

>

>

</

</

</

</xs:element

xs:element

xs:element>>>>

xs:element

Elementi complessi

Elementi con contenuto misto:

Elementi con contenuto misto:

Elementi con contenuto misto:

Elementi con contenuto misto:

<<<<xs:element

xs:element

xs:element name="letter">

xs:element

name="letter">

name="letter">

name="letter">

<<<<xs:complexType

xs:complexType

xs:complexType

xs:complexType

mixed="true"

mixed="true"

mixed="true"

mixed="true">

>

>

>

<<<<xs:sequence

xs:sequence

xs:sequence

xs:sequence>

>

>

>

<<<<xs:element

xs:element

xs:element

xs:element name="name" type="

name="name" type="

name="name" type="xs:string

name="name" type="

xs:string

xs:string

xs:string"/>

"/>

"/>

"/>

<<<<xs:element

xs:element

xs:element

xs:element name="

name="

name="orderid

name="

orderid" type="

orderid

orderid

" type="

" type="xs:positiveInteger

" type="

xs:positiveInteger

xs:positiveInteger

xs:positiveInteger"/>

"/>

"/>

"/>

<<<<xs:element

xs:element

xs:element

xs:element name="

name="

name="shipdate

name="

shipdate" type="

shipdate

shipdate

" type="

" type="xs:date

" type="

xs:date

xs:date

xs:date"/>

"/>

"/>

"/>

</

</

</

</xs:sequence

xs:sequence

xs:sequence

xs:sequence>

>

>

>

</

</

</

</xs:complexType

xs:complexType

xs:complexType

xs:complexType>

>

>

>

</

</

</

(14)

Riferimento ad altri elementi

<xs:element name="note">

<xs:complexType>

<xs:sequence>

<xs:element

ref=“to”

/>

</xs:sequence>

</xs:complexType>

</xs:element>

<xs:element

name="to“

type="xs:string"/>

Indicatori

• Indicatori di ordine:

– All: tutti gli elementi in qualsiasi ordine

– Choice: uno ed un solo elemento

– Sequence: tutti gli elementi, nell’ordine definito

• Indicatori di occorrenza:

– maxOccurs: massimo numero di occorrenze

– minOccurs: minimo numero di occorrenze

• Indicatori di gruppo:

Definiscono insiemi di elementi (come i record)

– Nome del gruppo

(15)

Indicatori d’ordine

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

<xs:all>

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

</xs:all> </xs:complexType> </xs:element> • <xs:choice> • <xs:sequence>

Indicatori di occorrenza

<xs:element name="person">

<xs:complexType>

<xs:sequence>

<xs:element name="full_name" type="xs:string"/>

<xs:element name="child_name" type="xs:string"

maxOccurs="10" minOccurs="0"/>

</xs:sequence>

</xs:complexType>

</xs:element>

(16)

Indicatori di gruppo

<xs:group name="persongroup">

<xs:sequence>

<xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:element name="birthday" type="xs:date"/> </xs:sequence>

</xs:group>

<xs:element name="person" type="personinfo“ /> <xs:complexType name="personinfo">

<xs:sequence>

<xs:group ref="persongroup"/>

<xs:element name="country" type="xs:string"/> </xs:sequence> </xs:complexType> <?xml version="1.0" encoding="ISO-8859-1"?> <shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="shiporder.xsd"> <orderperson>John Smith</orderperson>

<shipto> <name>Ola Nordmann</name> <address>Langgt 23</address> <city>4000 Stavanger</city> <country>Norway</country> </shipto>

<item> <title>Empire Burlesque</title> <note>Special Edition</note> <quantity>1</quantity> <price>10.90</price> </item>

<item> <title>Hide your heart</title> <quantity>1</quantity> <price>9.90</price> </item> </shiporder>

Documento

XML

(17)

<?xml version="1.0" encoding="ISO-8859-1" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- definition of simple elements -->

<xs:element name="orderperson" type="xs:string"/> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string"/>

<xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/>

<!-- definition of attributes -->

<xs:attribute name="orderid" type="xs:string"/> …

XSD

Modo 1

<xs:element name="item" maxOccurs="unbounded"> <xs:complexType>

<xs:sequence>

<xs:element name="title" type="xs:string"/>

<xs:element name="note" type="xs:string" minOccurs="0"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/>

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

</xs:sequence>

<xs:attribute name="orderid" type="xs:string" use="required"/> </xs:complexType>

</xs:element> </xs:schema>

(18)

<?xml version="1.0" encoding="ISO-8859-1" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="shiporder">

<xs:complexType> <xs:sequence>

<xs:element name="orderperson" type="xs:string"/> <xs:element name="shipto">

<xs:complexType> <xs:sequence>

<xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> …

XSD

Modo 2

<!-- definition of complex elements --> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element ref="name"/> <xs:element ref="address"/> <xs:element ref="city"/> <xs:element ref="country"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="item"> <xs:complexType> <xs:sequence> <xs:element ref="title"/> <xs:element ref="note" minOccurs="0"/> <xs:element ref="quantity"/> … <xs:element ref="price"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="shiporder"> <xs:complexType> <xs:sequence> <xs:element ref="orderperson"/> <xs:element ref="shipto"/> <xs:element ref="item" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="orderid" use="required"/> </xs:complexType> </xs:element> </xs:schema>

(19)

<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/X MLSchema"> <xs:simpleType name="stringtype"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:simpleType name="inttype"> <xs:restriction base="xs:positiveInteger"/> </xs:simpleType> <xs:simpleType name="dectype"> <xs:restriction base="xs:decimal"/> </xs:simpleType> … <xs:simpleType name="orderidtype"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{6}"/> </xs:restriction> </xs:simpleType> <xs:complexType name="shiptotype"> <xs:sequence> <xs:element name="name" type="stringtype"/> <xs:element name="address" type="stringtype"/> <xs:element name="city" type="stringtype"/> <xs:element name="country" type="stringtype"/> </xs:sequence> </xs:complexType>

XSD

Modo 3

… <xs:complexType name="itemtype"> <xs:sequence> <xs:element name="title" type="stringtype"/> <xs:element name="note" type="stringtype" minOccurs="0"/> <xs:element name="quantity" type="inttype"/> <xs:element name="price" type="dectype"/> </xs:sequence> </xs:complexType> <xs:complexType name="shipordertype"> <xs:sequence> <xs:element name="orderperson" type="stringtype"/> … <xs:element name="shipto" type="shiptotype"/> <xs:element name="item" maxOccurs= "unbounded" type="itemtype"/> </xs:sequence> <xs:attribute name="orderid" type="orderidtype" use="required"/> </xs:complexType> <xs:element name="shiporder" type="shipordertype"/> </xs:schema>

(20)

XLink

• Aggiunge nuove funzionalità a XML per

creare

ipertesti

e ipermedia

• Consente di definire

link verso l’esterno

e multidirezionali

• Linguaggio proposto al

W3C

all’inizio del

1998

• 27 giugno 2001

: è diventato una

recommendation

XLink

• Specifica dei costrutti che possono

essere inseriti

in documenti XML

per

descrivere i

link

tra oggetti

• Link

= relazione esplicita tra due o più

oggetti (o porzioni di oggetti)

• Descrive:

– link di HTML

– link più sofisticati con più target e tipati

(21)

XLink: Simple Links

• Ha come destinazione

una sola risorsa

• Esempio:

<my:crossReference

xlink:href="students.xml"

xlink:role="http://www.example.com/studentlist"

xlink:title="Student List">

Current List of Students

</my:crossReference>

Risorse

Risorse

su

su

Web

Web

• Extensible Markup Language (XML) 1.0:

http://www.w3.org/TR/REC-xml

eXtended

eXtended

Link

Link

Language

Language

(

(

XLink

XLink

)

)

:

:

http://www.w3.org/TR/

http://www.w3.org/TR/

xlink

xlink

Extensible Style Language (XSL):

Extensible Style Language (XSL):

http://www.w3.org/TR/WD

http://www.w3.org/TR/WD

-

-

xsl

xsl

• XML Schema tutorial

http://www.w3schools.com/schema

• XML Namespaces

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

(22)

XLink: Extended Link

• Ha come destinazione

risorse

(23)

XLink: Extended Link (2)

• Esempio:

<person

xlink:href="students/patjones62.xml"

xlink:label="student62"

xlink:role="http://www.example.com/student"

xlink:title="Pat Jones" />

<person

xlink:href="profs/jaysmith7.xml"

xlink:label="prof7"

xlink:role="http://www.example.com/professor"

xlink:title="Dr. Jay Smith" />

XLink: Extended Link (3)

• Esempio (cont.):

<go

xlink:from="student62"

xlink:arcrole="http://www.example.com/advisor"

xlink:to="prof7"

xlink:show="replace"

xlink:actuate="onRequest"

xlink:title="Dr. Jay Smith, advisor"

/>

References

Related documents

As the number of migrants to countries in the Middle East increased in the 1970s, the amount of remittances to Pakistan also increased as Pakistani workers needed to send money back

The exact estimation of quantization effects requires numerical simulation and is not amenable to exact analytical methods.. But an approach that has proven useful is to treat

To address these questions, the following goals were set: (a) to reproduce field explosions pertaining to primary blast injury as accurate as possible in a controlled

The table below provides a comparison of the cost per square foot for Menlo Park Fire District Station 2, located in East Palo Alto, bid and rebuilt starting in 2013, and Station

In memory of Harold Taub, beloved husband of Paula Taub by: Karen &amp; Charles Rosen.. Honouring Maria Belenkova-Buford on her marriage by: Karen &amp;

The connector elements are configured in Tomcat’s server.xml file using the &lt;Connector&gt; XML element.. The &lt;Connector&gt; XML element is defined as a nested element within

The aim of the research in this thesis is to examine, through a series of field and controlled environment studies, the effects of warming, water and nutrient availability

The grant supported a comparison of IL outcomes for learning community students and non-learning community students and was further used in other information literacy assessment