Špecifikácia XML dát

Špecifikácia XML dát

Dáta XML súboru je tá časť v štruktúre XML súboru, ktorá obsahuje konfiguráciu objektov systému D2000 alebo jej časti.

Rezervované sekcie XML dát

  1. REFERENCES - obsahuje štruktúry reprezentujúce objektové a stĺpcové referencie objektu

  2. CFGRECORDS - obsahuje štruktúry reprezentujúce dáta objektu

  3. MEMBEROFLOGGROUP - obsahuje za sebou uvedené member elementy, ktoré určujú, do akej logickej skupiny daný objekt patrí

  4. MEMBEROFRESGROUP - obsahuje za sebou uvedené member elementy, ktoré určujú, do akej skupiny objektov daný objekt patrí

  5. CRC - obsahuje MD5 hash dát

  6. OBJLIFELOGS - obsahuje za sebou uvedené logy "života objektu"

Na získanie podrobných informácií o tom, ktorými štruktúrami sú definované objekty systému D2000, aké atribúty tieto štruktúry obsahujú, aké sú typy hodnôt týchto atribútov a aké hodnoty môžu tieto atribúty nadobúdať je možné použiť program pre výpis aktuálnej štruktúry. Súčasne tento výpis obsahuje nepodporované objekty a vymenované typy.

Rezervovaná sekcia REFERENCES


Obsah sekcie z príkladu XML súboru:

<HOBJ_REF> <uid>A25DED0E4DA94B4895A119370E3AF4FB</uid> <name>SV.Limits</name> <objType>D2RECORD</objType> <valType>Rec</valType> </HOBJ_REF> <COL_REF> <col_idx>1</col_idx> <col_name>VHL</col_name> <col_valType>Int</col_valType> </COL_REF> <HOBJ_REF> <uid>USER_VAR</uid> <name>USER_VAR</name> <objType>SYSTEM</objType> <valType>NAN</valType> </HOBJ_REF>

Obsahuje štruktúry:

  • HOBJ_REF reprezentujúce objektové referencie objektu

  • COL_REF reprezentujúce stĺpcové referencie objektu (objekt ich obsahuje, ak je objekt definícia štruktúry alebo na ňu odkazuje)

Popis vlastností objektových referencií:

  •  každá objektová referencia musí mať nastavený minimálne atribút name

  •  atribúty uid, objType a valType v objektovej referencii sú nepovinné

  •  ak je atribút uid v objektovej referencii nastavený, pri párovaní objektových referencií má prioritu pred atribútom name

Popis vlastností stĺpcových referencií:

  •  stĺpcové referencie musia nasledovať za príslušnou objektovou referenciou

  •  každá stĺpcová referencia musí mať nastavený minimálne atribút col_name

  •  atribúty col_idx a col_valType v stĺpcovej referencii sú nepovinné

  •  ak je atribút col_idx v stĺpcovej referencii nastavený, ma párovaní stĺpcových referencií prioritu pred atribútom col_name

Rezervovaná sekcia CFGRECORDS


Obsah sekcie z príkladu XML súboru:

<TObjItemData> <Id>0</Id> <Name>U.TimeSlice</Name> <Descript>Time Slice</Descript> <Typ>USER_VAR</Typ> <ParentId>USER_VAR</ParentId> <Value_Type>TmR</Value_Type> <CreateTime>08.10.2009 08:10:31.366</CreateTime> <ModifyTime>08.10.2009 08:18:02.938</ModifyTime> ... <uuid>5CB809E9342B7A46BD790A8C7D14C69E</uuid> </TObjItemData> <tUserVarData_Full> <tUserVarData> <MANUAL>True</MANUAL> <MANUAL_VAL/> <FLAGS/> <VALUE_TIME>08.10.2009 08:10:31.379</VALUE_TIME> <MONITOR>False</MONITOR> <SAVE_VALUE>True</SAVE_VALUE> </tUserVarData> <startVal/> </tUserVarData_Full>

