ViaThinkSoft MultiDump (VMD) 2019

Last updated 22 September 2019 by Daniel Marschall

Usage

VMD (ViaThinkSoft MultiDump) is a concept of storing data in an hierarchical object oriented system. It makes use of Object Identifiers to identify data types and GUIDs to identify objects. Each object can be extended by new attributes, identified with Object Identifiers.

While the idea behind VMD remained the same, there were several attempts to define and implement VMD. This version 2019 shows the concept of using INI files, as well as describing an attribute as a combination of attribute base OID and a four character alphanumerical attribute name, making the file format more human readable, and minimizing the effort of registering Object Identifiers, since only the attribute collection requires an OID, but not each attribute.

Basic rules

(1) Each object is stored in an individual file with INI format.

(2) Comments start with a semicolon ; and can be placed at every line. However, they should not be added at the end of a line that contains a string value; otherwise the comment would be interpreted as part of the string.

(3) The file shall begin with [1.3.6.1.4.1.37476.3.6.2019] with its basic attributes ENTY (Object GUID), PRNT (Parent object GUID), TSCR (Timestamp of creation), TSUP (Timestamp of update) and TYPE (Object type).

The OID 1.3.6.1.4.1.37476.3.6.2019 is defined as { iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 37476 specifications(3) fileformat(1) vmd(6) 2019 }

(4) A file that has no parent set PRNT to the "NIL" GUID {00000000-0000-0000-0000-000000000000} . Its associated VMD object is called "Universe".

(5) The file then contains groups of type base OIDs together with the 4-character attribute and values.

Example:

[1.3.6.1.4.1.37476.3.6.2019]
ENTY=...
PRNT=...
TSCR=...
TSUP=...
TYPE=...
[2.999]
NAME=John Doe
EML_=info@example.com

The file would be internally parsed as a name-value pair:

1.3.6.1.4.1.37476.3.6.2019/ENTY=...
1.3.6.1.4.1.37476.3.6.2019/PRNT=...
1.3.6.1.4.1.37476.3.6.2019/TSCR=...
1.3.6.1.4.1.37476.3.6.2019/TSUP=...
1.3.6.1.4.1.37476.3.6.2019/TYPE=...
2.999/NAME=John Doe
2.999/EML_=info@example.com

(6) The four character attribute name may contain upper case letters, digits and underscores. It does only need to be unique inside the attribute base OID namespace.

(7) The attribute base OID namespace is called "collection", since it is a collection of attributes identified with four character names.

(8) Attributes may be defined more than once. The INI parser should be aware of that.

Example:

[1.3.6.1.4.1.37476.3.6.2019]
ENTY=...
PRNT=...
TSCR=...
TSUP=...
TYPE=...
[2.999]
NAME=John Doe
EML_=info@example.com
EML_=info2@example.com

The file would be internally parsed as a name-value pair:

1.3.6.1.4.1.37476.3.6.2019/ENTY=...
1.3.6.1.4.1.37476.3.6.2019/PRNT=...
1.3.6.1.4.1.37476.3.6.2019/TSCR=...
1.3.6.1.4.1.37476.3.6.2019/TSUP=...
1.3.6.1.4.1.37476.3.6.2019/TYPE=...
2.999/NAME=John Doe
2.999/EML_=info@example.com; info2@example.com

(9) To add more attributes of a different kind / source, a new attribute base OID that introduces more attributes can be added to the file

Example:

[1.3.6.1.4.1.37476.3.6.2019]
ENTY=...
PRNT=...
TSCR=...
TSUP=...
TYPE=...
[2.999]
NAME=John Doe
EML_=info@example.com
[2.998]
ICQ_=123123123

In this case, the attribute ICQ_ of the base OID 2.998 was added, because the base "2.999" did not define such an attribute.

The file would be internally parsed as a name-value pair:

1.3.6.1.4.1.37476.3.6.2019/ENTY=...
1.3.6.1.4.1.37476.3.6.2019/PRNT=...
1.3.6.1.4.1.37476.3.6.2019/TSCR=...
1.3.6.1.4.1.37476.3.6.2019/TSUP=...
1.3.6.1.4.1.37476.3.6.2019/TYPE=...
2.999/NAME=John Doe
2.999/EML_=info@example.com
2.998/ICQ_=123123123

