DML stands for Domain Modeling Language. It has a very simple syntax. Informally speaking, it's a list of attributes. Each attribute is a key-value pair. The attribute key is basically an identifier. The attribute value can be a number (i.e. an integer or a floating point number) or a string. The following shows an example. Note that, in DML, comment starts with "#" to the end of the line.
planet "Earth" # name of the planet
weight 6.5e21 # in tons
population 6242324585 # as of 15:00:29 GMT on August 8, 2002
DML also allows nested attributes. That is, the value of an attribute can also be a list of attributes, enclosed in brackets. Now, we can expand the previous example like this:
planet "Earth"
weight 6.5e21
population [
number 6242324585
date "08/08/2002"
time "15:00:29 GMT"
]
If the attribute value is a string that does not have white space or special characters like "[", you don't need to put the string in double quotes, though we recommend always using the double quotes to get rid of the confusions.
Conceptually, a DML corresponds to a tree. The root of the tree and all internal nodes of the tree represent the attribute lists. The end nodes are attributes. In this way, any attribute can be referred to using a search path. It's quite like the files and directories in a file system: an attribute is like a file; an attribute list is like a directory. Instead of using "/" to separate files in a search path, DML uses ".". For example, we can refer to the population number in the previous example with ".population.number". The first "." is to represent that the path starts from the root. Of course, one can use relative path. The DML knows that the search starts from the current attribute list.
DML has three special attribute keys: _find, _extends, and _schema. The attribute key _find is used to point to another attribute that DML is going to replace the current one with. For example, the following two DMLs function exactly the same:
today [ today [
date "08/08/2002" date "08/08/2002"
time "15:00:29 GMT" time "15:00:29 GMT"
] ]
planet "Earth" planet "Earth"
weight 6.5e21 weight 6.5e21
population [ population [
number 6242324585 number 6242324585
_find .today.date date "08/08/2002"
_find .today.time time "15:00:29 GMT"
] ]
The attribute key _extends is used to replace the current attribute with a list of attributes it is pointed to. When the same list of attributes is used many times in a DML, using _extends can tremendously reduce the DML file size. The following shows another way of writing the same DML as the previous example:
today [
date "08/08/2002"
time "15:00:29 GMT"
]
planet "Earth"
weight 6.5e21
population [
number 6242324585
_extends .today
]
The _schema is used to apply schema checking to a DML. For example, we may want the DML contain a certain attribute, or a fixed number of attributes with the same key. In our implementation, we ignore schema checks.
If you still have doubts about DML, readers are recommended to check out The DML Reference Manual.
DaSSF---the high-performance simulator---has a DML parser that can be downloaded and used separately. The library (called libdml) is open source and provides functions that can be used to retrieve attributes in a DML file. The parser library can be obtained from ftp://ftp.cs.dartmouth.edu/pub/jasonliu/ssf/. Be sure to use the latest version. Please note that we made the software publicly available to all researcher without any restriction. You can use it, copy it, modify it, or redistribute it. It should be understood that we don't provide warranty and we assume no liability whatsoever.