V tejto sekcii sa musí vždy vyskytovať štruktúra TObjItemData (len jedenkrát) a to hneď na jej začiatku. Jednoznačne identifikuje objekt, ktorého konfigurácia je uložená v XML súbore. Za touto štruktúrou nasledujú štruktúry, ktorých počet a pomenovanie je závislé od konkrétneho typu objektu. Napríklad vyššie uvedený objekt je typu USER_VAR obsahuje ešte štruktúru s názvom tUserVarData_Full.

Popis vlastností identifikačnej šturktúry:

  • atribút Id reprezentuje Id objektu (údaj, ktorý ma význam pri operácii XML Import)

  • atribút Name musí byť vždy zadaný

  • atribút uuid, ak je zadaný, má pri párovaní objektov prioritu pred atribútom Name

Rezervovaná sekcia MEMBEROFLOGGROUP


Obsah sekcie z príkladu XML súboru:

<member>SELT\CD8FD25EF8A690341B111F5274CDB5AB</member>

Popis vlastností hodnoty memeber:

  • reprezentuje zaradenie objektov do logických skupín

  • musí obsahovať názov logickej skupiny (pred znakom '\')

  • môže obsahovať aj uid logickej skupiny (za znakom '\')

Poznámka: Pri operácii XML Import vplýva táto hodnota na členstvo objektu v jednotlivých logických skupinách.

Rezervovaná sekcia MEMBEROFRESGROUP


Obsah sekcie z príkladu XML súboru:

<member>Home_s\04CB44144B2CD8E46955D846D30B0F72</member>

Popis vlastností hodnoty memeber:

  • reprezentuje zaradenie objektov do skupín objektov

  • musí obsahovať názov skupiny objektov (pred znakom '\')

  • môže obsahovať aj uid skupiny objektov (za znakom '\')

  • ak je názov skupiny objektov uzavretý v '[' a ']', objekt bol pridaný do skupiny s potomkami

Rezervovaná sekcia CRC


Obsah sekcie z príkladu XML súboru:

a7a8bda021932a3547e6553cb8980273

Hodnota CRC predstavuje MD5 hash vytvorený z obsahu XML súboru. Zahŕňa dáta od <ROOT> elementu (včítane <ROOT> elementu) až po riadok pred CRC sekciou (vrátane znakov CR, LF alebo oboch). Vyhodnotenie CRC hodnoty má význam pre XML Import a XML Repository.

Vyhodnotenie CRC hodnoty:

  • sekcia sa v dátach nachádza

    • MD5 hash zodpovedá tejto hodnote - dáta neboli modifikované

    • MD5 hash nezodpovedá tejto hodnote - dáta boli modifikované

  • sekcia sa v dátach nenachádza - nedá sa určiť, či boli dáta modifikované

Vyhodnotenie tejto CRC hodnoty má zásadný vplyv na platnosť atribútu ModifyTime štruktúry TObjItemData v rezervovanej sekcii <CRGRECORDS>, čo sa prejaví pri operácii XML Import nasledovne:

  • ak je CRC hodnota platná, potom je čas modifikácie objektu nastavený na hodnotu atribútu ModifyTime z XML súboru

  • ak je CRC hodnota neplatná, potom je čas modifikácie objektu nastavený na čas XML súboru alebo na aktuálny čas, ak bol čas XML súboru nedefinovaný

  • ak bola CRC hodnota neplatná, alebo sa nenachádzala v XML súbore a pred operáciou XML Import je čas určený na zmenu rovný pôvodnému času modifikácie objektu, zmení import tento čas modifikácie na aktuálny čas

Rezervovaná sekcia OBJLIFELOGS


Obsah sekcie z príkladu XML súboru:

<tObjLifeLogData> <name>U.TimeSlice</name> <state>OLA_CREATED</state> <modify_time>08.10.2009 08:16:23.761</modify_time> <user_name>s</user_name> <process_name>WS1JSTF2.CNF</process_name> <computer_name>WS1JSTF2</computer_name> <log_type>OLT_CONFIG</log_type> <comment_text/> </tObjLifeLogData>

Za sebou uvedené štruktúry tObjLifeLogData reprezentujú logy "života objektu"

Popis vlastností log štruktúry:

  • name v logu sa môže odlišovať od name objektu (nakoľko objekt mohol byť premenovaný)

  • uid a id sa v logu nenachádza, nakoľko je obsiahnuté priamo v objekte

  • do cieľovej konfigurácie sa importujú len tie logy objektu, ktoré tam ešte pre daný objekt nie sú

Podporované typy hodnôt atribútov štruktúr


Medzi podporované typy hodnôt atribútov štruktúr patria:

Vymenovaný typ

Stručný popis hodnoty atribútu

Príklad elementu v XML súbore

T_RECORD_NAME

Interné meno štruktúry.

meno tagu štruktúry

T_RECORD

Hodnota typu štruktúra.

vnorená štruktúra <tCalcData> v <tCalcData_Full>

T_ARRAY

Hodnota typu pole štruktúr rovnakého typu.

vnorené pole štruktúr <Tprvok_pola_?> v <STRIP_DATA>

T_HOBJ

Meno objektu.

<ParentId>DIAGRAMS</ParentId>

T_HOBJ_KEY

Meno objektu, ktoré je zároveň kľúčovou položkou.

<ID_RESOURCE>Home_Pjanko</ID_RESOURCE>

T_VOBJ

Meno objektu, riadok a stĺpec.

<CtrlObject>P.IF500_RS_WatchDog</CtrlObject>

T_BOOLEAN

Vymenovaný typ (hodnota True alebo False).

<Read_Only>False</Read_Only>

T_BITSET

Pole vymenovaných typov (vymenované hodnoty).

<IsValueDelay>Off</IsValueDelay>

T_ENUM

Vymenovaný typ (vymenované hodnoty).

<Typ>POINT</Typ>

T_SIGNED_INT

Celočíselná hodnota <-2147483647 .. 2147483648>.

<TransPalIdx>0</TransPalIdx>

T_UNSIGNED_INT

Celočíselná hodnota <0 .. 4294967295>.

<Id>200449</Id>

T_SIGNED_INT_KEY

Celočíselná kľúčová hodnota <-2147483647 .. 2147483648>.

<grObjectNr>1163</grObjectNr>

T_UNSIGNED_INT_KEY

Celočíselná kľúčová hodnota <0 .. 4294967295>.

<Row>0</Row>

T_FLOAT

Neceločíselná hodnota. Hodnoty väčšie ako 1.0E+38 budú interpretované ako hodnota 1.0E+38 a hodnoty menšie ako -1.0E+38 budú interpretované ako hodnota -1.0E+38.

<BaseValue>1.00000000000000E+00</BaseValue>

T_D2TIME

Hodnota určujúca čas a dátum.

<ModifyTime>18.07.2003 11:52:09.674</ModifyTime>

T_STRING

Textová hodnota s presne definovanou dĺžkou.

<PassCode>ROOT_CFGRECORDS_TUserData_PassCode</PassCode>

T_BOUNDED_STRING

Textová hodnota s definovanou maximálnou dĺžkou.

<Name>D.PIPA_CHSO2_Mh</Name>

T_UNBOUNDED_STRING

Textová hodnota s neobmedzenou dĺžkou.

<statement>TextTextTextTextText</statement>

Typy hodnôt sa delia na:

  • štruktúrované - T_RECORD a T_ARRAY

  • jednoduché - všetky ostatné

Reťazové hodnoty T_STRING, T_BOUNDED_STRING alebo T_UNBOUNDED_STRING sa ďalej členia na:

  • SDT_NORMAL - klasický reťazec

  • SDT_EXPRESSION - reťazec typu výraz

  • SDT_RAW_DATA - reťazec označujúci binárne dáta

Vlastnosti typu SDT_RAW_DATA:

  • atribút typu SDT_RAW_DATA poukazuje na skutočnosť, že k danému XML súboru existuje binárny súbor

  • dáta binárneho súboru predstavujú skutočnú hodnotu atribútu typu SDT_RAW_DATA

  • hodnota atribútu typu SDT_RAW_DATA uvedená v XML súbore obsahuje vnorenie atribútu (je ignorovaná)

  • XML Export ukladá binárny súbor pod názvom <meno_objektu>_<vnorenie_atribútu>.bin

  • XML Import hľadá binárny súbor pod názvom <meno_xml_súboru>_<vnorenie_atribútu>.bin

  • pokiaľ nie je názov objektu v XML súbore premenovaný (element <Name>), potom XML Export aj XML Import pracuje s rovnakým názvom binárneho súboru (napríklad U.UserVar_ROOT_CFGRECORDS_TUserData_PassCode.bin), ktorý je uložený pri XML súbore (je jeho nevyhnutnou súčasťou)

Vlastnosti typu T_ARRAY:

  • názov položiek má tvar NazovPolozky_[X] (namiesto [X] je buď rozsah hodnôt 0..N alebo hodnoty vymenovaného typu)

  • samotné položky môžu byť typu T_RECORD, alebo niektorého jednoduchého typu

Príklad XML súboru reprezentujúceho objekt systému D2000


Nasledujúci príklad zobrazuje uloženie konfigurácie objektu typu USER_VAR s názvom U.TimeSlice do XML súboru:

<?xml version="1.0" encoding="windows-1250"?> <!--$Date: 2012/10/19 05:30:58 $ $Revision: 1.7 $ $Author: pbrezina $ $ExpSubDir: Common\Planner $--> <ROOT> <REFERENCES> <HOBJ_REF> <uid>A25DED0E4DA94B4895A119370E3AF4FB</uid> <name>SV.Limits</name> <objType>D2RECORD</objType> <valType>Rec</valType> </HOBJ_REF> <COL_REF> <col_idx>1</col_idx> <col_name>VHL</col_name> <col_valType>Int</col_valType> </COL_REF> <HOBJ_REF> <uid>USER_VAR</uid> <name>USER_VAR</name> <objType>SYSTEM</objType> <valType>NAN</valType> </HOBJ_REF> </REFERENCES> <CFGRECORDS> <TObjItemData> <Id>0</Id> <Name>U.TimeSlice</Name> <Descript>Time Slice</Descript> <Typ>USER_VAR</Typ> <ParentId>USER_VAR</ParentId> <Value_Type>TmR</Value_Type> <CreateTime>08.10.2009 08:10:31.366</CreateTime> <ModifyTime>08.10.2009 08:18:02.938</ModifyTime> <Text_Palette/> <Read_Only>False</Read_Only> <TECH_UNIT/> <UseLimits>False</UseLimits> <VHL>1.00000000000000E+38</VHL> <HL>1.00000000000000E+38</HL> <LL>-1.00000000000000E+38</LL> <VLL>-1.00000000000000E+38</VLL> <VHL_ID>SV.Limits[1]^VHL</VHL_ID> <HL_ID/> <LL_ID/> <VLL_ID/> <Hysterezia>0.00000000000000E+00</Hysterezia> <TransPalIdx>0</TransPalIdx> <Hidden>False</Hidden> <uuid>5CB809E9342B7A46BD790A8C7D14C69E</uuid> </TObjItemData> <tUserVarData_Full> <tUserVarData> <MANUAL>True</MANUAL> <MANUAL_VAL/> <FLAGS/> <VALUE_TIME>08.10.2009 08:10:31.379</VALUE_TIME> <MONITOR>False</MONITOR> <SAVE_VALUE>True</SAVE_VALUE> </tUserVarData> <startVal/> </tUserVarData_Full> </CFGRECORDS> <MEMBEROFLOGGROUP> <member>SELT\CD8FD25EF8A690341B111F5274CDB5AB</member> </MEMBEROFLOGGROUP> <MEMBEROFRESGROUP> <member>Home_s\04CB44144B2CD8E46955D846D30B0F72</member> </MEMBEROFRESGROUP> <CRC>a7a8bda021932a3547e6553cb8980273</CRC> <OBJLIFELOGS> <tObjLifeLogData> <name>U.TimeSlice</name> <state>OLA_CREATED</state> <modify_time>08.10.2009 08:16:23.761</modify_time> <user_name>s</user_name> <process_name>WS1JSTF2.CNF</process_name> <computer_name>WS1JSTF2</computer_name> <log_type>OLT_CONFIG</log_type> <comment_text/> </tObjLifeLogData> </OBJLIFELOGS> </ROOT>