Altova XMLSpy 2024 Professional Edition

Die in diesem Abschnitt beschriebenen Assertions (Behauptungen) sind Assertions zu complexTypes. Eine solche Assertion wird in einem xs:assert-Element (in XML Schema Version 1.1 eingeführt) definiert und dient als Gültigkeits-Constraint für den complexType. (Bei der anderen Art von Assertion handelt es sich um eine Assertion zu einem simpleType. Sie wird in einem xs:assertion-Element definiert und in der Eingabehilfe "Facets" eines simpleType erstellt und bearbeitet. Diese Art von Assertion wird von der Funktion nicht abgedeckt und wird in diesem Kapitel beschrieben.)

 

Anmerkung:Assertions sind eine XSD 1.1-Funktionalität. Daher stehen die Funktionen zur Bearbeitung von Assertions nur im XSD 1.1-Modus zur Verfügung.

 

Wo werden Assertions bearbeitet?

ComplexType-Assertions können in der Schema-Ansicht über folgende GUI-Bereiche erstellt und bearbeitet werden:

 

In der Schema-Übersicht: im AAIDC-Bereich (Attribute/Assertions/Identity Constraints) auf dem Register "Assertions" (Abbildung unten). Damit das Register "Assertions" aktiv ist, ändern Sie den XSD-Modus in 1.1 (z.B. über die Symbolleisten-Schaltfläche XSD 1.1).

AssertAAIC01

In der Content Model-Ansicht: Assertions können auf dem Register "Assertions" (Abbildung oben) oder im Diagramm (Abbildung unten) bearbeitet werden. Es ist immer nur eine dieser beiden Bearbeitungsoptionen (Register oder Diagramm) zu einem bestimmten Zeitpunkt aktiv. Über die Schaltfläche Assertions im Diagram anzeigen der Schema-Design-Symbolleiste (siehe unten) können Sie zwischen diesen beiden Optionen wechseln. (Um eine dieser Optionen als Standardoption festzulegen, gehen Sie zum Dialogfeld "Schema-Ansicht konfigurieren" (Schema-Design | Ansicht konfigurieren | Register "Element")). Aktivieren Sie im Diagramm das Kontrollkästchen "Assertions" des complexType- oder complex-content-Elements. Geben Sie anschließend die Definition der Assertion in die Eingabehilfe "Details" ein oder bearbeiten Sie diese.

AssertEHDetails01
icAssertionsToggle

Assertions im Diagramm anzeigen: Ist in der Content Model-Ansicht aktiv. Wechselt zwischen der Anzeige der Assertions im Diagramm (aktiviert) und auf dem Register "Assertions".

 

Geltungsbereich der Assertion

Der zur Definition des Assertion Constraint verwendete XPath-Ausdruck muss sich im Geltungsbereich des complexType, zu dem er definiert ist, befinden. Wenn der XPath-Ausdruck also auf einen bestimmten Node zugreifen soll, muss die Assertion für einen Vorfahren dieses Node definiert werden.

 

Hinzufügen und Löschen von Assertions

Ein complexType kann mehrere Assertions haben. Damit das Element im Instanzdokument gültig ist, muss das Ergebnis des XPath-Ausdrucks für jede Assertion true sein. Um eine Assertion zu einem complexType hinzuzufügen, gehen Sie folgendermaßen vor:

 

In der Schema-Übersicht: Wählen Sie den complexType aus. Klicken Sie anschließend auf dem Register "Assertions" des AAIDC-Bereichs (siehe Abbildung oben) auf das Anhängen- oder Einfügen-Symbol links oben auf dem Register. Sie können mehrere Assertions hinzufügen. Um eine Assertion zu löschen, wählen Sie diese aus und klicken Sie auf das Löschen-Symbol rechts oben auf dem Register.

In der Content Model-Ansicht (siehe Abbildung oben): Klicken Sie mit der rechten Maustaste auf den complexType und wählen Sie den Befehl Child hinzufügen | Assertion. Alternativ dazu können Sie auch mit der rechten Maustaste auf eine vorhandene Assertion im Diagramm klicken und den Befehl Anhängen | Assertion oder Einfügen | Assertion wählen. Sie können mehrere Assertions zu einem complexType hinzufügen. Um eine Assertion zu löschen, wählen Sie sie aus und drücken Sie die Taste Löschen.

 

Definieren des XPath-Ausdrucks der Assertion

Der XPath-Ausdruck einer complexType Assertion definiert den Validierungs-Constraint, der im Instanzdokument am complexType-Element angewendet werden soll. So wurde die Assertion in der Abbildung oben z.B. für das complex-type Element team definiert. Der XPath-Ausdruck der Assertion lautet: @region="US". Im XML-Schema-Dokument wird die Assertion folgendermaßen definiert:

 

<xs:assert test='@region="US"'/>

 

Die Assertion legt fest, dass das Element team im Instanzdokument ein Attribut region mit dem Wert US haben muss. Andernfalls ist das Dokument ungültig.

 

Beachten Sie die folgenden Punkte:

 

XPath-Ausdrücke müssen in XPath 2.0 geschrieben werden.

Die im XPath-Ausdruck ausgewerteten Nodes müssen sich im Geltungsbereich der Assertion befinden (siehe oben).

