Relax NG

Wikipedia
Loikkaa: valikkoon, hakuun

RELAX NG (REgular LAnguage for XML Next Generation) on OASIS-organisaation kehittämä skeemakieli XML-dokumenttien määrittelyyn. Skeemakieli julkaistiin maaliskuussa 2000. RELAX NG:ssä yhdistyivät James Clarkin kehittämä TREX (Tree regular expression for XML) -skeemakieli sekä Murata Makoton kehittämä RELAX (Regular language of description for XML) -skeemakieli.

RELAX NG -skeema on XML-pohjainen rakennemäärittely, mutta siitä on mahdollista käyttää myös kompaktia esitysmuotoa, joka ei pohjaa XML:ään. XML-pohjaisen skeeman tiedostopääte on yleensä *.rng ja kompaktisyntaksin muotoisen skeeman *.rnc

Verrattuna muihin skeemakieliin, kuten esimerkiksi W3C:n XML Schema -skeemakieleen, RELAX NG:n sanotaan olevan suhteellisen yksinkertainen. OpenDocument-toimistodokumentit on kuvattu RELAX NG -skeemakielellä.

XML-pohjainen rakennemäärittely[muokkaa | muokkaa wikitekstiä]

RELAX NG –skeema määritellään XML-elementtien joukkona. Oletetaan, että RELAX NG -skeemamme määrittää muistion, jolla on kaksi lapsielementtiä; 'laatija' ja 'paivamaara'. Näin ollen skeema voisi näyttää seuraavanlaiselta:

<?xml version="1.0" encoding="UTF-8"?>
 
<element name =”muistio” xmlns="http://relaxng.org/ns/structure/1.0 "> 
  <element name =”laatija”>
     <text/>
  </element>
  <element name=”pvm”>
    <text/>
 </element>
</element>

Edellä määritelty RELAX NG -skeema alkaa XML-deklaraatiorivillä, jonka jälkeen määritellään juurielementti muistio. Yksittäisen elementin määritykseen käytetään element-elementtiä. muistio-elementin lopettava tunniste, </element>, on skeeman viimeinen elementti ja näin ollen muut elementtimääritykset kirjoitetaan juurielementin alku- ja lopputunnisteiden väliin. element-elementin esiintyminen ilmaisee itsessään, että elementti on pakollinen. Toisin sanoen, elementin ilmentymisen pakollisuutta ei tarvitse RELAX NG:ssä ilmaista muulla tavoin kuin määrittelemällä elementti skeemaan. Esimerkkiskeemasta huomataan myös, että juurielementtiin tulee lisätä myös elementin konteksti eli käytännössä nimiavaruus osoitteeseen http://relaxng.org/ns/structure/1.0.

Ensimmäinen määriteltävä elementti esimerkissä juurielementin jälkeen on laatija-elementti, joka voi sisältää merkkitietoa. Näin ollen laatija-elementin määrityksessä esiintyy elementti <text/> laatija-elementin alku- ja lopputunnisteiden välissä. Kyseinen elementti siis ilmaisee, että elementillä voi olla tekstimuotoista sisältöä, eli että elementti ei ole tyhjä.

Nimetyt mallinteet[muokkaa | muokkaa wikitekstiä]

RELAX NG –skeeman elementtimääritykset jaetaan tyypillisesti erillisiin nimettyihin mallinteisiin (engl. named pattern), mikäli elementtien määrä on suuri ja määriteltävän dokumenttipuun rakenne hyvin hierarkinen. Nimetyt mallinteet ovat määrittelylohkoja, joista skeema rakentuu. Eli sen sijaan, että elementtien määritykset esiintyisivät skeemassa yhtenä listana siinä järjestyksessä, missä elementtien tulee XML-dokumentissa esiintyä, elementtimäärityksiä voidaan ryhmitellä loogisiin lohkoihin, jotka joko sisältävät elementtimäärityksiä (tai attribuuttimäärityksiä) taikka viittauksia (engl. references) toisiin nimettyihin mallinteisiin.

RELAX NG –spesifikaatio ei ota kantaa siihen, millä periaatteella nimettyjä mallinteita tulisi määritellä vaan nimettyjen mallinteiden käyttö on aina skeemakohtaista ja skeemasuunnittelijoiden päätettävissä. On kuitenkin mielekästä pyrkiä siihen, että skeeman luettavuus säilyy. Näin ollen nimetyt mallinteet tulisi nimetä selkeästi ja niiden sisältämät määritykset tulisi laatia mahdollisimman johdonmukaisesti.

Nimettyjen mallinteiden käytön kannalta keskeisiä elementtejä ovat define- ja ref-elementit. Nimetyt mallinteet aloitetaan aina define-elementillä. Nimensä mukaisesti define-elementillä määritellään nimetty mallinne. Esimerkki nimetystä mallinteesta, jonka nimi on muistio-mallinne:

<define element =”muistio-mallinne”>
  <element name =”muistio”>
    <ref name =”laatija-mallinne”/>
    <ref name =”paivamaara-mallinne”/>
 </element>
</define>

Nimetyt mallinteet konstruoidaan siis define-elementtien sisälle. Yllä olevan esimerkin mukaan nimetty muistio-mallinne sisältää määrityksen elementille 'muistio'. muistio-elementin lapsielementit 'laatija' ja 'paivamaara' on taas määritelty omissa nimetyissä mallinteissaan, joihin määrityksessä viitattaan ref-elementein. Kun nimetyt mallinteet nimetään selkeästi, skeemasta tulee luettavampi. Tämä tarkoittaa käytännössä sitä, että ref-elementin sisältämä, selkeästi nimetty viittaus mahdollistaa sen, että esimerkiksi skeemasuunnittelija voi helposti päätellä millaisesta määrityksestä on viittaukseen nimetyssä mallinteessa kyse.

Attribuuttien määrittely[muokkaa | muokkaa wikitekstiä]

Määritellään muistiolle status-attribuutti, jonka arvo ilmaisee muistion tilaa (onko muistio esimerkiksi vielä muokkausvaiheessa vai mahdollisesti valmis). Näin ollen status-attribuutti voitaisiin määritellä esim. seuraavalla tavalla:

<element name=”muistio”>
 <attribute name=”status”>
  <text/>
 </attribute>
</element>

Esimerkistä huomataan, että attribuutti voidaan määritellä sen elementin alku- ja loppu-tunnisteiden väliin, jonka attribuutista on kyse. Yllä olevassa esimerkissä status-attribuutti on siis nimen-omaan muistio-elementin attribuutti, sillä attribuutin määritys sijaitsee muistio-elementin alku- ja lopputunnisteiden välissä. Attribuutin oletussisältö on RELAX NG –spesifikaation mukaan aina merkkitietoa, joka ilmenee skeemassa elementtinä <text/>.

Mikäli status-attribuutti haluttaisiin määritellä valinnaiseksi, tulisi se tehdä optional-elementtien avulla seuraavasti:

<element name=”muistio”>
 <optional>
  <attribute name=”status”>
  <text/>
  </attribute>
 </optional>
</element>

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]

Tämä tekniikkaan liittyvä artikkeli on tynkä. Voit auttaa Wikipediaa laajentamalla artikkelia.