Table of Contents

Model Files

Coordinates HTML documentation

Measurements HTML documentation

Generalities

As for the other examples we provide two representations for the instances. One is expressed in a Domain Specific Language (DSL) that we are developing along with the VODML-related standards.

The DSL is independent of the serialization format, and allows to describe the instances in a simpler language without much boilerplate.

We also provide the VOTable serializations of those instances, which is what providers and clients will need to work with in practice.

Rationale

Here is a list of requirements we took into account when trying to rework the STC v1 standard.

  • simple and common things should be simple to provide and consume. There is nothing in this model that provides more functionality when compared to the current proposal. However, we tried to simplify the most common scenarios for both data providers and data consumers.

  • complex, custom things should be possible. At the same time, the model should keep supporting more uncommon, complex, or in any way custom scenarios, which is something the current proposal does.

  • COOSYS works in simple cases. So the model provides structures that provide the same information, but in the VODML framework.

  • Allow standardization of common instances. The model should allow a standard library of commonly used instances that can be referenced through globally unique identifiers that client can rely on. This makes the serializations less verbose and makes it easier for clients to parse files in the most common cases.

Coordinate Frames

A coordinate frame defines:

  • its origin in terms of another reference frame, possibly a standard one
  • its orientation or direction

It does not define its own axes.

Note that a library of common/standard reference frames could be built but it is probably not really useful, because frame definitions are in this model rather lightweight, and suitable for being included along with the data in all cases. The current model for SpaceFrame looks a lot like the COOSYS element, but expressed rigorously in the VODML framework, allowing for more complex relationships to be created if need be.

Positions

Positions can be expressed with a great deal of flexibility in this model. However, the price of such flexibility is complexity, which is not ideal for simple, most common cases. For these reasons we modeled some shortcut types that can be used in most cases. Such types make a lot of assumptions implicit, thus reducing the number

ICRS position

This is the simplest possible position, with just an RA and a DEC. The SpaceFrame instance plays the same role as COOSYS, but it is more flexible, as in more complicated instances there may be more frames and sets of coordinates, as well as custom frame, not necessarily spatial.

Using specific types like SkyPosition allows instances to be simpler in the most common cases.

Note that in principle the frame instance and reference could be omitted. Whether or not this is a valid instance it depends on the final version of the model document. One could decide that omitting the frame information a client can infer the coordinate frame is ICRS and the reference position TOPOCENTER, or simply assume the information is unknown or irrelevant. These cases should be dictated by the STC standard(s).

DSL

File: /examples/stc2/current/instances/position-icrs.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(id: "_SPACE_FRAME", type: "coords:domain.space.SpaceFrame") {
        instance role: "spaceRefFrame", value: "ICRS"
        instance(role: "refPosition", type: "coords:domain.space.StdRefLocation") {
            instance role: "position", value: "TOPOCENTER"
        }
    }

    instance(type: "meas:StdPosition") {
        instance (role: "coord", type: "coords:domain.space.EquatorialCoord") {
            instance(role: "ra", value: 12.9768538031, unit: "deg")
            instance(role: "dec", value: -72.9580158133, unit:"deg")
            reference(role: "frame") {
                idref "_SPACE_FRAME"
            }
        }
    }
}

VOTable

File: /examples/stc2/current/instances/position-icrs.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="coords:domain.space.SpaceFrame" ID="_SPACE_FRAME">
        <ATTRIBUTE dmrole="coords:domain.space.SpaceFrame.spaceRefFrame">
          <LITERAL value="ICRS" dmtype="coords:domain.space.StdRefFrame"/>
        </ATTRIBUTE>
        <ATTRIBUTE dmrole="coords:domain.space.SpaceFrame.refPosition">
          <INSTANCE dmtype="coords:domain.space.StdRefLocation">
            <ATTRIBUTE dmrole="coords:domain.space.StdRefLocation.position">
              <LITERAL value="TOPOCENTER" dmtype="coords:domain.space.StdRefPosition"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
      <INSTANCE dmtype="meas:StdPosition">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.space.EquatorialCoord">
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.ra">
              <LITERAL value="12.9768538031" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.dec">
              <LITERAL value="-72.9580158133" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <REFERENCE dmrole="coords:Coordinate.frame">
              <IDREF>_SPACE_FRAME</IDREF>
            </REFERENCE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

