Versio 2009-05-28
Viimeisin versio löytyy osoitteesta http://ws.tyoelake.fi/ohjeisto/.
Tämä ohjeisto määrittelee, miten XML-teknologioita hyödynnetään eläkevakuuttajien, Arekin ja Eläketurvakeskuksen järjestelmien välisissä yhteyksissä. Ohjeiston ensisijaisena tavoitteena on paras mahdollinen yhteensopivuus eri tietojärjestelmien välillä. Muita tavoitteita ovat tietojen vaihdon hyvä suorituskyky ja implementoinnin helppous.
Työeläkejärjestelmässä ei olla kuvattu kattavaa joukkoa yhteisiä ydintyyppejä, joissa määriteltäisiin esimerkiksi henkilön tai vakuutuksen kaikki ominaisuudet ja tietojen rakenne XML-sanomilla. Lähtökohtana on ollut, että kukin palvelu määrittelee omille kutsu- ja vastaussanomilleen tarvitsemansa tiedot.
XML-rajapintojen ei ole tarkoitus kuvata esim. sanomilla sallittuja arvoja tai niiden muotoja mahdollisimman tarkasti. XML-sanomilla pyritään käyttämään yksinkertaisia perustyyppejä ja tietojen oikeellisuustarkistukset tehdään sovelluslogiikassa.
Tässä ohjeistossa esitetään XML:n käyttöön liittyviä vaatimuksia, suosituksia ja vinkkejä.
Esimerkki vaatimuksesta:
Palveluille ja niihin liittyville skeemoille tulee määritellä nimiavaruudet.
Esimerkki suosituksesta:
Elementtien nimien tulisi olla korkeintaan 32 merkin pituisia.
Esimerkki vinkistä:
Yhteensopivuuden varmistamiseksi ja virheiden ehkäisemiseksi XML-sanoman muodostava osapuoli voi validoida muodostamansa sanoman.
Työeläkejärjestelmän XML-ohjeisto pohjautuu pääosin W3C:n suosituksiin. XML-toteutusten on oltava yhteensopivia alla mainittujen suositusten kanssa.
Seuraavista Oasiksen ja WS-I:n standardeista hyödynnetään osia, jotka määritellään tässä dokumentissa.
Lisäksi on hyvä tuntea seuraavat standardit:
Yhdessä WSDL-kuvauksessa tulisi kuvata yksi palvelu. Palvelu koostuu tyypillisesti yhden kutsu- ja yhden vastaussanoman muodostamasta operaatiosta, mutta operaatioita voi myös olla useita. Jokaisen sanoman rakenne kannattaa kuvata omassa skeemassaan. Nämä erilliset skeemat liitetään WSDL-kuvaukseen XML Schema -suosituksen import
-elementin avulla.
WSDL-kuvauksia ei ainakaan toistaiseksi julkaista UDDI-palvelussa vaan jokainen organisaatio julkaisee rajapintakuvaukset valitsemallaan tavalla. Kaikille palveluille yhteiset skeemat julkaistaan sivustolla ws.tyoelake.fi.
Esimerkki WSDL-palvelukuvauksesta
SOAP-sanomat muodostuvat SOAP-standardin mukaisesta Header
- ja Body
-osasta. Työeläkejärjestelmän XML-sanomilla Body
-osaan sijoitetaan kaikille yhteinen vakio-osa, vastaussanomille mahdollisia poikkeustietoja sekä sanomakohtainen liiketoimintaosa. Vakio-osan ja poikkeustietojen rakenne on määritelty yleisissä skeemoissa ja ne on esitelty tämän ohjeiston kappaleessa Yleiset tyypit. Tässä suosituksessa on erillinen kappale SOAP-sanomien välittämisestä.
Palveluntarjoaja voi tarjota palvelulleen myös eräkäsittelyrajapintaa. Eräkäsittelyssä koko erälle muodostetaan juurielementti, jonka sisään tulevat yleiset erän tiedot sekä yksittäiset sanomat peräkkäin. Jokaisella kutsusanomalla on oma vakio-osansa. Eräajorajapinnoille ei ole pakko määrittää vastaussanomia, mutta jos vastauserän rakenne määritetään, jokaisen vastaussanoman tulee sisältää vakio-osa ja mahdolliset poikkeustiedot. Koko erää koskevia poikkeustietoja ei ole määritetty. Eräajorajapintojen tulee pystyä muodostamaan vastauserä, jolla on yleiset erän tiedot ja yhtä monta vastaussanomaa kuin pyyntöerällä oli pyyntösanomia.
Eräajojen vastaustiedostoon voidaan määrittää yleisten erän tietojen lisäksi kokooma, jossa kerrotaan esimerkiksi onnistuneiden sanomien lukumäärä.
Esimerkki pyyntöerätiedoston rakenteen kuvaavasta skeemasta - sisältää myös autentikointitiedot. Katso myös Erätiedostojen välitys.
Elementtien ja attribuuttien nimien tulee perustusa suomen kieleen. Ä- ja ö-kirjaimista jätetään pisteet pois. Välilyönnit ja yhdysviivat jätetään nimistä pois, nimissä ei käytetä alaviivoja. Elementtien nimissä käytetään ns. UpperCamelCase-kirjoitustapaa (kaikki sanat alkavat isolla alkukirjaimella) ja attribuuttien nimissä lowerCamelCase-tapaa (ensimmäinen sana alkaa pienellä kirjaimella, muut sanat isoilla).
Palveluun kuuluvan operaation kutsu- ja vastaussanomien SOAP Body
-osaan sijoitettavien juurielementtien tulisi kuvata kyseisen operaation toiminta mahdollisimman selväkielisesti. Kutsusanomaan liitetään lisäksi sana Pyynto
ja vastaussanomaan Vastaus
. Lisäksi kummallekin sanomalle määritetään pakollinen palvelutunnus
-attribuutti, joka sisältää lyhyemmän, operaation yksilöivän koodin.
Elementtien nimien tulisi olla kuvaavia ja ymmärrettäviä. Lyhenteitä tulisi välttää, lukuunottamatta vakiintuneita, kaikille tuttuja lyhenteitä kuten esimerkiksi Pvm. Elementtien nimien tulisi olla korkeintaan 32 merkin pituisia.
Attribuuttien ja elementtien arvojen, jotka muodostavat sanoman sisällön, ei tarvitse noudattaa näitä nimeämissääntöjä.
Esimerkiksi palvelu HaeHenkilonAnsaintatiedot sisältää yhden operaation, jonka kutsusanoma on HaeHenkilonAnsaintatiedotPyynto ja vastaussanoma HaeHenkilonAnsaintatiedotVastaus.
Esimerkkitiedostossa EsimerkkipalveluVastaus.xsd
on esimerkki vastaussanoman skeemasta, jossa juurielementti sisältää vakio-osan, poikkeustiedot ja liiketoimintaosan. Juurielementille on määritelty palvelutunnus
-attribuutti. Elementille EsimerkkipalveluVastaus
on määritelty oma tyyppi EsimerkkipalveluVastausTyyppi
, koska kaikki ohjelmistot eivät hallitse elementin sisällä määriteltyjä anonyymejä complexType
-määrityksiä. Vastaussanoman liiketoimintaosa on määritelty erillisessä skeemassa Vastaus.xsd
. Skeemalle on määritelty ominaisuus elementFormDefault="qualified"
, eli skeeman mukaisissa XML-sanomissa elementtien on esiinnyttävä nimiavaruuksien kanssa.
Työeläkejärjestelmän XML-sanomille on määritelty vain muutamia, koko järjestelmälle yhteisiä perustyyppejä. Ne on määritelty omassa skeemassaan Perustyypit.xsd
. Näitä tyyppejä tulisi käyttää skeemoissa omien tyyppien tai XML Schema -tyyppien sijaan perustyyppien mukaisten tietojen tyyppeinä. Yhteiset tyypit ovat:
ElakejarjestelynumeroTyyppi
ElakevakuuttajaTyyppi
HenkilotunnusTyyppi
SukupuoliTyyppi
M
tai N
. (M = mies, N = nainen.) YTunnusTyyppi
Kaikille työeläkejärjestelmän XML-sanomille liitettävän vakio-osan rakenne on määritelty omassa skeemassaan VakioOsa.xsd
. Vakio-osan tietoja käytetään sanomilla seuraavasti:
Aikaleima
xs:dateTime
-tyyppinen ja se
tulisi asettaa mahdollisimman tarkasti - mielellään millisekunnin
tarkkuudella. AlkuperainenLahettaja
Laskutustieto
LahettavaElakevakuuttaja
LahettajanHoitavaToimija
LahettajanOhjelma
LahettajanKayttajatunnus
LahettajanOhjelma
) tai jotakin eräohjelman
suoritukseen liittyvää tarkentavaa tietoa. Käyttäjätunnus on korkeintaan 64
merkin pituinen. LahettajanViite
LahettavaElakevakuuttaja
ja LahettajanViite
tulee olla uniikki yhdistelmä.
Lähettäjän viitteeseen kannattaa varmuuden ja selkeyden vuoksi laittaa tieto,
josta lähettäjä voidaan tunnistaa. (Esimerkiksi Arekin viitteet alkavat aina
A-kirjaimella.) Viite on korkeintaan 30 merkin mittainen. VastaanottavaElakevakuuttaja
VastaanottajanHoitavaToimija
VastaanottajanViite
VastaanottavaElakevakuuttaja
sisällön kanssa. Viite on korkeintaan 30 merkin mittainen.Huomaa! Elementtien AlkuperainenLahettaja
ja Laskutustieto
ei ole välttämätöntä esiintyä vastaussanomalla. Mikäli elementit esiintyvät vastaussanomalla, niiden arvojen on oltava samat kuin kutsusanomalla. Elementit LahettajanOhjelma
ja LahettajanKayttajatunnus
voivat esiintyä tyhjinä, vaikka kutsusanomalla niillä olisikin ollut arvot. Jos elementit eivät ole vastaussanomalla tyhjiä, niiden arvon on oltava kutsusanomalla esiintynyt arvo.
Huomaa myös! Vastaussanomalla esiintyvä LahettavaElakevakuuttaja
on kutsusanoman lähettäjä eli vastaussanoman vastaanottaja. Sama koskee elementtejä LahettajanHoitavaToimija
, LahettajanViite
, LahettajanOhjelma
, LahettajanKayttajatunnus
, VastaanottavaElakevakuuttaja
ja VastaanottajanHoitavaToimija
, eli näiden arvot ovat aina vastaussanomalla samat kuin pyynnöllä. Sen sijaan elementtien Aikaleima
ja VastaanottajanViite
tulisi saada vastaussanomalla eri arvot kuin pyynnöllä.
Esimerkkejä vakio-osan käytöstä eri tilanteissa
Kaikille Arekin
muodostamille XML- muotoisille hälytyssanomille liitettävän
yleistieto-osan rakenne on määritelty omassa skeemassaan HalytystenYleistietoryhma.xsd
. Tietoja käytetään sanomilla seuraavasti:
HalytyksenSyyt
Halytyskoodi
Halytysteksti
OsapuolenTyyppi
OsapuolenTunnus
Rekisterointihetki
XML-vastaussanomalla voi vakio-osan ja liiketoimintaosan lisäksi esiintyä poikkeustietoja. Poikkeustietojen palvelu voi palauttaa virhe- ja huomautustietoja odottamattomista tilanteista.
Poikkeustiedoista on kaksi skeemaversiota. Vanhempi (2005\02\23) Poikkeustiedot.xsd
sekä uudempi (2009\05\06)Poikkeustiedot.xsd
. Jäljempänä uuden skeeman lisäominaisuudet on lisätty versiomerkinnän perään.
Kyseisessä skeemassa määrittellään elementti Poikkeustiedot
, joka tulee asettaa vastaussanomalle valinnaiseksi elementiksi (ks. EsimerkkipalveluVastaus.xsd). Poikkeustiedot
-elementti voi sisältää useita Poikkeus
-elementtejä, joista jokainen sisältää
seuraavat tiedot:
Taso
Virhe |
Kutsuttua palvelua ei pystytty suorittamaan |
Varoitus |
Palvelu suoritettiin, mutta tulokseen sisältyy varoituksia, joihin liittyvät ongelmat ovat palvelun kutsujan vastuulla |
Huomautus |
Palvelu suoritettiin, mutta tulokseen sisältyy huomautuksia, joihin liittyvät ongelmat ovat palvelun tarjoajan vastuulla |
Koodi
Selite
Kohde
id
-attribuutti, se voidaan kertoa poikkeuksen Kohde
-elementissä. Tämä auttaa poikkeustiedon tulkitsijaa paikantamaan poikkeuksen syyn. Esimerkki. Poikkeustiedot -elementissä halutaan välittää
yksilöivät tiedot vakuutuksesta ja siihen liittyvistä henkilöistä, joilla
huomautettavaa:
<Poikkeus>
<Taso>Huomautus</Taso>
<Koodi>ANS12345</Koodi>
<Selite>Vakuutuksen henkilöillä huomautettavaa tiedossa XXX</Selite>
<Kohde tyyppi="vakuutus(numero)">12-34567890</Kohde>
<Kohde tyyppi="henkilö(tunnus)">230467-8901</Kohde>
<Kohde tyyppi="henkilö(tunnus)">120344-1101</Kohde>
<Kohde tyyppi="henkilö(tunnus)">-110801-9777</Kohde>
</Poikkeus>
Huomioitavaa:
XML Schema -suositus määrittelee laajan joukon perustyyppejä (string
, int
, boolean
jne.), joita XML-skeemoissa voi hyödyntää. Työeläkejärjestelmän XML-sanomia varten on kehitetty muutamia perustyyppejä. Näiden lisäksi kukin palvelun tarjoaja voi määritellä uusia tyyppejä omia palvelujaan varten. Omat tyypit voivat olla organisaatio-, palvelu- tai sanomakohtaisia. Tyyppien nimien tulee päättyä sanaan Tyyppi
.
Skeeman tulisi kuvata tiedon rakenne, mutta ei liiketoimintalogiikan tarkistuksia. Merkkijonotyyppisten elementtien suurimmat sallitut arvot kannattaa merkitä määrittelemällä oma simpleType
, joka lisää string
-perustyypille maxLength
-rajoitteen (restriction
). Omia tyyppejä ei kannata käyttää tietyn tiedon sallittujen arvojen määrittelyyn. Arvojoukot kuvataan erillisessä dokumentaatiossa ja niiden oikeellisuus tarkistetaan sovelluslogiikassa. Näin esimerkiksi uuden arvon lisääminen sallittujen arvojen joukkoon ei edellytä skeeman muuttamista ja kaikkien sen perusteella generoitujen ohjelmakomponenttien päivitystä.
Koska sanomien kutsu- ja vastauselementeillä on omat rakenteensa, niillä on omat tyyppinsä. Elementin tyyppi voidaan määritellä elementtimäärityksen sisällä ns. anonyymina complexTypenä, mutta kaikki ympäristöt eivät tue näitä täysin. Parempaan yhteensopivuuteen päästään määrittelemällä nimetyt tyypit ja viittaamalla elementtimäärityksissä niihin.
Useilla sanomilla tai useissa palveluissa uudelleen käytettäväksi tarkoitetuista ydintyypeistä voi muodostaa omia ydintyyppikirjastojaan. Tällöin kannattaa kuitenkin pidättäytyä tyypeissä, joita käytetään kaikilla sanomilla täsmälleen samanlaisina. Tyyppejä muodostettaessa kannattaa välttää syviä rakenteita, koska syvät hierarkiat heikentävät ohjelmistojen suorituskykyä sanomaa muodostettaessa ja luettaessa.
XML Schema -perustyypeistä choice
on toistaiseksi heikosti tuettu ja yhteensopivuuden vuoksi on suotavaa määritellä sen sijaan sequence
, joka sisältää kaikki vaihtoehdot valinnaisina elementteinä (minOccurs="0"
). Tällöin palvelun liiketoimintalogiikan on tarkistettava, että sanomalla elementeistä esiintyy täsmälleen yksi.
Rahamäärät ilmoitetaan työeläkejärjestelmän XML-sanomilla sentteinä. Rahamäärän ilmaisemiseen soveltuvat XML Schema -perustyypit int
ja long
. Skeemaan kannattaa erikseen laittaa huomautus siitä, että tiedon yksikkö on sentti eikä euro.
Päivämäärät kannattaa määritellä XML Schema -perustyypillä date
ja kellonajan sisältävät tiedot tyypillä dateTime
. XML-sanomilla tiedot esitetään aikavyöhyketiedon kanssa.
Palveluille ja niihin liittyville skeemoille tulee määritellä nimiavaruudet. Nimiavaruudet ovat HTTP-osoitteita ja niissä tulee esiintyä palvelua tarjoavan organisaation tunniste, päivämäärä muodossa VVVV/KK/PV sekä palvelun tai skeeman nimi. Päivämäärä voi olla esimerkiksi skeeman luontiajankohta, palvelun suunniteltu tuotantoonsiirtopäivä tai skeemaan muutoksen aiheuttaneen lakimuutoksen päivä. Tärkeintä on, että samalla organisaatiolla voi olla samasta palvelusta useita eri versioita, joilla jokaisella on oma nimiavaruutensa.
Nimiavaruuksiin perustuvan versioinnin lisäksi pieniä muutoksia, jotka eivät riko rajapinnan taaksepäin yhteensopivuutta voidaan ilmaista asettamalla palvelun juurielementille string
-tyyppinen attribuutti sanomaversio
, joka voi olla muotoa X.y. Tämän attribuutin avulla palvelua kutsuva asiakasohjelma voi kertoa, mitä sanomaversiota se käyttää.
Työeläkejärjestelmän XML-sanomilla noudatetaan WS Security -standardin mukaisia allekirjoituksia tietojen muuttumattomuuden ja lähettäjän varmentamiseksi. Tietoja ei kryptata. Toistaiseksi allekirjoituksiin käytetään UsernameToken-profiilin mukaista tunnusta ja salasanaa, mutta jatkossa on tarkoitus siirtyä X.509 Certificate Token -profiilin käyttöön.
WS Securityn mukainen tunnus ja salasana sijoitetaan SOAP-sanoman header-osaan.
WS Securityn mukainen tunnus ja salasana sijoitetaan erätiedoston alkuun.
Huomaa, että jos erätiedoston rakenne on määritelty omassa skeemassaan, kyseiseen skeemaan pitäisi määritellä myös Security-elementti, jotta autentikointitiedot sisältävän erätiedoston voi validoida skeemaa vasten.
SOAP-sanomilla sisällön merkistöpakkauksena tulee käyttää UTF-8:aa. Kaikkien XML-jäsentimien tulee osata käsitellä UTF-8:aa ja UTF-16:tta. UTF-16:lle ei ole tarvetta työeläkejärjestelmän XML-sanomilla ja työkalujen tuki UTF-8:lle on huomattavasti parempi.
XML Schema -tyyppien date
ja dateTime
sekä näistä johdettujen tyyppien mukaiset tiedot on välitettävä sanomilla aikavyöhyketiedon kanssa.
Suositeltava tapa liittää kellonaikaan aikavyöhyketieto on muuntaa tieto UTC-aikaan ja merkitä aikavyöhykkeeksi Z
.
Oman ympäristön aikavyöhykkeen käsittelyä voi testata esimerkkitiedostolla aikaleimatesti.xml
. (Testin suorittamiseen tarvitaan myös skeema aikaleimatesti.xsd
.)
W3C:n työryhmä on julkaissut muistion aikavyöhyketiedon käytöstä ja käsittelystä.
Mikäli elementin esiintyminen sanomalla on skeeman mukaan valinnaista (minOccurs="0"
) ja elementillä ei ole arvoa, koko elementti alku- ja lopputageineen tulisi jättää pois sanomalta.
Yhteensopivuuden varmistamiseksi ja virheiden ehkäisemiseksi XML-sanoman muodostava osapuoli voi validoida muodostamansa sanoman. Myös vastaanottava osapuoli voi validoida sanomat. Testiympäristöissä validointi on suotavaa tehdä kummassakin päässä, mutta suorituskykysyistä tuotantoympäristössä validointi voidaan kytkeä pois päältä.
Eräajorajapinnoille määritetään omat skeemansa, joihin liitetään yleiset erän tiedot. Erätiedostot välitetään FTP:llä. Palvelun tarjoaja määrittelee tiedostojen nimeämiseen, ftp-palvelimen osoitteeseen yms. liittyvät asiat.
Erätiedostoihin voidaan lisätä WS Security -suosituksen mukaiset autentikointitiedot.
Tämä ohjeisto korvaa edellisen XML-ohjeiston, joka on edelleen luettavissa osoitteessa ws.tyoelake.fi/2005/01/10/tel-xml.pdf. Tämä versio on kirjoitettu kokonaan uudelleen alusta alkaen.
xs:int
ja xs:long
(aiemmin xs:integer
) xs:date
ja xs:dateTime
yhteydessä Jatkossa muutokset merkitään seuraavaan taulukkoon.
Päivämäärä | Mitä muutettu |
---|---|
18.9.2005 | Ensimmäinen uuden mallin mukainen versio |
29.9.2005 |
|
2.11.2005 |
|
28.05.2009 |
|