Wenn das Ergebnis eines Ausdruck nicht der Boolesche Wert true/false ist, so wird der zurückgegebene Wert in einen Booleschen Wert umgewandelt. Eine nicht leere Sequenz wird in true umgewandelt, während eine leere Sequenz in false konvertiert wird.

Wenn der Ausdruck Syntaxfehler enthält, wird er rot angezeigt. Kontextfehler werden nicht markiert. Wenn der XPath-Ausdruck z.B. ein Attribut testet und dieses Attribut im Schema nicht definiert ist, so wird kein Fehler angezeigt.

 

Die Assertion-Meldung

Oft ist es nützlich, wenn z.B. mit der Definition einer Assertion auch eine Erläuterung dazu verfügbar ist, damit eine entsprechende Meldung angezeigt werden kann, wenn die Assertion bei der Validierung des XML-Instanzdokuments nicht erfüllt wird. Da in der XML Schema-Spezifikation keine derartige Meldung vorgesehen ist, können Sie in XMLSpy im Altova xml-schema-extensions Namespace https://www.altova.com/de/xml-schema-extensions (oder in jedem anderen Namespace) zusammen mit der Definition der Assertion eine Meldung definieren, die bei der Validierung des XML-Instanzdokuments verwendet werden soll. Zum Beispiel:

 

<xs:assert test="count(//MyNode) ge 1altova:message="Es muss mindestens ein MyNode-Element vorhanden sein"/> oder

<xs:assertion test="count(//MyNode) ge 1altova:message="Es muss mindestens ein MyNode-Element vorhanden sein"/>

 

Wenn die in der Assertion definierte Einschränkung nicht erfüllt wird, zeigt der Validierungsprozessor von XMLSpy zusammen mit der Validierungsfehlermeldung die mit der Assertion verknüpfte Erklärung als Meldung an. Der Validierungsprozessor gibt den Wert eines assert/@message Attributs oder eines assertion/@message Attributs unabhängig davon aus, in welchem Namespace sich das message Attribut befindet. Sie können in der Schema-Ansicht jedoch nur message Attribute bearbeiten, die sich im Altova xml-schema-extension Namespace befinden. Um message Attribute in anderen Namespaces zu bearbeiten, verwenden Sie die Textansicht.

 

 

Nähere Informationen dazu finden Sie unter Assertion-Meldungen.

 

Verwendung von xpathDefaultNamespace

Ein im XML-Schema-Dokument deklarierter Standard-Namespace ist der Standard-Namespace des  XML-Schema-Dokuments. Er gilt für Elementnamen ohne Präfix im Schema-Dokument, nicht aber für Elementnamen ohne Präfix in XPath-Ausdrücken im Schema-Dokument.

 

Mit dem Attribut xpathDefaultNamespace (einem XSD 1.1-Feature) wird der Namespace definiert, dem Elementnamen ohne Präfix im XPath-Ausdruck angehören.

 

Der Geltungsbereich von XPath-Standard-Namespaces erstreckt sich auf die XML-Schema-Elemente, für die diese Namespaces deklariert wurden. Das Attribut xpathDefaultNamespace kann in den folgenden XML Schema 1.1-Elementen vorkommen:

 

xs:schema

xs:assert and xs:assertion

xs:alternative

xs:selector and xs:field (in Identity Constraints)

 

Das xpathDefaultNamespace Attribut für xs:schema wird im Dialogfeld "Schema-Einstellungen" (Schema-Design | Schema-Einstellungen) im XSD 1.1-Modus definiert. Für die anderen oben aufgelisteten Elemente wird es in der jeweiligen Details-Eingabehilfe (Beispiel in der Abbildung unten) definiert.

AssertEHDetails02XPDNS

Durch Deklarieren des XPath-Standard-Namespace für xs:schema wird der XPath-Standard-Namespace für den Geltungsbereich des gesamten Schemas deklariert. Sie können diese Deklaration für Elemente, in denen das Attribut xpathDefaultNamespace zulässig ist (siehe Liste oben), außer Kraft setzen.

 

Anstelle eines tatsächlichen Namespace kann das Attribut xpathDefaultNamespace eines von drei Schlüsselwörtern enthalten:

 

##targetNamespace: Der XPath-Standard-Namespace ist mit dem Target Namespace des Schemas identisch.

##defaultNamespace: Der XPath-Standard-Namespace ist mit dem Standard-Namespace des Schemas identisch.

##local: Es gibt keinen XPath-Standard-Namespace.

 

Wenn im Dokument kein XPath-Standard-Namespace deklariert ist, haben Elemente ohne Präfix in XPath-Ausdrücken keinen Namespace.

 

Anmerkung:Die XPath-Standard-Namespace-Deklaration gilt nicht für Attribute.

 

 

Sie können den XPath-Standard-Namespace für XPath-Ausdrücke in Assertions auch in der Definition der Assertion festlegen. Wählen Sie im AAIDC-Bereich (Abbildung unten) auf dem Register "Assertions" das gewünschte Schlüsselwort aus der Dropdown-Liste des Felds XPathDefaultNS aus.

AssertAAIC02XPDNS

Der ausgewählte Namespace befindet sich im Geltungsbereich der Assertion.

 

© 2017-2023 Altova GmbH