FK4 B1950 position

This is also a simple example, but in a different frame. You can compare these examples with the ICRS one above.

DSL

File: /examples/stc2/current/instances/position-fk4.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(id: "_SPACE_FRAME", type: "coords:domain.space.SpaceFrame") {
        instance role: "spaceRefFrame", value: "FK4"
        instance role: "equinox", value: "B1950"
        instance(role: "refPosition", type: "coords:domain.space.StdRefLocation") {
            instance role: "position", value: "TOPOCENTER"
        }
    }

    instance(type: "meas:StdPosition") {
        instance(role: "coord", type: "coords:domain.space.EquatorialCoord") {
            instance role: "ra", value: 12.9768538031, unit: "deg"
            instance role: "dec", value: -72.9580158133, unit: "deg"
            reference(role: "frame") {
                idref "_SPACE_FRAME"
            }
        }
    }
}

VOTable

File: /examples/stc2/current/instances/position-fk4.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="coords:domain.space.SpaceFrame" ID="_SPACE_FRAME">
        <ATTRIBUTE dmrole="coords:domain.space.SpaceFrame.spaceRefFrame">
          <LITERAL value="FK4" dmtype="coords:domain.space.StdRefFrame"/>
        </ATTRIBUTE>
        <ATTRIBUTE dmrole="coords:domain.space.SpaceFrame.equinox">
          <LITERAL value="B1950" dmtype="coords:domain.space.Epoch"/>
        </ATTRIBUTE>
        <ATTRIBUTE dmrole="coords:domain.space.SpaceFrame.refPosition">
          <INSTANCE dmtype="coords:domain.space.StdRefLocation">
            <ATTRIBUTE dmrole="coords:domain.space.StdRefLocation.position">
              <LITERAL value="TOPOCENTER" dmtype="coords:domain.space.StdRefPosition"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
      <INSTANCE dmtype="meas:StdPosition">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.space.EquatorialCoord">
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.ra">
              <LITERAL value="12.9768538031" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.dec">
              <LITERAL value="-72.9580158133" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <REFERENCE dmrole="coords:Coordinate.frame">
              <IDREF>_SPACE_FRAME</IDREF>
            </REFERENCE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

ICRS Position with Ellipse Error

In this example the position also has an associated error, in particular an ellipse.

Note how the error, like the frame, is a property of the measurement, not the coordinate itself. A client with knowledge of the coords model can only find out about the RA and DEC values, while a client of the meas model will be able to understand a lot of information, e.g. information about the frame, so that in many cases coordinates expressed in different frames can be reduced to the same one and e.g. plotted together. Also, meas clients can figure out the error of a measurement and its shape.

DSL

File: /examples/stc2/current/instances/position-icrs-ellipse.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(id: "_SPACE_FRAME", type: "coords:domain.space.SpaceFrame") {
        instance role: "spaceRefFrame", value: "ICRS"
        instance(role: "refPosition", type: "coords:domain.space.StdRefLocation") {
            instance role: "position", value: "TOPOCENTER"
        }
    }

    instance(type: "meas:StdPosition") {
        instance (role: "coord", type: "coords:domain.space.EquatorialCoord") {
            instance(role: "ra", value: 12.9768538031, unit: "deg")
            instance(role: "dec", value: -72.9580158133, unit:"deg")
            reference(role: "frame") {
                idref "_SPACE_FRAME"
            }
        }

        instance(role: "error", type: "meas:Error2D") {
            instance (role: "statError", type: "meas:Ellipse") {
                instance role: "semiAxis", value: 0.00027, unit: "deg"
                instance role: "semiAxis", value: 0.00041, unit: "deg"
                instance role: "posAngle", value: 12.345, unit: "deg"
            }
        }
    }
}

