Altova XMLSpy 2024 Professional Edition

In einem Objekt wird ein Wert einem Schlüssel auf folgende Art und Weise zugeordnet: "MeinSchlüssel": Wert. Beim Schlüssel muss es sich immer um einen String handeln, daher muss dieser immer in Anführungszeichen gesetzt werden. Der Wert kann jeden beliebigen JSON-Datentyp haben. Jedes Schlüssel:Wert-Paar wird als Eigenschaft des Objekts bezeichnet (siehe Abbildung unten).

 

Hier sehen Sie ein Beispiel eines instantiierten Objekts mit drei Eigenschaften:

 

{

"emailtype": "home",

"emailaddress": "contact01.home@altova.com",

"citycode": 22

}

 

Das Schema für das Objekt würde in der Design-Ansicht etwa folgendermaßen aussehen:

 

JSONObject01

 

Beachten Sie bitte die folgenden Punkte:

 

Jede der Eigenschaften muss in der Instanz vorhanden sein. Dies wird durch die durchgezogene Umrandung der Eigenschaften gekennzeichnet. Wenn eine Eigenschaft optional ist, so ist die Umrandung eine gestrichelte Linie. Ob eine Eigenschaft obligatorisch oder optional ist, können Sie im Kontextmenü der Eigenschaft oder in der Eingabehilfe "Details" definieren.

Die Reihenfolge, in der Eigenschaften in der Instanz vorkommen, ist nicht im Schema definiert (und kann dort auch nicht definiert werden), d.h. die Reihenfolge, in der Eigenschaften im Schema definiert sind, spielt keine Rolle.

Eine Eigenschaft wird durch das Symbol eines blauen Quadrats innerhalb von geschweiften Klammern gekennzeichnet. Im Gegensatz dazu wird eine Mustereigenschaft oder ein Eigenschaftsplatzhalter durch andere Symbole gekennzeichnet; siehe unten).

Der Typ einer Eigenschaft kann durch Doppelklick auf den Typ im Diagramm und Auswahl einer Option aus der daraufhin angezeigten Dropdown-Liste bearbeitet werden. Alternativ dazu kann der Typ auch in der Eingabehilfe "Details" ausgewählt werden.

Der Constraint-Wert der Eigenschaft emailaddress wird in der Eingabehilfe "Constraints" definiert.

 

Eigenschaften, Mustereigenschaften, Eigenschaftsplatzhalter und Eigenschaftsnamenschemas

Ein Objekt kann Eigenschaften, Mustereigenschaften, Eigenschaftsplatzhalter und Eigenschaftsnamenschemas (neu in draft-07) haben. Diese können über die Kontextmenüs (i) des Objekts, (ii) des gelben Eigenschaftskastens (Rechtsklick auf den Titel Eigenschaften des Kastens) und (iii) einzelner Eigenschaften zum Objekt hinzugefügt werden. Die Eigenschaften wurden oben beschrieben. Nun wollen wir Mustereigenschaften und Eigenschaftsplatzhalter näher beschreiben.

 

Mustereigenschaft

Eine Mustereigenschaft (Abbildung unten) definiert den Namen der Eigenschaft mit Hilfe einer Regular Expression. So wird z.B. in der Regular Expression in der Abbildung unten definiert, dass die Eigenschaft (i) einen Namen haben muss, der mit einem Unterstrich beginnt und (ii) als Wert einen Booleschen Wert haben muss. Mustereigenschaften haben keine obligatorisch-Einschränkung. Sie können beliebig viele Mustereigenschaften hinzufügen. Beachten Sie das Symbol für Mustereigenschaften.

JSONObjectPatternProp01

Eigenschaftsplatzhalter

Ein Eigenschaftsplatzhalter (Abbildung unten) definiert, dass neben den anderen Eigenschaften der Eigenschaftsgruppe des Objekts beliebig viele Eigenschaften vorhanden sein können. Mit dem Platzhalter kann jedoch ein Typ für diese definiert werden. In der Abbildung links unten sehen Sie einen Eigenschaftsplatzhalter, der Eigenschaften mit einem beliebigen Namen aber einem numerischen Wert definiert. Es kann nur ein Eigenschaftsplatzhalter pro Objekt definiert werden. Wenn für den Platzhalter jedoch der Typ Beliebig definiert ist, so können Sie für jeden Typ in der Eingabehilfe "Constraints" Constraints definieren. Beachten Sie das Symbol für Eigenschaftsplatzhalter.

