Jämförda versioner

Nyckel

  • Dessa rader lades till.
  • Denna rad togs bort.
  • Formateringen ändrades.
Kommentera: Reverted from v. 1

 

 

 

 

 

 

 

 

 


 

RIV Tekniska Anvisningar 2.1

Domänschema

Version 2.1.2

ARK_0006

2015-12-17

 

 


 

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.se

 

 

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

 

 

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

 

 

 

1        Inledning

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

...

Detta dokument är publicerade 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 Landsting) anges (men inte på ett sätt som antyder att de godkänt eller rekommenderar din användning av verket).

 

1.4         Referenser

Ref

Dokument

Beskrivning och ev. webbadress

Ansvarig

[R1]          

Beskrivning av ”Venetian Blind”

Dokumentet beskriver det designmönster som tillämpas för XML Schema design i denna anvisning.

Webblänk till hemsidan:

http://www.xfront.com/GlobalVersusLocal.html

Okänd.

[R2]          

Översikt RIV Tekniska Anvisningar

Bakgrund, motiv, krav samt de principer som ligger till grund för utvecklingen av denna anvisning.

http://rivta.se/documents/ARK_0001/

Arkitekturledningens tekniska expertgrupp, SKL

[R3]          

W3C-rapport om utökningsbara XML-scheman

Beskriver problemställningar och strategier för design av meddelanden som ger bra stöd för versionshantering. Versioneringsstrategin som beskrivs i denna översikt och som tillämpas i RIV Teknisk Anvisning Tjänsteschema är baserad på strategi nr 2 i denna rapport.

http://www.w3.org/2001/tag/doc/versioning-xml

W3C

[R4]          

WS-I Basic Profile

”Defines the WS-I Basic Profile 1.1, consisting of a set of non-proprietary Web services specifications, along with clarifications, refinements, interpretations and amplifications of those specifications which promote interoperability”

http://www.ws-i.org/Profiles/BasicProfile-1.1.html

The Web Services Interoperability Organization och ISO

 

2              Meddelanderegler

...

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

...

Attributet targetNamespace på schema-elementet skall ha ett värde som definieras av följande regel: urn:riv:${tjänsteDomän}:${m}

 

Motiv: Användningen av major-version i namnrymden är en av att följa fastslagen versioneringsstrategi [R3]. 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 [R4] regel om ”operation signature”. Det också generellt goda förutsättningar för att implementera generella bryggor och tjänsteväxlar

...

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 [R3].

Exempel:<xs

 <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

...

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.

 

 

 

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

...

  • 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: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 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>