VOTable

File: /examples/stc2/current/instances/position-icrs-ellipse.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="coords:domain.space.SpaceFrame" ID="_SPACE_FRAME">
        <ATTRIBUTE dmrole="coords:domain.space.SpaceFrame.spaceRefFrame">
          <LITERAL value="ICRS" dmtype="coords:domain.space.StdRefFrame"/>
        </ATTRIBUTE>
        <ATTRIBUTE dmrole="coords:domain.space.SpaceFrame.refPosition">
          <INSTANCE dmtype="coords:domain.space.StdRefLocation">
            <ATTRIBUTE dmrole="coords:domain.space.StdRefLocation.position">
              <LITERAL value="TOPOCENTER" dmtype="coords:domain.space.StdRefPosition"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
      <INSTANCE dmtype="meas:StdPosition">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.space.EquatorialCoord">
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.ra">
              <LITERAL value="12.9768538031" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.dec">
              <LITERAL value="-72.9580158133" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <REFERENCE dmrole="coords:Coordinate.frame">
              <IDREF>_SPACE_FRAME</IDREF>
            </REFERENCE>
          </INSTANCE>
        </ATTRIBUTE>
        <COMPOSITION dmrole="meas:CoordMeasure.error">
          <INSTANCE dmtype="meas:Error2D">
            <ATTRIBUTE dmrole="meas:Error2D.statError">
              <INSTANCE dmtype="meas:Ellipse">
                <ATTRIBUTE dmrole="meas:Ellipse.semiAxis">
                  <LITERAL value="0.00027" dmtype="ivoa:RealQuantity" unit="deg"/>
                  <LITERAL value="0.00041" dmtype="ivoa:RealQuantity" unit="deg"/>
                </ATTRIBUTE>
                <ATTRIBUTE dmrole="meas:Ellipse.posAngle">
                  <LITERAL value="12.345" dmtype="ivoa:RealQuantity" unit="deg"/>
                </ATTRIBUTE>
              </INSTANCE>
            </ATTRIBUTE>
          </INSTANCE>
        </COMPOSITION>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

ICRS Position with Symmetric Error

For comparison, here is a position in ICRS with a symmetric 2D error, i.e. a circle rather than an ellipse.

DSL

File: /examples/stc2/current/instances/position-icrs-symmetric.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(type: "meas:StdPosition") {
        instance (role: "coord", type: "coords:domain.space.EquatorialCoord") {
            instance(role: "ra", value: 12.9768538031, unit: "deg")
            instance(role: "dec", value: -72.9580158133, unit:"deg")
            reference(role: "frame") {
                idref "_SPACE_FRAME"
            }
        }

        instance(role: "error", type: "meas:Error2D") {
            instance (role: "statError", type: "meas:Symmetrical2D") {
                instance role: "radius", value: 0.00027, unit: "deg"
            }
        }
    }
}

VOTable

File: /examples/stc2/current/instances/position-icrs-symmetric.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="meas:StdPosition">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.space.EquatorialCoord">
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.ra">
              <LITERAL value="12.9768538031" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <ATTRIBUTE dmrole="coords:domain.space.EquatorialCoord.dec">
              <LITERAL value="-72.9580158133" dmtype="ivoa:RealQuantity" unit="deg"/>
            </ATTRIBUTE>
            <REFERENCE dmrole="coords:Coordinate.frame">
              <IDREF>_SPACE_FRAME</IDREF>
            </REFERENCE>
          </INSTANCE>
        </ATTRIBUTE>
        <COMPOSITION dmrole="meas:CoordMeasure.error">
          <INSTANCE dmtype="meas:Error2D">
            <ATTRIBUTE dmrole="meas:Error2D.statError">
              <INSTANCE dmtype="meas:Symmetrical2D">
                <ATTRIBUTE dmrole="meas:Symmetrical2D.radius">
                  <LITERAL value="0.00027" dmtype="ivoa:RealQuantity" unit="deg"/>
                </ATTRIBUTE>
              </INSTANCE>
            </ATTRIBUTE>
          </INSTANCE>
        </COMPOSITION>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

