[Volute] r3575 - in trunk/projects/dm/vo-dml: mapping/MAST VODML Parser xsd/ext

Volute commit messages volutecommits at g-vo.org
Wed Oct 26 18:05:13 CEST 2016


Author: tdonaldson
Date: Wed Sep 28 04:29:20 2016
New Revision: 3575

Log:
Move the alternative mapping schema to live with the other schemas

Added:
   trunk/projects/dm/vo-dml/xsd/ext/VOTable-1.3_vodmlAlt.xsd
      - copied unchanged from r3573, trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VOTable-1.3_vodmlAlt.xsd
Deleted:
   trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VOTable-1.3_vodmlAlt.xsd
Modified:
   trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VODML Parser.html

Modified: trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VODML Parser.html
==============================================================================
--- trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VODML Parser.html	Wed Sep 28 03:25:30 2016	(r3574)
+++ trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VODML Parser.html	Wed Sep 28 04:29:20 2016	(r3575)
@@ -124,7 +124,7 @@
 <br>
 <a href="outJsonLite" target="_blank">outJsonLite</a><br>
 <br>
-<a href="outVotableAlt" target="_blank">outVotableAlt</a> - These files are in the alternate VODML syntax, and can also be parsed by this same parser.  The schema is <a href="VOTable-1.3_vodmlAlt.xsd" target="_blank">VOTable-1.3_vodmlAlt.xsd</a><br>
+<a href="outVotableAlt" target="_blank">outVotableAlt</a> - These files are in the alternate VODML syntax, and can also be parsed by this same parser.  The schema is <a href="../../xsd/ext/VOTable-1.3_vodmlAlt.xsd" target="_blank">VOTable-1.3_vodmlAlt.xsd</a><br>
 <br>
 <h2>Output Formats</h2>
 The output formats are based on the likely oversimplified notion that

