Freigeben über


Verbund-Vorlagendatentypen

Ein COMPOSITE-Datentyp besteht aus einem oder mehreren Werten, die dieselben oder unterschiedliche Datentypen aufweisen. Komposite können eine feste oder variable (aber nicht unbestimmte) Länge haben. Dieser Datentyp ähnelt dem Struktur-Datentyp der C-Sprache.

*Datentyp: COMPOSITE leitet eine Vorlage an, um einen zusammengesetzten Datentyp zu definieren, dessen Member unterschiedliche Datentypen aufweisen können. Die Elemente des COMPOSITE-Datentyps werden als einzelne untergeordnete XML-Elemente ausgegeben, die zum Element gehören, das den eingeschlossenen 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 "DataType: COMPOSITE" definiert ist, ist der eingeschlossene Kontext das <GDL_ATTRIBUTE-Element> . Der Elementname jedes untergeordneten XML-Elements ist das entsprechende Tag, das durch Anweisung: *ElementTags 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 dem eingeschlossenen Verbunddatentyp entspricht.

Die folgenden Richtlinien werden verwendet, um den COMPOSITE-Datentyp zu definieren:

  • *ElementType (Erforderlich). Der Name der Vorlage, die die Datentypen der einzelnen Elemente definiert. Für jedes Element muss ein Datentyp angegeben werden. Mindestens ein Element kann denselben Datentyp aufweisen. Die Anzahl der bereitgestellten Elementtypen sollte dem ArraySize- oder Max-Wert entsprechen, den *ArraySize angibt.

  • *RequiredDelimiter (Erforderlich). Eine Zeichenfolge, die jedes COMPOSITE-Element syntaktisch voneinander trennt. Zwei aufeinander folgende Trennzeichen werden als ausgelassenes Element interpretiert. Trennzeichen sind nicht erforderlich, um auf das Weglassen von nachgestellten Elementen hinzuweisen.

    Sie sollten sehr vorsichtig sein, wenn Sie Leerzeichen als Trennzeichen oder als Teil der Trennzeichenzeichenfolge verwenden. Beispielsweise interpretiert der Parser zusätzliche Leerzeichen als Hinweis auf ausgelassene Elemente. und da möglicherweise keine zusätzliche Leerzeichen angezeigt werden, können seltsame Analysefehler auftreten. 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). Jede Zeichenfolge, die aus Zeichen besteht, die in *OptionalDelimiter angegeben sind, die neben der *RequiredDelimiter-Zeichenfolge angezeigt wird, wird als Teil des Trennzeichens betrachtet.

  • *ElementTags (Erforderlich). Die Anzahl der bereitgestellten Tags sollte dem ArraySize- oder Max-Wert entsprechen, den *ArraySize angibt. Jedes Mitglied wird mit dem entsprechenden Tag markiert. Dieses Tagging ist nützlich, wenn mindestens ein Element ausgelassen wird. Wenn COMPOSITE-Elemente nicht angegeben werden, wird das Tag, das dem ausgelassenen Element entspricht, nicht verwendet. Um die Verwirrung des Clients zu vermeiden, verwenden Sie keine reservierten GDL-Snapshot-Elementnamen als Tagnamen. Diese reservierten Namen sind CONSTRUCT, ATTRIBUTE und PERSONALITY.

  • *ArraySize (Optional). Wenn diese Direktive weggelassen wird, wird davon ausgegangen, dass ein COMPOSITE mit fester Größe vorliegt. Die Größe entspricht der Anzahl der Vorlagennamen in *ElementType.

    Verwenden Sie zwei Ganzzahlen, um die minimal und maximal zulässige Größe eines variablen COMPOSITE anzugeben. Beachten Sie, dass null für die Mindestgröße zulässig ist. Composite-Datentypen mit unbegrenzter Größe sind nicht zulässig. Sie können das GPD-Platzhalterzeichen (*) nicht verwenden, um die Größe oder die maximale Größe anzugeben.

  • *ArrayLabel (Optional). Wenn diese Direktive angegeben ist, muss die Liste der COMPOSITE-Elemente durch Klammern eingeschlossen und mit dem Label *ArrayLabel gekennzeichnet werden. Wenn in dieser Richtlinie keine Bezeichnung angegeben ist, sind die Klammern optional, und es ist keine vorangestellte Bezeichnung zulässig.

Betrachten Sie die folgende Vorlage.

*Template:  QUALNAME_EX
{
    *Type:  DATATYPE
    *DataType:   COMPOSITE
    *ElementType: (SYMBOL, SYMBOL, INTEGER)
    *RequiredDelimiter: "."
    *ElementTags: (feature, option, resourceID)
}

