Bijgaand (zie bijlage onderaan) de nieuwe 1.1 versie van het voorstel "GAB mogelijk onvolledige datum 1.0". Drie belangrijke verschillen:
-
Verwijdering van het onnodige container-element <DatumMogelijkOnvolledig>.
- De complexType definitie voor DatumMogelijkOnvolledig is onderdeel geworden van de namespace van GAB
- Verbinding gelegd met het andere GAB voorstel "Omgaan met lege waarde"
De nieuwe definitie ziet er zo uit:
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gab="http://www.noraonline.nl/GAB/gab0100"
targetNamespace="http://www.noraonline.nl/GAB/gab0100"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0">
…
<xs:complexType name="DatumMogelijkOnvolledig">
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element name="datum" type="xs:date"/>
<xs:element name="jaarMaand" type="xs:gYearMonth"/>
<xs:element name="jaar" type="xs:gYear"/>
<xs:element name="leeg" type="xs:string"/>
</xs:choice>
</xs:complexType>
…
</xs:schema>
Hieronder voorbeelden in XML voor de mogelijk onvolledige waarden van een geboortedatum:
Volledige datum
<bg:geboortedatum>
<gab:datum>2014-08-27</gab:datum>
</bg:geboortedatum>
Dag ontbreekt
<bg:geboortedatum>
<gab:jaarMaand>2014-08</gab:jaarMaand>
</bg:geboortedatum>
Maand ontbreekt
<bg:geboortedatum>
<gab:jaar>2014</gab:jaar>
</bg:geboortedatum>
Jaar ontbreekt (datum is leeg, maar we weten dat er een waarde bestaat)
<bg:geboortedatum>
<gab:leeg>waardeBestaat</gab:leeg>
</bg:geboortedatum>
N.a.v. de afgelopen GAB-meeting afgelopen woensdag bij de KvK heb ik de schemadefinities nog een beetje aangepast:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gab="http://www.noraonline.nl/GAB/gab0100" targetNamespace="http://www.noraonline.nl/GAB/gab0100" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<xs:simpleType name="NilReason">
<xs:restriction base="xs:string">
<xs:enumeration value="nietOndersteund"/>
<xs:enumeration value="nietGeautoriseerd"/>
<xs:enumeration value="geenWaarde"/>
<xs:enumeration value="waardeBestaat"/>
<xs:enumeration value="waardeOnbekend"/>
<xs:enumeration value="vastgesteldOnbekend"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="DatumMogelijkOnvolledigUitbreidbaar" abstract="true">
<xs:choice>
<xs:element name="datum" type="xs:date"/>
<xs:element name="jaarMaand" type="xs:gYearMonth"/>
<xs:element name="jaar" type="xs:gYear"/>
<xs:element name="nilReason" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="DatumMogelijkOnvolledig">
<xs:complexContent>
<xs:restriction base="gab:DatumMogelijkOnvolledigUitbreidbaar">
<xs:choice>
<xs:element name="datum" type="xs:date"/>
<xs:element name="jaarMaand" type="xs:gYearMonth"/>
<xs:element name="jaar" type="xs:gYear"/>
<xs:element name="nilReason" type="gab:NilReason"/>
</xs:choice>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>
Dit zijn de verschillen:
DatumMogelijkOnvolledigUitbreidbaar: deze is abstract en kan nog uitgebreid worden met een nieuwe waardenlijst voor NilReason
DatumMogelijkOnvolledig: deze is al ingevuld met de standaard enumeratie voor NilReason (batteries included)
In de afgelopen GAB-meeting werd de vraag gesteld waarom het element nilReason niet als attribute is gedefinieerd, dus zo:
<xs:complexType name="DatumMogelijkOnvolledigUitbreidbaar" abstract="true">
<xs:choice>
<xs:element name="datum" type="xs:date"/>
<xs:element name="jaarMaand" type="xs:gYearMonth"/>
<xs:element name="jaar" type="xs:gYear"/>
</xs:choice>
<xs:attribute name="nilReason" type="xs:string"/>
</xs:complexType>
<xs:complexType name="DatumMogelijkOnvolledig">
<xs:complexContent>
<xs:restriction base="gab:DatumMogelijkOnvolledigUitbreidbaar">
<xs:choice>
<xs:element name="datum" type="xs:date"/>
<xs:element name="jaarMaand" type="xs:gYearMonth"/>
<xs:element name="jaar" type="xs:gYear"/>
</xs:choice>
<xs:attribute name="nilReason" type="gab:NilReason"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
Echter het bovenstaande schema dwingt niet af dat het attribute "nilReason" altijd correct gebruikt wordt. Het onderstaande element "geboortedatum" van type DatumMogelijkOnvolledig is daar een voorbeeld van:
<bg:geboortedatum nilReason="waardeOnbekend">
<gab:datum>2001-10-11</gab:datum>
</bg:geboortedatum>
Vandaar dat er gekozen is om het nilReason als element binnen de choice op te nemen. Bij elementen waarvan de content is gedefinieerd door een primitief datatype (zoals string) verdient het natuurlijk de voorkeur om nilReason als een attribute op te nemen:
<bg:voorvoegselAchternaam nilReason="waardeOnbekend"/>