Last updated 13 September 2024 by Daniel Marschall
VMD 2024 is mostly identical with VMD 2019 (see the definition of VMD2019 in the next chapter), but with following adjustments:
[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 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>
{ "$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" } ] } ] } }
[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 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 (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.
(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
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
[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
[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
[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
[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
[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
[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
[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
[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
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>
[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; ); );
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
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.