Dela via


Datatyper för matrismallar

MATRISdatatyper består av ett eller flera värden som alla har samma datatyp. Matriser kan definieras som fasta, variabla eller obegränsade längd.

*DataType: ARRAY dirigerar en mall för att definiera en sammansatt datatyp vars medlemmar alla har samma datatyp (även kallat medlemmarnas datatyp). Medlemmar i matrisdatatypen 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 av datatypen ARRAY är den omslutande kontexten det <GDL_ATTRIBUTE> elementet. Elementnamnet för varje XML-underordnat element är motsvarande tagg som *ElementTags-direktivet definierar. Om COMPOSITE självt är medlem i en annan sammansatt datatyp skapas ett element som representerar den omslutande kontexten. Namnet på det här överordnade elementet är motsvarande tagg som tilldelas av mallen som definierade den omslutande sammansatta datatypen.

Följande direktiv används för att definiera MATRIS-datatypen:

  • *ElementType (krävs). Namnet på mallen som definierar datatypen för alla element. Du kan bara ange en datatyp.

  • *RequiredDelimiter (krävs). En sträng som syntaktiskt separerar varje matriselement 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. Var mycket försiktig om blanksteg används som avgränsare eller som en del av avgränsarsträngen. Till exempel tolkas överflödiga blankstegstecken av parsern som indikerar utelämnade element. och eftersom du kanske inte kan se sådana extra blankstegstecken kan det uppstå oväntade 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 och som visas intill *RequiredDelimiter sträng betraktas som en del av avgränsaren. Det första tecknet som definieras i *RequiredDelimiter sträng får inte visas i *OptionalDelimiter.

  • *ElementTags (krävs). Om du vill tilldela varje element i matrisen samma elementnamn (eller om matrisen kan vara av obegränsad storlek) anger du bara en tagg. Annars anger du ett tal som är lika med det högsta värde som *ArraySize anger.

    Varje medlem i matrisen namnges med motsvarande tagg. Den här namngivningen är användbar om ett eller flera matriselement utelämnas. När matriselement 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 (dvs. CONSTRUCT, ATTRIBUTE och Personality) som taggnamn.

  • *ArraySize (krävs). Använd ett heltal för att ange storleken på en matris med fast storlek eller använd två heltal för att ange den minsta och högsta tillåtna storleken för en matris med variabel storlek. Observera att noll tillåts för den minsta storleken och att GPD-jokertecknet (*) kan användas för att ange storlek eller maximal storlek. Ange utelämnade värden i instansdata med på varandra följande kommatecken (till exempel *DaysOfWeek: (Sunday, Monday, , Wednesday, , Friday,).

  • *ArrayLabel (valfritt). Om det här direktivet anges måste listan över matriselement omges av parenteser och föregås av etiketten *ArrayLabel. Om ingen etikett anges i det här direktivet är parenteserna valfria och ingen prefacing-etikett tillåts.

Överväg följande mall.

*Template:  RECTANGLE
{
    *Type:  DATATYPE
    *DataType:   ARRAY
    *ElementType:  INTEGER
    *RequiredDelimiter: ","
    *OptionalDelimiter: "<20 09>"
    *ArrayLabel: "rect"
    *ElementTags: (left, top, right, bottom)
    *ArraySize: 4
}

Den här mallen definierar en matris med fast storlek med fyra heltal. Matrisen tilldelas en etikett (rect) och varje element i matrisen tilldelas en unik elementtagg. 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 ett kommatecken eller kommatecken plus valfri kombination av blanksteg och tabbtecken. Eftersom matrisstorleken är fast tillåts inget utelämnande av element.

*DataType: MATRIS mallar genererar inte ett motsvarande schema. Schemat för mallen som heter i *ElementType-direktivet används i stället.

Överväg följande GDL-post.

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

Och tänk på IMAGERECT-mallen.

*Template:  IMAGERECT
{
    *Name:  "*ImageableArea"
    *Type:  ATTRIBUTE
    *ValueType:  RECTANGLE
}

Om GDL-posten tolkas av IMAGERECT-mallen blir de resulterande XML-utdata.

<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> 

Observera att referensen är till den omslutna typen GDLW_int i stället för den ursprungliga int.