|
| 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: | Okänd. |
[R2] | Översikt RIV Tekniska Anvisningar | Bakgrund, motiv, krav samt de principer som ligger till grund för utvecklingen av denna anvisning. | 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. | 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” | 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> |