Altova XMLSpy 2024 Professional Edition

Identity Constraints (IDCs) können für globale oder lokale Element-Deklarationen definiert werden. Sie definieren die Eindeutigkeit von Nodes und ermöglichen eine korrekte Referenzierung zwischen eindeutigen Nodes.

 

Methoden für die Deklaration

Zur Definition eines IDC (unique, key, keyref) stehen die folgenden Methoden zur Verfügung:

 

In der Schema-Übersicht können IDCs für globale Elemente deklariert werden. Wählen Sie ein globales Element aus und definieren Sie die IDCs auf dem Register "Identity Constraints" des AAIDC-Bereichs (Attribute/Assertions/Identity-Constraints) (Abbildung unten).

IDCUnique02

Über das Einfügen- oder Anhängen-Symbol des Registers "Identity Constraints" können Sie einen IDC (unique, key, keyref) hinzufügen. Mit Hilfe dieser Symbole können Sie auch ein Feld (field) zum ausgewählten IDC hinzufügen. Über die Schaltfläche Löschen können Sie das ausgewählte Feld oder den ausgewählten IDC löschen.

 

In der Content Model-Ansicht eines globalen Elements können IDCs für das globale Elemente oder einen lokalen Nachfahren davon definiert werden. In dieser Ansicht können IDCs entweder auf dem Register "Identity Constraints" (Abbildung oben) oder im Constraints-Kästchen eines Elements im Diagramm bearbeitet werden (Abbildung unten, in dem das Element match einen "unique"-Constraint hat, der einen Selektor team hat). Zweiteres kann im Dialogfeld "Schema-Ansicht konfigurieren" (Schema-Design | Ansicht konfigurieren) ausgewählt werden. Alternativ dazu können Sie in der Schema-Design-Symbolleiste auf die Schaltfläche Constraints im Diagramm anzeigen klicken, um die IDCs ein- bzw. auszublenden. Im Diagramm sehen Sie eine grafische Darstellung der IDCs, die mit Drag-and-Drop bearbeitet werden können.

IDCinDiagram01

Um einen IDC (unique, key, keyref) im Diagramm hinzuzufügen, wenn der Diagramm-Modus für IDCs aktiviert ist, klicken Sie mit der rechten Maustaste auf das gewünschte Element und wählen Sie im Kontextmenü den Befehl Child hinzufügen | [ IDC ]. Das Element field ist im Kontextmenü nur dann verfügbar, wenn im Diagramm ein IDC ausgewählt ist. Drücken Sie die Entf-Taste, um das ausgewählt Feld (field) bzw. den ausgewählten IDC zu löschen.

 

Der XPath-Ausdruck kann auf drei verschiedene Arten in die Kästchen selector und field eingegeben werden: (i) durch manuelle Eingabe, (ii) durch Auswahl des gewünschten Node aus einer Dropdown-Liste, die automatisch angezeigt wird, wenn Sie in das selector- oder field-Kästchen klicken oder (iii) durch Ziehen des Target Node in das selector- oder field-Kästchen und Loslassen der Maustaste, wenn das Kästchen markiert erscheint; der XPath-Ausdruck wird automatisch erstellt.

 

Anmerkung:Zusätzlich dazu steht in der Eingabehilfe "Komponenten" auf dem Register "Identity Constraints" eine Übersicht über alle Identity Constraints im Schema zur Verfügung.

 

Identity Constraint-Schaltflächen

 

icConstraintsToggle

Constraints im Diagramm anzeigen: Ist in der Content Model-Ansicht aktiviert. Damit wechseln Sie zwischen der Anzeige der IDCs im Diagramm (Schaltfläche aktiviert) und der Anzeige der IDCs auf dem Register "Identity Constraints".

icIDC

Identity Constraints visualisieren: Ist in der Content Model-Ansicht aktiviert. Damit können Sie die IDC-Informationen ein- und ausblenden.

IDCselector IDCfield

Selector Node, Field Node: Mit diesen beiden in Node-Kästchen des Diagramms angezeigten Symbolen wird der (in IDCs) vom XPath-Ausdruck für selector bzw. field ausgewählte Node gekennzeichnet.

 

Visualisieren von IDCs

Wenn die Schaltfläche "Identity Constraints visualisieren" icIDC aktiviert ist, werden die IDC-Informationen im Diagramm angezeigt. Wenn die Visualisierung aktiviert ist, werden Nodes, die von selector- und field-XPath-Ausdrücken ausgewählt weden, durch Symbole in den entsprechenden Kästchen gekennzeichnet (siehe Schaltflächen-Abschnitt oben) und das IDC-Kästchen durch grüne Linien mit seinen selector- und field-Kästchen verbunden (siehe Abbildung oben).