JSONObjectPropertyWildcard

Ab draft-2019-09 haben Eigenschaftsplatzhalter das neue Schlüsselwort unevaluatedProperties, welches nur verarbeitet wird, wenn das Schlüsselwort additionalProperties fehlt. Die Werte dieser zwei Schlüsselwörter werden durch Definition entsprechender Werte für die Einträge Definiert, Gilt für und Typ in der Eingabehilfe "Details" eines Platzhalters (Abbildung unten) erzeugt.

JSONSchemaWildcardDetails

In der Tabelle unten sehen Sie, wie sich diese Werte auf die Schlüsselwörter unevaluatedProperties und additionalProperties auswirken (und, wie sich die Schlüsselwörter umgekehrt auf die Werte der Eingabehilfe des Editors auswirken). So ist etwa in der Abbildung oben unevaluatedProperties=true.

 

addtionalProperties

unevaluatedProperties

 

Definiert

Gilt für

Typ

--

--

<=>

false

Alle

Ohne Constraints

true

ignoriert

<=>

true

Alle

Ohne Constraints

false

ignoriert

<=>

--

--

--

Schema

ignoriert

<=>

true

Alle

Schema-Typ

--

true

<=>

true

Nicht ausgewertete

Ohne Constraints

--

false

<=>

true

Nicht ausgewertete

Unzulässig

--

Schema

<=>

true

Nicht ausgewertete

Schema-Typ

 

Beachten Sie die folgenden Punkte:

 

Wenn addtionalProperties und unevaluatedProperties vorhanden sind, werden unevaluatedProperties ignoriert.

Definiert=false funktioniert nur bei Geltungsbereich=Alle und Type=Ohne Constraints.

 

Eigenschaftsnamenschema

Ein Eigenschaftsnamenschema (Abbildung unten) schränkt die Namen der Eigenschaften dieses Objekts ein. (Diese Funktionalität ist neu in draft-07.) So sehen wir z.B. in der Abbildung unten, dass die Namen von Eigenschaften Strings sein müssen. Zusätzlich dazu können wir über die Eingabehilfe "Constraints" weitere Constraints für die Eigenschaft definieren: z.B. dass der Name der Eigenschaft in einem bestimmten Zeichenlängenbereich liegen oder einem bestimmten Muster entsprechen muss.

JSONObjectPropertyNamesSchema
Anmerkung:Für Mustereigenschaften kann keine Mindest- oder Maximalanzahl definiert werden. Nähere Informationen dazu finden Sie im Abschnitt zur Validierung von Eigenschaften.

 

Wie werden Eigenschaften validiert?

Bei der Validierung von Eigenschaften geht der Validierungsprozessor folgendermaßen vor:

 

1.Zuerst wird der Name der Eigenschaft im Schema mit allen benannten Eigenschaften dieses Objekts verglichen.

2.Wenn keine Übereinstimmung gefunden wird, wird der Name mit allen Mustereigenschaften in der Eigenschaftsgruppe des Objekts verglichen.

3.Wenn immer noch keine Übereinstimmung gefunden wird, so wird der Platzhalter aufgerufen, falls einer vorhanden ist.

4.Wenn für den Namen immer noch keine Übereinstimmung gefunden wird, wird ein Validierungsfehler ausgegeben. Wenn der Name mit dem einer Eigenschaft oder einer Mustereigenschaft übereinstimmt oder wenn ein Platzhalter vorhanden ist, so wird der Wert mit dem Wert der entsprechenden Eigenschaftsdefinition verglichen.

5.Wenn der Instanzwert dem Typ und den Constraints der entsprechenden Eigenschaftsdefinition entspricht, so ist die Eigenschaft gültig. Andernfalls ist sie ungültig.

 

Beispiel

In der Abbildung unten ist ein Objekt mit den folgenden Eigenschaften definiert:

 

Es muss drei Eigenschaften namens emailtype, emailaddress und citycode haben.  

Es kann eine oder mehrere Eigenschaften haben, deren Name mit einem Unterstrich beginnt und deren Wert ein Boolescher Wert ist (siehe Mustereigenschaft in der Abbildung unten).

Es kann eine oder mehrere zusätzliche Eigenschaften mit einem beliebigen Namen und Wert haben.

JSONObjectExample

 

© 2017-2023 Altova GmbH