Jämförda versioner

Nyckel

  • Dessa rader lades till.
  • Denna rad togs bort.
  • Formateringen ändrades.

  





RIV Tekniska Anvisningar 2.1

Domänschema

Version 2.1.37

ARK_0006

20182021-0509-0809




 

Innehållsförteckning

Utgåvehistorik

...

Utgåva

Revision Datum

Beskrivning

Ändringarna gjorda av

Definitiv revision fastställd av

PA1

2011-06-27

Dokumentet skapat

Marcus .krantz@callistaenterprise.seKrantz


A

2011-10-19

Fastställd revision


Arkitekturledningens tekniska expertgrupp, Center för eHälsa i samverkan

PB1

2011-12-14

Uppdaterat dokumentet i och med byte av projektplats från Osor till Google code. Enbart ändringar under rubriken Referenser.hans.thunberg@callistaenterprise.se

Hans Thunberg


B

2012-01-03

Fastställd revision


Arkitekturledningens tekniska expertgrupp, Center för eHälsa i samverkan

C

2013-06-19

Ny revision efter CeHis nya processer

Arkitektur och regelverk, Center för eHälsa i samverkan

Arkitektur och regelverk, Center för eHälsa i samverkan

2.1.1

2014-08-20

Förtydligat regel #6 och flyttat XML-exempel till bilagor.

Mattias Nordvall, Inera


2.1.1

2014-09-26

Lagt över i Inera mall och publiserat.

Lennart Eriksson, Inera


2.1.2

2015-12-17

Uppdaterat länkar i referenstabell

Mattias Nordvall, Inera


2.1.32018-05-08

Lagt till att även domänprefix kan ha olika värden, var förut hårt satt till "riv:"

Förtydligat namnsättningsregler och struktur för domän resp interaktionsnivå

Ändrat regel #4 från bör till skall

Björn Hedman, Inera
2.1.42019-11-20Förtydligat att domänprefix används för att signalera ansvarig domän men att ägandeskapet av en domän kan ändras utan att domänens namnrymd ändras.Björn Hedman, inera
2.1.52019-12-20

Förtydligat hur hantering av minor uppdateringar ska ske

regel 2, namsättning fil

ändrat kapitel med exempel till att hänsvisa till bilagor

Ändrat felaktig benämning i regel 6 (bytt tjänsteschema till domänschema)

Björn Hedan, Inera
2.1.62020-09-24

Generaliserat ”Notera”-information från ”det kan dock finnas domäner som har en extern ägare som ändå har riv som prefix” till ”det kan dock finnas domäner som har en annan ägare än det som angetts i prefixet” eftersom det även kan finnas fall där externa domäner som inte har riv som prefix ägs av Inera. Förtydligat att ANY-elementet kan bytas ut mot enbart ett element, rättat domän-prefix och små punkterings och skrivfel. Lagt till beskrivning för hur versionsförändring ska ske när komplexa typer, som definierats i domänschemat, ska ändras.

Ranjdar Fallyih, Thomas Siltberg, Claudia Ehrentraut (Inera)
2.1.72021-09-09

Obsoleta mailadresser borttagna ur revisionshistoriken. Ersatta med namn

Anders Malmros



1        Inledning

Detta dokument beskriver regelverket RIV Tekniska Anvisningar Domänschema 2.1.

...

Motiv: Att ha med versionsnummer i namnet på källkodsfiler är generellt sett något man försöker undvika då det försvårar användning av versionshanteringsverktyg (t ex Subversion, Microsoft Visual Studio). I fallet med domänschema behöver man dock kunna hantera flera olika versioner samtidigt (i byggsystem mm) och för att underlätta den hanteringen ingår versionsnumret i filnamnet på tjänstekontrakt och tjänstescheman. I normalfallet ersätts filen av den nyare versionen.

Exempel: Första version : itintegration_monitoring_1.0.xsd

Efter minoruppdatering : itintegration_monitoring_1.1.xsd


Regel #3, namn på target namespace

...

NOTERA: det kan dock finnas domäner som har en extern annan ägare som ändå har riv som prefixän det som angetts i prefixet, detta sker i de fall som ägandeskapet ändrats utan att hela domänen ska re-faktureras.

