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

ARK_0006

2015-12-17

 

 

...

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

...

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:


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


Kodblock
<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 


Kodblock
<?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 


Kodblock
<?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

 


Kodblock
<?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 


Kodblock
<?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 


Kodblock
<?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 


Kodblock
<?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>