Arrayvorlagendatentypen
ARRAY-Datentypen bestehen aus einem oder mehreren Werten, die alle denselben Datentyp aufweisen. Arrays können als feste, variable oder unbestimmte Länge definiert werden.
*DataType: ARRAY weist eine Vorlage an, einen zusammengesetzten Datentyp zu definieren, dessen Member alle denselben Datentyp aufweisen (auch als Memberdatentyp bezeichnet). Die Member des Arraydatentyps werden als einzelne untergeordnete XML-Elemente ausgegeben, die zu dem Element gehören, das den einschließenden Kontext darstellt.
Wenn jedes untergeordnete Element einen Datentypgrundtyp darstellt, wird der Datentyp durch das XML-Attribut xsi:type in jedem Element definiert. Wenn ein GDL-Attribut so definiert ist, dass es den Datentyp ARRAY aufweist, ist der einschließende Kontext das <GDL_ATTRIBUTE-Element> . Der Elementname jedes untergeordneten XML-Elements ist das entsprechende Tag, das von der *ElementTags-Direktive definiert wird. Wenn der COMPOSITE selbst ein Member eines anderen zusammengesetzten Datentyps ist, wird ein Element erstellt, das diesen einschließenden Kontext darstellt. Der Name dieses übergeordneten Elements ist das entsprechende Tag, das von der Vorlage zugewiesen wird, die den einschließenden Verbunddatentyp definiert hat.
Die folgenden Anweisungen werden verwendet, um den ARRAY-Datentyp zu definieren:
*ElementType (erforderlich). Der Name der Vorlage, die den Datentyp aller Elemente definiert. Sie können nur einen Datentyp angeben.
*RequiredDelimiter (Erforderlich). Eine Zeichenfolge, die jedes Arrayelement syntaktisch vom nächsten trennt. Zwei aufeinanderfolgende Trennzeichen werden als ausgelassenes Element interpretiert. Trennzeichen sind nicht erforderlich, um darauf hinzuweisen, dass nachgestellte Elemente weggelassen werden. Seien Sie sehr vorsichtig, wenn Leerzeichen als Trennzeichen oder als Teil der Trennzeichenzeichenfolge verwendet werden. Beispielsweise werden überflüssige Leerzeichen vom Parser so interpretiert, dass sie nicht angegebene Elemente angeben. und da Sie solche zusätzlichen Leerzeichen möglicherweise nicht sehen können, treten möglicherweise unerwartete Analysefehler auf.
Darüber hinaus werden überschüssige Leerzeichen routinemäßig aus der Quelldatei entfernt, und Leerzeichen werden häufig als Ergebnis der Präprozessor-, Makro- und Kommentarverarbeitung dem Eingabedatenstrom hinzugefügt. Daher kann die tatsächliche Zeichenfolge, die analysiert wird, eine völlig andere Anzahl von Leerzeichen aufweisen als ursprünglich angegeben.
Sie sollten keine Tabstoppzeichen als Teil der erforderlichen Trennzeichenzeichenfolge verwenden, da sie während der Eingabeverarbeitung routinemäßig in Leerzeichen konvertiert werden.
*OptionalDelimiter (Optional). Jede Zeichenfolge, die aus Zeichen besteht, die in *OptionalDelimiter angegeben sind und neben der *RequiredDelimiter-Zeichenfolge angezeigt werden, werden als Teil des Trennzeichens betrachtet. Das erste Zeichen, das in der *RequiredDelimiter-Zeichenfolge definiert ist, darf nicht innerhalb von *OptionalDelimiter angezeigt werden.
*ElementTags (erforderlich). Wenn Sie jedem Element im Array den gleichen Elementnamen zuweisen möchten (oder wenn das Array eine unbegrenzte Größe aufweisen kann), geben Sie nur ein Tag an. Geben Sie andernfalls eine Zahl an, die dem höchstwert entspricht, den *ArraySize angibt.
Jeder Member des Arrays wird mit dem entsprechenden Tag benannt. Diese Benennung ist nützlich, wenn ein oder mehrere Arrayelemente weggelassen werden. Wenn Arrayelemente weggelassen werden, wird das Tag, das dem ausgelassenen Element entspricht, nicht verwendet. Um die Verwechslung des Clients zu vermeiden, verwenden Sie GDL Momentaufnahme reservierten Elementnamen (d. h. CONSTRUCT, ATTRIBUTE und Personality) nicht als Tagnamen.
*ArraySize (erforderlich). Verwenden Sie eine ganze Zahl, um die Größe eines Arrays mit fester Größe anzugeben, oder verwenden Sie zwei ganze Zahlen, um die minimale und maximale zulässige Größe für ein Array mit variabler Größe anzugeben. Beachten Sie, dass für die mindeste Größe null zulässig ist und das GPD-Platzhalterzeichen (*) verwendet werden kann, um die Größe oder die maximale Größe anzugeben. Geben Sie in den instance Daten mit aufeinanderfolgenden Kommas ausgelassene Werte an (z. B
*DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,
. ).*ArrayLabel (optional). Wenn diese Direktive angegeben wird, muss die Liste der Arrayelemente in Klammern eingeschlossen und durch die Bezeichnung *ArrayLabel vorangestellt werden. Wenn in dieser Direktive keine Bezeichnung angegeben ist, sind die Klammern optional, und es ist keine Präfacing-Bezeichnung zulässig.
Betrachten Sie die folgende Vorlage.
*Template: RECTANGLE
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: INTEGER
*RequiredDelimiter: ","
*OptionalDelimiter: "<20 09>"
*ArrayLabel: "rect"
*ElementTags: (left, top, right, bottom)
*ArraySize: 4
}
Diese Vorlage definiert ein Array mit fester Größe mit vier ganzen Zahlen. Dem Array wird eine Bezeichnung (rect
) zugewiesen, und jedem Element im Array wird ein eindeutiges Elementtag zugewiesen. Diese Tags bezeichnen jedes Element in der XML-Ausgabe, um den Client zu unterstützen. Jedes Element wird vom nächsten durch ein Komma oder ein Komma sowie eine beliebige Kombination aus Leerzeichen und Tabstoppzeichen getrennt. Da die Arraygröße festgelegt ist, ist keine Auslassung von Elementen zulässig.
*DataType: ARRAY-Vorlagen generieren kein entsprechendes Schema. Stattdessen wird das Schema der Vorlage verwendet, die in der *ElementType-Direktive benannt ist.
Betrachten Sie den folgenden GDL-Eintrag.
*ImageableArea: rect( - 10, 20 , +30, 0x40 )
Und betrachten Sie die IMAGERECT-Vorlage.
*Template: IMAGERECT
{
*Name: "*ImageableArea"
*Type: ATTRIBUTE
*ValueType: RECTANGLE
}
Wenn der GDL-Eintrag von der IMAGERECT-Vorlage interpretiert wird, lautet die resultierende XML-Ausgabe.
<GDL_ATTRIBUTE Name="*ImageableArea" >
<left xsi:type="GDLW_int">-10</left>
<top xsi:type="GDLW_int">20</top>
<right xsi:type="GDLW_int">30</right>
<bottom xsi:type="GDLW_int">64</bottom>
</GDL_ATTRIBUTE>
Beachten Sie, dass der Verweis auf den umschlossenen Typ GDLW_int und nicht auf den ursprünglichen int-Typ verweist.