Mit der Schaltfläche "ID Constraints visualisieren" wird auch die IDC-Validierungsfunktion in der Schema-Ansicht aktiviert. Wenn ein XPath-Ausdruck einen Fehler aufweist oder ein IDC fehlerhaft ist, werden Fehler durch roten und Warnungen durch orangen Text gekennzeichnet. Wenn Sie das XML-Schema-Dokument validieren, werden die Fehler- und Warnmeldungen im Fenster "Meldungen" angezeigt.

Sie können die Validierung auch deaktivieren, indem Sie die Schaltfläche "ID Constraints visualisieren" icIDC deaktivieren.

 

XML-Code

Die IDC-Beispiele weiter unten in diesem Abschnitt basieren auf dem folgenden gültigen Instanzdokument.

 

<results xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="Scores.xsd">

 <!----- Groups ----->

 <group id="A">

         <team name="Brazil"/>

         <team name="Germany"/>

         <team name="Italy"/>

         <team name="Holland"/>

 </group>

 <group id="B">

         <team name="Argentina"/>

         <team name="France"/>

         <team name="England"/>

         <team name="Spain"/>

 </group>

 <!----- Matches ----->

 <match group="A" date="2012-06-12" location="Munich">

         <team name="Brazil" for="2" points="3"/>

         <team name="Germany" for="1" points="0"/>

 </match>

 <match group="A" date="2012-06-12" location="Frankfurt">

         <team name="Italy" for="2" points="1"/>

         <team name="Holland" for="2" points="1"/>

 </match>

 <match group="B" date="2012-06-13" location="Munich">

         <team name="Argentina" for="2" points="3"/>

         <team name="France" for="0" points="0"/>

 </match>

 <match group="B" date="2012-06-13" location="Berlin">

         <team name="England" for="0" points="1"/>

         <team name="Spain" for="0" points="1"/>

 </match>

</results>

 

Unique Constraints (unique)

Ein Unique Constraint gibt an, dass der Wert eines Elements oder Attributs (oder einer Gruppe von Elementen und/oder Attributen) innerhalb eines definierten Geltungsbereichs eindeutig sein muss. Im oben gezeigten XML-Fragment soll gewährleistet werden, dass es sich bei den beiden Mannschaften, die in einem Match gegeneinander antreten, nicht um dieselbe Mannschaft handelt. Daher werden die Werte des Nodes team/@name im Geltungsbereich jedes match Elements als unique (eindeutig) definiert. Dies geschieht folgendermaßen:

 

1.Wählen Sie in der Schema-Übersicht das Element match aus. Das Element match ist somit der Geltungsbereich der Identity Constraint-Definition.

2.Klicken SIe auf dem Register "Identity Constraints" in der linken oberen Ecke des Registers auf das Symbol Anhängen oder Einfügen und wählen Sie im Menü, das daraufhin angezeigt wird, den Eintrag Unique. Daraufin wird eine Zeile für den Unique Constraint eingefügt (siehe Abbildung unten).

IDCUnique01

3.Geben Sie dem Identity Constraint einen Namen. (In der Abbildung oben ist der Name MatchTeams.)

4.Geben Sie in der Spalte Selector einen XPath-Ausdruck zur Auswahl des Elements team ein. Beachten Sie, dass das Element match der Kontext-Node ist. Das Element team ist nun der Selektor des IDC, also der Node, auf den der Unique Constraint angewendet wird.

5.Geben Sie in der Spalte Field diden Node @name ein, der eindeutig sein muss. Der Wert dieses Node ist der Wert, der eindeutig sein muss.

 

Mit dem oben beschriebenen Unique Constraint wird definiert, dass jedes team-Element im Geltungsbereich jedes match-Elements einen eindeutigen @name-Attributwert haben muss.

 

Sie können die Eindeutigkeit anhand zusätzlicher Felder überprüfen. So kann z.B. ein Unique Constraint für das Element results definiert werden, um sicherzustellen, dass alle Spiele eine eindeutige Kombination von Datum und Ort aufweisen: An ein und demselben Ort darf am selben Datum nicht mehr als ein Spiel stattfinden. Beim Unique Constraint muss die Kombination der Werte von @date und @location für jedes match Element (den Selektor) im Geltungsbereich des results-Elements eindeutig sein.

 

Definieren Sie den Unique Constraint zum Element results auf ähnliche Weise wie oben beschrieben. Der Selektor ist match, die Felder (fields) sind @date und @location (siehe Abbildung unten). Um das zweite Feld hinzuzufügen, klicken Sie auf das Anhängen-Symbol und anschließend auf Field.

IDCUnique02
Anmerkung:Die Spalte Refer auf dem Register "Identity Constraints" ist nur bei keyref-Constraints, nicht aber bei unique- oder key-Constraints aktiv.

 

