XSD-Vorlagendatentypen
Der datentyp XSD_DEFINED verwendet Schemas für die Definition des Datentyps. Sie können einen beliebigen ComplexType oder SimpleType definieren.
*DataType: XSD_DEFINED erstellt eine Datentypdefinition mithilfe der XML-Standardelemente <xsd:complexType> oder < xsd:simpleType> . Der instance Datenwert wird als Inhalt eines XML-Elements ausgegeben, dessen xsi:type durch den Wert von *XMLDataType angegeben wird, der in dieser Vorlage angezeigt wird. Mit dieser Ausgabe können Sie XSD verwenden, um neue einfache oder komplexe Typen abzuleiten und in GDL-Attributen zu verwenden.
Die folgenden Anweisungen werden verwendet, um den XSD_DEFINED Datentyp vollständig zu definieren:
*XMLDataType (erforderlich). Der Name (NCName), der dem von dieser Vorlage definierten XSD-Datentyp zugewiesen wurde. Dieser Name ist der Wert des name-Attributs im <complexType-> oder <simpleType-Element> , das die *XSDTypeDefinition-Direktive definiert. Dieser Name muss für alle XSD_DEFINED- und ENUMERATOR-Typen eindeutig sein. Um Konflikte mit Datentypen zu vermeiden, die der GDL-Parser definiert, sollten Sie Namen vermeiden, die mit "GDL_" und "GDLW_" beginnen. Der XML-Standard definiert die Syntax für einen NCName und kann zusätzliche Einschränkungen erzwingen.
*XSDTypeDefinition (Erforderlich). Die wohlgeformte XSD, die den Datentyp definiert. Nur die <complexType-> oder <simpleType-Elemente> können in dem Kontext angezeigt werden, der dem Stamm am nächsten ist. Mehrere <complexType> - oder <simpleType-Elemente> können im Stammkontext als gleichgeordnete Elemente angezeigt werden, wenn höchstens nur eines von ihnen als Werttyp eines GDL-Attributs referenziert wird. Der Name des Typs, auf den als Werttyp eines GDL-Attributs verwiesen wird, ist der Name, der in der *XMLDataType-Direktive angezeigt wird. Auf die verbleibenden Datentypen kann nur aus anderen <complexType- oder <simpleType-Definitionen>> verwiesen werden.
Typdefinitionen können auch auf andere Typdefinitionen verweisen, die in anderen Vorlagen definiert sind. Wenn Sie in einer *XSDTypeDefinition-Direktive auf Typdefinitionen verweisen, die mithilfe der *XSDTypeDefinition-Direktive erstellt wurden, müssen Sie das Namespacepräfix gdl: verwenden.
Wenn die XSD mehrere Zeilen belegt oder gegen GDL-Syntaxregeln verstößt, muss sie von <Begin/EndValue-Trennzeichen> eingeschlossen werden. Die in diesem Trennzeichen definierte XSD wird in das vom GDL-Parser generierte XSD-Schema eingefügt. Beachten Sie, dass die <complexType-Definitionen> , auf die als ValueType eines GDL-Attributs verwiesen wird, keine XML-Attribute deklarieren können. In dem Schema, das der GDL-Parser erstellt, ist der XSD-Namespace der Standardnamespace, sodass Elementnamen wie <complexType> , <Sequenz> oder <Element> keinen Namespacequalifizierer benötigen. Der Zielnamespace ist dem Präfix gdl: zugeordnet.
*Complextype? (WAHR) | FALSE) (Optional). Wenn diese Anweisung TRUE ist, verweist der GDL-Parser beim Erweitern dieses Datentyps auf diese Definition als <complexContent> . Andernfalls wird auf die Definition als <simpleContent> verwiesen. Wenn diese Anweisung nicht angegeben wird, wird vom Parser angenommen, dass sie FALSE ist.
*ArrayLabel (optional). Wenn diese Direktive angegeben wird, erwartet der Parserfilter, dass die instance Werte dieses Typs in Klammern eingeschlossen werden, die der angegebenen Arraybezeichnung vorangestellt sind.
Die Syntax des Werts instance, der als von diesem Datentyp deklariert wird, muss der Syntax entsprechen, die von der XSD-Anweisung definiert wird, die die *XSDTypeDefinition-Direktive bereitstellt. Der Parser stellt das Start- und Endtag für das -Element bereit, und der Wert, instance Daten nur den Elementinhalt bereitstellen sollten. Wenn die XML-Syntax mit den grundlegenden GDL-Syntaxregeln in Konflikt kommt, muss der Wert (oder nur der in Konflikt stehende Teil) in <Begin/EndValue:-> Konstrukte eingeschlossen werden.
XML-Werte mit solchen inkompatiblen Syntaxen oder deren Syntax nicht mit der Syntax kompatibel ist, die zusammengesetzte Datentypen verwenden, können nicht als Member eines zusammengesetzten Datentyps angezeigt werden. Beachten Sie auch, dass der GDL-Parser keine speziellen XML-Zeichen wie öffnende oder schließende Klammern (< oder >) oder ein Ampersand (&) escape. Der Ersteller des Werts instance ist für die Einhaltung der XML-Syntax für Zeichendaten verantwortlich.
Betrachten Sie beispielsweise die folgende Vorlage.
*Template: USAddress
{
*Type: DATATYPE
*DataType: XSD_DEFINED
*ComplexType?: TRUE
*XMLDataType: "USAddress"
*XSDTypeDefinition:<BeginValue:XSD>
<complexType name="USAddress">
<sequence>
<element name="name" type="string"/>
<element name="street" type="string"/>
<element name="city" type="string"/>
<element name="state" type="string"/>
<element name="zip" type="gdl:zipCode"/>
</sequence>
</complexType>
<simpleType name="zipCode">
<restriction base="integer">
<minInclusive value="10000"/>
<maxInclusive value="99999"/>
</restriction>
</simpleType><EndValue:XSD>
}
Im vorherigen Beispiel wird ein XSD-definierter Typ namens "USAddress" definiert, auf den ein GDL-Attribut als ValueType verweisen kann. In diesem XSD-Beispiel werden tatsächlich zwei Datentypen definiert: USAddress und zipCode. Auf den zipCode-Typ kann nicht durch ein GDL-Attribut verwiesen werden und nur von einer anderen XSD-Datentypdefinition aus referenziert werden.
Im folgenden Beispiel wird in der Deklaration des zip-Elements> auf den <zipCode-Typ verwiesen. Beachten Sie, dass mithilfe des Namespacepräfix gdl: darauf verwiesen wird. ZipCode kann auch von einer XSD-Datentypdefinition in einer anderen Vorlage referenziert werden.
Die vorherige Vorlagendefinition verursacht die Erstellung des folgenden XML-Schemaeintrags (der Wert von *XSDTypeDefinition unverändert).
<complexType name="USAddress">
<sequence>
<element name="name" type="string"/>
<element name="street" type="string"/>
<element name="city" type="string"/>
<element name="state" type="string"/>
<element name="zip" type="gdl:zipCode"/>
</sequence>
</complexType>
<simpleType name="zipCode">
<restriction base="integer">
<minInclusive value="10000"/>
<maxInclusive value="99999"/>
</restriction>
</simpleType>
Der Parser erstellt automatisch einen anderen Datentyp, der einen neuen Typ definiert, der vom USAddress-Typ abgeleitet ist, aber zusätzliche XML-Attribute aufweist, die möglicherweise im Momentaufnahme angezeigt werden. Wenn Sie den ursprünglichen Datentyp verwenden, erhalten Sie Schemaüberprüfungsfehler, da der ursprüngliche Typ keine XML-Attribute zulässt. Bei diesem Ansatz müssen Sie keine durch Parser synthetisierten XML-Attribute in Ihren Vorlagen hart codieren. Wenn zukünftigen Versionen der Momentaufnahme zusätzliche Attribute hinzugefügt werden, müssen Sie die vorhandenen Vorlagen nicht ändern.
Das folgende Codebeispiel zeigt die zusätzliche Datentypdefinition.
<complexType name = "GDLW_USAddress">
<complexContent>
<extension base="gdl:USAddress">
<attribute name="Name" type="string" use="optional"/>
<attribute name="Personality" type="string" use="optional"/>
</extension>
</complexContent>
</complexType>
Hinweis Der datentyp GDLW_USAddress wird als <complexContent> deklariert, da die Vorlage für USAddress *ComplexType?: TRUE festgelegt hat.
Betrachten Sie den folgenden GDL-Eintrag.
*Address: <BeginValue:XML>
<name>Alice Smith</name>
<street>123 Maple Street</street>
<city>Mill Valley</city>
<state>CA</state>
<zip>90952</zip>
<EndValue:XML>
Betrachten Sie auch die ADDRESS-Vorlage, die die *Address GDL aAttribute als *ValueType deklariert, die von der Vorlage USAddress definiert ist, wie im folgenden Codebeispiel gezeigt.
*Template: ADDRESS
{
*Name: "*Address"
*Type: ATTRIBUTE
*ValueType: USAddress
}
Wenn der frühere GDL-Eintrag mithilfe der ADDRESS-Vorlage interpretiert wird, tritt die resultierende XML-Ausgabe auf.
<GDL_ATTRIBUTE Name="*Address" xsi:type="GDLW_USAddress" >
<name>Ben Smith</name>
<street>123 Maple Street</street>
<city>Mill Valley</city>
<state>CA</state>
<zip>90952</zip>
</GDL_ATTRIBUTE>
Das XML-Attribut xsi:type definiert diese instance des ATTRIBUT-Elements, um einen XSD-definierten Datentyp namens GDLW_USAddress zu enthalten. Der gesamte Wert des GDL-Attributs instance wird ohne Änderungen als Elementinhalt in das <GDL_ATTRIBUTE-Element> im XML-Momentaufnahme eingefügt. Daher muss der Wert gültiger XML-Code sein und allen XML-Syntaxregeln entsprechen, z. B. die Darstellung von Sonderzeichen.