A VODML element MUST have at least one model and at least on globals or templates. This section will describe all global instances, that is, instances that are not created once per row of a table. It starts with a list of all the MODELs, then has all the GLOBAL instances. This section will describe all the instance, that is, instances created once per row of a table. The instances can have FIELDrefs describing how to fill individual primtive valuesthe templates from TABLEDATA values. The name of the model that is to be used as prefix when referring to its elements in a VODMLRef. The IVOA Identifier by which the model is registered in an IVOA registry. Objects, i.e. ObjectType instances, can have a unique identifier which can be used in ORM-like references. Possible reference to a parent container of the object. May be given when the objects is not already contained in a colleciton on the parent object. Note, a VODMLReference can have multiple instances, but a CONTAINER MUST have only 1 instance. Can be used by references as identifier for an object or template. Allows one to map OPTION values in VOTABLE to either EnumLiterals in data model (if TYPE identifies VO-DML/ Enumeration), or SKOSConcept in external SKOS vocabulary (if ROLE is a VO-DML/Attribute containing a skosconcept declaration). NB: IF the datatype of the ROLE is an Enumeration, and there is NO optionmapping it implies that the values ARE the enum literals, or the concepts. Allows one to map particular values defined in a VALUES/OPTION list to enumeration literals in the VO-DML model or to a concept in a SKOS vocabulary. The VOTable OPTION value that is being mapped to enum literal or semantic concept. TBD anyURI as an identifier of concepts made sense for SKOS vocabularies. How about general semantic vocabularies? I.e. is it ok for the type be xs:string iso xs:anyURI? NB: dmrole is optional (at the moment) *only* because VODMLObject::CONTAINER (a VODMLReferece) needs no role. ATTRIBUTE, COMPOSITION and REFERENCE MUST have a ROLE. Hard to model in XML schema, could be done in Schematron. a VODMLAttribute MUST have a dmrole attribute When used inside a "template" structured type, i.e. one defined inside a TABLE element, this allows one to indicate a FIELD representing the attribute. Ref to a predefined PARAM. Simple, primitive value, possibly with extra attributes. Similar to PARAM, but restricted attribute set. Structured value, must be instance of DataType A VODMLCollection represents collection of child objects in a VO-DML Composition relationship. The collection receives the VO-DML ref to the composition relation, the member objects inside the collection do *not* have a ROLE. a VODMLComposition MUST have a dmrole attribute, even though it is optional on VODMLRole An object in the collection. It type must conform to the declared type of the VO-DML Collection. I.e. it must be that exact type or a sub-type. Reference to an annotation of a a collection of objects that mnay contain child objects for this composition. This may be a GLOBALS or (a VODMLObject in )a TEMPLATES. These object in general SHOULD have a CONTAINER pointer to the parent object. If they don't, then all objects in the collection are assumed to be children of the current parent object. NB we should add a consistency constraint on this. Provides a reference to an ObjectType instance. Must allow that instance to be identified exactly. Various different modes depending on how that instance is serialized. - If as a Standalone instance in same VOTable document, an IDREF can point to its ID (use IDREF). - If as a row in a TABLE a relational foreign key can be used (use ORMREFERENCE) - if a remote document contains the serialized instance, a URI must be used that MUST be able to identify that object inside its remote serialization (a REMOTEREFERENCE must be used). a VODMLReference MUST have a dmrole attribute UNLESS it is used in a VODMLObject::CONTAINER, even though it is optional on VODMLRole. MUST identify an individual/standalone object defined in the same XML document. A reference to an object identified by that object's identifier. The referenced object must be stored in a TABLE and must have been annotated with an explicit identifier. This element MAY be used to provide a IDREF to the (ID of a) VODMLObject template annotating the TABLE containing the referenced object. This type allows a generic identifier to be assigned to an object. The identifier consists of one or more IDFIELD-s. This way of identifying an object is equivalent to using one or more columns in a table as primary key. A field in an identifier. The identifier may contain 1 or more such fields. Their order is important, ORM references to the object must use the same order for their foreign key. The valid format of a reference to a VO-DML element. (Used to be 'UTYPE'). MUST have a prefix that elsewhere in the VOTable is defined to correspond to a VO-DML model defining the referenced element. See "mapping document", https://volute.g-vo.org/svn/trunk/projects/dm/vo-dml/doc/MappingDMtoVOTable-v1.0-201607xx.docx. Suffix, separated from the prefix by a ':', MUST correspond to the vodml-id of the referenced element in the VO-DML/XML representation of that model.