XML-dokumenttien käsittely XML-dokumenttien käsittely XML-kielten yleisrakenne mahdollistaa karkean rakennetarkistuksen suorittamisen XML-dokumenteille niitä tallennettaessa tai käyttöön otettaessa. Kielen määrittelyn (DTD, Schema, joku muu tekniikka) käyttö lisää tarkistusmahdollisuuksia samoissa tilanteissa. Dokumentin laatinen voi tapahtua Jonkin sovellusohjelman toimesta, jolloin ohjelma tarjoaa käyttöliittymän dokumentin sisällön toimittamiseen Käyttäjä ei tyypillisesti tiedä tuottavansa xml-tietoa XML-rakenteen kanssa puuhastelu on ohjelmien tehtävä eikä käyttäjille tarjota mitään mahdollisuuksia päästä käsiksi sisäiseen esitysmuotoon vaikka se olisikin XML-muotoista Tiedon esittäminen ja haku samojen ohjelmien kautta Onko tarvetta järjestelmien sisäisen XML:n käsittelyyn muussa tilanteessa kuin siirrossa toiseen ohjelmaan, jolloin voidaan tarvita muunnos? Dokumentin laatinen voi tapahtua Käyttäjälle näkyvästi Rakennetietoa hyödyntävä XML-editori / tekstieditori XML-rakenteen tuottaminen muusta aineistosta esim. relaatiotietokannasta (ohjelmallisesti) XML-muoto (puu tai tekstuaalinen) ei sovellu hyvin ihmisten luettavaksi Dokumentit tai niistä poimittu tieto on saatettava ymmärrettävämpään esitysmuotoon Usein ei ole tarvetta esittää koko aineistoa vaan vain osia siitä 1 2 XML-aineiston esittäminen XML ja Esittäminen Erillinen esitysmuodon räätälöimällä tuottava sovellusohjelma, esim. SVG-grafiikkaa ei saa aikaan yleiskäyttöisillä esitystyökaluilla kullekin kielelle omat ohjelmat Muunnostyökalut yhdestä muodosta toiseen esimerkiksi resepti-kielestä xhtml:ään Jollekin esitysvälineelle tarkoitetut esitystavan määrittelytekniikat, esimerkiksi 3 XML-kieliselle dokumentille ei ole yleiskäyttöistä esitystapaa Osa selaimista osaa näyttää XML-tiedon hierarkkisena rakenteena Myös HTML:ssä on pyrkimyksenä erottaa sisältö ja esittäminen, vaikka sivujen elementteihin liittyykin jonkinlainen esitystulkinta Uusimmissa HTML- ja XHTML-versioissa esitystapaan liittyviä attribuutteja on poistettu elementeistä esitys on tarkoitus kuvailla (Cascading Style Sheet) määrityksillä. :ää voi käyttää myös XML-datan esitystavan 4 kuvaamiseen XML ja XML ja :stä on useita versioita: Cascading Style Sheets, level 1, W3C Recommendation 17 Dec 1996, revised 11 Jan 1999 (http://www.w3.org/tr/rec-1) Cascading Style Sheets Level 2 Revision 1 ( 2.1) Specification, W3C Recommendation April 2008 (http://www.w3.org/tr/2008/rec-2-20080411/) Viimeisin working draft: http://www.w3.org/tr/2 3: muutamasta moduulista virallinen suositus, working draft versioita ja osittaisia suosituksia -sääntöjä voidaan liittää XML-dokumenttiin xmlstylesheet tyyppisinä käsittelyohjeina <?xml-stylesheet href="my-style.css" type="text/css"?>... rest of document here... Ohjeita voi olla useampia, mutta niiden on kaikkien oltava dokumentissa ennen ensimmäistä varsinaista elementtiä. Ohjeilla kytketään dokumenttiin ulkoisia -sääntötiedostoja Muista kytkentätavoista ei ole virallisia määrityksiä 5 6 1
XML ja ja XML -sääntö koostuu kahdesta osasta: kohdemäärittelystä (selector) mihin elementteihin muotoiluohjeita sovelletaan Säännössä voidaan antaa monta kohdetta muotoiluohjeista (block) miten kohteen elementit muotoillaan Sääntöjen määrittämät muotoilut periytyvät puussa solmulta sen jälkeläisille Pintamääreet periytyvät Taustamääreet tyypillisesti eivät Periytymistä voidaan säätää 7 8 * Mikä tahansa elementtityyppi E E F Tyyppiä E oleva elementti Tyyppiä F oleva elementti edellyttäen, että sillä on E tyyppinen esi-isä E>F Tyyppiä F oleva elementti kun se on E- tyyppisen elementin lapsielementti E:first-child Tyyppiä E oleva elementti kun se on vanhempansa ensimmäinen lapsi E:hover E:lang(c) E + F Tyyppiä E oleva elementti kun, sitä 'käpälöidään' (muut tila-attribuutit eivät XML:n tapauksessa tule oikein kyseeseen (:active ehkä) Tyyppiä E oleva elementti, jos sen kieli (määritelty tai peritty) on c. esim. osoite:lang(fi) Tyyppiä F oleva elementti edellyttäen, että sitä välittömästi edeltävä velisolmu on E-tyyppinen 9 10 E[foo] Tyyppiä E oleva elementti, jos sillä on attribuutti foo E:first-line Tyyppiä E olevan elementin ensimmäinen tekstirivi E[foo="bar"] Tyyppiä E oleva elementti, jos sen foo attribuutilla on arvo "bar". E:first-letter Tyyppiä E olevan elementin ensimmäinen teskstimerkki E[foo~="bar"] Tyyppiä E oleva elementti, jos arvo "bar" sisältyy sen foo-attribuutin arvolistaan (arvot erotetaan toisistaan tyhjätilamerkeillä) E:before E:after Heti ennen tyyppiä E olevaa elementtiä Heti tyyppiä E olevan elementin jälkeen E#myid Tyyppiä E oleva elementti kun sen IDtyyppisen attribuutin arvo on "myid" 11 12 2
-sääntöjen kohdemäärittelyosalla pyritään samaan kuin XPath-polkumääreillä eli valitsemaan kohde-elementtejä XPath:sta puuttuvat pseudo-luokat (:hover, jne) ja pseudoelementit (:first-line), muutoin kieli on ilmaisuvoimaisempi miksi sama organisaatio tuottaa samaan tarkoitukseen useita tekniikoita? :n muotoilumääreet voi karkeasti jakaa rakenteellisiin miten elementti suhtautuu ympäristöönsä tekstin ulkoasuun vaikuttaviin fontti, merkkikoko, väri, korostukset sijoitteluun vaikuttaviin ladontamalli, tilanhallinta tietoa generoiviin erityisesti XML:ssä, järjestysnumerot yms. 13 14 Rakenteellisilla muotoilumääreillä vaikutetaan siihen, miten elementti suhteutetaan ympäristöönsä Merkittävin määre tässä suhteessa on display Tällä määritellään miten ladonnassa tulisi suhtautua elementtiin Lohkot (block) käsitellään erillisinä ladontalaatikoina, jotka perusladonnassa ladotaan allekkain Lohkoille voidaan määritellä marginaaleja reunuksia tyhjää tilaa reunuksen ja sisällön väliin taustaväri tai -kuva laatikon koko jopa normaaliladonnasta poikkeava sijoittelu 15 16 Upotetut elementit (inline) ladotaan osaksi tekstivirtaa. Niille voi määritellä pelkästään tekstin ulkoasuun liittyviä muotoiluja, mutta ei lohkojen yhteydessä mainittuja asioita, yllä oleva 'inline' voisi olla upotettu elementti Upotetut lohkot ovat lohkon ja upotetun elementin välimuoto Ladotaan osaksi tekstivirtaa, mutta lohkomäärityksiä voidaan käyttää esimerkiksi sisältöä ympäröivän tyhjän tilan määrittelyyn. Normaalista poikkeavaa ladontanmallia ei näille voi määritellä. 17 ohitettu elementti (display:none) on elementti, jota ei oteta lainkaan mukaan ladontaan lista-alkio (list-item) on lohkoelementti joka on tarkoitettu ladottavaksi peräkkäin järjestetyn listan alkioksi taulukko (table), taulukkorivi (table-row), taulukkoalkio (table-cell) sekä 7 muuta taulukkoelementtiä voivat tulla kyseeseen jos halutaan esittää xml-tietoa taulukkona 18 3
Esim. <prices> <prod><code>abc10</code><price>23.50</price></prod> <prod><code>abc20</code><price>53.50</price></prod> <prod><code>cop10</code><price>213.00</price></prod> </prices> Sääntöjä: prices {display:table} prod {display:table-row} code {display:table-cell} price {display:table-cell} abc10 abc20 cop10 23.50 53.50 213.00 Normaalista poikkeavassa ladonnassa ladontalaatikoille voidaan määritellä absoluuttinen sijoittelu (annetaan paikka) vain pienillä aineistoilla, tai aineiston osilla suhteellinen sijoittelu (siirretään jonkin verran normaalipaikastaan) lähinnä tehosteina leijuva sijoittelu, jolloin normaalisti allekkain olevat laatikot saadaan rinnakkain esimerkiksi palstoitus 19 20 Normaali float:left Tekstin ulkoasuun voidaan vaikuttaa säätämällä fontteja kirjainkokoa korostuksia tekstin ja taustan värejä kirjainten välejä sanojen välejä reunojen tasauksia 21 22 Tyhjätilamerkkien käsittelyä voi myös säätää white-space määreellä normal: karsitaan ja tiivistetään. kaikki korvataan välilyöntimerkeillä, alusta ja lopusta karsitaan, välisekvenssit korvataan yhdellä pre: jätetään kaikki, rivejä ei pätkitä nowrap: muuten kuten normaali, mutta rivinvaihdot jätetään. pre-wrap: jätetään kaikki, mutta pätkitään ylipitkät rivit pre-line: tiivistetään, jätetään rivinvaihdot ja pätkitään ylipitkät Tiedon generoinnille on XML:n muotoilussa enemmän käyttöä kuin html:n tapauksessa Tägeihin liittyvä semantiikka pitäisi saada mukaan esitykseen. 23 24 4
content määreellä voidaan määritellä tulostettavan elementin sisältö puhelin::before {content:"puh."} Ennen puhelinnumeroa teksti "puh." Sisältö voi olla: merkkijono, kuten yllä uri, jolloin sen osoittama sisältö, esim. kuva, otetaan mukaan attr(x), missä x on kohde-elementin attribuutin nimi, ja sen arvo tulostetaan 25 laskuriarvo counter-reset alustaa counter-increment kasvattaa counter() tulostaa body { counter-reset: section; /* Create a section counter */ } h1::before {counter-increment: section; /* Add 1 to section */ content: Section " counter(section) ". ";} h1 { counter-reset: subsection; /* Set subsection to 0 */ } h2::before {counter-increment: subsection; content: counter(section) "." counter(subsection) " ";} Huom: jos samassa tilanteessa tulostetaan ja asetetaan laskuri käytetään aina asetuksen jälkeistä arvoa. 26 ja mediatyypit ja mediatyypit xml-stylesheet käsittelyohjeeseen voidaan liittää media attribuutti ilmaisemaan, mitä mediaa ohjeet koskevat Jos samassa tiedostossa on useaa mediaa koskevia ohjeita nämä erotetaan @mediamääreellä @media print { em{font-style:italic} } @media screen { em{font-style:bold} } Mediatyyppejä on useita: näyttö, kirjoitin, kännykkä, äänitulostus, Kirjoitintulostuksen sivun ominaisuuksia lähinnä marginaaleja voi muotoilla @page määreellä Sivunvaihtojen säätelyn on tarjolla attribuutit page-break-before page-break-after page-break-inside arvot: auto. always, avoid, left, right esim: product {page-brake-before:always} 27 28 ja XML ja XML :n käyttö datan esittämisen kuvaamiseen Ei pysty vaihtamaan elementtien järjestystä, paitsi pienissä absoluuttisesti ladottavissa tilanteissa Mukaan otettavaa aineistoa voi valikoida vain rajoitetusti Elementin tyypin ja attribuuttiarvojen avulla Ei pysty hyödyntämään valmiiksi määriteltyjä muotoiluohjeita (hyviä paketteja, mutta eri elementtinimillä) Tuki vajavaista Katso esimerkki http://www.cs.helsinki.fi/u/laine/xml/k08/recipes3.xml http://www.cs.helsinki.fi/u/laine/xml/k08/recipe1.css WWW-materiaalia W3C-kotisivut www.w3.org/style// -spesifikaatiot level 1, 2.1 CR, 3 WD XML-tyylitiedostoista www.w3.org/tr/xml-stylesheet/ (2010) 29 30 5