Copied: trunk/projects/dm/vo-dml/xsd/ext/VOTable-1.3_vodmlAlt.xsd (from r3573, trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VOTable-1.3_vodmlAlt.xsd)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/projects/dm/vo-dml/xsd/ext/VOTable-1.3_vodmlAlt.xsd	Wed Sep 28 04:29:20 2016	(r3575, copy of r3573, trunk/projects/dm/vo-dml/mapping/MAST VODML Parser/VOTable-1.3_vodmlAlt.xsd)
@@ -0,0 +1,654 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--W3C Schema for VOTable  = Virtual Observatory Tabular Format
+.Version 1.0 : 15-Apr-2002
+.Version 1.09: 23-Jan-2004 Version 1.09
+.Version 1.09: 30-Jan-2004 Version 1.091
+.Version 1.09: 22-Mar-2004 Version 1.092
+.Version 1.094: 02-Jun-2004 GROUP does not contain FIELD
+.Version 1.1 :  10-Jun-2004 remove the complexContent
+.Version 1.11: GL: 23-May-2006 remove most root elements, use name= type= iso ref= structure
+.Version 1.11: GL: 29-Aug-2006 review and added comments (prefixed by GL) 
+              before sending to Francois Ochsenbein
+.Version 1.12: FO: Preliminary Version 1.2
+.Version 1.18: FO: Tested (jax) version 1.2
+.Version 1.19: FO: Completed INFO attributes
+.Version 1.20: FO: Added xtype; content-role is less restrictive (May2009)
+.Version 1.20a: FO: PR-20090710 Cosmetics.
+.Version 1.20b: FO: INFO does not accept sub-elements (2009-09-29)
+.Version 1.20c: FO: elementFormDefault="qualified" to stay compatible with 1.1
+.Version 1.3: MT: Added BINARY2 element
+.Version 1.3: MT: Further relaxed LINK content-role type to token
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+   xmlns="http://www.ivoa.net/xml/VOTable/v1.3_vodml" targetNamespace="http://www.ivoa.net/xml/VOTable/v1.3_vodml">
+   <xs:annotation>
+      <xs:documentation>
+    VOTable is meant to serialize tabular documents in the
+    context of Virtual Observatory applications. This schema
+    corresponds to the VOTable document available from
+    http://www.ivoa.net/Documents/latest/VOT.html
+</xs:documentation>
+   </xs:annotation>
+   <!-- Here we define some interesting new datatypes:
+     - anyTEXT   may have embedded XHTML (conforming HTML)
+     - astroYear is an epoch in Besselian or Julian year, e.g. J2000
+     - arrayDEF  specifies an array size e.g. 12x23x*
+     - dataType  defines the acceptable datatypes
+     - ucdType   defines the acceptable UCDs (UCD1+)
+     - precType  defines the acceptable precisions
+     - yesno     defines just the 2 alternatives
+-->
+   <xs:complexType name="anyTEXT" mixed="true">
+      <xs:sequence>
+         <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/>
+      </xs:sequence>
+   </xs:complexType>
+   <xs:simpleType name="astroYear">
+      <xs:restriction base="xs:token">
+         <xs:pattern value="[JB]?[0-9]+([.][0-9]*)?"/>
+      </xs:restriction>
+   </xs:simpleType>
+   <xs:simpleType name="ucdType">
+      <xs:restriction base="xs:token">
+         <xs:annotation>
+            <xs:documentation>
+      Accept UCD1+
+      Accept also old UCD1 (but not / + %) including SIAP convention (with :)
+    </xs:documentation>
+         </xs:annotation>
+         <xs:pattern value="[A-Za-z0-9_.:;\-]*"/>
+         <!-- UCD1 use also / + % -->
+      </xs:restriction>
+   </xs:simpleType>
+   <xs:simpleType name="arrayDEF">
+      <xs:restriction base="xs:token">
+         <xs:pattern value="([0-9]+x)*[0-9]*[*]?(s\W)?"/>
+      </xs:restriction>
+   </xs:simpleType>
+   <xs:simpleType name="encodingType">
+      <xs:restriction base="xs:NMTOKEN">
+         <xs:enumeration value="gzip"/>
+         <xs:enumeration value="base64"/>
+         <xs:enumeration value="dynamic"/>
+         <xs:enumeration value="none"/>
+      </xs:restriction>
+   </xs:simpleType>
+   <xs:simpleType name="dataType">
+      <xs:restriction base="xs:NMTOKEN">
+         <xs:enumeration value="boolean"/>
+         <xs:enumeration value="bit"/>
+         <xs:enumeration value="unsignedByte"/>
+         <xs:enumeration value="short"/>
+         <xs:enumeration value="int"/>
+         <xs:enumeration value="long"/>
+         <xs:enumeration value="char"/>
+         <xs:enumeration value="unicodeChar"/>
+         <xs:enumeration value="float"/>
+         <xs:enumeration value="double"/>
+         <xs:enumeration value="floatComplex"/>
+         <xs:enumeration value="doubleComplex"/>
+      </xs:restriction>
+   </xs:simpleType>
+   <xs:simpleType name="precType">
+      <xs:restriction base="xs:token">
+         <xs:pattern value="[EF]?[1-9][0-9]*"/>
+      </xs:restriction>
+   </xs:simpleType>
+   <xs:simpleType name="yesno">
+      <xs:restriction base="xs:NMTOKEN">
+         <xs:enumeration value="yes"/>
+         <xs:enumeration value="no"/>
+      </xs:restriction>
+   </xs:simpleType>
+   <xs:complexType name="Min">
+      <xs:attribute name="value" type="xs:string" use="required"/>
+      <xs:attribute name="inclusive" type="yesno" default="yes"/>
+   </xs:complexType>
+   <xs:complexType name="Max">
+      <xs:attribute name="value" type="xs:string" use="required"/>
+      <xs:attribute name="inclusive" type="yesno" default="yes"/>
+   </xs:complexType>
+   <xs:complexType name="Option">
+      <xs:sequence>
+         <xs:element name="OPTION" type="Option" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:token"/>
+      <xs:attribute name="value" type="xs:string" use="required"/>
+   </xs:complexType>
+   <!-- VALUES expresses the values that can be taken by the data 
+    in a column or by a parameter
+  -->
+   <xs:complexType name="Values">
+      <xs:sequence>
+         <xs:element name="MIN" type="Min" minOccurs="0"/>
+         <xs:element name="MAX" type="Max" minOccurs="0"/>
+         <xs:element name="OPTION" type="Option" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute name="ID" type="xs:ID"/>
+      <xs:attribute name="type" default="legal">
+         <xs:simpleType>
+            <xs:restriction base="xs:NMTOKEN">
+               <xs:enumeration value="legal"/>
+               <xs:enumeration value="actual"/>
+            </xs:restriction>
+         </xs:simpleType>
+      </xs:attribute>
+      <xs:attribute name="null" type="xs:token"/>
+      <xs:attribute name="ref" type="xs:IDREF"/>
+      <!-- xs:attribute name="invalid" type="yesno" default="no"/ -->
+   </xs:complexType>
+   <!-- The LINK is a URL (href) or some other kind of reference (gref) -->
+   <xs:complexType name="Link">
+      <xs:annotation>
+         <xs:documentation> 
+    content-role was previsouly restricted as: <![CDATA[
+    <xs:attribute name="content-role">
+      <xs:simpleType>
+        <xs:restriction base="xs:NMTOKEN">
+          <xs:enumeration value="query"/>
+          <xs:enumeration value="hints"/>
+          <xs:enumeration value="doc"/>
+          <xs:enumeration value="location"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:attribute>]]>; is now a token.
+    </xs:documentation>
+      </xs:annotation>
+      <xs:attribute name="ID" type="xs:ID"/>
+      <xs:attribute name="content-role" type="xs:token"/>
+      <xs:attribute name="content-type" type="xs:token"/>
+      <xs:attribute name="title" type="xs:string"/>
+      <xs:attribute name="value" type="xs:string"/>
+      <xs:attribute name="href" type="xs:anyURI"/>
+      <xs:attribute name="gref" type="xs:token"/>
+      <!-- Deprecated in V1.1 -->
+      <xs:attribute name="action" type="xs:anyURI"/>
+   </xs:complexType>
+   <!-- INFO is defined in Version 1.2 as a PARAM of String type 
+<xs:complexType name="Info">
+  <xs:complexContent>
+    <xs:restriction base="Param">
+      <xs:attribute name="unit" fixed=""/>
+      <xs:attribute name="datatype" fixed="char"/>
+      <xs:attribute name="arraysize" fixed="*"/>
+    </xs:restriction>
+  </xs:complexContent>
+</xs:complexType>
+ -or- as a full definition:
+<xs:complexType name="Info">
+  <xs:sequence> 
+  <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+    <xs:element name="VALUES" type="Values" minOccurs="0"/>
+    <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/> 
+  </xs:sequence>
+  <xs:attribute name="name" type="xs:token" use="required"/>
+  <xs:attribute name="value" type="xs:string" use="required"/>
+  <xs:attribute name="ID" type="xs:ID"/>
+  <xs:attribute name="unit" type="xs:token"/>
+  <xs:attribute name="xtype" type="xs:token"/>
+  <xs:attribute name="ref" type="xs:IDREF"/>
+  <xs:attribute name="ucd" type="ucdType"/>
+  <xs:attribute name="utype" type="xs:string"/>
+</xs:complexType>
+-->
+   <!-- No sub-element is accepted in INFO for backward compatibility -->
+   <xs:complexType name="Info">
+      <xs:simpleContent>
+         <xs:extension base="xs:string">
+            <xs:attribute name="ID" type="xs:ID"/>
+            <xs:attribute name="name" type="xs:token" use="required"/>
+            <xs:attribute name="value" type="xs:string" use="required"/>
+            <xs:attribute name="unit" type="xs:token"/>
+            <xs:attribute name="xtype" type="xs:token"/>
+            <xs:attribute name="ref" type="xs:IDREF"/>
+            <xs:attribute name="ucd" type="ucdType"/>
+            <xs:attribute name="utype" type="xs:string"/>
+         </xs:extension>
+      </xs:simpleContent>
+   </xs:complexType>
+   <!-- Expresses the coordinate system we are using -->
+   <!-- Deprecated V1.2 -->
+   <xs:complexType name="CoordinateSystem">
+      <xs:annotation>
+         <xs:documentation>
+    Deprecated in Version 1.2
+  </xs:documentation>
+      </xs:annotation>
+      <xs:simpleContent>
+         <xs:extension base="xs:string">
+            <xs:attribute name="ID" type="xs:ID" use="required"/>
+            <xs:attribute name="equinox" type="astroYear"/>
+            <xs:attribute name="epoch" type="astroYear"/>
+            <xs:attribute name="system" default="eq_FK5">
+               <xs:simpleType>
+                  <xs:restriction base="xs:NMTOKEN">
+                     <xs:enumeration value="eq_FK4"/>
+                     <xs:enumeration value="eq_FK5"/>
+                     <xs:enumeration value="ICRS"/>
+                     <xs:enumeration value="ecl_FK4"/>
+                     <xs:enumeration value="ecl_FK5"/>
+                     <xs:enumeration value="galactic"/>
+                     <xs:enumeration value="supergalactic"/>
+                     <xs:enumeration value="xy"/>
+                     <xs:enumeration value="barycentric"/>
+                     <xs:enumeration value="geo_app"/>
+                  </xs:restriction>
+               </xs:simpleType>
+            </xs:attribute>
+         </xs:extension>
+      </xs:simpleContent>
+   </xs:complexType>
+   <xs:complexType name="Definitions">
+      <xs:annotation>
+         <xs:documentation>
+    Deprecated in Version 1.1
+  </xs:documentation>
+      </xs:annotation>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+         <xs:element name="COOSYS" type="CoordinateSystem"/>
+         <!-- Deprecated in V1.2 -->
+         <xs:element name="PARAM" type="Param"/>
+      </xs:choice>
+   </xs:complexType>
+   <!-- FIELD is the definition of what is in a column of the table -->
+   <xs:complexType name="Field">
+      <xs:sequence>
+         <!-- minOccurs="0" maxOccurs="unbounded" -->
+         <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+         <xs:element name="VALUES" type="Values" minOccurs="0"/>
+         <!-- maxOccurs="2" -->
+         <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute name="ID" type="xs:ID"/>
+      <xs:attribute name="unit" type="xs:token"/>
+      <xs:attribute name="datatype" type="dataType" use="required"/>
+      <xs:attribute name="precision" type="precType"/>
+      <xs:attribute name="width" type="xs:positiveInteger"/>
+      <xs:attribute name="xtype" type="xs:token"/>
+      <xs:attribute name="ref" type="xs:IDREF"/>
+      <xs:attribute name="name" type="xs:token" use="required"/>
+      <xs:attribute name="ucd" type="ucdType"/>
+      <xs:attribute name="utype" type="xs:string"/>
+      <xs:attribute name="arraysize" type="xs:string"/>
+      <!-- GL: is the next deprecated element remaining 
+        (is not in PARAM, but will in new model be inherited) 
+    -->
+      <xs:attribute name="type">
+         <!-- type is not in the Version 1.1, but is kept for
+         backward compatibility purposes
+    -->
+         <xs:simpleType>
+            <xs:restriction base="xs:NMTOKEN">
+               <xs:enumeration value="hidden"/>
+               <xs:enumeration value="no_query"/>
+               <xs:enumeration value="trigger"/>
+               <xs:enumeration value="location"/>
+            </xs:restriction>
+         </xs:simpleType>
+      </xs:attribute>
+   </xs:complexType>
+   <!-- A PARAM is similar to a FIELD, but it also has a "value" attribute -->
+   <!--  GL: implemented here as a subtype as suggested we do in Kyoto. -->
+   <xs:complexType name="Param">
+      <xs:complexContent>
+         <xs:extension base="Field">
+            <xs:attribute name="value" type="xs:string" use="required"/>
+         </xs:extension>
+      </xs:complexContent>
+   </xs:complexType>
+   <!-- GROUP groups columns; may include descriptions, fields/params/groups -->
+   <xs:complexType name="Group">
+      <xs:sequence>
+         <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+         <!--  GL I guess I can understand the next choice element as one may (?) 
+      really want to group fields and params and groups in a particular order.
+-->
+         <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="FIELDref" type="FieldRef"/>
+            <xs:element name="PARAMref" type="ParamRef"/>
+            <xs:element name="PARAM" type="Param"/>
+            <xs:element name="GROUP" type="Group"/>
+            <!-- GL a GroupRef could remove recursion -->
+         </xs:choice>
+      </xs:sequence>
+      <xs:attribute name="ID" type="xs:ID"/>
+      <xs:attribute name="name" type="xs:token"/>
+      <xs:attribute name="ref" type="xs:IDREF"/>
+      <xs:attribute name="ucd" type="ucdType"/>
+      <xs:attribute name="utype" type="xs:string"/>
+   </xs:complexType>
+   <!-- FIELDref and PARAMref are references to FIELD or PARAM defined
+     in the parent TABLE or RESOURCE -->
+   <!-- GL This can not be enforced in XML Schema, so why not IDREF in <Group> ?
+     In particular if the UCD and utype attributes will NOT be added -->
+   <xs:complexType name="FieldRef">
+      <xs:attribute name="ref" type="xs:IDREF" use="required"/>
+      <xs:attribute name="ucd" type="ucdType"/>
+      <xs:attribute name="utype" type="xs:string"/>
+   </xs:complexType>
+   <xs:complexType name="ParamRef">
+      <xs:attribute name="ref" type="xs:IDREF" use="required"/>
+      <xs:attribute name="ucd" type="ucdType"/>
+      <xs:attribute name="utype" type="xs:string"/>
+   </xs:complexType>
+   <!-- DATA is the actual table data, in one of three formats -->
+   <!-- 
+  GL in Kyoto we discussed the option of having the specific Data items 
+  be subtypes of Data:
+-->
+   <!-- 
+<xs:complexType name="Data" abstract="true"/>
+
+<xs:complexType name="TableData">
+  <xs:complexContent>
+    <xs:extension base="Data">
+     ... etc
+    </xs:extension>
+  </xs:complexContent>
+</xs:complexType>
+ -->
+   <xs:complexType name="Data">
+      <xs:annotation>
+         <xs:documentation>
+    Added in Version 1.2: INFO for diagnostics
+  </xs:documentation>
+      </xs:annotation>
+      <xs:sequence>
+         <xs:choice>
+            <xs:element name="TABLEDATA" type="TableData"/>
+            <xs:element name="BINARY" type="Binary"/>
+            <xs:element name="BINARY2" type="Binary2"/>
+            <xs:element name="FITS" type="FITS"/>
+         </xs:choice>
+         <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+   </xs:complexType>
+   <!-- Pure XML data -->
+   <xs:complexType name="TableData">
+      <xs:sequence>
+         <xs:element name="TR" type="Tr" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+   </xs:complexType>
+   <xs:complexType name="Td">
+      <xs:simpleContent>
+         <xs:extension base="xs:string">
+            <!-- xs:attribute name="ref" type="xs:IDREF"/ -->
+            <xs:annotation>
+               <xs:documentation>
+          The 'encoding' attribute is added here to avoid
+          problems of code generators which do not properly
+          interpret the TR/TD structures.
+          'encoding' was chosen because it appears in
+          appendix A.5
+      </xs:documentation>
+            </xs:annotation>
+            <xs:attribute name="encoding" type="encodingType"/>
+         </xs:extension>
+      </xs:simpleContent>
+   </xs:complexType>
+   <xs:complexType name="Tr">
+      <xs:annotation>
+         <xs:documentation>
+    The ID attribute is added here to the TR tag to avoid 
+    problems of code generators which do not properly 
+    interpret the TR/TD structures
+  </xs:documentation>
+      </xs:annotation>
+      <xs:sequence>
+         <xs:element name="TD" type="Td" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute name="ID" type="xs:ID"/>
+   </xs:complexType>
+   <!-- FITS file, perhaps with specification of which extension to seek to -->
+   <xs:complexType name="FITS">
+      <xs:sequence>
+         <xs:element name="STREAM" type="Stream"/>
+      </xs:sequence>
+      <xs:attribute name="extnum" type="xs:positiveInteger"/>
+   </xs:complexType>
+   <!-- BINARY data format -->
+   <xs:complexType name="Binary">
+      <xs:sequence>
+         <xs:element name="STREAM" type="Stream"/>
+      </xs:sequence>
+   </xs:complexType>
+   <!-- BINARY2 data format -->
+   <xs:complexType name="Binary2">
+      <xs:sequence>
+         <xs:element name="STREAM" type="Stream"/>
+      </xs:sequence>
+   </xs:complexType>
+   <!-- STREAM can be local or remote, encoded or not -->
+   <xs:complexType name="Stream">
+      <xs:simpleContent>
+         <xs:extension base="xs:string">
+            <xs:attribute name="type" default="locator">
+               <xs:simpleType>
+                  <xs:restriction base="xs:NMTOKEN">
+                     <xs:enumeration value="locator"/>
+                     <xs:enumeration value="other"/>
+                  </xs:restriction>
+               </xs:simpleType>
+            </xs:attribute>
+            <xs:attribute name="href" type="xs:anyURI"/>
+            <xs:attribute name="actuate" default="onRequest">
+               <xs:simpleType>
+                  <xs:restriction base="xs:NMTOKEN">
+                     <xs:enumeration value="onLoad"/>
+                     <xs:enumeration value="onRequest"/>
+                     <xs:enumeration value="other"/>
+                     <xs:enumeration value="none"/>
+                  </xs:restriction>
+               </xs:simpleType>
+            </xs:attribute>
+            <xs:attribute name="encoding" type="encodingType" default="none"/>
+            <xs:attribute name="expires" type="xs:dateTime"/>
+            <xs:attribute name="rights" type="xs:token"/>
+         </xs:extension>
+      </xs:simpleContent>
+   </xs:complexType>
+   <!-- A TABLE is a sequence of FIELD/PARAMs and LINKS and DESCRIPTION, 
+     possibly followed by a DATA section 
+-->
+   <xs:complexType name="Table">
+      <xs:annotation>
+         <xs:documentation>
+    Added in Version 1.2: INFO for diagnostics
+  </xs:documentation>
+      </xs:annotation>
+      <xs:sequence>
+         <xs:element name="VODML_INSTANCE_TEMPLATES" type="vodmlInstanceTemplates"
+            minOccurs="0"/>
+         <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+         <!-- GL: why a choice iso for example -->
+         <!-- 
+      <xs:element name="PARAM" type="Param" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="FIELD" type="Field" minOccurs="0" maxOccurs="unbounded"/>
+      <xs:element name="GROUP" type="Group" minOccurs="0" maxOccurs="unbounded"/>
+-->
+         <!-- 
+  This could also enforce groups to be defined after the fields and params 
+  to which they must have a reference, which is somewhat more logical
+-->
+         <!-- Added Version 1.2: -->
+         <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+         <!-- An empty table without any FIELD/PARAM should not be acceptable -->
+         <xs:choice minOccurs="1" maxOccurs="unbounded">
+            <xs:element name="FIELD" type="Field"/>
+            <xs:element name="PARAM" type="Param"/>
+            <xs:element name="GROUP" type="Group"/>
+         </xs:choice>
+         <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/>
+         <!-- This would allow several DATA parts in a table (future extension?)
+    <xs:sequence minOccurs="0" maxOccurs="unbounded">  
+      <xs:element name="DATA" type="Data"/>
+      <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+    -->
+         <xs:element name="DATA" type="Data" minOccurs="0"/>
+         <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute name="ID" type="xs:ID"/>
+      <xs:attribute name="name" type="xs:token"/>
+      <xs:attribute name="ref" type="xs:IDREF"/>
+      <xs:attribute name="ucd" type="ucdType"/>
+      <xs:attribute name="utype" type="xs:string"/>
+      <xs:attribute name="nrows" type="xs:nonNegativeInteger"/>
+   </xs:complexType>
+   <!-- RESOURCES can contain DESCRIPTION, (INFO|PARAM|COSYS), LINK, TABLEs -->
+   <xs:complexType name="Resource">
+      <xs:annotation>
+         <xs:documentation>
+     Added in Version 1.2: INFO for diagnostics in several places
+  </xs:documentation>
+      </xs:annotation>
+      <xs:sequence>
+         <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+         <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+         <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="COOSYS" type="CoordinateSystem"/>
+            <!-- Deprecated in V1.2 -->
+            <xs:element name="GROUP" type="Group"/>
+            <xs:element name="PARAM" type="Param"/>
+         </xs:choice>
+         <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="LINK" type="Link" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:choice>
+               <xs:element name="TABLE" type="Table"/>
+               <xs:element name="RESOURCE" type="Resource"/>
+            </xs:choice>
+            <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+         </xs:sequence>
+         <!-- Suggested Doug Tody, to include new RESOURCE types -->
+         <xs:any namespace="##other" processContents="lax" minOccurs="0"
+            maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute name="name" type="xs:token"/>
+      <xs:attribute name="ID" type="xs:ID"/>
+      <xs:attribute name="utype" type="xs:string"/>
+      <xs:attribute name="type" default="results">
+         <xs:simpleType>
+            <xs:restriction base="xs:NMTOKEN">
+               <xs:enumeration value="results"/>
+               <xs:enumeration value="meta"/>
+            </xs:restriction>
+         </xs:simpleType>
+      </xs:attribute>
+      <!-- Suggested Doug Tody, to include new RESOURCE attributes -->
+      <xs:anyAttribute namespace="##other" processContents="lax"/>
+   </xs:complexType>
+   <!-- 
+       
+       VODML types 
+       
+       -->
+   <xs:complexType name="vodmlGlobals">
+      <xs:annotation>
+         <xs:documentation>
+			   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.
+      </xs:documentation>
+      </xs:annotation>
+      <xs:sequence>
+         <xs:element name="MODEL" type="Model" minOccurs="0" maxOccurs="unbounded"/>
+         <xs:element name="INSTANCE" type="Instance" minOccurs="0"
+            maxOccurs="unbounded"/>
+      </xs:sequence>
+   </xs:complexType>
+   <xs:complexType name="vodmlInstanceTemplates">
+      <xs:annotation>
+         <xs:documentation>
+			   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.
+      </xs:documentation>
+      </xs:annotation>
+      <xs:sequence>
+         <xs:element name="INSTANCE" type="Instance" minOccurs="0"
+            maxOccurs="unbounded"/>
+      </xs:sequence>
+   </xs:complexType>
+   <xs:complexType name="Model">
+      <xs:attribute name="name" type="xs:ID"/>
+      <xs:attribute name="url" type="xs:anyURI"/>
+      <xs:attribute name="identifier" type="xs:string"/>
+   </xs:complexType>
+   <xs:complexType name="Instance">
+      <xs:sequence>
+         <xs:element name="ITYPE" type="VODMLReference" minOccurs="1"
+            maxOccurs="1"/>
+         <xs:element name="SLOT" type="Slot" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attribute name="id" type="xs:ID"/>
+   </xs:complexType>
+   <xs:complexType name="Slot">
+      <xs:sequence>
+         <xs:element name="SROLE" type="VODMLReference" minOccurs="1"
+            maxOccurs="1"/>
+         <xs:choice minOccurs="1" maxOccurs="1">
+            <xs:element name="INSTANCE" type="Instance"/>
+            <xs:element name="COLLECTION" type="Collection"/>
+            <xs:element name="PRIMITIVE" type="Primitive"/>
+         </xs:choice>
+      </xs:sequence>
+   </xs:complexType>
+   <xs:complexType name="Collection">
+      <xs:sequence>
+         <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="INSTANCE" type="Instance"/>
+            <xs:element name="COLLECTION" type="Collection"/>
+            <xs:element name="PRIMITIVE" type="Primitive"/>
+         </xs:choice>
+      </xs:sequence>
+   </xs:complexType>
+   <xs:complexType name="Primitive">
+      <xs:simpleContent>
+         <xs:extension base="xs:string">
+            <xs:attribute name="type" type="xs:string"/>
+            <xs:attribute name="arraysize" type="xs:string"/>
+         </xs:extension>
+      </xs:simpleContent>
+   </xs:complexType>
+   <xs:simpleType name="VODMLReference">
+      <xs:annotation>
+         <xs:documentation>
+      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.
+      </xs:documentation>
+      </xs:annotation>
+      <xs:restriction base="xs:string">
+         <xs:pattern value="[\w_\-]+:[\w_\-/\./*]+"/>
+      </xs:restriction>
+   </xs:simpleType>
+   <!-- VOTable is the root element -->
+   <xs:element name="VOTABLE">
+      <xs:complexType>
+         <xs:sequence>
+            <xs:element name="VODML_GLOBALS" type="vodmlGlobals" minOccurs="0"/>
+            <xs:element name="DESCRIPTION" type="anyTEXT" minOccurs="0"/>
+            <xs:element name="DEFINITIONS" type="Definitions" minOccurs="0"/>
+            <!-- Deprecated -->
+            <xs:choice minOccurs="0" maxOccurs="unbounded">
+               <xs:element name="COOSYS" type="CoordinateSystem"/>
+               <!-- Deprecated in V1.2 -->
+               <xs:element name="GROUP" type="Group"/>
+               <xs:element name="PARAM" type="Param"/>
+               <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+            </xs:choice>
+            <xs:element name="RESOURCE" type="Resource" minOccurs="1"
+               maxOccurs="unbounded"/>
+            <xs:element name="INFO" type="Info" minOccurs="0" maxOccurs="unbounded"/>
+         </xs:sequence>
+         <xs:attribute name="ID" type="xs:ID"/>
+         <xs:attribute name="version">
+            <xs:simpleType>
+               <xs:restriction base="xs:NMTOKEN">
+                  <xs:enumeration value="1.3"/>
+               </xs:restriction>
+            </xs:simpleType>
+         </xs:attribute>
+      </xs:complexType>
+   </xs:element>
+</xs:schema>


More information about the Volutecommits mailing list