Key Constraints (key)

Mit einem Key Constraint wird festgelegt, (i) dass der Wert eines Elements oder Attributs (oder einer Gruppe von Elementen und/oder Attributen) innerhalb eines bestimmten Geltungsbereichs eindeutig sein muss und (ii) dass diese Feld-Elemente und/oder -Attribute im XML-Instandokument vorhanden sein müssen; optionale Elemente oder Attribute sollten daher nicht als Felder eines Key Constraint ausgewählt werden. Was den oben beschriebenen Punkt (i) betrifft, ist ein Key Constraint daher mit einem Unique Constraint identisch. Er legt jedoch einen zusätzlichen Constraint fest: seine Feld-Elemente/Attribute müssen im XML-Dokument vorhanden sein.

 

In der Abbildung unten sehen Sie einen Key Constraint für ein match-Element, der dem ersten oben beschriebenen Unique Constraint ähnelt.

IDCKey01

Mit diesem Key Constraint wird festgelegt, dass jedes team-Element im Geltungsbereich jedes match-Element einen eindeutigen @name Attributwert haben muss. Zusätzlich dazu wird festgelegt, dass das @name-Attribut in jedem match/team-Element vorhanden sein muss.

 

Anmerkung:Die Spalte Refer auf dem Register "Identity Constraints" ist nur bei keyref-Constraints, nicht aber bei unique- oder key-Constraints aktiv.

 

Key Reference Constraint (keyref)

Ein Key Reference Constraint vergleicht eine Gruppe von Werten in einem Instanzdokument mit einer anderen. In unserem XML-Fragment (siehe oben) können wir z.B. mit Hilfe eines Key Reference Constraint überprüfen, ob die spielenden Mannschaften sich unter den in den jeweiligen Gruppen aufgelisteten Mannschaften befinden. Falls dies nicht der Fall ist, ist das XML-Dokument ungültig.

 

Zuerst erstellen wir eine Unique Konstante oder einen Key Constraint. In der Abbildung unten sehen Sie einen für das Element results erstellten Unique Constraint (unique) TeamsInGroupsFirst. Dieser Constraint verlangt, dass jedes team in group ein eindeutiges @name Attribut hat.

IDCKeyref01

Als nächstes erstellen wie den Key Reference Constraint (keyref) TeamCheck, der das Child team von match auswählt und überprüft, ob sein @name-Attributwert in den von TeamsInGroups, das es (in der Spalte Refer) referenziert, zurückgegebenen Werten vorhanden ist.

In der Abbildung unten sehen Sie die grafische Anzeige dieses Key Reference Constraint (blau markiert) zusammen mit der Eingabehilfe "Details" (in der Sie den referenzierten IDC ebenfalls auswählen können). Die Beziehungen des ausgewählten IDC werden mit einer durchgezogenen grünen Linie gezeigt, während nicht ausgewählte IDCs mit einer gepunkteten grünen Linie angezeigt werden. Außerdem wird für jeden Identity Constraint der vom XPath-Ausdruck für selector und field ausgewählte Node durch die Symbole IDCselector bzw. IDCfield markiert. Wenn ein Node reduziert ist, endet die Beziehungslinie zu diesem mit einem Auslassungszeichen.

IDCContentModelView

 

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.

 

 

IDs von Identity Constraints

Eine ID kann einem Identity Constraint, seinem Selektor und/oder Feldern zugewiesen werden. Wählen Sie dazu die gewünschte Komponente aus und geben Sie die ID in der Eingabehilfe "Details" in die Zeile id ein.

 

Sortieren von Identity Constraints

Sie können die IDCs auf dem Register "Identity Constraints" durch Klicken auf die Schaltfläche Sortieren in der Symbolleiste des Registers sortieren. Im daraufhin angezeigten Dialogfeld "Komponenten sortieren" (Abbildung unten) können Sie auswählen, ob entweder die ausgewählte einzelne Komponente und ihre gleichrangigen Komponenten oder eine Gruppe von ausgewählten Komponenten sortiert werden soll. Mit Hilfe von Umschalt + Klick können Sie einen Bereich auswählen, mit Strg + Klick können Sie zusätzliche Komponenten zur Auswahl hinzufügen.

AttributesSortComponentsDlg

Nach Auswahl des Bereichs können Sie festlegen, ob der gesamte Bereich alphabetisch (Name vor Art) oder alphabetisch nach Art (d.h. zuerst nach dem Unique Constraint, dann nach Key Constraints und dann nach Key References sortiert werden soll).

 

Die Sortierreihenfolge wird im Text des Schemas implementiert.

 

© 2017-2023 Altova GmbH