Full example

Object tree

Types used in this example

Built-in attribute base OID { iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 37476 specifications(3) fileformat(1) vmd2019(6) }

Attribute "ENTY" contains the object GUID, lowercase with curly braces
Attribute "PRNT" contains the parent GUID (there could be multiple)
Attribute "TSCR" contains the time stamp of creation with format 2019-09-21 20:00:00 +0000
Attribute "TSUP" contains the time stamp of last update with format 2019-09-21 20:00:00 +0000
Attribute "TYPE" contains the type of the object in the Java package name notation. If a domain is unavailable, an OID can be used instead.

Attribute base OID: { joint-iso-itu-t(2) example(999) crmexample(100) }

Attribute "URL_" contains the URL of the Example CRM system
Attribute "NAME" contains the name of the CRM system
Attribute "COMP" contains the company that runs the CRM system
Attribute "CTRY" contains the city where the company is located

Attribute base OID: { joint-iso-itu-t(2) example(999) crmuser(101) }

Attribute "UID_" contains the user ID of the user inside the CRM system
Attribute "USER" contains the user name
Attribute "EML_" contains the email address of the user

Attribute base OID: { joint-iso-itu-t(2) example(999) md5-salted(102) }

Attribute "HASH" contains the MD5 hash in hexadecimal notation
Attribute "SALT" contains a salt (optional)

Attribute base OID: { joint-iso-itu-t(2) example(999) biometric-fingerprint(103) }

Attribute "SENS" contains sensor data of the biometric fingerprint

Attribute base OID: { joint-iso-itu-t(2) example(999) appointment(104) }

Attribute "DATE" contains the date of the appointment
Attribute "TIME" contains the time of the appointment
Attribute "ZONE" contains the time zone of the appointment
Attribute "CPTN" contains the caption/name of the appointment

Attribute base OID: { joint-iso-itu-t(2) example(999) basic-contact-data(105) }

Attribute "PNAM" contains the pre-name
Attribute "SNAM" contains the sur-name
Attribute "STRT" contains the street
Attribute "CITY" contains the city
Attribute "ZIP_" contains the ZIP code
Attribute "CTRY" contains the country
Attribute "EML_" contains the email address

Attribute base OID: { joint-iso-itu-t(2) example(999) extended-contact-data(106) }

Attribute "ICQ_" contains the ICQ Messenger ID
Attribute "SKPE" contains the Skype Messenger handle

Object 0: Universe (predefined in every VMD application)

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={00000000-0000-0000-0000-000000000000} ; "Universe"
PRNT={00000000-0000-0000-0000-000000000000} ; "Universe"
TSCR=1900-01-01 00:00:00 +0000
TSUP=1900-01-01 00:00:00 +0000
TYPE=com.viathinksoft.vmd2019.universe

Object 1: Example CRM, Company 'X'

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={72186579-fae6-4812-b539-f1f4541aba4f} ; "Example CRM, Company 'X'"
PRNT={00000000-0000-0000-0000-000000000000} ; "Universe"
TSCR=2019-09-21 20:00:00 +0000
TSUP=2019-09-21 21:00:00 +0000
TYPE=com.example.crm
[2.999.100]
; Attribute base OID: { joint-iso-itu-t(2) example(999) crmexample(100) }
URL_=https://crm.example.com/
NAME=Example CRM
COMP=Contoso Ltd.
CTRY=US

Object 2: User account of Mr Smith

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={cf592154-6668-49cc-aaba-ad6ed732f9e5} ; "User account of Mr Smith"
PRNT={72186579-fae6-4812-b539-f1f4541aba4f} ; "Example CRM, Company 'X'"
TSCR=2019-09-21 20:00:00 +0000
TSUP=2019-09-21 21:00:00 +0000
TYPE=com.example.crm.user
[2.999.101]
; Attribute base OID: { joint-iso-itu-t(2) example(999) crmuser(101) }
UID_=2314
USER=smith
EML_=smith@contosoltd.example.com

