RIV Tekniska Anvisningar Domänschema
RIV Tekniska Anvisningar Domänschema
Version 2.1.8 ARK_0006 2024-09-18 |
Innehållsförteckning
Versionshistorik | |||
Utgåva | Revision Datum | Beskrivning | Ändringarna gjorda av |
A | 2011-10-19 | Fastställd revision | Marcus Krantz |
B | 2012-01-03 | Fastställd revision Uppdaterat dokumentet i och med byte av projektplats från Osor till Google code. Enbart ändringar under rubriken Referenser. | Hans Thunberg |
C | 2013-06-19 | Ny revision efter CeHis nya processer | 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 |
2.1.1 | 2014-09-26 | Lagt över i Inera mall och publiserat. | Lennart Eriksson |
2.1.2 | 2015-12-17 | Uppdaterat länkar i referenstabell | Mattias Nordvall |
2.1.3 | 2018-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 |
2.1.4 | 2019-11-20 | Fö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 |
2.1.5 | 2019-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 |
2.1.6 | 2020-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 |
2.1.7 | 2021-09-09 | Obsoleta mailadresser borttagna ur revisionshistoriken. Ersatta med namn | Anders Malmros |
2.1.8 | 2024-09-18 | Förbättrat läsbarhet genom bättre formatering och referenser i löptext | Björn Hedman |
1. Inledning
Detta dokument beskriver regelverket RIV Tekniska Anvisningar Domänschema 2.1.
1.1 Målgrupp
Denna anvisning riktar sig till dem som ska specificera XML-scheman för tjänstekontrakt i en nationell tjänstedomän. Anvisningen innehåller endast regeluppsättningen. För bakgrund, motiv, krav samt de principer som ligger till grund för framtagning av reglerna hänvisas till RIV Tekniska Anvisningar - Översikt 2.0
1.2 Syfte
Syftet med denna anvisning är att beskriva designregler och namngivningsregler för de meddelandetyper som skall användas inom en tjänstedomän.
1.3 Tillgänglighet
Detta dokument är publicerat under licensen Creative Commons CC-BY-SA (http://creativecommons.org/licenses/by-sa/2.5/se/ ).
Det betyder att du fritt får kopiera, distribuera och skapa bearbetningar av anvisningarna under förutsättning att upphovsmannen Sveriges Kommuner och Regioner anges, men inte på ett sätt som antyder att de godkänt eller rekommenderar din användning av verket.
2. Meddelanderegler
Regel #1, designmönster för domänscheman
"Venetian Blind" skall användas som designmönster för domänscheman.
http://www.xfront.com/GlobalVersusLocal.html
Designmönstret Venetian Blind innebär följande:
Den interna strukturen i ett meddelande byggs upp med hjälp av globalt deklarerade typer. Med ”globalt deklarerade” menas deklarationer som görs direkt under schema-elementet.
Endast rotelementet är deklarerat som ett globalt element. I web-service-fallet innebär det att request- och response-elementen är globalt deklarerade element medan resten är typer.
Anm. I vissa fall kan även andra element än request och response behöva vara globala, t ex används element-referenser till globala element i importerade scheman för att stödja versioneringsstrategin, se nedan.
Motiv: Interoperabilitet, WS-I Basic Profile
Regel #2, namn på xsd-filen
Schema-filen för ett domänschema skall namnges enligt följande regel: ${tjänstedomän}_${m.n}.xsd
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
Attributet targetNamespace på schema-elementet skall ha ett värde som definieras av följande regel: urn:${domänPrefix}:${tjänsteDomän}:${majorVersion}
Namngivningsregler för namespace är formulerade enligt följande uppställning:
Tjänstedomänens prefix: ${domänPrefix}, t ex riv eller riv-application
Tjänstedomänens namn: ${tjänsteDomän}, t ex clinicalprocess:activity:request
Domänschemats version: ${majorVersion}, tex 1
Reglerna för namnsättning av domän finns mer utförligt beskrivna i dokumentet för domännamnsättning
Motiv:
Domänprefixet ska signaler vilken organisation som ansvarar för support och utveckling av respektive domän.
NOTERA: det kan dock finnas domäner som har en annan ägare än det som angetts i prefixet, detta sker i de fall som ägandeskapet ändrats utan att hela domänen ska re-faktureras.
Användningen av major-version i namnrymden är en av att följa fastslagen versioneringsstrategi. Att ha en unik namnrymd per tjänstekontrakt (tjänsteinteraktion + roll) är en förutsättning för att följa WS-I Basic Profiles regel om ”operation signature” (http://www.ws-i.org/Profiles/BasicProfile-1.1.html).Det också generellt goda förutsättningar för att implementera generella bryggor och tjänsteväxlar
Exempel:
Nationell domän
urn:riv:itintegration:monitoring:1
Applikationsdomän
urn:riv-application:sob:apps:resident:1
Extern domän
urn:riv-lv.lv.reporting.pharmacovigilance
Regel #4, användning av schema-attributet version
Schema-attributet version skall sättas till "m.n"
Motiv: Då namnrymden inte innehåller minor-version, ger detta en dokumentation som följer intentionen med attributet.
Exempel: <schema ... version="1.0>
Regel #5, användning av any-element för utökningsbarhet
För att uppnå framåtkompatibilitet skall ett xsd:any element läggas in sist i alla komplexa typer som ska kunna utökas, exempel:
Motiv: För att uppnå framåtkompatibilitet måste man "förbereda" sina XML scheman för framtida utökningsbarhet. Detta är en del av den tillämpade strategin för versionering.
Exempel:
<xs:complexType name="SomeType">
<xs:sequence>
<xs:element name="someElement" type="xsd:string" />
<xs:element name="someOtherElement" type="xsd:int" />
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" namespace="##other"/>
</xs:sequence>
</xs:complexType>
Regel #6, nya element i utökningsschema
För att lägga till nya element och skapa en ny minor-version av ett domänschema, skall följande regler följas:
Det nya elementet läggs till i befintligt schema och ersätter any-elementet i den komplexa typ som ska utökas. Detta nya element har ingen typ, utan refererar (xsd:ref=”…”) element som är rotelement i en ny schema-fil (utöknings-schema)
Exempel
<xs:element ref="m1:financingOrganization" minOccurs="0" maxOccurs="unbounded" />
För att ändringen ska vara bakåtkompatibel så måste det nya elementet ha attributet minoccurs=”0”. 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.
Det nya 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:${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 W3C Extending and Versioning Languages: XML Languages . Se http://rivta.se/documents/ARK_0001/ för ytterligare bakgrund.
Se även Bilaga 1 och 2 för exempel
Regel #7 Nationella tecken
Domänscheman ska inte använda nationella tecken i såväl elementnamn, attributnamn som vid listning av värdemämngder för uppräkningstyper. Följande exempel bör därför undvikas:
<xs:simpleType name=”Å”>
<xs:annotation>
<xs:documentation>…</xs:documentation>
</xs:annotation>
<xs:restriction base=”xs:string”>
<xs:enumeration value=”Återställas helt” />
<xs:enumeration value=”Återställas delvis” />
<xs:enumeration value=”Det går inte att bedöma” />
</xs:restriction>
</xs:simpleType>
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.