Bilaga 2: Exempel på utökning via både domänschema och interaktionsschema

Introduktion

Det här exemplet är taget från en riktig uppdatering gjord i kontraktet GetUnit. Uppdateringen 2.2 påverkar enbart kontraktet GetUnit men har föregåtts av en tidigare utökning av domänschemat från 2.0 till 2.1 enligt bilden nedan.

Utökning 2.2

Utökningen sker endast i interaktionens scheman eftersom typen UnitType är definierad där men principerna för import och adressering hade varit desamma om det varit i domänschemat.

UnitType utökas i interaktionsschema 2.2

Schemafil: GetUnitResponder_2.2.xsd

GetUnitResponder_2.2_ext.xsd definierar elementet financingOrganization och importeras och används i schemat för interaktionen enligt följande:

EXT-filens namespace “urn:riv:infrastructure:directory:organization:GetUnitResponder:2.2'“ ges alias m1, och med namespace beskrivet tvåställigt, men target namespace för hela schemat sätts enbart på huvudversionen 2. ( Detta görs i schemataggen, alias är schemaavgränsat så det ska inte bli en konflikt med det m1 som definieras i domänschemat ovan)

EXT-schemafilerna importeras till huvudfilen.

<xs:import namespace='urn:riv:infrastructure:directory:organization:GetUnitResponder:2.2'    schemaLocation="GetUnitResponder_2.2_ext.xsd" />

 (OBS! schemafilen nedan är avkortad till att endas innefatta förändrade typer)

Därefter infogas det nya elementet som referens i UnitType som utökas och där används namespace alias (m1) för att klienter med olika versioner ska kunna identifiera de namespace som de känner till (alias används för att öka läsbarheten, det går tekniskt att använda det fullständiga namespacet).

Och de utökade typerna har då heller inte längre ANY attributet.

 

<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:tns='urn:riv:infrastructure:directory:organization:GetUnitResponder:2' xmlns:m1='urn:riv:infrastructure:directory:organization:GetUnitResponder:2.2' xmlns:core='urn:riv:infrastructure:directory:organization:2' targetNamespace='urn:riv:infrastructure:directory:organization:GetUnitResponder:2' elementFormDefault='qualified' attributeFormDefault='unqualified' version='2.2'> <xs:import schemaLocation='../../core_components/infrastructure_directory_organization_2.1.xsd' namespace='urn:riv:infrastructure:directory:organization:2'/> <xs:import namespace='urn:riv:infrastructure:directory:organization:GetUnitResponder:2.2' schemaLocation="GetUnitResponder_2.2_ext.xsd"/> <xs:element name='GetUnit' type='tns:GetUnitType'/> <xs:element name='GetUnitResponse' type='tns:GetUnitResponseType'/> <!-- avkortad schemafil för läsbarhet --> <xs:complexType name='UnitType'> <xs:sequence> <xs:element name="alternateName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="alternateText" type="xs:string" minOccurs="0"/> <xs:element name="businessClassification" type="tns:BusinessClassificationType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="businessType" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="careType" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="countyName" type="xs:string" minOccurs="0"/> <xs:element name="countyCode" type="xs:string" minOccurs="0"/> <xs:element name="description" type="xs:string" minOccurs="0"/> <xs:element name="directoryContact" type="xs:string" minOccurs="0"/> <xs:element name="displayOption" type="xs:string" minOccurs="0"/> <xs:element name="dropInHour" type="core:TimeSpanType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="mail" type="xs:string" minOccurs="0"/> <xs:element name="facsimileTelephoneNumber" type="core:TelephoneNumberType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="geographicalCoordinatesRt90" type="tns:GeoCoordRt90Type" minOccurs="0"/> <xs:element name="geographicalCoordinatesSWEREF99" type="tns:GeoCoordSWEREF99Type" minOccurs="0"/> <xs:element name="healthCareArea" type="xs:string" minOccurs="0"/> <xs:element name="destinationIndicator" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="unitHsaId" type="xs:string"/> <xs:element name="jpegPhoto" type="xs:string" minOccurs="0"/> <xs:element name="jpegLogotype" type="xs:string" minOccurs="0"/> <xs:element name="labeledUri" type="xs:string" minOccurs="0"/> <xs:element name="location" type="xs:string" minOccurs="0"/> <xs:element name="webPage1177" type="xs:string" minOccurs="0"/> <xs:element name="management" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="municipalityName" type="xs:string" minOccurs="0"/> <xs:element name="municipalityCode" type="xs:string" minOccurs="0"/> <xs:element name="unitName" type="xs:string"/> <xs:element name="patientInformation" type="xs:string" minOccurs="0"/> <xs:element name="postalAddress" type="core:AddressType" minOccurs="0"/> <xs:element name="postalCode" type="xs:string" minOccurs="0"/> <xs:element name="priceInformation" type="xs:string" minOccurs="0"/> <xs:element name="publicName" type="xs:string"/> <xs:element name="relatedUnitHsaId" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="route" type="xs:string" minOccurs="0"/> <xs:element name="smsTelephoneNumber" type="core:TelephoneNumberType" minOccurs="0"/> <xs:element name="street" type="xs:string" minOccurs="0"/> <xs:element name="surgeryHour" type="core:TimeSpanType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="switchboardNumber" type="core:TelephoneNumberType" minOccurs="0"/> <xs:element name="telephoneHour" type="core:TimeSpanType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="telephoneNumber" type="core:TelephoneNumberType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="textTelephoneNumber" type="core:TelephoneNumberType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="unitExtraInformation" type="xs:string" minOccurs="0"/> <xs:element name="unitFunction" type="tns:UnitFunctionType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="unitTemporaryInformation" type="core:DateSpanType" minOccurs="0"/> <xs:element name="visitingHour" type="core:TimeSpanType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="visitingRuleAge" type="core:AgeSpanType" minOccurs="0"/> <xs:element name="referralRules" type="xs:string" minOccurs="0"/> <xs:element name="visitingRules" type="xs:string" minOccurs="0"/> <xs:element name="unitStartDate" type="xs:dateTime" minOccurs="0"/> <xs:element name="unitEndDate" type="xs:dateTime" minOccurs="0"/> <xs:element name="feignedUnit" type="xs:boolean" minOccurs="0"/> <xs:element ref="m1:financingOrganization" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <!-- avkortad schemafil för läsbarhet --> </xs:schema>

 

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:tns="urn:riv:infrastructure:directory:organization:GetUnitResponder:2.2"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:riv:infrastructure:directory:organization:GetUnitResponder:2.2"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="2.2">

<xs:element name="financingOrganization" type="xs:string"/>

</xs:schema>

 

 

Hela källkoden för exemplet nedan finns här:

https://bitbucket.org/rivta-domains/riv.infrastructure.directory.organization

NOTERA: utöver ovanstående exempel så har domänen gjort ytterligare versionsuppdateringar av GetUnit interaktionen (2.3 och 2.4). Gången kring 2.3 är formellt lite felaktig, eftersom samma attribut utökades två gånger, men det fastställdes aldrig någon version 2.3 och det ska således inte finnas någon konsument eller producent på den version så därför fungerar det rent praktiskt att utöka UnitType två gånger och ändå vara bakåtkompatibel (det korrekta hade varit att 2.3 skulle innefattat all fyra objekten i 2.3 och 2.4)