Object 3: Authentication object 1 (contains password hashes etc.)

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={8030f04c-7a1c-41c6-9b4c-e7c683341eb4} ; "Authentication object 1" (contains password hashes etc.)
PRNT={cf592154-6668-49cc-aaba-ad6ed732f9e5} ; "User account of Mr Smith"
TSCR=2019-09-21 20:00:00 +0000
TSUP=2019-09-21 21:00:00 +0000
TYPE=com.example.crm.authobject
[2.999.102]
; Attribute base OID: { joint-iso-itu-t(2) example(999) md5-salted(102) }
HASH=a3cca2b2aa1e3b5b3b5aad99a8529074
SALT=ABC

Object 4: Authentication object 2 (contains password hashes etc.)

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={be30ad4f-9175-4218-879d-8a1f466cbcf7} ; "Authentication object 2" (contains password hashes etc.)
PRNT={cf592154-6668-49cc-aaba-ad6ed732f9e5} ; "User account of Mr Smith"
TSCR=2019-09-21 20:00:00 +0000
TSUP=2019-09-21 21:00:00 +0000
TYPE=com.example.crm.authobject
[2.999.103]
; Attribute base OID: { joint-iso-itu-t(2) example(999) biometric-fingerprint(103) }
SENS=2B 78 48 8B CD 48 F7 D9 48 8B 04 08 48 83 78 38 00 74 55 40 B6 01 48 8D 44 2B

Object 5: Dentist appointment (private appointment, therefore located inside the user account)

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={e0b1c152-7339-4ee6-880a-a48f72043701} ; "Dentist Appointment" (private appointment, therefore located inside the user account)
PRNT={cf592154-6668-49cc-aaba-ad6ed732f9e5} ; "User account of Mr Smith"
TSCR=2019-09-21 20:00:00 +0000
TSUP=2019-09-21 21:00:00 +0000
TYPE=com.example.crm.appointment
[2.999.104]
; Attribute base OID: { joint-iso-itu-t(2) example(999) appointment(104) }
DATE=2020-01-01
TIME=12:00:00
ZONE=+0000
CPTN=Dentist

Object 6: Customer John Doe, USA

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={c9ad8ccc-0948-40d1-a232-da7532e7648d} ; "Customer John Doe, USA"
PRNT={72186579-fae6-4812-b539-f1f4541aba4f} ; "Example CRM, Company 'X'"
TSCR=2019-09-21 20:00:00 +0000
TSUP=2019-09-21 21:00:00 +0000
TYPE=com.example.crm.contact
[2.999.105]
; Attribute base OID: { joint-iso-itu-t(2) example(999) basic-contact-data(105) }
PNAM=John
SNAM=Doe
STRT=Streetname here
CITY=New York City
ZIP_=1234
CTRY=US
EML_=doe@example.com

Object 7: Customer Max Mustermann, Germany

[1.3.6.1.4.1.37476.3.6.2019]
ENTY={78163b09-e18f-438f-9b03-b9255fd342e5} ; "Customer Max Mustermann, Germany"
PRNT={72186579-fae6-4812-b539-f1f4541aba4f} ; "Example CRM, Company 'X'"
TSCR=2019-09-21 20:00:00 +0000
TSUP=2019-09-21 21:00:00 +0000
TYPE=com.example.crm.contact
[2.999.105]
; Attribute base OID: { joint-iso-itu-t(2) example(999) basic-contact-data(105) }
PNAM=Max
SNAM=Mustermann
STRT=Musterstrasse 12
CITY=Musterstadt
ZIP_=12345
CTRY=DE
EML_=max.mustermann@example.com
EML_=mustermann.max@example.org
[2.999.106]
; Attribute base OID: { joint-iso-itu-t(2) example(999) extended-contact-data(106) }
ICQ_=123123123
SKPE=maxmustermann

Export format

