W3C:n tavoite kehittää parempi määrittelykieli ilmaisuvoimaisempi XML-rakenteinen itsedokumentoiva yksinkertainen Tekniseltä kannalta tuki nimiavaruuksille käyttäjän omat tietotyypit määritysten perintä tuki määritysten evoluutiolle upotettu dokumentaatio perustuu tietotyyppimäärityksiin yksinkertaiset (merkkauksia sisältämättömät) rakenteiset Elementtimääritys kytkee elementin tietotyyppiin yksinkertaiseen tai rakenteiseen Attribuuttimääritys kytkee attribuutin yksinkertaiseen tietotyyppiin 1 2 Esimerkkidokumentti: <b:card xmlns:b="http://businesscard.org"> <b:name>john Doe</b:name> <b:title>ceo, Widget Inc.</b:title> <b:email>john.doe@widget.com</b:email> <b:phone>(202) 555-1414</b:phone> <b:logo b:uri="widget.gif"/> </b:card> Esimerkki dokumentti: Nimiavaruuden nimi tässä kontekstissa käytettävän nimiavaruuden tunnistava URI <b:card xmlns:b="http://businesscard.org"> <b:name>john Doe</b:name> <b:title>ceo, Widget Inc.</b:title> <b:email>john.doe@widget.com</b:email> <b:phone>(202) 555-1414</b:phone> <b:logo b:uri="widget.gif"/> </b:card> [B&S] 3 4 <schema xmlns="http://www.w3.org/2001/xmlschema" xmlns:b="http://businesscard.org" targetnamespace="http://businesscard.org"> <element name="card" type="b:card_type"/> <element name="name" type="string"/> <element name="title" type="string"/> <element name="email" type="string"/> <element name="phone" type="string"/> <element name="logo" type="b:logo_type"/> <attribute name="uri" type="anyuri"/> <schema xmlns="http://www.w3.org/2001/xmlschema" xmlns:b="http://businesscard.org" targetnamespace="http://businesscard.org"> <element name="card" type="b:card_type"/> <element käytettävät name="name" type="string"/> <element nimiavaruudet name="title" type="string"/> määriteltävä <element name="email" type="string"/> nimiavaruus <element name="phone" type="string"/> <element name="logo" type="b:logo_type"/> <attribute name="uri" type="anyuri"/> [B&S] 5 6 1
<schema xmlns="http://www.w3.org/2001/xmlschema" xmlns:b="http://businesscard.org" targetnamespace="http://businesscard.org"> <element name="card" type="b:card_type"/> <element name="name" type="string"/> <element name="title" type="string"/> tietotyyppikytkentöjä <element name="email" type="string"/> <element name="phone" type="string"/> <element name="logo" type="b:logo_type"/> <attribute name="uri" type="anyuri"/> <complextype name="card_type"> <element ref="b:name"/> valinnaisia <element ref="b:title"/> <element ref="b:email"/> <element ref="b:phone" minoccurs="0"/> <element ref="b:logo" minoccurs="0"/> rakenteinen tyyppi <complextype name="logo_type"> <attribute ref= b:uri" use="required"/> </schema> :n tietotyyppi 7 [B&S] 8 / yksinkertaiset tyypit Nimiavaruus dokumentissa: target URI b:card xmlns:b="http://businesscard.org xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xsi:schemalocation="http://businesscard.org business_card.xsd"> <b:name>john Doe</b:name> <b:title>ceo, Widget Inc.</b:title> Sijainti-URI <b:email>john.doe@widget.com</b:email> <b:phone>(202) 555-1414</b:phone> <b:logo b:uri="widget.gif"/> </b:card> 9 Yksinkertainen tietotyyppi on joukko merkkijonoja, joihin liittyy semanttinen tulkinta Esim. decimal: desimaaliluvuksi tulkittava merkkijono merkkijonojen välille määritelty järjestys XML schema:ssa määritellään joukko primitiivityyppejä sekä mekanismit johdettujen tyyppien määrittelyyn rajoitteiden, listakonstruktion ja yhdisteen avulla ennalta määritelty merkitys 10 primitiivityypit johdettuja tyyppejä string any Unicode string boolean true, false,1,0 decimal 3.1415 valinnainen aikävyöhyketieto float 6.02214199E23 double 42E970 datetime 2004-09-26T16:29:00-05:00 time 16:29:00-05:00 date 2004-09-26 hexbinary 48656c6c6f0a base64binary SGVsbG8K anyuri http://www.brics.dk/ixwt/ QName rcp:recipe, recipe... [B&S] 11 määrittelee valmiiksi myös joitain johdettuja tyyppejä positiveinteger nonpositiveinteger long ID IDREF NMTOKEN Name jne 12 2
johdettuja tyyppejä johdettuja tyyppejä Rajoitteet johdettujen tyyppien määrittelyssä Rajoite esitetään piirremäärityksen (facet) avulla length, minlength, maxlength pattern (säännöllinen lauseke) enumeration (luetteloalkio) whitespace (tyhjän tilan käsittely) maxinclusive, maxexclusive, mininclusive, minexclusive (ala ja ylärajoja) totaldigits, fractiondigits Ala- ja ylärajat <simpletype name="score_from_0_to_100"> <restriction base="integer"> <mininclusive value="0"/> <maxinclusive value="100"/> 13 14 johdettuja tyyppejä johdettuja tyyppejä Säännöllinen lauseke rajoittimena <simpletype name="percentage"> <restriction base="string"> <pattern value="([0-9] [1-9][0-9] 100)%"/> Luettelo rajoittimena <simpletype name="kieli"> <restriction base="string"> <enumeration value="en" /> <enumeration value="fi" /> 15 Listatyyppi perustyypeistä <simpletype name="integerlist"> <list itemtype="integer"/> Tyhjätilamerkein eroteltu lista perustyypin mukaisia merkijonoja, yllä kokonaislukuja 16 johdettuja tyyppejä / rakenteiset tyypit Yhdistetyyppi <simpletype name="suomiruotsi_sana"> <union> <simpletype> <restriction base="suomenkielen_sana"/> <simpletype> <restriction base="ruotsinkielen_sana"/> </union> Attribuuttiin voidaan kytkeä vain yksinkertaisia tyyppejä. Elementteihin voidaan kytkeä joko yksinkertaisia tai rakenteisia tyyppejä (complex type) Nimestään huolimatta rakenteisen tyypin määrittely on oikeastaan elementin sisällön ja/tai elementin attribuuttien määrittely määrittelyssä ei viitata alkeellisempiin tietotyyppeihin vaan viittaukset kohdistuvat elementteihin ja attribuutteihin 17 18 3
/ rakenteiset tyypit / rakenteiset tyypit Rakenteisen tyypin määrittely muodostuu elementti- tai attribuuttiviittauksista, jotka kootaan erityisten rakenne-elementtien avulla rakenteiksi elementtiviittaus <element ref="nimi" /> attribuuttiviittaus <attribute ref="nimi" /> Rakenne esitetään peräkkäisyys-, valinta-, kokoelmaelementtien avulla sequence-elementti sulkee sisäänsä peräkkäiset elementit a-elementtiä seuraa b-elementti, esitetään tällöin <complextype name= ab > 19 20 / rakenteiset tyypit / rakenteiset tyypit choice-elementti sulkee sisäänsä vaihtoehtoiset elementit jokin elementeistä a, b tai c esitetään: <complextype name= oneof_abc > <choise> <element ref= n:c /> </choise> Toisto esitetään elementtiviittauksen attribuuttien minoccurs ja MaxOccurs avulla. Näiden oletusarvona on 1. Toistomääreet voi liittää myös rakenne-elementteihin Esim. a?b*cc?: mahdollisesti a, sitten 0-n b:tä sitten 1-2 c:tä <complextype name= repeating > <element ref= n:a minoccurs= 0 /> <element ref= n:b minoccurs= 0 maxoccurs= unbounded > <element ref= n:c maxoccurs= 2 > 21 22 / rakenteiset tyypit / rakenteiset tyypit Järjestämättömän kokoelman määrittelyyn on tarjolla -elementti a,b ja vähintään yksi c missä tahansa järjestyksessä <> <element ref= n:c maxoccurs= unbounded /> </> Elementtiviittaus identifioi tietyn elementtityypin. Sen asemesta voidaan käyttää any-elementtiä viittaamaan mihin tahansa elementtityyppiin. Tarvittaessa any-elementtiin voidaan liittää namespace - attribuutti, jolla rajoitetaan situt elementit kyseiseen nimiavaruuteen kuuluviin, a XHTML:ään <complextype name="whateverxhtml"> <any namespace="http://www.w3.org/1999/xhtml" minoccurs=0 maxoccurs="unbounded"> 23 24 4
/ rakenteiset tyypit / rakenteiset tyypit Rakenne-elementtien sisäkkäistä käyttöä on rajoitettu, seuraavat upotukset kiellettyjä: sequence choise choise sequence Rakenteiseen tyyppiin voidaan liittää myös attribuuttiviittauksia. Jos tyyppiin sisältyy sekä elementtirakenne että attribuuttiviittauksia, on edellisen oltava määrityksessä aiemmin. Attribuuttiviittaukseen voidaan sisällyttää attribuutti use[arvot: optional (oletusarvona) ja required] kuvaamaan pakollisuutta 25 26 / rakenteiset tyypit / rakenteiset tyypit <complextype name="order_type" mixed="true"> <choice> <element ref="n:address"/> <element ref="n:email" minoccurs="0" maxoccurs="unbounded"/> <element ref="n:phone"/> </choice> <attribute ref= n:id" use="required"/> rakenneosa merkkitietoa ja elementtejä attribuuttiosa [B&S] 27 Edellä esitetyillä rakenteilla ei pystytä määrittelemään elementtejä, joiden sisältö on säädeltyä merkkitietoa ja joilla on attribuutteja Oma rakenteensa <complextype name="styled_text"> <simplecontent> <extension base="string"> <attribute ref="n:style" use="required" /> </extension> </simplecontent> Sisältönä merkkijono ja pakollisena attribuuttina style 28 / rakenteiset tyypit / rakenteiset tyypit Myös restriction-rakennetta voi käyttää <complextype name="labelled_short_styled_text"> <simplecontent> <restriction base= n:styled_text"> <maxlength value="20 /> rajoite <attribute ref="n:label" /> </simplecontent> näillä siis attribuutti style ja mahdollisesti label 29 Edellisen kaltaista laajennusmekamismia voi käyttää myös rakenteisten tyyppien yhteydessä <complextype name= ab > käytetään hyväksi aiempaa määritystä <complextype name= abc > <complexcontent> <extension base= n:ab /> <element ref= n:c /> </complexcontent> 30 5
/ rakenteiset tyypit / rakenteiset tyypit :ssa on rakenteen määrittelyyn tarjolla myös DTD:n nimettyjä parametrikohteita vastaava group-rakenne, samoin attributegroup: <group name="heading"> <choise> <element ref="xhtml:h1" /> <element ref="xhtml:h2" /> <element ref="xhtml:h2" /> </choise> </group> korvaa <complextype name="block" midex="true"> <choise minoccurs="0" maxoccurs="unbounded"> <element ref="xhtml:p" /> <group ref="xhtml:heading" /> </choise> <complextype> 31 Edellä kaikki elementti- ja tyyppimäärittelyt on esitetty erillisinä nimettyinä elementteinä (global style). Näin ei välttämättä tarvitse tehdä, vaan elementtimäärittelyn voi upottaa rakenteisen tyypin määrittelyyn. 32 / rakenteiset tyypit / rakenteiset tyypit Nimetyt erilliset elementit: <element name="card type="b:card_type"/> <element name="name type="string"/> <complextype name="card_type"> <element ref="b:name"/>... Vaihtoehtona upotettu määrittely: <element name="card > <complextype> <element name="name type="string"/>... </element> [B&S] 33 [B&S] 34 / rakenteiset tyypit / modulaarisuus Myös attribuuttimäärittelyt voidaan upottaa. Upotetuilla määrityksillä ei ole nimeä, joten niitä ei voi käyttää uudelleen Upotettuja määrityksiä käyttämällä saadaan kompaktimpi esitys Kielen määrittely voidaan koota osista <include > Lisää sama nimiavaruuteen sisältyviä määrityksiä <redefine > Lisää sama nimiavaruuteen sisältyviä määrityksiä, mutta mahdollistaa joidenkin kohteiden uudelleenmäärittely extension, restriction -tekniika <import > Lisää toiseen nimiavaruuteen kuluvat määrittelyt 35 36 6
/ modulaarisuus <schema xmlns="http://www.w3.org/2001/xmlschema" targetnamespace="http://businesscard.org"> <include schemalocation="business_card_misc.xsd"/> <include schemalocation="business_card_logo.xsd"/> </schema> :ssa on mahdollista määritellä myös elementtien yksikäsitteisiä tunnisteita ja viittauksia niihin Määrittely käyttää XPATH:ia joten siihen palataan myöhemmin [B&S] 37 38 Katso esimerkki http://www.brics.dk/ixwt/examples/recipes.xsd 39 7