ViaThinkSoft MultiDump (VMD)

Last updated 13 September 2024 by Daniel Marschall

VMD 2024

VMD 2024 is mostly identical with VMD 2019 (see the definition of VMD2019 in the next chapter), but with following adjustments:

Example for VMD 2024

Text file

[1.3.6.1.4.1.37476.3.1.6.2024]

; Object 1: "Example CRM, Company 'X'" as parent of "Universe"
urn:x-weid:pen:SX0-3-1-6-1K8-ENTY-? {72186579-fae6-4812-b539-f1f4541aba4f}
urn:x-weid:pen:SX0-3-1-6-1K8-PRNT-? {00000000-0000-0000-0000-000000000000}
urn:x-weid:pen:SX0-3-1-6-1K8-TSCR-? 2019-09-21 20:00:00 +0000
urn:x-weid:pen:SX0-3-1-6-1K8-TSUP-? 2019-09-21 21:00:00 +0000
urn:x-weid:pen:SX0-3-1-6-1K8-TYPE-? com.example.crm

; Attribute base OID: { joint-iso-itu-t(2) example(999) crmexample(100) }
urn:x-weid:root:2-RR-2S-URLX-? https://crm.example.com/
urn:x-weid:root:2-RR-2S-NAME-? Example CRM
urn:x-weid:root:2-RR-2S-COMP-? Contoso Ltd.
urn:x-weid:root:2-RR-2S-CTRY-? US

XML file (schema currently not available)

<?xml version="1.0"?>
<vmd xmlns="urn:x-viathinksoft:std:0014:2024-09-12:xml-schema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="urn:x-viathinksoft:std:0014:2024-09-12:xml-schema
     https://raw.githubusercontent.com/ViaThinkSoft/standards/main/viathinksoft-std-0014-vmd2024.xsd">
    <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 type="urn:x-weid:pen:SX0-3-1-6-1K8-ENTY-?">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-PRNT-?">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-TSCR-?">1900-01-01 00:00:00 +0000</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-TSUP-?">1900-01-01 00:00:00 +0000</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-TYPE-?">urn:x-oidplus:java:com.viathinksoft.vmd2024.universe</attribute>
    </object>

    <!-- Object 1: "Example CRM, Company 'X'" as parent of "Universe" -->
    <object>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-ENTY-?">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-PRNT-?">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-TSCR-?">2019-09-21 20:00:00 +0000</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-TSUP-?">2019-09-21 21:00:00 +0000</attribute>
        <attribute type="urn:x-weid:pen:SX0-3-1-6-1K8-TYPE-?">urn:x-oidplus:java:com.example.crm</attribute>
        <!-- Attribute base OID: { joint-iso-itu-t(2) example(999) crmexample(100) } -->
        <attribute type="urn:x-weid:root:2-RR-2S-URLX-?">https://crm.example.com/</attribute>
        <attribute type="urn:x-weid:root:2-RR-2S-NAME-?">Example CRM</attribute>
        <attribute type="urn:x-weid:root:2-RR-2S-COMP-?">Contoso Ltd.</attribute>
        <attribute type="urn:x-weid:root:2-RR-2S-CTRY-?">US</attribute>
    </object>
</vmd>

JSON file (schema currently not available)

{
    "$schema": "urn:x-viathinksoft:std:0014:2024-09-12:json-schema",
    "vmd": {
        "name": "Contoso Ltd. CRM Export",
        "created": "2019-09-21 01:00:00 +0000",
        "objects: [
            {
                "comment": "Object 0: Universe (predefined in every VMD application)",
                "attributes": [
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-ENTY-?", "value": "{00000000-0000-0000-0000-000000000000}" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-PRNT-?", "value": "{00000000-0000-0000-0000-000000000000}" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-TSCR-?", "value": "1900-01-01 00:00:00 +0000" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-TSUP-?", "value": "1900-01-01 00:00:00 +0000" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-TYPE-?", "value": "urn:x-oidplus:java:com.viathinksoft.vmd2024.universe" }
                ]
            },
            {
                "comment": "Object 1: 'Example CRM, Company X' as parent of 'Universe'",
                "attributes": [
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-ENTY-?", "value": "{72186579-fae6-4812-b539-f1f4541aba4f}" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-PRNT-?", "value": "{00000000-0000-0000-0000-000000000000}" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-TSCR-?", "value": "2019-09-21 20:00:00 +0000" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-TSUP-?", "value": "2019-09-21 21:00:00 +0000" },
                    { "type": "urn:x-weid:pen:SX0-3-1-6-1K8-TYPE-?", "value": "urn:x-oidplus:java:com.example.crm" },
                    { "type": "urn:x-weid:root:2-RR-2S-URLX-?", "value": "https://crm.example.com/" },
                    { "type": "urn:x-weid:root:2-RR-2S-NAME-?", "value": "Example CRM" },
                    { "type": "urn:x-weid:root:2-RR-2S-COMP-?", "value": "Contoso Ltd." },
                    { "type": "urn:x-weid:root:2-RR-2S-CTRY-?", "value": "US" }
                ]
            }
        ]
    }
}

