xml schema design - trivadis.com · soa guidelines – xml schema design version 1.0 seite 2/46...
TRANSCRIPT
SOA Guidelines – XML Schema Design
Version 1.0 Seite 1/46
http://www.ibm.com/developerworks/xml/library/ws-tip-headers/index.html
SOA Guidelines
XML Schema Design
Matthias Furrer Principal Consultant
SOA Guidelines – XML Schema Design
Version 1.0 Seite 2/46
Dokument Information
Status * Abgeschlossen
Projektname SOA Guidelines
Autor Matthias Furrer
Initiale mfu
Bearbeitende Matthias Furrer
Prüfende Michel Hautle, Guido Schmutz, Markus Zehnder
Genehmigende
Verteiler
* In Arbeit, In Prüfung, Abgeschlossen
Änderungskontrolle, Prüfung, Genehmigung
Version Datum Beschreibung, Bemerkung Name oder Rolle
0.9 29.05.2015 Draft Version Matthias Furrer
1.0 02.07.2015 Finale Version Matthias Furrer
SOA Guidelines – XML Schema Design
Version 1.0 Seite 3/46
Inhaltsverzeichnis
1 Einführung 6
1.1 XML Version 1.1 .................................................................................................. 6
1.2 Generelle Konventionen die in diesem Dokument verwendet werden .................. 7
1.2.1 Formatierungsarten für zusammengesetzte Wörter bzw. Sätze ........................... 9
2 Ziele 10
2.1 Anforderungen ................................................................................................... 10
2.2 Leitsätze ............................................................................................................ 10
3 Generelle XML Design Regeln 12
3.1 Aufbau von XML Dokumenten ........................................................................... 12
3.1.1 XML Schema ..................................................................................................... 12
3.1.2 XML Dokumentinstanz ....................................................................................... 13
3.2 Schemaweit gültige Standards .......................................................................... 14
3.2.1 Sprache von Typen, Elementen und Attributen .................................................. 14
3.2.2 XML Deklarationen ............................................................................................ 14
3.2.3 Schema Attribute ............................................................................................... 14
3.2.4 Kommentare und Dokumentation ...................................................................... 15
3.3 Verwendung von Namensräumen (Namespaces) .............................................. 16
3.3.1 Schema Namespace ......................................................................................... 17
3.3.2 Element Namespace ......................................................................................... 17
3.3.3 Attribut Namespace ........................................................................................... 18
3.4 Logische und physische Strukturierung von XML Dokumenten ......................... 19
3.4.1 Logische Strukturierung ..................................................................................... 19
3.4.2 No Namespace .................................................................................................. 21
3.4.3 Single Namespace............................................................................................. 21
3.4.4 Multiple Namespace .......................................................................................... 22
3.5 Versionierung von XML Dokumenten ................................................................ 22
4 Einschränkungen für den Schema-Entwurf 23
4.1 Typen- und Struktur Definitionen im Schema ..................................................... 23
4.2 Element-Definitionen im Schema ....................................................................... 23
4.3 Attributs-Definitionen im Schema ....................................................................... 24
4.4 Attribute für die Verwendung in Dokumentinstanzen.......................................... 25
4.4.1 Lokale Typendefinition ....................................................................................... 25
4.4.2 Schema ohne Namensräume ............................................................................ 25
4.4.3 Empty Elements ................................................................................................ 25
5 Erweiterte Regeln zum Design 26
SOA Guidelines – XML Schema Design
Version 1.0 Seite 4/46
5.1 Lokale vs. Globale Deklaration .......................................................................... 26
5.1.1 Design Patterns ................................................................................................. 26
5.1.2 Design Richtlinien .............................................................................................. 30
5.2 Elemente vs. Typen ........................................................................................... 31
5.2.1 Referenzierung von Komponenten aus anderen Namensräumen ...................... 31
5.3 Attribute vs. Elemente ........................................................................................ 34
6 Namenskonventionen 35
6.1 Namens-Segmente in der Namensgebung von Elementen, Typen und Attributen ........................................................................................................... 37
6.1.1 Suffixe zur Bezeichnung des Datentyps ............................................................. 37
6.1.2 Terminologie der Benennung von Businessobjekten ......................................... 41
7 Links 42
7.1 XML-Spezifikationen .......................................................................................... 42
7.2 Referenzen ........................................................................................................ 43
8 Anhang A – Schema Beispiel 44
SOA Guidelines – XML Schema Design
Version 1.0 Seite 5/46
Abbildungsverzeichnis
Abbildung 1: Die XML Deklaration ........................................................................................................ 12
Abbildung 2: Deklaration der Schema-Attribute .................................................................................... 12
Abbildung 3: Definition der Strukturen und Elemente ........................................................................... 13
Abbildung 4: XML Dokumentinstanz ..................................................................................................... 13
Abbildung 5: Lokale Deklaration – „Russian Doll” ................................................................................. 26
Abbildung 6: Globale Deklaration – „Salami Slice”................................................................................ 27
Abbildung 7: Globale Deklaration mit Typen – „Venetian Blind” ........................................................... 28
Abbildung 8: Globale Deklaration der Elemente und Typen– „Garden of Eden” .................................. 29
SOA Guidelines – XML Schema Design
Version 1.0 Seite 6/46
1 Einführung
Extensible Markup Language (XML) ist eine Sprache zur Beschreibung des Inhaltes eines Dokumentformates und dient zur strukturierten Darstellung von Daten in einem maschinell bearbeitbaren Format. XML ist definiert vom in den XML 1.0 Spezifikationen vom World Wide Web Consortium (W3C – http://www.w3.org /).
Die XML Spezifikationen definiert ein XML als „wohlgeformt” (oder englisch „well-formed”) wenn es die definierten Syntax-Regeln einhält. Wird XML zum Datenaustausch verwendet, empfiehlt es sich darüber hinaus Regeln zu definieren, welche die formale Grammatik eines Dokumentes beschreibt und damit die syntaktische Struktur von XML Dokumentinstanzen definiert. Dies geschieht heute am meisten verbreitet mit Hilfe von XML Schema – weitere gebräuchliche – in diesem Dokument jedoch nicht behandelte - Schemasprachen sind Schematron oder RELAX NG. Der Standard definiert ein XML-Dokument als gültig (oder englisch valid), wenn es wohlge-formt ist, den Verweis auf eine Grammatik enthält und das durch die Grammatik beschriebe-ne Format einhält.
1.1 XML Version 1.1
Die Zweite Version von XML – 1.1. wurde 2004 veröffentlicht und enthält einige spezifische Erweiterungen:
Unterstützung von Version 4.0 von Unicode Zusätzliche Zeichen in Namen sind erlaubt Zusätzliche Zeilenende-Zeichen (für EBCDIC Plattformen sind erlaubt)
XML 1.1 ist nicht sehr weit verbreitet und wird nur zur Benutzung empfohlen wenn die spezi-fischen Erweiterungen benötigt werden.
Erschwerend kommt dazu, dass die Spezifikationen für XML 1.1 noch nicht definitiv verab-schiedet sind (http://www.w3.org/TR/xmlschema11-1/ - Stand Juli 2011 „Candiate Recom-mendation”) und noch nicht alle XML-Verarbeitungsprogramme Version 1.1 korrekt verarbei-ten. Daher wird hier generell empfohlen die Version 1.0 einzusetzen.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 7/46
1.2 Generelle Konventionen die in diesem Dokument v erwendet werden
Sämtliche Richtlinien werden in diesem Dokument zusätzlich in tabellarischer Form be-schrieben, wie nachfolgend dargestellt.
<Identifikations-Code> <Beschreibung der Regel> < Regel-Gruppe>
• Identifikations-Code
Jede Regel, die in dem Dokument beschrieben wird, wird durch einen, innerhalb des Dokumentes eindeutigen Identifikationscode gekennzeichnet. Der Identifikationscode besteht aus einem dreistelligen Präfix und einer vierstelligen Regelnummer im fol-genden Format:
<präfix>- <regel-nummer>
Folgende Präfixe werden zurzeit verwendet :
Präfix Beschreibung
GEN Generelle Entwurfsrichtlinie
NMR Namenskonvention (File, Tag, Namespace, usw.)
BEP Best Practice
SOA Guidelines – XML Schema Design
Version 1.0 Seite 8/46
Die Regelnummern werden übergreifend vergeben (ausser IBP) und sind nicht geordnet. Die nächste freie Regelnummer ist: 092.
• Beschreibung der Regel
Eine möglichst kurze und prägnante Beschreibung der Regel, mit der Verwendung der un-terschiedlichen Regeltypen im Text
• Regel Gruppe
Die Regeln werden nach den Konventionen, die vom Request for Comment 2119 [REQ_COMM_2119] definiert wurden, in verschiedene, nachfolgend aufgelisteten Gruppen aufgeteilt.
MUST Bedeutet eine absolute Anforderung, die zwingend eingehalten wer-den muss.
MUST NOT Bedeutet ein absolutes Verbot, d.h. es darf auf keinen Fall verwendet werden.
SHOULD Bedeutet, dass es gute Gründe geben kann, die entsprechende Regel zu ignorieren. Die Auswirkungen müssen klar sein und gewichtet werden, bevor ein alternativer Weg beschritten wird.
SHOULD NOT
Bedeutet, dass es gute Gründe geben kann, dass das von der Regel beschrieben Verhalten akzeptabel oder sogar hilfreich ist. Die Auswir-kungen müssen klar sein und gewichtet werden, bevor das entspre-chende Verhalten implementiert wird.
MAY Bedeutet, dass der durch die Regel beschriebene Begriff wirklich optional ist. Es ist Sache des Anwenders, ob er die Regel anwendet oder nicht.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 9/46
1.2.1 Formatierungsarten für zusammengesetzte Wörte r bzw. Sätze
Folgende Formatierungsarten werden in diesem Dokument verwendet:
o UpperCamelCase (UCC) – Upper Camel Case ist eine Art der Repräsentation von zusammengesetzten Wörtern oder Sätzen, bei der die einzelnen Wörter ohne Zwi-schenraum zusammengefügt werden, wobei jeweils der erste Buchstabe eines Wor-tes in Grossbuchstaben geschrieben werden: „CreditCardExpirationDate”
o LowerCamelCase (LCC) – Lower Camel Case ist eine Art der Repräsentation von zusammengesetzten Wörtern oder Sätzen, bei der die einzelnen Wörter ohne Zwi-schenraum zusammengefügt werden, wobei ausser beim ersten Wort jeweils der ers-te Buchstaben eines Wortes in Grossbuchstaben geschrieben werden: „creditCa-rdExpirationDate”
o LowerDashed (LD) – Lower Dashed ist eine Art der Repräsentation von zusam-mengesetzten Wörtern oder Sätzen, bei der die einzelnen Wörter mit einem Binde-strich-Buchstaben getrennt zusammengefügt werden, wobei alles in Kleinbuchstaben geschrieben wird: „credit-card-expiration-date”
SOA Guidelines – XML Schema Design
Version 1.0 Seite 10/46
2 Ziele
2.1 Anforderungen
Dieses Dokument bezieht sich insbesondere auf den Einsatz von XML und XML Schema im Zusammenhang mit dem Einsatz in Webservices und Service Orientierten Architekturen. Daher wird auf die Nutzung gewisser im XML-Standard vorhandener Funktionalitäten zur Ableitbarkeit und Erweiterbarkeit von Typendefinitionen bewusst verzichtet – diese umfassen bspw. die Strukturelemente in XML Schema wie: xsd:any , xsd:extension , xsd:redefine .
Obwohl diese zusätzliche Flexibilität in manchen Fällen nützlich sein kann, widersprechen sich diese teilweise mit der Idee von einem verbindlichen und möglichst transparenten kano-nischen Schema, welches bei umfangreicheren Integrationslösungen dringend empfohlen wird. Darüber hinaus unterstützen weiterhin nicht alle XML Sprachen wie XSLT, XQUERY die komplette typbasierende Verarbeitung.
2.2 Leitsätze
Die in diesem Dokument beschriebenen Leitsätze lehnen sich an den Design-Rules Stan-dard von United Nations Centre for Trade Facilitation and El ectronic Business [UN/CEFACT] an, welche u. a. verantwortlich für den internationalen Datenstandard EDIFACT und einer der Initiatoren von ebXML ist.
Insbesondere sind die folgenden Design Principles als Basis für die in diesem Dokument aufgeführten Richtlinien berücksichtigt:
• XML Schema Erzeugung – Die Design Richtlinien unterstützen sowohl die manuelle als auch die automatisierte Erzeugung von Schema Definitionen.
• Austausch und Nutzung in Anwendungen – Die XML Schema und daraus erzeugte XML Dokumentinstanzen sind für eine Vielfalt von Datenaustausch- und Integrations-prozessen verwendbar.
• Tool Verwendung und Support – Das Design von XML Schema ist nicht abhängig von verwendeten Werkzeugen für die Erstellung, Verwaltung oder Verarbeitung von XML Artefakten.
• Lesbarkeit – XML Dokumentinstanzen sind intuitiv lesbar und möglichst klar im Kon-text des Verwendungszwecks.
• Schema Features – Das Design von XML Schema sollte die am häufigsten unter-stützten Features der W3C XML Schema Definition Language Empfehlung verwen-den.
• Technische Spezifikationen – Namenskonventionen und Design Richtlinien basieren auf technischen Spezifikationen mit dem entsprechenden W3C Empfehlungsstatus.
• XML Schema Spezifikationen – Namenskonventionen und Design Richtlinien sind vollkommen konform mit der W3C XML Schema Definition Language Empfehlung.
• Interoperability – Die Anzahl von Möglichkeiten die gleiche Information in einem XML Schema oder Dokumentinstanz darzustellen soll möglichst niedrig gehalten werden.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 11/46
• Maintenance – Das Design von XML Schema unterstützt und erleichtert die Wartbar-keit.
• Bezug auf andere Namensräume - Abhängigkeit zu anderen Namensräumen werden mit Vorsicht verwendet.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 12/46
3 Generelle XML Design Regeln
GEN-0001 Das XML Schema MUSS der Standardstruktur folgen, wie sie in Anhang A diese Doku-
mentes definiert ist.
MUST
3.1 Aufbau von XML Dokumenten
Im Folgenden ist exemplarisch der Aufbau von XML Schema Dokumenten sowie XML Do-kumentinstanzen gemäss den Spezifikationen vom World Wide Web Consortium beschrie-ben. Dies soll zum besseren Verständnis dienen, da die nachfolgenden Kapitel jeweils auf die einzelnen hier beschriebenen Namen und Definitionen referenzieren
3.1.1 XML Schema
XML Schema, häufig als XSD abgekürzt, bezeichnet ein XML Vokabular, welches es ermög-licht andere XML Dokumente so zu beschreiben, dass mittels standardisierter Programme getestet werden kann, ob ein gegebenes Dokument den im zugeordneten Vokabular defi-nierten Regeln entspricht.
XML Schema bestehen aus einer XML-Deklaration, der Definition der Schema-Attribute sowie einer nachfolgenden Beschreibung der in referenzierenden XML Dokumentinstanzen zugelassenen Strukturen, Typen und Attributen.
3.1.1.1 XML Deklaration: Die XML Deklaration besteht normalerweise aus der Definition der verwendeten XML-Version, Angaben zur Zeichencodierung sowie allenfalls weiterer Deklarationen.
<?xml version=“1.0” encoding=“UTF-8”?>
Abbildung 1: Die XML Deklaration
3.1.1.2 Deklaration der Schema-Attribute: In den Schema Attributen werden die zu verwendenden Namensräume deklariert sowie weitere Attribute festgelegt, die als Voreinstellung für die im Schema deklarierten Datentypen und Elemente angewendet werden sollen.
<xsd:schema targetNamespace=“http://trivadis.com/sc hema/CreditCard/v1” xmlns:tns=“http://trivadis.com/schema/CreditCard/ v1” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:soabp-ct=“http://trivadis.com/schema/soabp/ common/UnqualifiedDataType/v1” elementFormDefault=“qualified” attributeFormDefau lt=“unqualified” version=“1.0”> </xsd:schema>
Abbildung 2: Deklaration der Schema-Attribute
SOA Guidelines – XML Schema Design
Version 1.0 Seite 13/46
3.1.1.3 Definition der Strukturen und Elemente: Die Schemakomponenten sind im xsd:schema Containerelement eingeschlossen und beschreiben im Wesentlichen die gültigen Strukturen, Typen und Attribute für eine referen-zierende Dokumentinstanz. Ebenfalls im Gültigkeitsbereich des Schemas befinden sich Instanzierungen zur Nachverwendung vorhandener Typen-Definitionen sowie Einbindungen von Deklarationen anderer Schemas und/oder Namensräumen.
<xsd:schema …> <xsd:import namespace=“http://trivadis.com/schema/s oabp/common/UnqualifiedDataType/v1” schemaLocation=“UnqualifiedDataType-v1.0.xsd”/> <xsd:element name=“CreditCard” type=“tns:Credit CardType”/> <xsd:complexType name=“CreditCardType”> <xsd:sequence> <xsd:element name=“CardNumber” type=“xsd: string” minOccurs=“1” /> <xsd:element name=“CardholderFirstName” t ype=“xsd:string” minOccurs=“1”/> <xsd:element name=“CardholderLastName” ty pe=“xsd:string” minOccurs=“1”/> <xsd:element name=“ExpirationMonth” type= “soabp-ct:MonthType” minOccurs=“1”/> <xsd:element name=“ExpirationYear” type=“ soabp-ct:MonthType” minOccurs=“1”/> </xsd:sequence> </xsd:complexType> </xsd:schema>
Abbildung 3: Definition der Strukturen und Elemente
3.1.2 XML Dokumentinstanz
Ein XML Dokumentinstanz besteht im Wesentlichen wiederum aus einer XML-Deklaration und beinhaltend nachfolgend die eigentlichen Nutzdaten, welche im Falle einer gewünschten Abhängigkeit von einem XML Vokabular auf das verwendete Schema und den dazugehöri-gen Namensraum referenzieren.
<?xml version=“1.0” encoding=“UTF-8” ?> <CreditCard xmlns:xsi=“http://www.w3.org/2001/XMLSc hema-instance” xsi:schemaLocation=“http://trivadis.com /schema/CreditCard/v1/CreditCard.xsd” xmlns=“http://trivadis.com/schema/Credi tCard/v1”> <CardNumber>4059 1100 0027 9143</CardNumber> <CardholderFirstName>Hans</CardholderFirstName> <CardholderLastName>Muster</CardholderLastName> <ExpirationMonth>09</ExpirationMonth> <ExpirationYear>14</ExpirationYear> </CreditCard>
Abbildung 4: XML Dokumentinstanz
SOA Guidelines – XML Schema Design
Version 1.0 Seite 14/46
3.2 Schemaweit gültige Standards
3.2.1 Sprache von Typen, Elementen und Attributen
Grundsätzlich ist XML in der Namensgebung von Typen, Elementen und Attributen offen. Aus Gründen der Wiederverwendbarkeit und zum breiteren Verständnis sollten die Element- und Attributnamen in englischer Sprache vergeben werden.
Namensgebung in jeweiliger Landessprache sollten nur auf expliziten Wunsch verwendet werden.
GEN-002 Alle Typen, Elements- und Attributsnamen SOLLTEN in englischer Sprache im XML
Schema definiert werden.
SHOULD
3.2.2 XML Deklarationen
GEN-003 Die XML Deklarationen für Dokumentinstanzen MUSS zwingend vorhanden sein.
Beispiel: <?xml version=“1.0” encoding=“UTF-8” ?>
MUST
3.2.2.1 XML Version
GEN-004 Jedes XML Schema MUSS die XML Version 1.0 verwenden. MUST
3.2.2.2 Character Set
GEN-005 Jedes XML Schema MUSS für die Zeichencodierung mindestens „UTF-8” verwenden. MUST
GEN-006 Falls zwingende Gründe vorhanden sind KANN „UTF-16” verwendet werden. MAY
3.2.3 Schema Attribute
3.2.3.1 Allgemein
GEN-007 Der xsd Präfix MUSS zwingend definiert werden und auf den folgenden Namespace
verweisen: http://www.w3.org/2001/XMLSchema .
MUST
GEN-008 Jedes XML Schema Dokument MUSS einen Target-Namespace über das
xsd:targetNamespace Attribut definieren.
MUST
GEN-009 Jede xsd:schemaLocation Attribut-Deklaration innerhalb eines XML-Schemafiles
MUSS eine URL enthalten, die über einen relativen Pfad aufgelöst werden kann.
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 15/46
3.2.3.2 Voreinstellungen
BEP-010 Das xsd:elementFormDefault Attribut MUSS deklariert sein und der Wert immer
auf qualified gesetzt werden.
MUST
BEP-011 Das xsd:attributeFormDefault MUSS deklariert sein und der Wert immer auf
unqualified gesetzt werden.
MUST
BEP-012 Das xsd:finalDefault Attribut SOLLTE auf #all gesetzt werden als Voreinstel-
lung des final Attributes für Elemente und komplexe Typen, um die Erweiterung oder
Einschränkung von Typen im Schema selber zu verhindern
Beispiel: finalDefault=“#all”
SHOULD
BEP-013 Das xsd:blockDefault Attribut SOLLTE auf #all gesetzt werden als Voreinstel-
lung des block Attributes für Elemente und komplexe Typen, von Typen um die Erwei-
terung oder Einschränkung in instanzierten Dokumenten durch Erweiterung, Ersetzung
oder Einschränkung zu verhindern
Beispiel: blockDefault=“#all”
SHOULD
3.2.3.3 Schema-Version
BEP-014 Das xsd:schema Versionsattribut MUSS immer deklariert werden.
Beispiel: version=“1.6”
MUST
3.2.4 Kommentare und Dokumentation
GEN-015 Jedes XML Schemafile MUSS einen Kommentar enthalten, welche dem folgenden
Format entspricht :
<!-- ============================================== =====--> <!-- ===== Element Declarations ===== --> <!-- ============================================== =====-->
Im Anhang A befindet sich ein komplettes Beispiel der zu verwendeten Kommentare.
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 16/46
GEN-016 Jedes XML Schemafile SOLLTE einen Kommentar enthalten, welche dem folgenden
Format entspricht.
<xsd:annotation>
<xsd:documentation lang=“EN”>
This Schema will be used to process Credit Ca rds
</xsd:documentation>
</xsd:annotation>
Optional kann das source= Attribut verwendet werden, beispielsweise mit einer
Referenz auf die Ablage einer Dokumentation .
source=“http://trivadis.com/schema/CreditCard/v1/do cu.pdf”>
SHOULD
BEP-017 Bei der Verwendung des documentation Elementes SOLLTE die Sprache immer über
das lang Attribut Qualifiziert werden.
SHOULD
3.3 Verwendung von Namensräumen (Namespaces)
Namensräume in XML werden dazu verwendet um Elemente, Typen und Attribute in XML Dokumenten eindeutig adressieren zu können. Das heisst, Namespaces schaffen die Grund-lage um das Vokabular eines XML-Dokumentes eindeutig zu identifizieren - und um in einem einzelnen Dokument mehrere dieser Vokabulare zu mischen oder zu vereinigen.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 17/46
3.3.1 Schema Namespace
BEP-018 Schema ohne Namensräume DUERFEN NICHT verwendet werden. MUST NOT
BEP-019 Die Möglichkeit des Default-Namespace DARF NICHT verwendet werden. Sowohl
der XML Schema wie auch der Target-Namespace müssen explizit qualifiziert wer-
den.
Beispiel:
<xsd:schema
targetNamespace=“http://trivadis.com/schema/CreditC ard/v1”
xmlns :tns =“http://trivadis.com/schema/CreditCard/v1”
…
</xsd:schema>
MUST
BEP-020 Als einzige Ausnahme zur Regel BEP-019 KANN zur Vereinfachung der Default-
Namespace auf den Namespace der XML Schema Definition gesetzt werden..
Beispiel:
<xsd:schema
targetNamespace=“http://trivadis.com/schema/Credit Card/v1”
xmlns=“http://www.w3.org/2001/XMLSchema”
…
</xsd:schema>
MAY
NMR-021 Der Target-Namespace im Schema MUSS immer die Major-Versionsnummer bein-
halten
Beispiel: targetNamespace=“http://trivadis.com/schema/CreditC ard/ v1 ”
MUST
NMR-022 Die folgenden Namespace-Präfixe MUESSEN bei der Deklaration der W3C Namens-
räume verwendet werden:
xsd =http://www.w3.org/2001/XMLSchema
xsi =http://www.w3.org/2001/XMLSchema-instance
xsl = http://www.w3.org/1999/XSL/Transform
MUST
NMR-023 Für die Deklaration des Targetnamespace MUSS immer das Prefix tns verwendet
werden.
MUST
3.3.2 Element Namespace
BEP-024 Alle Elemente MUESSEN über einen Namespace qualifiziert sein.
Dies wird per Default über das Schema Attribut elementFormDefault=““qualified”
eingestellt.
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 18/46
3.3.3 Attribut Namespace
BEP-025 Global definierte Attribute (Attribute die auf der obersten Ebene im Schema dekla-
riert worden sind und damit wiederverwendbar sind) MUESSEN über einen Name-
space qualifiziert sein.
MUST
BEP-026 Nicht global definierte Attribute DUERFEN NICHT über einen Namespace qualifiziert
sein.
Dies wird per Default über das Schema Attribut attributeForm-
Default=““unqualified” eingestellt.
Aufgrund dieser Voreinstellung führt folgende Definition in der importierten Sche-
ma Definition:
<xsd:element name=“AttributeTestElement” type=“AttributeTestType”/> <xsd:attribute name=“globalAttribute”/> <xsd:complexType name=“AttributeTestType”> <xsd:sequence> <xsd:element name=“String1” type=“xsd:string” / > <xsd:element name=“String2” type=“xsd:string” / > </xsd:sequence> <xsd:attribute name =“localAttribute” type=“xsd:s tring” /> </xsd:complexType>
zu diesem XML Instanzdokument:
<p:AttributeQualifying p:globalAttribute =“ v1 ”
xmlns:p=“http://www.example.org/MASTER” xmlns:p1=“http://www.example.org/attribute” … “>
<p1:AttributeTestElement localAttribute =“ local ”>
<p1:String1> String1 </p1:String1>
<p1:String2> String2 </p1:String2>
</p1:AttributeTestElement>
</p:AttributeQualifying>
MAY NOT
SOA Guidelines – XML Schema Design
Version 1.0 Seite 19/46
3.4 Logische und physische Strukturierung von XML D okumen-ten
Die XML Spezifikationen erlauben es, die Definition eines Schemas in mehreren physischen Dateien zu verwalten und diese zu einem logischen Dokument – im gleichen oder unter-schiedlichen Namensräumen – zusammenzuführen.
Nicht nur, aber insbesondere bei der Umsetzung eines kanonischen Schema (Canonical Schema) in einer SOA können diese Konzepte zur Modularisierung besonders hilfreich eingesetzt werden, um ein wiederverwendbares und gemeinsam nutzbares Vokabular von Entitäts- und Datendefinitionen zur Verfügung zu stellen.
3.4.1 Logische Strukturierung
Grundsätzlich wird empfohlen, „Kern-Entitäten” für die oberste Hierarchie-Ebene zu definie-ren. Diese können beispielsweise sein: „Customer”, „Order”, „Invoice”. Für die nächste Ebe-ne können dann wiederverwendbare Elemente wie „Address”, „AccountInfo”, „PaymentInfo” definiert werden - welche wiederum Definitionen von allgemeineren Elementen beziehen können – welche dann in den Kern-Entitäten referenziert werden.
BEP-027 Ein Schemafile SOLLTE für jede Kernentität erzeugt werden. SHOULD
BEP-028 Ein XML-Schemafile für eine Kernentität DARF NICHT wiederverwendbare Konstruk-
te definieren, die über ein separates XML Schemafile mittels einem xsd:include
oder xsd:import referenziert werden können.
Dies bedeutet, in diesem speziellen Fall darf nur genau ein globales Element defi-
niert werden und das Schema muss nach dem „Russian Doll” Design Pattern imple-
mentiert werden. Referenzierung von Elementen aus anderen Namespace sind
jedoch erlaubt.
<xsd:element name= “CreditCardEntity” > <xsd:complexType> <xsd:sequence> <xsd:element name= “id” type= “xsd:long” /> <xsd:element name= “descriptionText” minOccurs= “0” > <xsd:simpleType> <xsd:restriction base= “xsd:string” > <xsd:maxLength value= “50” /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element ref= “cre:CreditCard” /> </xsd:sequence> </xsd:complexType>
</xsd:element>
MUST NOT
BEP-029 Deklaration von Listenelementen (Collections) MUESSEN immer im gleichen Sche-
mafile erfolgen, wie die Haupt-Elemente (bspw. Entitäten) welche diese beinhalten.
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 20/46
Dabei sollte berücksichtigt werden, dass eine feinere Granularität in der Aufteilung zwar die Wiederverwendbarkeit erhöht, auf der anderen Seite dadurch jedoch auch die gegenseitigen Abhängigkeiten steigen und damit Änderungen an einem Objekt unter Umständen grössere Auswirkungen auf mehrere Anwendungen haben.
BEP-030 Die Abhängigkeiten und Referenzierungen der Schema untereinander SOLLTEN
möglichst gering gehalten werden. Ein Schemafile sollte idealerweise nicht Abhän-
gigkeiten über mehr als 3 oder 4 Hierarchiestufen haben.
Beispiel: „Customer” referenziert auf „Address”; „Address” referenziert auf „Com-
mon”. Im Schema für „Common” werden jedoch keine weiteren Elemente von
weiteren Schemas mehr eingebunden.
SHOULD
NOT
3.4.1.1 Common Schema Zur vereinfachten Wiederverwendung wird für allgemein verwendete Datentypen ein eigenes Schema – entweder pro Anwendungsdomäne oder übergreifend – erstellt.
BEP-031 Ein eigenes Schemafile MUSS definiert werden, für die Definition von Typen, welche
Kandiaten zur häufigen Wiederverwendung als einzelne Elemente sind. Dabei muss
je ein Schema für Qualifizierte und Unqualifizierte Typen erstellt werden.
Qualifizierte Typen Types mit Restriktionen wie bspw. EMailAddress, So-
cialSecurityNumber
Unqualifizierte Typen Types ohne Restriktionen, die jedoch voraussichtlich zu
einem späteren Zeitpunkt erweitert werden.
Bei grösseren Projekten, sollte dabei ein eigenes Common Schema pro Anwen-
dungsdomäne– z.B. Accounting, Orders, Master Data - erstellt werden.
MUST
3.4.1.2 Enumerations Um die Auswirkungen auf referenzierende Schema oder Anwendungen bei allfälligen Ände-rungen an erlaubten, bzw. eingeschränkten Feldinhalten zu minimieren, werden Typen mit Enumerations in einem eigenen Schema definiert.
BEP-032 Ein eigenes Code-List XML Schemafile SOLLTE definiert werden, für die Definition
von Typen, die Enumerations beinhalten. Jeder Typ muss dabei in einem eigenen
Schema definiert sein.
SHOULD
3.4.1.3 Speicherort der XML Schema Das Deployment von XML Schema sollte immer in einen physischen Pfad erfolgen, welcher den logischen Aufbau sowie die Anwendungsdomäne repräsentiert.
Diese Struktur sollte auch aus dem verwendeten Namensraum ersichtlich sein und sollte so aufgebaut werden, dass sie möglichst einfach über einen relativen Pfad aufgelöst werden kann.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 21/46
BEP-033 Der physische Speicherort der Schemadefinition SOLLTE dem folgenden Pattern
gehorchen:
URI scheme://<hostname>/[:<port>]/<domain>/<schema type >
• scheme – Bezeichnung des Zugriffsprotokolls: http | file
• port – Angabe der Portnummer falls nicht Default des verwendeten Pro-
tokolls
• hostname – Qualifizierter Hostname unter dem der angegebene Pfad er-
reichbar ist.
• domain – ein Bezeichner der Geschäftseinheit oder definierten SOA Do-
mäne zu der die Schemadefinition logisch zugeordnet wird.
• schema type – ein Token, welcher den Typ des XML Schema Dokumen-
tes indentifiziert: schema | codelist | common | wsdl
Beispiele:
� http://trivadis.com/Accounting/common
� http://trivadis.com/Accounting/schema
� http://trivadis.com/Accounting/wsdl
SHOULD
3.4.2 No Namespace
Schema-Definitionen müssen immer über einen Namespace qualifiziert sein.
BEP-034 Jedes Schema MUSS zwingend einen Targetnamespace deklarieren.
Siehe auch GE-018.
MUST
Das Weglassen von Namespaces um diese dann auf der obersten Referenzierungsebene – bspw. Schemadefinition der Kern-Entität oder WSDL – unter einem globalen Namespace wie http://www.myCompany.org zusammenzuführen ist nicht erlaubt.
3.4.3 Single Namespace
Das xsd:include Element wird verwendet wenn ein grosses Schema in mehrere kleine - und möglicherweise wiederverwendbare - Teile aufgebrochen werden soll. Dabei müssen alle Deklarationen der eingelesenen Dateien den gleichen Targetnamespace wie das einlesende Dokument verwenden.
BEP-035 Ein Objekt das mittels xsd:include in den gleichen Namensraum eingebunden wird,
DARF NICHT in noch weiteren Objekten verwendet werden.
MUST
NOT
Single Namespace sollte nur in Ausnahmefällen verwendet werden, um grössere Schema zur besseren Übersicht in mehrere physische Dateien aufzuteilen. Definitionen von Typen die mehrfach – bspw. in verschiedenen Entitäten - verwendet werden, müssen immer in einem eigenen Namensraum deklariert werden.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 22/46
3.4.4 Multiple Namespace
Das xsd:import Element erlaubt die Referenz auf Schemas, die in einem anderen Namens-raum deklariert sind. Damit werden in einem einlesenden Dokument die Deklarationen ande-rer Schemas eingelesen, sodass deren Inhalte referenziert werden können.
BEP-036 Mehrfach verwendete Objekte, die von mehreren Namensräumen referenziert werden
– wie z.B. „Address” - MUESSEN immer in einem eigenen Namensraum deklariert und
mit xsd:import eingebunden werden.
MUST
Die Definition von Elementen und Typen die mehrfach verwendet werden, müssen immer in eigenem Namensraum deklariert werden.
3.5 Versionierung von XML Dokumenten
Der Versionsname von XML Dokumenten setzt sich immer aus einer Major-Release Num-mer und einer Minor-Release Nummer zusammen.
• major – Major-Versionsnummer
• minor – Minor Versionsnummer
Dabei gilt zwingend immer der Grundsatz: Neue Releases innerhalb einer Minor-Versionsnummer sind immer
abwärtskompatibel – das heisst diese dürfen keine Modifikationen enthalten, welche die Validierung innerhalb
der gleichen Major-Versionsnummer beeinträchtigen. Konkret heiss dies, dass XML Dokumentinstanzen,
welche aufgrund eines früheren Schemas des gleichen Major-Release erstellt wurden nach wie vor gültig sein
müssen.
BEP-037 Der Wert der XML-Schema Major-Versionsnummer MUSS ein Wert > 0 sein. MUST
BEP-038 Eine Minor-Versionsänderung MUSS sich darauf beschränken, neuen optionalen XML
Inhalt zu definieren, bestehenden XML Inhalt zu erweitern oder optionale Refinements.
MUST
BEP-039 Eine Minor-Versionsänderung DARF NICHT einen existierenden XML Schema Artefakt
umbenennen.
MUST
NOT
BEP-040 Änderungen in Minor-Versionen DUERFEN NICHT die semantische Kompatibilität mit
Vorgängerversion verletzten, die die gleiche Major-Version aufweisen.
MUST
NOT
BEP-041 Ein XML Schema MUSS seine eigene Version anpassen, wenn ein referenziertes, exter-
nes XML Schema auf eine neue Version geändert wird.
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 23/46
4 Einschränkungen für den Schema-Entwurf
Um eine maximale Interoperabilität von XML Dokumenten zu gewährleisten, sind zusätzlich zur generellen Struktur eines XML Schema einige zusätzliche Einschränkungen notwendig,.
4.1 Typen- und Struktur Definitionen im Schema
4.1.1.1 Gemischter Inhalt BEP-042 Mixed Content DARF NICHT verwendet werden.
Dies ist nicht zugelassen:
<wrapper> <element> value </element> other content
</wrapper>
MUST NOT
BEP-043 Das Attribut xsd:mixed DARF NICHT verwendet werden. MUST NOT
4.1.1.2 Überschreiben von Definitionen im Schema BEP-044 Das xsd:redefine Element DARF NICHT verwendet werden. MUST NOT
BEP-045 Das xsd:extension Element DARF NICHT verwendet werden. MUST NOT
4.1.1.3 Externe Programm oder Verarbeitungs-Instruk tionen BEP-046 Das xsd:notation Element DARF NICHT verwendet werden. MUST NOT
4.1.1.4 Kompositoren in Modellgruppen BEP-047 Der Kompositor <all> in Model Groups SOLLTE NICHT verwendet werden. SHOULD
NOT
4.2 Element-Definitionen im Schema
4.2.1.1 Empty Elements Um Laufzeitfehler bei Transformationen und Zuordnungen zu vermeiden, bzw. zusätzliche Errorhandling Blöcke zu minimieren, werden leere Elemente nicht zugelassen.
BEP-048 Empty Elements DUERFEN NICHT verwendet werden. MUST NOT
BEP-049 Das xsd:nillable Attribut DARF NICHT verwendet werden. MUST NOT
SOA Guidelines – XML Schema Design
Version 1.0 Seite 24/46
4.2.1.2 Deklaration Vorkommnisse von Elementen BEP-050 Elemente SOLLTEN mit Occurance-Indikatoren deklariert werden.
Beispiel: <element name=“firstName” minOccurs=“1” maxOccurs=“1” />
SHOULD
BEP-051 Elemente vom DatenTyp xsd:string mit einer optionalen Verwendung im
Schema (minOccurs=“0” ) SOLLTEN immer mit einer Längenrestriktion deklariert
werden.
SHOULD
4.2.1.3 Nicht typisierte Elemente BEP-052 Das xsd:any Element SOLLTE NICHT verwendet werden. In Schemadeklaration
welche gegen aussen publiziert werden (nicht ausschliesslich von der eigenen
Anwendung verwendet) , dürfen diese nicht verwendet werden.
SHOULD
NOT
BEP-053 Der DatenTyp xsd:anySimpleType für Elementsdefinitionen Elementdefiniti-
onen DARF NICHT verwendet werden.
MUST NOT
BEP-054 Bei Elementsdeklarationen mit Referenzierung auf einen Typ MUSS das type=
Attribut immer angegeben und definiert werden.
MUST
4.2.1.4 Default Werte Im Sinne der Nachvollziehbarkeit von Tests sollten durch Validierungsfunktionen keine Werte im XML Instanzdokument ersetzt werden.
BEP-055 Das xsd:default Attribut für Elementdefinitionen SOLLTE NICHT verwendet
werden
SHOULD
NOT
4.2.1.5 Ersetzungsgruppen BEP-056 Das xsd:substitutionGroup Attribut für Elementdefinitionen DARF NICHT
verwendet werden
MUST NOT
4.2.1.6 Datentypen BEP-057 Der xsd:ID/xsd:IDREF/xsd:IDREFS Datentyp DARF NICHT verwendet
werden.
MUST NOT
4.3 Attributs-Definitionen im Schema
4.3.1.1 Nicht typisierte Attribute BEP-058 Das xsd:anyAttribute Attribut DARF NICHT verwendet werden. MUST NOT
4.3.1.2 Default Werte Im Sinne der Nachvollziehbarkeit von Tests sollten durch Validierungsfunktionen keine Werte im XML Instanzdokument ersetzt werden.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 25/46
BEP-059 Das xsd:default Attribut für Attributsdefinitionen SOLLTE NICHT verwendet
werden
SHOULD
NOT
4.4 Attribute für die Verwendung in Dokumentinstanz en
4.4.1 Lokale Typendefinition
BEP-060 Lokale Typendefinitionen im XML-Dokument DUERFEN NICHT verwendet werden. MUST NOT
BEP-061 Das xsi:type Attribut DARF NICHT verwendet werden. MUST NOT
4.4.2 Schema ohne Namensräume
BEP-062 Das xsi:noNamespaceSchemaLocation Attribut DARF NICHT verwendet
werden.
MUST NOT
4.4.3 Empty Elements
BEP-063 Das xsi:nil=“true” Attribut SOLLTE NICHT verwendet werden. SHOULD
NOT
SOA Guidelines – XML Schema Design
Version 1.0 Seite 26/46
5 Erweiterte Regeln zum Design
5.1 Lokale vs. Globale Deklaration
Die Sprachelemente von XML Schema erlauben sowohl die Deklaration von globalen als auch lokalen Elementen und Typen. Eine Komponente eines XML Schemas wird als global bezeichnet, wenn diese als unmittelbares „Child” von <schema> definiert ist, wohingegen lokale Komponenten verschachtelt in einer anderen Komponente deklariert sind (z.B. inner-halb eines Elementes als <complexType>).
5.1.1 Design Patterns
5.1.1.1 Lokale Deklaration - „Russian Doll Design” Bei diesem Pattern wird nur ein globales Element definiert, alle anderen Elemente sind lokal definiert, das Schema bündelt alle Elemente zu einer gültigen Deklaration
<xsd:element name=“CreditCard”> <xsd:complexType> <xsd:sequence> <xsd:element name=“CardNumber” type=“xsd: string” minOccurs=“1” /> <xsd:element name=“CardholderFirstName” t ype=“xsd:string” minOccurs=“1”/> </xsd:sequence> </xsd:complexType> </xsd:element>
Abbildung 5: Lokale Deklaration – „Russian Doll”
5.1.1.1.1 Charakteristik
� Beinhaltet nur ein globales Element, alle anderen Elemente sind lokal definiert � Wiederverwendbarkeit nur für das Root Element gegeben � Erlaubt die Steuerung der Namespacesichtbarkeit auf globaler Ebene durch entspre-
chende Definition von „elementFormDefault ” – Namespaces können gegen aussen verborgen werden
� Schema muss in einem File definiert werden
SOA Guidelines – XML Schema Design
Version 1.0 Seite 27/46
5.1.1.2 Globale Deklaration - „Salami Slice Design” In diesem Design Pattern werden alle Elemente als globales Element definiert. Da es keine verschachtelten Element-Deklarationen gibt, können alle Elemente über das gesamte Sche-ma wiederverwendet werden.
<xsd:element name=“cardNumber” type=“xsd:string”/> <xsd:element name=“cardholderFirstName” type=“xsd:s tring”/>
<xsd:element name=“CreditCardType”> <xsd:complexType> <xsd:sequence> <xsd:element ref=“cardNumber” minOccurs=“ 1” />
<xsd:element ref=“cardholderFirstName” min Occurs=“1”/> </xsd:sequence> </xsd:complexType> </xsd:element>
Abbildung 6: Globale Deklaration – „Salami Slice”
5.1.1.2.1 Charakteristik
� Alle Elemente werden global deklariert � Erlaubt die Wiederverwendbarkeit von Elemente auch in anderen Dokumenten � Kein „hidden Namespace” gegen aussen möglich – Namespace ist in Dokumentin-
stanzen immer sichtbar.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 28/46
5.1.1.3 Globale Deklaration durch Typen - „Venetian Blind Design” Wie beim „Salami Slice Design” werden in diesem Pattern Definitionen global deklariert, im Unterschied dazu existiert aber nur ein globales Element. Für die globalen Deklarationen werden hier Typen anstelle von Elementen verwendet.
<xsd:simpleType name=“CardNumberType”> <xsd:restriction base=“xsd:string”> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=“CardholderFirstNameType”> <xsd:restriction base=“xsd:string”> <xsd:minLength value=“1”/> </xsd:restriction> </xsd:simpleType> <xsd:element name=“CreditCard”> <xsd:complexType> <xsd:sequence> <xsd:element name=“CardNumber” type=“Car dNumberType” minOccurs=“1” /> <xsd:element name=“CardholderFirstName” type=“CardholderFirstNameType” minOccurs=“1”/> </xsd:sequence> </xsd:complexType> </xsd:element>
Abbildung 7: Globale Deklaration mit Typen – „Venetian Blind”
5.1.1.3.1 Charakteristik
� Beinhaltet nur ein globales Element � Individuelle Komponenten werden als Typen definiert � Erlaubt die Wiederverwendbarkeit aller Typen und des globalen Root Elements � Erlaubt die Aufteilung der Definitionen in mehrere Files � Sichtbarkeit des Namespace kann auf Schemaebene über „elementFormDefault ”
Switch gesteuert werden � Limitierte Kapselung durch Exponierung der Typen
SOA Guidelines – XML Schema Design
Version 1.0 Seite 29/46
5.1.1.4 Globale Deklaration der Elemente und Typen - „Garden of Eden” Hierbei handelt es sich um eine Kombination des „Venetian Blind” und des Salami Slice” Patterns. Alle Elemente und Typen werden global definiert.
<xsd:element name=“CardNumber” type=“CardNumberType ”/> <xsd:element name=“CardholderFirstName” type=“Cardh olderFirstNameType”/> <xsd:element name=“CreditCard” type=“CreditCardType ”/> <xsd:simpleType name=“CardNumberType”> <xsd:restriction base=“xsd:string”/> </xsd:simpleType> <xsd:simpleType name=“CardholderFirstNameType”> <xsd:restriction base=“xsd:string”> <xsd:minLength value=“1”/> </xsd:restriction> </xsd:simpleType> <xsd:complexType name=“CreditCardType”> <xsd:sequence> <xsd:element ref=“CardNumber” minOccurs=“1” /> <xsd:element ref=“CardholderFirstName” min Occurs=“1”/> </xsd:sequence> </xsd:complexType>
Abbildung 8: Globale Deklaration der Elemente und Typen– „Garden of Eden”
5.1.1.4.1 Charakteristik
� Alle Elemente und Typen werden global deklariert � Erlaubt die Wiederverwendbarkeit von Typen und Elementen � Erlaubt die Aufteilung der Definitionen in mehrere Files � Limitierte Kapselung durch Exponierung der Typen
SOA Guidelines – XML Schema Design
Version 1.0 Seite 30/46
5.1.2 Design Richtlinien
In der Literatur finden sich teilweise unterschiedliche Interpretationen der oben beschriebe-nen Patterns. In einigen Quellen wird das „Venetian Blind” Pattern beschrieben mit der Rest-riktion – so wie oben wiedergegeben - nur ein einziges globales Element zu deklarieren. In anderen Beschreibungen existiert diese Restriktion nicht und es wird dabei empohlen, zu-sätzlich die voraussichtlich wiederzuverwendenden Komponenten selektiv als Elemente zu definieren. In anderen Quellen wird dieses Design Modell auch als „Hybrid” bezeichnet.
Um eine möglichst hohe Wiederverwendbarkeit gewährleisten zu können und da gemäss vorliegenden Richtlinien zwingend die Qualifizierung von Elementen vorgegeben ist, sollten im Design von XML Schema das Hybrid Design Modell implementiert werden.
BEP-064 Das XML Schema Design SOLLTE dem Hybrid-Ansatz zwischen „Venetian Blind” und
„Garden of Eden” Pattern folgen. Typen werden global deklariert, Elemente welche
voraussichtlich wiederverwendet werden, sind dabei ebenfalls im globalen Namens-
raum definiert. Es müssen dabei jedoch nicht zwingend alle Elemente global dekla-
riert werden.
SHOULD
BEP-065 Komplexe Typen SOLLTEN immer benannt werden und nie inline (innerhalb eines
Elementes) definiert werden. SHOULD
BEP-066 Globale Elemente und Attribute SOLLTEN immer die type= Form verwenden und
keine anonymen Typen enthalten. SHOULD
BEP-067 Elemente innerhalb von Model Groups (choice oder sequence ) SOLLTEN immer
die ref= Form und nie die type= Form verwenden.
SHOULD
BEP-068 Die Definition von einfachen Typen (xsd:simpleType ) KANN anonyme einfache
Typendefinitionen beinhalten. Die Definition des einfachen Typen selber jedoch,
SOLLTE NICHT anonym in einem Attribut oder Element erfolgen.
MAY /
SHOULD
NOT
SOA Guidelines – XML Schema Design
Version 1.0 Seite 31/46
5.2 Elemente vs. Typen
Grundsätzlich können globale Komponenten sowohl als Types wie auch als Elemente im Schema definiert werden. Allgemein gilt als Best Practice im Zweifelsfall einen Typen zu definieren, da diese flexibler definiert werden können und Elemente nachträglich auf einfa-che Weise noch ergänzt werden können. Es ist weitgehend etabliert, Komponenten welche nicht vorgesehen sind als Elemente in XML Dokumentinstanzen zu erscheinen, ebenfalls als komplexe Type zu implementieren.
Sowohl Oracle Service Bus (OSB) wie auch BPEL 2.0 unterstützen die Definition von Variab-len basierend auf globalen Elementen und Typen, während hingegen BPEL 1.1 nur Variab-len von globalen Elementen zulässt.
GEN-069 Jedes XML Schema Dokument, welches direkt von einer WSDL Definition eingebunden
wird, MUSS auf oberster Ebene die Deklaration eines Root Elements enthalten, auf
welches in der Message-Definition des Services referenziert werden kann.
MUST
5.2.1 Referenzierung von Komponenten aus anderen Na mensräumen
Falls Komponenten aus anderen Namensräumen verwendet warden, soll dessen Namens-raum immer auf der Elementebene ersichtlich bleiben. Dies wird erreicht indem solche im-portierten Objekte in der ref= und nicht der type= Form eingebunden werden.
SOA Guidelines – XML Schema Design
Version 1.0 Seite 32/46
BEP-070 Wenn Komponenten von anderen Namensräumen wiederverwendet werden,
MUESSEN diese immer als Element – und nicht als Typen - referenziert und im Her-
kunftsdokument entsprechend definiert werden. Andernfalls erhält das übergeordnete
Element den Namespace des referenzierenden Schemas.
Beispiel:
<xsd:sequence> <xsd:element name=“id” type=“xsd:long”/> <xsd:element ref= “ cca:CreditCard ”/> </xsd:sequence>
Führt zu folgender Qualifizierung des Namensraums im XML Instanzdokument:
<?xml version=“1.0” encoding=“UTF-8”?> <mas:CreditCardEntity xmlns:mas=“http://www.example .org/Master” xmlns:cre=“http://www.example.org/CreditCard” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instanc e” xsi:schemaLocation=“http://www.example.org/Master M aster.xsd “> <mas:id> 789 </mas:id> < cre: CreditCard> <cre:CardNumber> 1234 </cre:CardNumber> <cre:CardholderFirstName> Hans</cre:CardholderFirstName> </ cre: CreditCard>
</mas:CreditCardEntity>
MUST
BEP-071 Falls das gleiche Element eines anderen Namensraums innerhalb von Model Groups
mehrfach verwendet wird, MUSS dieses innerhalb eines Types, welcher wiederum
einen eindeutigen Namen hat, definiert werden.
Beispiel:
<xsd:element name=“CreditCardInfo”> <xsd:complexType> <xsd:sequence> <xsd:element name=“id” type=“xsd:long”/> <xsd:element name=“ MainCreditCard ” minOccurs=“1”> <xsd:complexType> <xsd:sequence> <xsd:element ref=“ cre:CreditCard ”/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=“ AltCreditCard ” minOccurs=“0”> <xsd:complexType> <xsd:sequence> <xsd:element ref=“ cre:CreditCard ”/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=“ OldCreditCards ” minOccurs=“0” maxOccurs=“unbounded”> <xsd:complexType> <xsd:sequence> <xsd:element cre=“ cre:CreditCard ”/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType>
</xsd:element>
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 33/46
BEP-072 Wenn Komponenten des gleichen Namensraumes wiederverwendet werden, SOLLTEN
diese immer mit der Type= Form referenziert werden.
SHOULD
SOA Guidelines – XML Schema Design
Version 1.0 Seite 34/46
5.3 Attribute vs. Elemente
Aus Gründen der Klarheit und Abgrenzung – sowie der leichteren Erweiterbarkeit – wird hier empfohlen, Attribute generell nur für Metadaten zu verwenden. Als Metadaten gelten dabei Informationen über die im Dokument enthaltenen Daten oder das Dokument selber so wie beispielsweise die Versionsnummer des Schemas oder alternative Feldbeschreibungen.
BEP-073 Für die Repräsentation von Daten MUESSEN Elemente verwendet werden - und nicht
Attribute.
MUST
BEP-074 Attribute SOLLTEN nur für Metadaten verwendet werden SHOULD
SOA Guidelines – XML Schema Design
Version 1.0 Seite 35/46
6 Namenskonventionen
NMR-075 Die Namen der Elemente, Attribute und Typen SOLLTEN aus Wörtern gebildet werden,
die im definierten Wörterbuch zu finden sind.
SOLLTE
NMR-076 Für den Namen von Attributen MUSS LowerCamelCase (LCC) verwendet werden. MUST
NMR-077 Für den Namen der Elementen und Typen MUSS UpperCamelCase (UCC) verwendet
werden.
MUST
NMR-078 Dem Namen eines ComplexType und eines SimpleType MUSS der Suffix Type ange-
hängt werden.
Bespiel: AddressType
MUST
NMR-079 Dem Namen von Elementen oder Typen, welche wiederum Iterationen mit dem Attri-
but maxOccurs>“1” von Elementen beinhalten, SOLLTE der Suffix Collection
angehängt werden.
Beispiel:
<xsd:complexType name=“ PersonsCollection ”>
<xsd:sequence>
<xsd:element maxOccurs=unbounded” ref=Person”/>
<xsd:sequence>
</xsd:complexType>
Alternativ kann der Plural des im Listenelement definierten Element verwendet werden
– z.B. Persons . Allerdings sollt dies innerhalb einer Domäne konsistent gehandhabt
werden.
SHOULD
NMR-080 Sämtliche Namen SOLLTEN eine Maximallänge von 35 Zeichen nicht überschreiten. SHOULD
NMR-081 Element-, Attribut- und Typ-Namen MUESSEN innerhalb eines Namensraums eindeutig
sein.
MUST
NMR-082 Underscore (_), Punkte (.) und Bindestrich (-) Zeichen SOLLTEN NICHT verwendet
werden oder SOLLTEN für spezielle Anforderungen reserviert sein.
SHOULD
NOT
NMR-083 Elemente, Attribute und Typen MUESSEN in Singularform definiert werden, ausser das
Konzept selbst existiert nur Pluralform (z.B. GoodsQuantity).
MUST
NMR-084 Die Namen der XML Elemente, Attribute und Typen MUESSEN aus Kleinbuchstaben [a-
z], Grossbuchstaben [A-Z], Zahlen [0-9] und Underscore-Zeichen [_] gebildet werden.
MUST
NMR-085 Die Namen der XML Elemente, Attribute und Typen DUERFEN NICHT Akronyme, Abkür-
zungen und andere Wortkürzungen verwenden, ausser sie sind in der projektspezifisch
zu erstellenden Liste der erlaubten Abkürzungen und Akronyme vorhanden.
MUST
NMR-086 Akronyme und Abkürzungen, die aufgelistet werden, MUESSEN immer anstelle der
ausgeschriebenen Wörter verwendet werden.
MUST
NMR-087 Akronyme MUESSEN immer komplett in Grossbuchstaben vorkommen, ausser das
Akronym steht am Anfang eines Attributnamen. In diesem Fall MUSS das Akronym in
Kleinbuchstaben geschrieben sein.
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 36/46
NMR-088 Ein XML Schema Namespace MUSS dem folgenden Pattern gehorchen:
URN urn:<organization>:<organization hierar-chy>[:<organization hierarchy level>]*:<schema type>[:<package>]+[:<status>]:v<major-version>
URL http://<organisation>/<organization hierar-chy>[/<organization hierarchy level>]*/<schema type>[/<package>]+[/<status>]/v<major-version>
wobei:
• organization – ein Identifier der Organisation, welche die Schemadefiniti-
on zur Verfügung stellt
• organization hierarchy – die erste Stufe einer Hierarchie innerhalb
der Organisation, welche die Schemadefinition zur Verfügung stellt
• organization hierarchy level – 0 oder mehrere Hierarchiestufen
der Organisation, welche die Schemadefinition zur Verfügung stellt
• schema type – ein Token, welcher den Typ des XML Schema Dokumentes
indentifiziert: schema | codelist | documentation
• package - eine oder mehrere Stufen von Packages getrennt durch ein „/”
Zeichen
• status – der optionale Status des WSDL-Dokumentes: draft | stan-
dard
• major – die Major Versionsnummer
Beispiele:
• http://trivadis.com/techdiv/schema/soabp/creditCard /v1
• http://trivadis.com/techdiv/codelist/soabp/common/I SOCountryList/v1
MUST
SOA Guidelines – XML Schema Design
Version 1.0 Seite 37/46
NMR-089 Die Filenamen von XML Schemas MUESSEN dem folgenden Pattern gehorchen:
<schema-module-name>_<major>.<minor>.xsd
sämtliche Punkten, Leerzeichen und andere Trennzeichen müssen entfernt werden.
wobei:
• Schema-module-name – Name des Schemamoduls
• major – Major-Versionsnummer
• minor – Minor Versionsummer
MUST
NMR-090 Das xsd:schema Versionsattribut MUSS dem folgenden Pattern gehorchen:
<xsd:schema ... version=“<major>.<minor>[.<revision >]”
wobei:
• <major> - sequentielle Nummer mit der Major-Version
• <minor> - sequentielle Nummer mit der Minor-Version
• <revision> - optionale, sequentielle Nummer mit der Revision-Nummer
MUST
6.1 Namens-Segmente in der Namensgebung von Element en, Typen und Attributen
Die Namen von Elementen, Attributen und Typen in einer Schemadefinition sollten sich wo möglich und sinnvoll aus einem projektspezifisch zu erstellenden Vokabular von standardi-sierten Begriffen zusammenzusetzen.
Falls vorhanden und möglich empfiehlt sich auch eine nahe Anlehnung von Komponenten-namen an die Namensgebung des zugrundeliegenden Objekt- oder Datenmodells.
6.1.1 Suffixe zur Bezeichnung des Datentyps
In der folgenden Tabelle sind im Sinne eines Beispiels und nicht abschliessend einige essen-tielle Begriffe aufgeführt, welche als Suffix in Komponentennamen verwendet werden sollten.
Bezeichner Beschreibung Primitive Datentypen
Amount Ein numerischer Wert, der einen monetären Wert darstellt. Die Währungseinheit kann dabei explizit oder implizit definiert sein.
Beispiele: UnitCostAmount , UnitPri-ceAmount, PartnerFeeAmount
• xsd:decimal
• xsd:double
• xsd:float
• xsd:integer
Binary Eine Sequenz von binären Ziffern um beispielswei-se Dokumente wie Word oder PDF einzubinden.
Beispiele: DocumentationBinary , Attach-mentBinary
• xsd:base64binary
• xsd:hexBinary
SOA Guidelines – XML Schema Design
Version 1.0 Seite 38/46
Code Ein Character String (Buchstaben, Zahlen oder Symbole) kann verwendet werden, um einen kürzeren oder sprach-unabhängiges Token zu haben, der einen Wert oder Text repräsentiert oder ersetzt. Codes werden normalerweise in Codelis-ten für jeden Attributtyp verwaltet.
Beispiele: CountryCode , CurrencyCode
• xsd:normalizedString
• xsd:string
• xsd:token
Date Ein Tag in einem bestimmten Kalenderjahr (ISO 8601-2000) als Darstellung im gregorianischen Kalender.
Beispiele: ExpirationDate , ShipmentDate
• xsd:date
DateTime Eine Kombination aus Datumsangeben des grego-rianischen Kalenders und Zeitangaben
Beispiele: CreationDateTime , ReceiptDa-teTime
• xsd:dateTime
Duration Eine Darstellung eines Zeitraumes in Jahren, Monaten, Wochen, Tagen, Stunden, Minuten, Sekunden und Sekundenbruchteilen im ISO 8601 Format.
Beispiele: ActivityDuration , WorkTimeDu-
ration
• xsd:duration
Identifier Ein Charakter String (Buchstaben, Zahlen oder Symbole) als eindeutiger Bezeichner einer Instanz eines Objektes.
Beispiele: CustomerIdentifier, OrderIden-tifier
• xsd:normalizedString
• xsd:string
• xsd:token
Indicator Ein Bezeichner aus einer Liste von 2 sich gegen-seitig ausschliessenden Werten, welche den einzigen möglichen Zustand einer bestimmten Eigenschaft wiedergeben.
Beispiele: ActivationStatusIndicator, EligibilityIndicator
• xsd:boolean
Measure Ein numerischer Wert um physische Dimensionen eines Objektes zu beschreiben. Wird typischer-weise immer im Kontext einer Masseinheit ver-wendet.
Beispiele: WeightMeasure, LengthMeasure
• xsd:decimal
• xsd:double
• xsd:float
• xsd:integer
Name Die Benennung als Unterscheidungsmerkmal • xsd:normalizedString
SOA Guidelines – XML Schema Design
Version 1.0 Seite 39/46
eines bestimmten Objektes wie Person, Sache, Ort oder Konzept.
Beispiele: FirstName, LocationName
• xsd:string
• xsd:token
Ordinal Eine Zahl die einen mathematischen Wert darstellt, welche für Aufzählungen, Reihenfolgen und Sortie-rungen verwendet wird.
Beispiele: RankingOrdinal, OrderOrdinal
• xsd:integer
• xsd:positiveInteger
• xsd:nonNegativeInteger
• xsd:unsignedInt
• xsd:unsignedLong
Percent Ein Wert der eine Fraktion von hundert als Quoti-ent ausdrückt.
Beispiele: DiscountPercent, TaxPercent
• xsd:decimal
• xsd:double
• xsd:float
• xsd:integer
Quantity Ein numerischer Wert mit welchem eine Einheit von nicht monetären Werten ausgedrückt wird. Üblicherweise wird dieser Wert immer im Kontext einer Masseinheit ausgedrückt.
Beispiele: OrderQuantity, AvailableQuan-
tity
• xsd:decimal
• xsd:double
• xsd:float
• xsd:integer
Rate Eine Menge, Betrag, Häufigkeit oder Faktor, der gegen eine Basiseinheit gemessen und als Quoti-ent ausgedückt wird.
Beispiele: InterestRate, ConversionRate
• xsd:decimal
• xsd:double
• xsd:float
• xsd:integer
Ratio Eine Beziehung von zwei unabhängigen Mengen, welche die gleiche Masseinheit oder Währung verwenden. Ratio kann als Quotient oder Proporti-on ausgedrückt werden.
Beispiele: CompletionRatio, NetIncomeRa-tio
• xsd:decimal
• xsd:double
• xsd:float
• xsd:integer
Text Eine Charakter Zeichenkette in der Form einer Sprache welche zur unstrukturierten Beschreibung eines Objektes verwendet wird.
Beispiele: InvoiceText, RemarksText
• xsd:normalizedString
• xsd:string
• xsd:token
Time Die Angabe einer Tageszeit im ISO 8601-2000 Format mit oder ohne Zeitzonenangabe, welche in Stunden, Minuten, Sekunden und Bruchteilen davon aufgelöst werden kann.
Beispiele: DeliveryTime, StartTime
• xsd:time
Value Ein numerischer Wert zur Darstellung von quantifi- • xsd:decimal
SOA Guidelines – XML Schema Design
Version 1.0 Seite 40/46
zierenden Informationen zu einer Objektinstant oder zur Darstellung von zugeordneten oder ge-planten Mengen.
Beispiele: TotalOrderValue, AssignedValue
• xsd:double
• xsd:float
• xsd:integer
SOA Guidelines – XML Schema Design
Version 1.0 Seite 41/46
6.1.2 Terminologie der Benennung von Businessobjekt en
Grundsätzlich sollte eine möglichst konsistente Terminologie der Bezeichnungen aus den jeweiligen Geschäftsfeldern oder der jeweiligen Branche verwendet werden. Die gleichbe-deutende Verwendung von verschiedenen Begriffen für dieselbe Entität oder Objekttyp sollte vermieden werden. Beispielsweise sollte nicht der Term „Supplier” und „Vendor” oder „CostCenter” und „BusinessUnit” gleichbedeutend für die Beschreibung des gleichen Entitätstyps eingesetzt werden. Zur verbesserten Übersichtlichkeit und intuitiven Benutzung der XML-Artefakte wird bei breiterer Verwendung von XML Schema, empfohlen ein Wörterbuch der zwingenden Begriffe für die Verwendung von Komponentennamen zu erstellen, welche bei der Namensgebung verbindlich zu verwenden sind. NMR-091 Bei umfangreicherer Anwendung von XML Schema SOLLTE ein anwendungsspezifisches
Dictionary von zwingend zu verwendenden Bezeichnungen der Geschäftsausdrücke als
Namenssegmente in Komponentennamen erstellt werden.
SHOULD
SOA Guidelines – XML Schema Design
Version 1.0 Seite 42/46
7 Links
7.1 XML-Spezifikationen
Die folgende Aufstellung zeigt die wichtigsten URIs der XML Spezifikation, welche in diesem Dokument referenziert werden
http://www.w3.org/TR/REC-xml/
Extensible Markup Language (XML) 1.0 (Fifth Edition) W3C Recommendation, 26. November 2008 XML 1.0
http://www.w3.org/TR/xml11/
Extensible Markup Language (XML) 1.1 (Second Edition) W3C Recommendation, 16 August 2006 XML 1.1
http://www.w3.org/TR/xmlschema-0
XML Schema Part 0: Primer Second Edition W3C Recommendation, 28 October 2004 XML Schema Facilities – XML 1.0
http://www.w3.org/TR/xmlschema-1
XML Schema Part 1: Structures Second Edition W3C Recommendation, 28 October 2004 XML Schema Structures – XML 1.0
http://www.w3.org/TR/xmlschema-2
XML Schema Part 2: Datatypes Second Edition W3C Recommendation, 28 October 2004 XML Schema Datatypes – XML 1.0
http://www.w3.org/TR/xml-names/
Namespaces in XML 1.0 (Third Edition) W3C Recommendation, 8 November 2009 XML 1.0
http://www.w3.org/TR/xml-names11/
Namespaces in XML 1.1 (Second Edition) W3C Recommendation, 16 August 2006 XML 1.1
http://www.w3.org/TR/xml-c14n/
Canonical XML – Version 1.0 W3C Recommendation, 15 March 2001 XML 1.0
SOA Guidelines – XML Schema Design
Version 1.0 Seite 43/46
7.2 Referenzen
[UN/CEFACT] United Nations Centre for Trade Facilitation and El ectronic Business UN/CEFACT Modelling Methodology (UMM) http://www.unece.org/cefact/xml/xml_index.htm
[REQ_COMM_2119] Key words for use in RFCs to Indicate Requirement Levels, March 1997, http://tools.ietf.org/html/rfc2119
SOA Guidelines – XML Schema Design
Version 1.0 Seite 44/46
8 Anhang A – Schema Beispiel
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSc hema" xmlns:adr="http://www.trivadis.com/samples/interna l/schema/Address/v1" xmlns:tns="http://www.trivadis.com/samples/interna l/schema/Person/v1" xmlns:can="http://www.trivadis.com/samples/schema/ common/CantonCodeEnum/v1" xmlns:com="http://www.trivadis.com/samples/schema/ common/CommonTypes/v1" xmlns:dse="http://www.trivadis.com/samples/schema/ common/DataStateEnum/v1" xmlns:rse="http://www.trivadis.com/samples/schema/ common/RecordStateEnum/v1" targetNamespace="http://www.trivadis.com/samples/i nternal/schema/Person/v1" elementFormDefault="qualified" attributeFormDefaul t="unqualified" finalDefault="#all" blockDefault="#all" version="1 .0"> <xsd:import namespace="http://www.trivadis.com/samp les/internal/schema/Address/v1" schemaLocation="../../common/Address/v1/Address-v1 .0.xsd"/> <xsd:import namespace="http://www.trivadis.com/samp les/schema/common/CantonCodeEnum/v1" schemaLocation="../../../../public/xsd/common/v1/ CantonCodeEnum-v1.0.xsd"/> <xsd:import namespace= http://www.trivadis.com/samples/schema/common/Commo nTypes/v1 schemaLocation="../../../../public/xsd/common/v1/C ommonTypes-v1.0.xsd"/> <xsd:import namespace= http://www.trivadis.com/samples/schema/common/DataS tateEnum/v1 schemaLocation="../../../../public/xsd/common/v1/D ataStateEnum-v1.0.xsd"/> <xsd:import namespace= http://www.trivadis.com/samples/schema/common/Recor dStateEnum/v1 schemaLocation="../../../../public/xsd/common/v1/R ecordStateEnum-v1.0.xsd"/> <xsd:simpleType name="AccountNumberType"> <xsd:restriction base="xsd:string"> <xsd:maxLength value="30"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="ClearingNumberType"> <xsd:restriction base="xsd:string"> <xsd:maxLength value="12"/> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="PaymentInformationType"> <xsd:sequence> <xsd:element name="PaymentMethod" minOccurs="0" m axOccurs="1" type="tns:PaymentMethodEnumType"> <xsd:annotation> <xsd:documentation xml:lang="DE"> Zahlungsverfahren </xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="ClearingNumber" minOccurs="1" maxOccurs="1" type="tns:ClearingNumberType"> </xsd:element> <xsd:element name="BankAccountNumber" minOccurs=" 0" maxOccurs="1" type="tns:AccountNumberType"> </xsd:element> <xsd:element name="PostAccountNumber" minOccurs=" 0" maxOccurs="1" type="tns:AccountNumberType"> </xsd:element> <xsd:element name="Recipient" minOccurs="1" maxOc curs="1" type="com:PersonNameType"> </xsd:element> <xsd:element name="FirstName" minOccurs="0" maxOc curs="1" type="com:PersonNameType"> </xsd:element> <xsd:element name="LastName" minOccurs="0" maxOcc urs="1" type="com:PersonNameType"> </xsd:element> <xsd:element name="Iban" minOccurs="0" maxOccurs= "1" type="com:Max30TextType">
SOA Guidelines – XML Schema Design
Version 1.0 Seite 45/46
</xsd:element> <xsd:element name="Swift" minOccurs="0" maxOccurs ="1" type="com:Max12TextType"> </xsd:element> <xsd:element name="EBillingEnabled" minOccurs="0" maxOccurs="1" type="xsd:boolean"> </xsd:element> <xsd:element name="EBillingAccountNumber" minOccu rs="0" maxOccurs="1" type="com:Max30TextType"> </xsd:element> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="PaymentMethodEnumType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="00"/> <xsd:enumeration value="01"/> <xsd:enumeration value="51"/> <xsd:enumeration value="52"/> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="PersonType"> <xsd:sequence> <xsd:element name="PersonPin" minOccurs="0" maxOc curs="1" type="com:PersonPinType"> </xsd:element> <xsd:element ref="com:CantonRecordData" minOccurs ="1" maxOccurs="1"/> <xsd:element name="RecordState" minOccurs="1" max Occurs="1" type="rse:RecordStateEnumType"> </xsd:element> <xsd:element name="OrganisationName" minOccurs="0 " maxOccurs="1" type="com:Max50TextType"> </xsd:element> <xsd:element name="OrganisationAdditionalName" mi nOccurs="0" maxOccurs="1" type="com:Max50TextType"/> <xsd:element name="Department" minOccurs="0" maxO ccurs="1" type="com:Max50TextType"> </xsd:element> <xsd:element name="OfficialName" minOccurs="0" ma xOccurs="1" type="com:PersonNameType"> </xsd:element> <xsd:element name="OriginalName" minOccurs="0" ma xOccurs="1" type="com:PersonNameType"> </xsd:element> <xsd:element name="FirstName" minOccurs="0" maxOc curs="1" type="com:PersonNameType"> </xsd:element> <xsd:element name="DateOfBirth" minOccurs="0" max Occurs="1" type="xsd:date"> </xsd:element> <xsd:element name="PlaceOfOrigins" minOccurs="0" maxOccurs="1"> <xsd:complexType> <xsd:sequence> <xsd:element ref="com:PlaceOfOrigin" minOccurs ="1" maxOccurs="2"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="PlaceOfBirthCountry" minOccurs ="0" maxOccurs="1" type="com:Max30TextType"/> <xsd:element name="Sex" minOccurs="0" maxOccurs=" 1" type="com:GenderEnumType"> </xsd:element> <xsd:element name="Language" minOccurs="0" maxOcc urs="1" type="com:Max1TextType"> </xsd:element> <xsd:element name="Nationality" minOccurs="1" max Occurs="1" type="com:CountryType"> </xsd:element>
SOA Guidelines – XML Schema Design
Version 1.0 Seite 46/46
<xsd:element name="CantonOfOrigin" minOccurs="0" maxOccurs="1" type="can:CantonCodeEnumType"> </xsd:element> <xsd:element name="CountryOfOrigin" minOccurs="0" maxOccurs="1" type="com:CountryType"> </xsd:element> <xsd:element name="Remark" minOccurs="0" maxOccur s="1" type="com:Max50TextType"> </xsd:element> <xsd:element name="Phone" minOccurs="0" maxOccurs ="1" type="com:Max30TextType"> </xsd:element> <xsd:element name="Cell" minOccurs="0" maxOccurs= "1" type="com:Max30TextType"> </xsd:element> <xsd:element name="Email" minOccurs="0" maxOccurs ="1" type="com:Max50TextType"> </xsd:element> <xsd:element name="PaymentInformation" minOccurs= "0" maxOccurs="1" type="tns:PaymentInformationType"> </xsd:element> <xsd:element name="Archived" minOccurs="0" maxOcc urs="1" type="xsd:boolean"> </xsd:element> <xsd:element ref="com:BaseAudit" minOccurs="0" ma xOccurs="1"/> </xsd:sequence> </xsd:complexType> <xsd:element name="Person" type="tns:PersonType"/> <xsd:element name="PaymentInformation" type="tns:Pa ymentInformationType"/> </xsd:schema>