...

Regel #6, nya element i utökningsschema

För att lägga till nya element och skapa en ny minor-version av ett tjänsteschemadomänschema, skall följande regler följas:

  • De Det nya elementen läggs elementet läggs till i befintligt schema närmast före any-elementet i den komplexa typ som ska utökas. Dessa Detta nya element har ingen typ, utan refererar (xsd:ref=”…”) element som är rotelement i en ny schema-fil (utöknings-schema)
    • Exempel  <xs:elementref="m1:financingOrganization"minOccurs="0"maxOccurs="unbounded"/>
  • För att ändringen ska vara bakåtkompatibel så måste de det nya elementen elementet ha attributet minoccurs=”0”. Det leder i sin tur att any-elementet måste tas bort. Detta för att uppfylla kravet på Unique Particle Attribution i Xml Schema 1.0. Följden blir att denna komplexa typ inte kan förändras fler gånger på ett bakåtkompatibelt sätt.
  • De Det nya elementen elementet definieras i en ny schema-fil (utökningsschema) med ett namn som följer följande regel: ${tjänstedomän}_${m.n}_ext.xsd
  • Utökningsschemat ska ha en targetNamespace enligt följande regel: urn:riv${domänPrefix} :${tjänsteDomän}:${m.n}
  • Domänschemat importerar (xsd:import) utöknings-schemat som ges namnrymdsalias enligt följande regel: m${n}
    • Exempel: xmlns:m1='urn:riv:infrastructure:directory:organization:GetUnitResponder:2.2'
  • Domänschemats versionsattribut ändras till den nya minor-versionen.
  • I nästa major-version av tjänsteschemat flyttas element-deklarationerna in från alla utökningsscheman (det finns ett för varje minor-version som tilkommit sedan förra major-versionen skapades). Dessutom läggs eventuellt borttagna any-element tillbaka, enligt regel #5.
  • När komplexa typer som definierats i domänschema ska ändras så sker versionsförändringen enligt följande:

    • Nya (minor) versionen av domänschemat ersätter tidigare fil.

    • Endast interaktioner som får strukturell påverkan av ändringar i domänschema behöver ändra version.

    • Med strukturell påverkan menas att interaktionen använder element som förändrats i domänschemat.

    • Övriga interaktioners schemafiler importerar förvisso nya schemat så det sker en förändring av importen i filen men inte interaktionens struktur och därför ökas inte version i interaktionen eller filnamn.

    • Tidigare versioner av domänschemat försvinner.

Motiv: Detta förfarande är en konsekvens av vald strategi för versionering [R3]. Se [R2] för ytterligare bakgrund.

Se även bilaga Bilaga 1 och 2 för exempel på utökningar.

Underordnade sidor (visning av underordnade)

Regel #7 Nationella tecken

...

Motiv: För att undvika interoperabilitetsproblem bör man ej använda sig av nationella tecken när man definierar typer som kommer att användas i ett tjänstekontrakt. Ofta uppstår annars fel vid kodgenerering från schemat.

3         Bilaga 1: Exempel på bakåtkompatibel utökning

Detta är ett verkligt exempel från CRM-domänen där följande förändringar görs:

  • Tre nya icke-obligatoriska element läggs till.
  • Any-elementet tas bort (pga Unique Particle Attribution)

Ny minorversion: crm_scheduling_1.1.xsd 

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:tns="urn:riv:crm:scheduling:1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:m1="urn:riv:crm:scheduling:1.1"

targetNamespace="urn:riv:crm:scheduling:1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1">

<xs:import namespace="urn:riv:crm:scheduling:1.1" schemaLocation="crm_scheduling_1.1_ext.xsd"/>

<xs:complexType name="SubjectOfCareType">

     <xs:sequence>

        <xs:element name="phone" type="xs:string" minOccurs="0"/>

        <xs:element name="email" type="xs:string" minOccurs="0"/>

        <xs:element name="address" type="xs:string" minOccurs="0"/>

        <xs:element name="coaddress" type="xs:string" minOccurs="0"/>                       <xs:element ref="m1:firstName" minOccurs="0"/>

        <xs:element ref="m1:middleName" minOccurs="0"/>

        <xs:element ref="m1:lastName" minOccurs="0"/>

        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

     </xs:sequence>