Die vorangehende Vorlage definiert eine festgelegte Größe und setzt sich aus einem COMPOSITE von zwei SYMBOL-Datentypen und einer ganzen Zahl zusammen. Der COMPOSITE ist nicht gekennzeichnet. Jedem Element im COMPOSITE wird ein eindeutiges ElementTag zugewiesen. Diese Tags bezeichnen jedes Element in der XML-Ausgabe, um dem Client zu helfen. Jedes Element wird durch genau einen Punkt (.) vom nächsten getrennt. keine anderen Zeichen werden als Teil des Trennzeichens betrachtet. *ArraySize ist nicht angegeben, daher wird eine feste ZUSAMMENGESETZT-Größe angenommen. Da die COMPOSITE-Größe festgelegt ist, ist keine Auslassung von Mitgliedern zulässig.

*Datentyp: COMPOSITE-Vorlagen generieren kein entsprechendes Schema. Das Schema der Vorlagen, die in der *ElementType-Direktive benannt sind, werden stattdessen verwendet.

Betrachten Sie beispielsweise eine SYMBOL-Vorlage, die wie folgt definiert ist.

*Template:  SYMBOL
{
    *Type:  DATATYPE
    *DataType:   FILTER_TYPE
    *ElementType:  XML_STRING
    *FilterTypeName: "SYMBOLNAME"
}

Und berücksichtigen Sie den folgenden GDL-Eintrag.

*rcNameID:     ( RESDLL.stdname.467 )  

Oder berücksichtigen Sie den folgenden GDL-Eintrag, der nicht über die optionalen Klammern verfügt.

*rcNameID:     RESDLL.stdname.467

Gehen Sie davon aus, dass der GDL-Eintrag mithilfe der folgenden RC_NAME_ID Vorlage interpretiert wird.

*Template:  RC_NAME_ID
{
    *Name:  "*rcNameID"
    *Type:  ATTRIBUTE
    *ValueType:  QUALNAME_EX
    *Additive: LEAST_TO_MOST_RECENT
}

Die resultierende XML-Ausgabe lautet wie folgt.

    <GDL_ATTRIBUTE Name="*rcNameID"  >
        <feature  xsi:type="GDLW_string">RESDLL</feature>
        <option  xsi:type="GDLW_string">stdname</option>
        <resourceID  xsi:type="GDLW_int">467</resourceID>
    </GDL_ATTRIBUTE>

Das folgende Beispiel zeigt geschachtelte zusammengesetzte Datentypen mithilfe eines INTERVAL-Datentyps, der ein Date-Datentyppaar enthält, das ein Zeitintervall darstellt. Jeder DATE-Datentyp ist ein zusammengesetzter Datentyp aus den Datentypen MONAT, TAG und JAHR. Der DATENTYP INTERVAL wird vom VACATION GDL-Attribut verwendet, um einen Zeitraum auszudrücken, in dem ein Mitarbeiter möglicherweise nicht vorhanden ist. Die folgende Sammlung von Vorlagen würde diese Situation erreichen.

Monatsvorlage

*Template:  MONTHS
{
    *Type:  DATATYPE
    *DataType:   ENUMERATOR
    *XMLDataType: "months"
    *EnumeratorList: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
}

Tagesvorlage

*Template:  DAY
{
*Inherits: INTEGER
*MinValue: 1
*MaxValue: 31
}

Jahresvorlage

*Template:  YEAR
{
*Inherits: INTEGER
*MinValue: 1900
*MaxValue: 2100
}

Datumsvorlage

*Template:  DATE
{
    *Type:  DATATYPE
    *DataType:   COMPOSITE
    *ElementType: (MONTHS, DAY, YEAR)
    *RequiredDelimiter: "-"
    *ElementTags: (month, day, year)
}

Intervallvorlage

*Template:  INTERVAL
{
    *Type:  DATATYPE
    *DataType:   ARRAY
    *ElementType:  DATE
    *RequiredDelimiter: "to"
    *OptionalDelimiter: "<20 09>"
    *ElementTags: (start_date, end_date)
    *ArraySize: 2
}

Urlaubsvorlage

*Template:  VACATION
{
    *Name:  "*VacationDates"
    *Type:  ATTRIBUTE
    *ValueType:  INTERVAL
}

Berücksichtigen Sie den folgenden GDL-Eintrag.

*VacationDates:  Dec-20-2001 to Jan-3-2002

Wenn dieser GDL-Eintrag mithilfe der VACATION-Vorlage interpretiert wird, lautet die resultierende XML-Ausgabe wie folgt.

    <GDL_ATTRIBUTE Name="*VacationDates"  >
        <start_date >
            <month  xsi:type="GDLW_months">Dec</month>
            <day  xsi:type="GDLW_int">20</day>
            <year  xsi:type="GDLW_int">2001</year>
        </start_date>
        <end_date >
            <month  xsi:type="GDLW_months">Jan</month>
            <day  xsi:type="GDLW_int">3</day>
            <year  xsi:type="GDLW_int">2002</year>
        </end_date>
    </GDL_ATTRIBUTE>