To export/store all objects in a single file, XML can be used. An XML schema will be supplied soon. (TODO)

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<vmd version="2019">
    <name>Contoso Ltd. CRM Export</name>
    <created>2019-09-21 01:00:00 +0000</created>

    <!-- Object 0: Universe (predefined in every VMD application) -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">1900-01-01 00:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">1900-01-01 00:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.viathinksoft.vmd2019.universe</attribute>
    </object>

    <!-- Object 1: Example CRM, Company 'X' -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{00000000-0000-0000-0000-000000000000}</attribute><!-- "Universe" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.example.crm</attribute>
        <attribute base="2.999.100" name="URL_">https://crm.example.com/</attribute>
        <attribute base="2.999.100" name="NAME">Example CRM</attribute>
        <attribute base="2.999.100" name="COMP">Contoso Ltd.</attribute>
        <attribute base="2.999.100" name="CTRY">US</attribute>
    </object>

    <!-- Object 2: User account of Mr Smith -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{cf592154-6668-49cc-aaba-ad6ed732f9e5}</attribute><!-- "User account of Mr Smith" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.example.crm.user</attribute>
        <attribute base="2.999.101" name="UID_">2314</attribute>
        <attribute base="2.999.101" name="USER">smith</attribute>
        <attribute base="2.999.101" name="EML_">smith@contosoltd.example.com</attribute>
    </object>

    <!-- Object 3: Authentication object 1 (contains password hashes etc.) -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{8030f04c-7a1c-41c6-9b4c-e7c683341eb4}</attribute><!-- "Authentication object 1" (contains password hashes etc.) -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{cf592154-6668-49cc-aaba-ad6ed732f9e5}</attribute><!-- "User account of Mr Smith" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.example.crm.authobject</attribute>
        <attribute base="2.999.102" name="HASH">a3cca2b2aa1e3b5b3b5aad99a8529074</attribute>
        <attribute base="2.999.102" name="SALT">ABC</attribute>
    </object>

    <!-- Object 4: Authentication object 2 (contains password hashes etc.) -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{be30ad4f-9175-4218-879d-8a1f466cbcf7}</attribute><!-- "Authentication object 2" (contains password hashes etc.) -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{cf592154-6668-49cc-aaba-ad6ed732f9e5}</attribute><!-- "User account of Mr Smith" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.example.crm.authobject</attribute>
        <attribute base="2.999.103" name="SENS">2B 78 48 8B CD 48 F7 D9 48 8B 04 08 48 83 78 38 00 74 55 40 B6 01 48 8D 44 2B</attribute>
    </object>

    <!-- Object 5: Dentist appointment (private appointment, therefore located inside the user account) -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{e0b1c152-7339-4ee6-880a-a48f72043701}</attribute><!-- "Dentist Appointment" (private appointment, therefore located inside the user account) -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{cf592154-6668-49cc-aaba-ad6ed732f9e5}</attribute><!-- "User account of Mr Smith" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.example.crm.appointment</attribute>
        <attribute base="2.999.104" name="DATE">2020-01-01</attribute>
        <attribute base="2.999.104" name="TIME">12:00:00</attribute>
        <attribute base="2.999.104" name="ZONE">+0000</attribute>
        <attribute base="2.999.104" name="CPTN">Dentist</attribute>
    </object>

    <!-- Object 6: Customer John Doe, USA -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{c9ad8ccc-0948-40d1-a232-da7532e7648d}</attribute><!-- "Customer John Doe, USA" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.example.crm.contact</attribute>
        <attribute base="2.999.105" name="PNAM">John</attribute>
        <attribute base="2.999.105" name="SNAM">Doe</attribute>
        <attribute base="2.999.105" name="STRT">Streetname here</attribute>
        <attribute base="2.999.105" name="CITY">New York City</attribute>
        <attribute base="2.999.105" name="ZIP_">1234</attribute>
        <attribute base="2.999.105" name="CTRY">US</attribute>
        <attribute base="2.999.105" name="EML_">doe@example.com</attribute>
    </object>

    <!-- Object 7: Customer Max Mustermann, Germany -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="ENTY">{78163b09-e18f-438f-9b03-b9255fd342e5}</attribute><!-- "Customer Max Mustermann, Germany" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="PRNT">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.6.2019" name="TYPE">com.example.crm.contact</attribute>
        <attribute base="2.999.105" name="PNAM">Max</attribute>
        <attribute base="2.999.105" name="SNAM">Mustermann</attribute>
        <attribute base="2.999.105" name="STRT">Musterstrasse 12</attribute>
        <attribute base="2.999.105" name="CITY">Musterstadt</attribute>
        <attribute base="2.999.105" name="ZIP_">12345</attribute>
        <attribute base="2.999.105" name="CTRY">DE</attribute>
        <attribute base="2.999.105" name="EML_">max.mustermann@example.com</attribute>
        <attribute base="2.999.105" name="EML_">mustermann.max@example.org</attribute>
        <attribute base="2.999.106" name="ICQ_">123123123</attribute>
        <attribute base="2.999.106" name="SKPE">maxmustermann</attribute>
    </object>