Time measurements

TT ISO Time

DSL

File: /examples/stc2/current/instances/tt-iso-time.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(type: "meas:GenTimeMeasure") {
        instance (role: "coord", type: "coords:domain.time.ISOTime") {
            instance role: "date", value: "2000-09-02T01:10:14"
        }
    }
}

VOTable

File: /examples/stc2/current/instances/tt-iso-time.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="meas:GenTimeMeasure">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.time.ISOTime">
            <ATTRIBUTE dmrole="coords:domain.time.ISOTime.date">
              <LITERAL value="2000-09-02T01:10:14" dmtype="ivoa:datetime"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

TT JD Time

DSL

File: /examples/stc2/current/instances/tt-jd-time.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(type: "meas:StdTimeMeasure") {
        instance (role: "coord", type: "coords:domain.time.JD") {
            instance role: "date", value: 2450814.5
        }
    }
}

VOTable

File: /examples/stc2/current/instances/tt-jd-time.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="meas:StdTimeMeasure">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.time.JD">
            <ATTRIBUTE dmrole="coords:domain.time.JD.date">
              <LITERAL value="2450814.5" dmtype="ivoa:real"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

TT MJD Time

DSL

File: /examples/stc2/current/instances/tt-mjd-time.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(type: "meas:StdTimeMeasure") {
        instance (role: "coord", type: "coords:domain.time.MJD") {
            instance role: "date", value: 50814.0
        }
    }
}

VOTable

File: /examples/stc2/current/instances/tt-mjd-time.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="meas:StdTimeMeasure">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.time.MJD">
            <ATTRIBUTE dmrole="coords:domain.time.MJD.date">
              <LITERAL value="50814.0" dmtype="ivoa:real"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

TT MET Time

DSL

File: /examples/stc2/current/instances/tt-met-time.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(type: "meas:StdTimeMeasure") {
        instance (role: "coord", type: "coords:domain.time.TimeOffset") {
            instance role: "time", value: 1234.5
            instance(role: "time0", type: "coords:domain.time.JD") {
                instance role: "date", value: 2451234.02
            }
        }
    }
}

VOTable

File: /examples/stc2/current/instances/tt-met-time.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="meas:StdTimeMeasure">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:domain.time.TimeOffset">
            <ATTRIBUTE dmrole="coords:domain.time.TimeOffset.time">
              <LITERAL value="1234.5" dmtype="ivoa:RealQuantity"/>
            </ATTRIBUTE>
            <ATTRIBUTE dmrole="coords:domain.time.TimeOffset.time0">
              <INSTANCE dmtype="coords:domain.time.JD">
                <ATTRIBUTE dmrole="coords:domain.time.JD.date">
                  <LITERAL value="2451234.02" dmtype="ivoa:real"/>
                </ATTRIBUTE>
              </INSTANCE>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

Other Measurements

Magnitude with Symmetric Error

DSL

File: /examples/stc2/current/instances/magnitude-sym-error.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(type: "meas:GenericCoordMeasure") {
        // implicit reference to TOPOCENTER Std 1D frame
        instance(role: "coord", type: "coords:PhysicalCoordValue") {
            // implicit reference to STD 1D Axis
            instance role: "cval", value: -0.28, type: "ivoa:RealQuantity"
        }
        instance(role: "error", type: "meas:Error1D") {
            instance(role: "statError", type: "meas:Symmetrical1D") {
                instance role: "radius", value: 0.01
            }
        }
    }
}

VOTable

