Moi,
Olen työskennellyt JHS-170-suositusta hyödyntävän skeemakuvauksen kanssa ja havainnut seuraavan asian. Suosituksen kohdassa 8.2 sanotaan seuraavasti:
Pääsääntöisesti organisaation omissa skeemoissa PITÄISI viitata atomaariseen elementtimääritykseen. Atomaarisen määrittelyn muuttaminen organisaation tarpeita vastaavaksi on helpompaa viittaamalla vastaavaan tyyppimääritykseen. Tämän vuoksi organisaatio SAA omissa skeemoissaan viitata tyyppimääritykseen.
Eli tästä seuraa, että oikeanlainen(?) tapa rakentaa yksittäinen tyyppi olisi (esimerkeissä ei ole nimiavaruuksia tai importteja, oletusnimiavaruus on oman skeeman nimiavaruus):
1<xs:complexType name="EsimerkkiTyyppi">
2 <xs:sequence>
3 <xs:element ref="jhs:EtuNimi" minOccurs="0"/>
4 <xs:element ref="jhs:SukuNimi" minOccurs="0"/>
5 </xs:sequence>
6</xs:complexType>
Ja vastaava XML voisi olla:
1<Esimerkki>
2 <jhs:EtuNimi>Erkki</jhs:EtuNimi>
3 <jhs:SukuNimi>Esimerkki</jhs:SukuNimi>
4</Esimerkki>
Jos kuitenkin havaitaan, että etunimen pituutta tulisi rajata
skeeman julkaisun jälkeen se tehtäisiin seuraavasti:
1<xs:simpleType name="EtuNimiTyyppi">
2 <xs:restriction base="jhs:EtuNimiTyyppi">
3 <xs:maxLength value="50"/>
4 </xs:restriction >
5</xs:simpleType>
Jonka jälkeen validi XML olisi:
1<Esimerkki>
2 <EtuNimi>Erkki</EtuNimi>
3 <jhs:SukuNimi>Esimerkki</jhs:SukuNimi>
4</Esimerkki>
Tämä siirtää automaattisesti EtuNimi-elementin ydintä käyttävän skeeman nimiavaruuteen ja seurauksena rikkoo kaikki dokumentit, jotka ennen olivat skeeman mukaisia. XML-dokumenteissa viitataan elementin kohdalla "vanhaan" JHS-nimiavaruuteen ja elementit ovat näin epäkelpoja uudessa skeemassa. Tämä luo siis rikkovan muutoksen. Uskoisin, että rikkova muutos olisi myös ytimen skeeman uudelleenjärjestely nimiavaruuksien suhteen.
Itse olen varautunut tilanteeseen viittamaalla ainoastaan tyyppeihin ja uudelleen esittelen omassa skeemassa ytimen vastaavat atomaariset elementit, jotka omina versioina eivät luo ytimen viittausvaatimuksia käyttävään XML:ään.
Tässä siis on hyvä huomata suosituksen lause
"Tämän vuoksi organisaatio SAA omissa skeemoissaan viitata tyyppimääritykseen." joka mielestäni voi olla jopa suositus näissä tilanteissa, joissa skeemaa hyödyntyvä käyttäjäkunta on laaja sekä ei täysin "oman talon sisällä".
--
Marko Lahma
Digia Oyj
www.digia.com