Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En sammansatt datatyp består av ett eller flera värden som har samma eller olika datatyper. Sammansatta objekt kan ha en fast eller variabel (men inte obegränsad) längd. Den här datatypen liknar datatypen C lLanguage-struktur.
*DataType: COMPOSITE dirigerar en mall för att definiera en sammansatt datatyp vars medlemmar kan ha olika datatyper. Medlemmarna i DEN SAMMANSATTa datatypen matas ut som enskilda underordnade XML-element som tillhör elementet som representerar den omslutande kontexten. Om varje underordnat element representerar en primitiv datatyp definieras datatypen av XML-attributet xsi:type i varje element. Om ett GDL-attribut har definierats som DataType : COMPOSITE är den omslutande kontexten det <GDL_ATTRIBUTE> elementet. Elementnamnet för varje XML-underordnat element är motsvarande tagg som definieras av direktiv: *ElementTags.
Om COMPOSITE självt är medlem i en annan sammansatt datatyp skapas ett element som representerar den omslutande kontexten. Namnet på det överordnade elementet är motsvarande tagg som tilldelas av mallen som motsvarar den omslutande sammansatta datatypen.
Följande direktiv används för att definiera datatypen COMPOSITE:
*ElementType (krävs). Namnet på mallen som definierar datatyperna för vart och ett av elementen. En datatyp måste anges för varje element. Ett eller flera element kan ha samma datatyp. Antalet ElementTypes som anges ska vara lika med värdet ArraySize eller Max som *ArraySize anger.
*RequiredDelimiter (krävs). En sträng som syntaktiskt separerar varje SAMMANSATT element från nästa. Två avgränsare i följd tolkas som ett utelämnat element. Avgränsare behövs inte för att ange utelämnande av avslutande element.
Du bör vara mycket försiktig om du använder blanksteg som avgränsare eller som en del av avgränsarsträngen. Till exempel tolkar parsern överflödiga blankstegstecken som indikerar utelämnade element. och eftersom du kanske inte ser extra blanksteg kan det uppstå konstiga parsningsfel. Dessutom tas överflödigt tomt utrymme bort rutinmässigt från källfilen och tomt utrymme läggs ofta till i indataströmmen som ett resultat av bearbetning av förprocessorer, makron och kommentarer. Den faktiska strängen som parsas kan därför ha ett helt annat antal blankstegstecken än vad som ursprungligen angavs. Du bör inte använda tabbtecken som en del av den obligatoriska avgränsarsträngen eftersom de rutinmässigt konverteras till blankstegstecken under bearbetningen av indata.
*OptionalDelimiter (valfritt). Alla strängar som består av tecken som anges i *OptionalDelimiter som visas intill strängen *RequiredDelimiter betraktas som en del av avgränsaren.
*ElementTags (krävs). Antalet taggar som anges ska vara lika med värdet ArraySize eller Max som *ArraySize anger. Varje medlem taggas med motsvarande tagg. Den här taggningen är användbar om ett eller flera element utelämnas. När SAMMANSATTa element utelämnas används inte taggen som motsvarar det utelämnade elementet. Undvik att förvirra klienten genom att inte använda reserverade elementnamn för GDL-ögonblicksbilder som taggnamn. De här reserverade namnen är CONSTRUCT, ATTRIBUTE och Personality.
*Matrisstorlek (valfritt). Om det här direktivet utelämnas antas en SAMMANSATT med fast storlek. Storleken är lika med antalet mallnamn i *ElementType.
Använd två heltal för att ange den minsta och högsta tillåtna storleken för en SAMMANSATT med variabel storlek. Observera att noll tillåts för den minsta storleken. Sammansatta datatyper med obegränsad storlek tillåts inte. Du kan inte använda GPD-jokertecknet (*) för att ange storlek eller maximal storlek.
*ArrayLabel (valfritt). Om det här direktivet anges måste listan över SAMMANSATTa element omges av parenteser och föregås av etiketten *ArrayLabel . Om ingen etikett anges i det här direktivet är parentesen valfri och ingen förinställd etikett tillåts.
Överväg följande mall.
*Template: QUALNAME_EX
{
*Type: DATATYPE
*DataType: COMPOSITE
*ElementType: (SYMBOL, SYMBOL, INTEGER)
*RequiredDelimiter: "."
*ElementTags: (feature, option, resourceID)
}
Föregående mall definierar en fast storlek, SAMMANSATT av två SYMBOL-datatyper och ett heltal. COMPOSITE är omärkt. Varje element i COMPOSITE tilldelas en unik ElementTag. De här taggarna etiketterar varje element i XML-utdata för att hjälpa klienten. Varje element avgränsas från nästa med exakt en punkt (.); inga andra tecken anses vara en del av avgränsare. *ArraySize har inte angetts , så en fast SAMMANSATT storlek antas. Eftersom den sammansatta storleken är fast tillåts ingen utelämnande av medlemmar.
*DataType: SAMMANSATTa mallar genererar inte något motsvarande schema. Schemat för de mallar som namnges i *ElementType-direktivet används i stället.
Tänk dig till exempel en SYMBOL-mall som definieras på följande sätt.
*Template: SYMBOL
{
*Type: DATATYPE
*DataType: FILTER_TYPE
*ElementType: XML_STRING
*FilterTypeName: "SYMBOLNAME"
}
Och tänk på följande GDL-post.
*rcNameID: ( RESDLL.stdname.467 )
Eller överväg följande GDL-post som inte har de valfria parenteserna.
*rcNameID: RESDLL.stdname.467
Anta att GDL-posten tolkas med hjälp av följande RC_NAME_ID mall.
*Template: RC_NAME_ID
{
*Name: "*rcNameID"
*Type: ATTRIBUTE
*ValueType: QUALNAME_EX
*Additive: LEAST_TO_MOST_RECENT
}
Resultatet av XML-utdata blir följande.
<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>
I följande exempel visas kapslade sammansatta datatyper med hjälp av en INTERVAL-datatyp som innehåller ett par DATE-datatyper, som representerar ett tidsintervall. Varje DATUM-datatyp är sammansatt av datatypen MONTH, DAY och YEAR. Datatypen INTERVAL används av attributet VACATION GDL för att uttrycka en tidsperiod som en anställd kan vara frånvarande. Följande samling mallar skulle åstadkomma den här situationen.
Månadsmall
*Template: MONTHS
{
*Type: DATATYPE
*DataType: ENUMERATOR
*XMLDataType: "months"
*EnumeratorList: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
}
Dagmall
*Template: DAY
{
*Inherits: INTEGER
*MinValue: 1
*MaxValue: 31
}
Årsmall
*Template: YEAR
{
*Inherits: INTEGER
*MinValue: 1900
*MaxValue: 2100
}
Datummall
*Template: DATE
{
*Type: DATATYPE
*DataType: COMPOSITE
*ElementType: (MONTHS, DAY, YEAR)
*RequiredDelimiter: "-"
*ElementTags: (month, day, year)
}
Intervallmall
*Template: INTERVAL
{
*Type: DATATYPE
*DataType: ARRAY
*ElementType: DATE
*RequiredDelimiter: "to"
*OptionalDelimiter: "<20 09>"
*ElementTags: (start_date, end_date)
*ArraySize: 2
}
Semestermall
*Template: VACATION
{
*Name: "*VacationDates"
*Type: ATTRIBUTE
*ValueType: INTERVAL
}
Överväg följande GDL-post.
*VacationDates: Dec-20-2001 to Jan-3-2002
Om den här GDL-posten tolkas med hjälp av mallen VACATION blir de resulterande XML-utdata följande.
<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>