File: /examples/stc2/current/instances/magnitude-sym-error.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="meas:GenericCoordMeasure">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:PhysicalCoordValue">
            <ATTRIBUTE dmrole="coords:PhysicalCoordValue.cval">
              <LITERAL value="-0.28" dmtype="ivoa:RealQuantity"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
        <COMPOSITION dmrole="meas:CoordMeasure.error">
          <INSTANCE dmtype="meas:Error1D">
            <ATTRIBUTE dmrole="meas:Error1D.statError">
              <INSTANCE dmtype="meas:Symmetrical1D">
                <ATTRIBUTE dmrole="meas:Symmetrical1D.radius">
                  <LITERAL value="0.01" dmtype="ivoa:RealQuantity"/>
                </ATTRIBUTE>
              </INSTANCE>
            </ATTRIBUTE>
          </INSTANCE>
        </COMPOSITION>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

Magnitude with Asymmetric Error

DSL

File: /examples/stc2/current/instances/magnitude-asym-error.jovial

def modelsFolder = "file:../models"
def voluteFolder = "https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models/"

def coordsLocation = new URL("$modelsFolder/STC_coords-v2.0.vo-dml.xml")
def measLocation = new URL("$modelsFolder/STC_meas-v2.0.vo-dml.xml")
def ivoaLocation = new URL("$voluteFolder/ivoa/vo-dml/IVOA-v1.0.vo-dml.xml")

dmInstance {
    model(vodmlURL: coordsLocation)
    model(vodmlURL: measLocation)
    model(vodmlURL: ivoaLocation)

    instance(type: "meas:GenericCoordMeasure") {
        // implicit reference to STD 1D Axis
        instance(role: "coord", type: "coords:PhysicalCoordValue") {
            // implicit reference to TOPOCENTER STD 1D frame
            instance role: "cval", value: "-0.28", type: "ivoa:RealQuantity"
        }
        instance(role: "error", type: "meas:Error1D") {
            instance(role: "statError", type: "meas:Asymmetrical1D") {
                instance role: "plus", value: 0.02
                instance role: "minus", value: 0.01
            }
        }
    }
}

VOTable

File: /examples/stc2/current/instances/magnitude-asym-error.vot.xml

<?xml version="1.0" encoding="UTF-8"?><VOTABLE xmlns="http://www.ivoa.net/xml/VOTable/v1.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <VODML>
    <MODEL>
      <NAME>coords</NAME>
      <URL>file:../models/STC_coords-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>meas</NAME>
      <URL>file:../models/STC_meas-v2.0.vo-dml.xml</URL>
    </MODEL>
    <MODEL>
      <NAME>ivoa</NAME>
      <URL>https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/models//ivoa/vo-dml/IVOA-v1.0.vo-dml.xml</URL>
    </MODEL>
    <GLOBALS>
      <INSTANCE dmtype="meas:GenericCoordMeasure">
        <ATTRIBUTE dmrole="meas:CoordMeasure.coord">
          <INSTANCE dmtype="coords:PhysicalCoordValue">
            <ATTRIBUTE dmrole="coords:PhysicalCoordValue.cval">
              <LITERAL value="-0.28" dmtype="ivoa:RealQuantity"/>
            </ATTRIBUTE>
          </INSTANCE>
        </ATTRIBUTE>
        <COMPOSITION dmrole="meas:CoordMeasure.error">
          <INSTANCE dmtype="meas:Error1D">
            <ATTRIBUTE dmrole="meas:Error1D.statError">
              <INSTANCE dmtype="meas:Asymmetrical1D">
                <ATTRIBUTE dmrole="meas:Asymmetrical1D.plus">
                  <LITERAL value="0.02" dmtype="ivoa:RealQuantity"/>
                </ATTRIBUTE>
                <ATTRIBUTE dmrole="meas:Asymmetrical1D.minus">
                  <LITERAL value="0.01" dmtype="ivoa:RealQuantity"/>
                </ATTRIBUTE>
              </INSTANCE>
            </ATTRIBUTE>
          </INSTANCE>
        </COMPOSITION>
      </INSTANCE>
    </GLOBALS>
  </VODML>
  <RESOURCE ID="EMPTY"/>
</VOTABLE>

Notes

VODML Mapping

There is currently no mechanism for referencing an object by ID/URI. Should there be one or is REMOTEREFERENCE enough?