Example for VMD 2019

Text file

[1.3.6.1.4.1.37476.3.1.6.2019]

; Object 1
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

XML file

<?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.1.6.2019" name="ENTY">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="PRNT">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSCR">1900-01-01 00:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">1900-01-01 00:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TYPE">com.viathinksoft.vmd2019.universe</attribute>
    </object>

    <!-- Object 1: "Example CRM, Company 'X'" as parent of "Universe" -->
    <object>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="ENTY">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="PRNT">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TYPE">com.example.crm</attribute>
        <!-- Attribute base OID: { joint-iso-itu-t(2) example(999) crmexample(100) } -->
        <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>
</vmd>

VMD 2019

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.1.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.1.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.1.6.2019]
ENTY=...
PRNT=...
TSCR=...
TSUP=...
TYPE=...
[2.999.1]
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.1.6.2019/ENTY=...
1.3.6.1.4.1.37476.3.1.6.2019/PRNT=...
1.3.6.1.4.1.37476.3.1.6.2019/TSCR=...
1.3.6.1.4.1.37476.3.1.6.2019/TSUP=...
1.3.6.1.4.1.37476.3.1.6.2019/TYPE=...
2.999.1/NAME=John Doe
2.999.1/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.1.6.2019]
ENTY=...
PRNT=...
TSCR=...
TSUP=...
TYPE=...
[2.999.1]
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.1.6.2019/ENTY=...
1.3.6.1.4.1.37476.3.1.6.2019/PRNT=...
1.3.6.1.4.1.37476.3.1.6.2019/TSCR=...
1.3.6.1.4.1.37476.3.1.6.2019/TSUP=...
1.3.6.1.4.1.37476.3.1.6.2019/TYPE=...
2.999.1/NAME=John Doe
2.999.1/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.1.6.2019]
ENTY=...
PRNT=...
TSCR=...
TSUP=...
TYPE=...
[2.999.1]
NAME=John Doe
EML_=info@example.com
[2.999.2]
ICQ_=123123123

In this case, the attribute ICQ_ of the base OID 2.999.2 was added, because the base "2.999.1" 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.1.6.2019/ENTY=...
1.3.6.1.4.1.37476.3.1.6.2019/PRNT=...
1.3.6.1.4.1.37476.3.1.6.2019/TSCR=...
1.3.6.1.4.1.37476.3.1.6.2019/TSUP=...
1.3.6.1.4.1.37476.3.1.6.2019/TYPE=...
2.999.1/NAME=John Doe
2.999.1/EML_=info@example.com
2.999.2/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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.

<?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.1.6.2019" name="ENTY">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="PRNT">{00000000-0000-0000-0000-000000000000}</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSCR">1900-01-01 00:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">1900-01-01 00:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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.1.6.2019" name="ENTY">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="PRNT">{00000000-0000-0000-0000-000000000000}</attribute><!-- "Universe" -->
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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.1.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.1.6.2019" name="PRNT">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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.1.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.1.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.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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.1.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.1.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.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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.1.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.1.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.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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.1.6.2019" name="ENTY">{c9ad8ccc-0948-40d1-a232-da7532e7648d}</attribute><!-- "Customer John Doe, USA" -->
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="PRNT">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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.1.6.2019" name="ENTY">{78163b09-e18f-438f-9b03-b9255fd342e5}</attribute><!-- "Customer Max Mustermann, Germany" -->
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="PRNT">{72186579-fae6-4812-b539-f1f4541aba4f}</attribute><!-- "Example CRM, Company 'X'" -->
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSCR">2019-09-21 20:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.6.2019" name="TSUP">2019-09-21 21:00:00 +0000</attribute>
        <attribute base="1.3.6.1.4.1.37476.3.1.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 attempt: VMD 2011 (slight modification 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 1 };
extended-contact-info := { 2 999 2 };

{ 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.999.2.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

For VMD2024, you'd replace TypeIdentifier with an URN.

Examples for ContentTypes are

Format comparison

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

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

TODO