</xs:complexType>

</xs:schema>

Utökningsschema med element som tillkommit i 1.1: crm_scheduling_1.1_ext.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:tns="urn:riv:crm:scheduling:1.1"   xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:riv:crm:scheduling:1.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1">

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

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

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

</xs:schema>

Vid nästa major-version görs följande förändringar:

  • De tillagda elementen flyttas från utökningsschemat till huvudschemat
  • De tillagda elementen kan nu göras obligatoriska
  • Any-elementet läggs tillbaka

Ny major-version: crm_scheduling_2.0.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:tns="urn:riv:crm:scheduling:2" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:riv:crm:scheduling:2" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.0">

<xs:complexType name="SubjectOfCareType">

     <xs:sequence>

        <xs:element name="phone" type="xs:string" minOccurs="0"/>

        <xs:element name="email" type="xs:string" minOccurs="0"/>

        <xs:element name="address" type="xs:string" minOccurs="0"/>

        <xs:element name="coaddress" type="xs:string" minOccurs="0"/>                       <xs:element name="firstName" type=”xs:string” minOccurs="1"/>

        <xs:element name="middleName" type=”xs:string” minOccurs="0"/>

        <xs:element name="lastName" type=”xs:string” minOccurs="1"/>

        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

     </xs:sequence>

</xs:complexType>

</xs:schema>

4         Bilaga 2: Exempel på icke-bakåtkompatibel utökning

Detta är ett fingerat exempel från CRM-domänen där följande tre nya element läggs till. Utökningen blir icke-bakåtkompatibel eftersom flera av elementen är obligatoriska (minoccurs=”1”). Om åtminstone det sista elementet är obligatoriskt så kan any-elementet behållas för framtida bruk.

Ny minorversion: crm_scheduling_1.1.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:tns="urn:riv:crm:scheduling:1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:m1="urn:riv:crm:scheduling:1.1" targetNamespace="urn:riv:crm:scheduling:1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1">

<xs:import namespace="urn:riv:crm:scheduling:1.1" schemaLocation="crm_scheduling_1.1_ext.xsd"/>

<xs:complexType name="SubjectOfCareType">

     <xs:sequence>

        <xs:element name="phone" type="xs:string" minOccurs="0"/>

        <xs:element name="email" type="xs:string" minOccurs="0"/>

        <xs:element name="address" type="xs:string" minOccurs="0"/>

        <xs:element name="coaddress" type="xs:string" minOccurs="0"/>                       <xs:element ref="m1:firstName" minOccurs="1"/>

        <xs:element ref="m1:middleName" minOccurs="0"/>

        <xs:element ref="m1:lastName" minOccurs="1"/>

        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

     </xs:sequence>

</xs:complexType>

</xs:schema>

Utökningsschema med element som tillkommit i 1.1: crm_scheduling_1.1_ext.xsd

<?xml version="1.0" encoding="UTF-8"?>

...

.

...

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

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

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

</xs:schema>

Vid nästa major-version integreras elementen från mellanliggande utökningsscheman i huvudschemat: crm_scheduling_2.0.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:tns="urn:riv:crm:scheduling:2" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:riv:crm:scheduling:2" elementFormDefault="qualified" attributeFormDefault="unqualified" version="2.0">

<xs:complexType name="SubjectOfCareType">

     <xs:sequence>

        <xs:element name="phone" type="xs:string" minOccurs="0"/>

        <xs:element name="email" type="xs:string" minOccurs="0"/>

        <xs:element name="address" type="xs:string" minOccurs="0"/>

        <xs:element name="coaddress" type="xs:string" minOccurs="0"/>                       <xs:element name="firstName" type=”xs:string” minOccurs="1"/>

        <xs:element name="middleName" type=”xs:string” minOccurs="0"/>

        <xs:element name="lastName" type=”xs:string” minOccurs="1"/>

        <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>

     </xs:sequence>

</xs:complexType>

</xs:schema>

...