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 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ä. 3 4 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 Candidate Recommendation 19 July 2007 (http://www.w3.org/tr/21/) :ää on HTML:n kannalta käsitelty kurssilla Digitaalisen median tekniikat (s2007), tällä kurssilla käsitellään aihetta XML:n kannalta. -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 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 * E E F E>F E:first-child Mikä tahansa elementtityyppi Tyyppiä E oleva elementti Tyyppiä F oleva elementti edellyttäen, että sillä on E tyyppinen esi-isä Tyyppiä F oleva elementti kun se on E- tyyppisen elementin lapsielementti 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"] E#myid Tyyppiä E oleva elementti, jos arvo "bar" sisältyy sen foo-attribuutin arvolistaan (arvot erotetaan toisistaan tyhjätilamerkeillä) Tyyppiä E oleva elementti kun sen IDtyyppisen attribuutin arvo on "myid" E:before E:after Heti ennen tyyppiä E olevaa elementtiä Heti ennen tyyppiä E olevan elementin jälkeen 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 laskuriarvo counter-reset alustaa counter-increment kasvattaa counter() tulostaa body { counter-reset: chapter; /* Create a chapter counter */ } h1::before { content: "Chapter " counter(chapter) ". "; counterincrement: chapter; /* Add 1 to chapter */ } h1 { counter-reset: section; /* Set section to 0 */ } h2::before { content: counter(chapter) "." counter(section) " "; counter-increment: section; } 25 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 :n käyttö esittämisen määrittelyyn Ei pysty vaihtamaan elementtien järjestystä, paisi 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 esimerkit: http://www.cs.helsinki.fi/u/laine/xml/k08/recipes3.xml http://www.cs.helsinki.fi/u/laine/xml/k08/recipe1.css 29 5