</vmd>

Previous attempts

Old export format 2011 (modified in 2019)

[1.3.6.1.4.1.37476.3.1.6.2011]
-- Comments start with two dashes

-- OIDs could be defined with a name, so that the reference is more human readable
vmd-2011 := { iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 37476 specifications(3) fileformat(1) vmd(6) 2011 };
example-types := { 2 999 };
extended-contact-info := { 2 998 };

{ vmd-2011 universe(0) }: (

	[ID={24445dbd-a733-42f3-a64d-4c49723975de}, Created="2019-09-22 00:00:00 +0000", Updated="2019-09-22 00:00:00 +0000"] -- These are optional meta tags
	{ example-types contact(1) }: (
		{ example-types contact(1) first-name(100) }: "John";
		{ example-types contact(1) family-name(101) }: "Doe";
		{ example-types contact(1) email-address(102) }: "john@example.com";

		[ID={eaef767d-4298-4932-8ccf-702da777ad4b}, Created="2019-09-22 00:00:00 +0000", Updated="2019-09-22 00:00:00 +0000"]
		{ extended-contact-info icq(1234) }: 123123123;
	);

);

VMDsql (table structure)

ObjectGUID ParentGUID ObjectTypeOID ContentType ContentValue UpdateTime CreateTime
"X" ... 2.999.1 (contact) NULL   2019-09-22 00:00:00 2019-09-22 00:00:00
"A" "X" 2.999.1.100 (first-name) STR John 2019-09-22 00:00:00 2019-09-22 00:00:00
"B" "X" 2.999.1.101 (family-name) STR Doe 2019-09-22 00:00:00 2019-09-22 00:00:00
"C" "X" 2.999.1.102 (email-address) STR john@example.com 2019-09-22 00:00:00 2019-09-22 00:00:00
"D" "X" 2.998.1234 (icq) INT 123123123 2019-09-22 00:00:00 2019-09-22 00:00:00

A slight modification can make the format more fitting to VMD2019:

ObjectGUID ParentGUID TypeIdentifier ContentType ContentValue UpdateTime CreateTime
"X" ... com.example.crm.contact OBJECT   2019-09-22 00:00:00 2019-09-22 00:00:00
"A" "X" 2.999.105/PNAM STR John 2019-09-22 00:00:00 2019-09-22 00:00:00
"B" "X" 2.999.105/SNAM STR Doe 2019-09-22 00:00:00 2019-09-22 00:00:00
"C" "X" 2.999.105/EML_ STR john@example.com 2019-09-22 00:00:00 2019-09-22 00:00:00
"D" "X" 2.999.106/ICQ_ INT 123123123 2019-09-22 00:00:00 2019-09-22 00:00:00

Examples for ContentTypes are

Format comparison

VMD 2019 VMD 2019 VMD 2011 VMDsql VMDsql 2019
Format INI XML Individual Table Table
Files 1 file per object 1 file for everything 1 file for everything 1 row per attribute/object 1 row per attribute/object
Attribute Type Base OID + Name Base OID + Name OID OID OID
Object Type JavaPackageName or OID JavaPackageName or OID OID OID JavaPackageName or OID
Specific Attribute ID None None GUID optional (via meta tags) GUID GUID
Specific Attribute Timestamp None None Optional (via meta tags) Create/Update Create/Update
Specific Object ID GUID GUID GUID optional (via meta tags) GUID GUID
Specific Object Timestamp Create/Update Create/Update Optional (via meta tags) Create/Update Create/Update
Attribute/Object separation Yes Yes Yes No (Yes)*
Multiple Parents Yes Yes No No No
Universe definition Via NIL GUID Via NIL GUID Via Special OID Via NIL GUID Via NIL GUID

* Theoretically, a node could have a value, because the database table might not have a constraint set.