Freigeben über


Arrayvorlagen-Datentypen

ARRAY-Datentypen bestehen aus einem oder mehreren Werten, die alle denselben Datentyp aufweisen. Arrays können so definiert werden, dass sie fest, variabel oder unbegrenzt lang sind.

*DataType: ARRAY leitet eine Vorlage an, um einen zusammengesetzten Datentyp zu definieren, dessen Member derselbe Datentyp sind (auch als Datentyp der Member bezeichnet). Die Elemente des Arraydatentyps werden als einzelne untergeordnete XML-Elemente ausgegeben, die zum Element gehören, das den umschließ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 als Array vom Datentyp ARRAY definiert ist, ist der eingeschlossene Kontext das <GDL_ATTRIBUTE>-Element. Der Elementname jedes untergeordneten XML-Elements ist das entsprechende Tag, das vom *ElementTags Direktive definiert wird. Wenn der COMPOSITE selbst ein Element eines anderen zusammengesetzten Datentyps ist, wird ein Element erstellt, um diesen eingeschlossenen Kontext darzustellen. Der Name dieses übergeordneten Elements ist das entsprechende Tag, das von der Vorlage zugewiesen wird, die den eingeschlossenen Verbunddatentyp definiert hat.

Die folgenden Direktiven 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 voneinander trennt. Zwei aufeinander folgende Trennzeichen werden als ausgelassenes Element interpretiert. Trennzeichen sind nicht erforderlich, um auf das Weglassen von nachgestellten Elementen hinzuweisen. Seien Sie sehr vorsichtig, wenn Leerzeichen als Trennzeichen oder als Teil der Trennzeichenzeichenfolge verwendet werden. So werden z. B. zusätzliche Leerzeichen vom Parser so interpretiert, dass es ausgelassene Elemente angibt; und da sie möglicherweise nicht in der Lage sind, solche zusätzlichen Leerzeichen anzuzeigen, treten möglicherweise unerwartete Analysefehler auf.

    Darüber hinaus werden übermäßige Leerzeichen routinemäßig aus der Quelldatei entfernt, und Leerzeichen werden häufig dem Eingabedatenstrom als Ergebnis der Vorprozessor-, Makro- und Kommentarverarbeitung 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 Tabstoppzeichen nicht als Teil der erforderlichen Trennzeichenzeichenfolge verwenden, da sie während der Eingabeverarbeitung routinemäßig in Leerzeichen konvertiert werden.

  • *OptionalDelimiter (Optional). Eine beliebige Zeichenfolge, die aus Zeichen besteht, die in *OptionalDelimiter angegeben sind und neben dem *RequiredDelimiter Zeichenfolge angezeigt werden, wird als Teil des Trennzeichens betrachtet. Das erste Zeichen, das in der *RequiredDelimiter- Zeichenfolge definiert ist, darf nicht innerhalb der *OptionalDelimiter-angezeigt werden.

  • *ElementTags (Erforderlich). Wenn Sie jedes Element im Array demselben Elementnamen zuweisen möchten (oder wenn das Array unbegrenzt groß sein kann), geben Sie nur ein Tag an. Geben Sie andernfalls eine Zahl an, die dem maximal zulässigen Wert entspricht, *ArraySize angibt.

    Jedes Element des Arrays wird mit dem entsprechenden Tag benannt. Diese Benennung ist nützlich, wenn mindestens ein Arrayelement ausgelassen wird. Wenn Arrayelemente weggelassen werden, wird das Tag, das dem ausgelassenen Element entspricht, nicht verwendet. Verwenden Sie nicht reservierte GDL-Snapshot-Elementnamen (d. h. CONSTRUCT, ATTRIBUT und Persönlichkeit) als Tagnamen, um zu verwechseln.

  • *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 Null für die Mindestgröße zulässig ist und das GPD-Platzhalterzeichen (*) verwendet werden kann, um die Größe oder die maximale Größe anzugeben. Geben Sie ausgelassene Werte in den Instanzdaten mit aufeinander folgenden Kommas an (z. B. *DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,).

  • *ArrayLabel (Optional). Wenn diese Direktive angegeben ist, muss die Liste der Arrayelemente durch Klammern eingeschlossen werden und von der bezeichnung *ArrayLabel vorangestellt werden. Wenn in dieser Richtlinie keine Bezeichnung angegeben ist, sind die Klammern optional, und es ist keine Präfacingbezeichnung 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 vier ganzzahligen Zahlen mit fester Größe. Dem Array wird eine Beschriftung (rect) zugewiesen, und jedem Element im Array wird ein eindeutiges Elementtag zugewiesen. Diese Tags bezeichnen jedes Element in der XML-Ausgabe, um dem Client zu helfen. Jedes Element wird durch ein Komma oder komma sowie eine beliebige Kombination aus Leerzeichen und Tabstoppzeichen voneinander getrennt. Da die Arraygröße behoben 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.

Berücksichtigen Sie den folgenden GDL-Eintrag.

*ImageableArea:   rect( - 10, 20 , +30, 0x40  )  

Und berücksichtigen 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 umbrochenen Typ GDLW_int und nicht auf den ursprünglichen int.