Show VOTable Metadata Schema (XSD)

ILDG Home
PUNCH Home

MDC index

VOTable index
VOTable list

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://www.ivoa.net/xml/VOTable/v1.3" version="1.4" targetNamespace="http://www.ivoa.net/xml/VOTable/v1.3">
  <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>
  <xs:complexType name="anyTEXT" mixed="true">
    <xs:sequence>
      <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip">
      </xs:any>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="astroYear">
    <xs:restriction base="xs:token">
      <xs:pattern value="[JB]?[0-9]+([.][0-9]*)?">
      </xs:pattern>
    </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_.:;\-]*">
      </xs:pattern>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="arrayDEF">
    <xs:restriction base="xs:token">
      <xs:pattern value="([0-9]+x)*[0-9]*[*]?(s\W)?">
      </xs:pattern>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="encodingType">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="gzip">
      </xs:enumeration>
      <xs:enumeration value="base64">
      </xs:enumeration>
      <xs:enumeration value="dynamic">
      </xs:enumeration>
      <xs:enumeration value="none">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="dataType">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="boolean">
      </xs:enumeration>
      <xs:enumeration value="bit">
      </xs:enumeration>
      <xs:enumeration value="unsignedByte">
      </xs:enumeration>
      <xs:enumeration value="short">
      </xs:enumeration>
      <xs:enumeration value="int">
      </xs:enumeration>
      <xs:enumeration value="long">
      </xs:enumeration>
      <xs:enumeration value="char">
      </xs:enumeration>
      <xs:enumeration value="unicodeChar">
      </xs:enumeration>
      <xs:enumeration value="float">
      </xs:enumeration>
      <xs:enumeration value="double">
      </xs:enumeration>
      <xs:enumeration value="floatComplex">
      </xs:enumeration>
      <xs:enumeration value="doubleComplex">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="precType">
    <xs:restriction base="xs:token">
      <xs:pattern value="[EF]?[0-9][0-9]*">
      </xs:pattern>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="yesno">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="yes">
      </xs:enumeration>
      <xs:enumeration value="no">
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Min">
    <xs:attribute use="required" name="value" type="xs:string">
    </xs:attribute>
    <xs:attribute name="inclusive" type="yesno" default="yes">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="Max">
    <xs:attribute use="required" name="value" type="xs:string">
    </xs:attribute>
    <xs:attribute name="inclusive" type="yesno" default="yes">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="Option">
    <xs:sequence>
      <xs:element name="OPTION" minOccurs="0" maxOccurs="unbounded" type="Option">
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" type="xs:token">
    </xs:attribute>
    <xs:attribute use="required" name="value" type="xs:string">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="Values">
    <xs:sequence>
      <xs:element name="MIN" minOccurs="0" type="Min">
      </xs:element>
      <xs:element name="MAX" minOccurs="0" type="Max">
      </xs:element>
      <xs:element name="OPTION" minOccurs="0" maxOccurs="unbounded" type="Option">
      </xs:element>
    </xs:sequence>
    <xs:attribute name="ID" type="xs:ID">
    </xs:attribute>
    <xs:attribute name="type" default="legal">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="legal">
          </xs:enumeration>
          <xs:enumeration value="actual">
          </xs:enumeration>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="null" type="xs:token">
    </xs:attribute>
    <xs:attribute name="ref" type="xs:IDREF">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="Link">
    <xs:annotation>
      <xs:documentation>
        content-role was previsouly restricted as:
        <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>
    <xs:attribute name="content-role" type="xs:token">
    </xs:attribute>
    <xs:attribute name="content-type" type="xs:token">
    </xs:attribute>
    <xs:attribute name="title" type="xs:string">
    </xs:attribute>
    <xs:attribute name="value" type="xs:string">
    </xs:attribute>
    <xs:attribute name="href" type="xs:anyURI">
    </xs:attribute>
    <xs:attribute name="gref" type="xs:token">
    </xs:attribute>
    <xs:attribute name="action" type="xs:anyURI">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="Info">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="ID" type="xs:ID">
        </xs:attribute>
        <xs:attribute use="required" name="name" type="xs:token">
        </xs:attribute>
        <xs:attribute use="required" name="value" type="xs:string">
        </xs:attribute>
        <xs:attribute name="unit" type="xs:token">
        </xs:attribute>
        <xs:attribute name="xtype" type="xs:token">
        </xs:attribute>
        <xs:attribute name="ref" type="xs:IDREF">
        </xs:attribute>
        <xs:attribute name="ucd" type="ucdType">
        </xs:attribute>
        <xs:attribute name="utype" type="xs:string">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <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 use="required" name="ID" type="xs:ID">
        </xs:attribute>
        <xs:attribute name="equinox" type="astroYear">
        </xs:attribute>
        <xs:attribute name="epoch" type="astroYear">
        </xs:attribute>
        <xs:attribute name="system" default="eq_FK5">
          <xs:simpleType>
            <xs:restriction base="xs:NMTOKEN">
              <xs:enumeration value="eq_FK4">
              </xs:enumeration>
              <xs:enumeration value="eq_FK5">
              </xs:enumeration>
              <xs:enumeration value="ICRS">
              </xs:enumeration>
              <xs:enumeration value="ecl_FK4">
              </xs:enumeration>
              <xs:enumeration value="ecl_FK5">
              </xs:enumeration>
              <xs:enumeration value="galactic">
              </xs:enumeration>
              <xs:enumeration value="supergalactic">
              </xs:enumeration>
              <xs:enumeration value="xy">
              </xs:enumeration>
              <xs:enumeration value="barycentric">
              </xs:enumeration>
              <xs:enumeration value="geo_app">
              </xs:enumeration>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:simpleType name="Timeorigin">
    <xs:annotation>
      <xs:documentation>
        This is a time origin of a time coordinate, given as a
        Julian Date for the the time scale and reference point
        defined. It is usually given as a floating point
        literal; for convenience, the magic strings “MJD-origin”
        (standing for 2400000.5) and “JD-origin” (standing for 0)
        are also allowed.
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:pattern value="[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?|(JD|MJD)-origin"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="TimeSystem">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute use="required" name="ID" type="xs:ID">
        </xs:attribute>
        <xs:attribute name="timeorigin" type="Timeorigin">
          <xs:annotation>
            <xs:documentation>
              The time origin is the offset or the time coordinate to Julian
              Date. The timeorigin attribute MUST be given unless the time's
              representation contains a year of a calendar era, in which case it
              MUST NOT be present.
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute use="required" name="timescale" type="xs:token">
          <xs:annotation>
            <xs:documentation>
              This is the time scale used. Values SHOULD be
              taken from the IVOA timescale vocabulary (http://www.ivoa.net/rdf/timescale).
            </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute use="required" name="refposition" type="xs:token">
          <xs:annotation>
            <xs:documentation>
              The reference position SHOULD be taken from the IVOA
              refposition vocabulary (http://www.ivoa.net/rdf/refposition).
            </xs:documentation>
          </xs:annotation>
        </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">
      </xs:element>
      <xs:element name="TIMESYS" type="TimeSystem">
      </xs:element>
      <xs:element name="PARAM" type="Param">
      </xs:element>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="Field">
    <xs:sequence>
      <xs:element name="DESCRIPTION" minOccurs="0" type="anyTEXT">
      </xs:element>
      <xs:element name="VALUES" minOccurs="0" type="Values">
      </xs:element>
      <xs:element name="LINK" minOccurs="0" maxOccurs="unbounded" type="Link">
      </xs:element>
    </xs:sequence>
    <xs:attribute name="ID" type="xs:ID">
    </xs:attribute>
    <xs:attribute name="unit" type="xs:token">
    </xs:attribute>
    <xs:attribute use="required" name="datatype" type="dataType">
    </xs:attribute>
    <xs:attribute name="precision" type="precType">
    </xs:attribute>
    <xs:attribute name="width" type="xs:positiveInteger">
    </xs:attribute>
    <xs:attribute name="xtype" type="xs:token">
    </xs:attribute>
    <xs:attribute name="ref" type="xs:IDREF">
    </xs:attribute>
    <xs:attribute use="required" name="name" type="xs:token">
    </xs:attribute>
    <xs:attribute name="ucd" type="ucdType">
    </xs:attribute>
    <xs:attribute name="utype" type="xs:string">
    </xs:attribute>
    <xs:attribute name="arraysize" type="xs:string">
    </xs:attribute>
    <xs:attribute name="type">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="hidden">
          </xs:enumeration>
          <xs:enumeration value="no_query">
          </xs:enumeration>
          <xs:enumeration value="trigger">
          </xs:enumeration>
          <xs:enumeration value="location">
          </xs:enumeration>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="Param">
    <xs:complexContent>
      <xs:extension base="Field">
        <xs:attribute use="required" name="value" type="xs:string">
        </xs:attribute>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="Group">
    <xs:sequence>
      <xs:element name="DESCRIPTION" minOccurs="0" type="anyTEXT">
      </xs:element>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="FIELDref" type="FieldRef">
        </xs:element>
        <xs:element name="PARAMref" type="ParamRef">
        </xs:element>
        <xs:element name="PARAM" type="Param">
        </xs:element>
        <xs:element name="GROUP" type="Group">
        </xs:element>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="ID" type="xs:ID">
    </xs:attribute>
    <xs:attribute name="name" type="xs:token">
    </xs:attribute>
    <xs:attribute name="ref" type="xs:IDREF">
    </xs:attribute>
    <xs:attribute name="ucd" type="ucdType">
    </xs:attribute>
    <xs:attribute name="utype" type="xs:string">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="FieldRef">
    <xs:attribute use="required" name="ref" type="xs:IDREF">
    </xs:attribute>
    <xs:attribute name="ucd" type="ucdType">
    </xs:attribute>
    <xs:attribute name="utype" type="xs:string">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="ParamRef">
    <xs:attribute use="required" name="ref" type="xs:IDREF">
    </xs:attribute>
    <xs:attribute name="ucd" type="ucdType">
    </xs:attribute>
    <xs:attribute name="utype" type="xs:string">
    </xs:attribute>
  </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>
        <xs:element name="BINARY" type="Binary">
        </xs:element>
        <xs:element name="BINARY2" type="Binary2">
        </xs:element>
        <xs:element name="FITS" type="FITS">
        </xs:element>
      </xs:choice>
      <xs:element name="INFO" minOccurs="0" maxOccurs="unbounded" type="Info">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="TableData">
    <xs:sequence>
      <xs:element name="TR" minOccurs="0" maxOccurs="unbounded" type="Tr">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Td">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <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:attribute>
      </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" maxOccurs="unbounded" type="Td">
      </xs:element>
    </xs:sequence>
    <xs:attribute name="ID" type="xs:ID">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="FITS">
    <xs:sequence>
      <xs:element name="STREAM" type="Stream">
      </xs:element>
    </xs:sequence>
    <xs:attribute name="extnum" type="xs:positiveInteger">
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="Binary">
    <xs:sequence>
      <xs:element name="STREAM" type="Stream">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Binary2">
    <xs:sequence>
      <xs:element name="STREAM" type="Stream">
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <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>
              <xs:enumeration value="other">
              </xs:enumeration>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="href" type="xs:anyURI">
        </xs:attribute>
        <xs:attribute name="actuate" default="onRequest">
          <xs:simpleType>
            <xs:restriction base="xs:NMTOKEN">
              <xs:enumeration value="onLoad">
              </xs:enumeration>
              <xs:enumeration value="onRequest">
              </xs:enumeration>
              <xs:enumeration value="other">
              </xs:enumeration>
              <xs:enumeration value="none">
              </xs:enumeration>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="encoding" type="encodingType" default="none">
        </xs:attribute>
        <xs:attribute name="expires" type="xs:dateTime">
        </xs:attribute>
        <xs:attribute name="rights" type="xs:token">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <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="DESCRIPTION" minOccurs="0" type="anyTEXT">
      </xs:element>
      <xs:element name="INFO" minOccurs="0" maxOccurs="unbounded" type="Info">
      </xs:element>
      <xs:choice minOccurs="1" maxOccurs="unbounded">
        <xs:element name="FIELD" type="Field">
        </xs:element>
        <xs:element name="PARAM" type="Param">
        </xs:element>
        <xs:element name="GROUP" type="Group">
        </xs:element>
      </xs:choice>
      <xs:element name="LINK" minOccurs="0" maxOccurs="unbounded" type="Link">
      </xs:element>
      <xs:element name="DATA" minOccurs="0" type="Data">
      </xs:element>
      <xs:element name="INFO" minOccurs="0" maxOccurs="unbounded" type="Info">
      </xs:element>
    </xs:sequence>
    <xs:attribute name="ID" type="xs:ID">
    </xs:attribute>
    <xs:attribute name="name" type="xs:token">
    </xs:attribute>
    <xs:attribute name="ref" type="xs:IDREF">
    </xs:attribute>
    <xs:attribute name="ucd" type="ucdType">
    </xs:attribute>
    <xs:attribute name="utype" type="xs:string">
    </xs:attribute>
    <xs:attribute name="nrows" type="xs:nonNegativeInteger">
    </xs:attribute>
  </xs:complexType>
  <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" minOccurs="0" type="anyTEXT">
      </xs:element>
      <xs:element name="INFO" minOccurs="0" maxOccurs="unbounded" type="Info">
      </xs:element>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="COOSYS" type="CoordinateSystem">
        </xs:element>
        <xs:element name="TIMESYS" type="TimeSystem">
        </xs:element>
        <xs:element name="GROUP" type="Group">
        </xs:element>
        <xs:element name="PARAM" type="Param">
        </xs:element>
      </xs:choice>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="LINK" minOccurs="0" maxOccurs="unbounded" type="Link">
        </xs:element>
        <xs:choice>
          <xs:element name="TABLE" type="Table">
          </xs:element>
          <xs:element name="RESOURCE" type="Resource">
          </xs:element>
        </xs:choice>
        <xs:element name="INFO" minOccurs="0" maxOccurs="unbounded" type="Info">
        </xs:element>
      </xs:sequence>
      <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax">
      </xs:any>
    </xs:sequence>
    <xs:attribute name="name" type="xs:token">
    </xs:attribute>
    <xs:attribute name="ID" type="xs:ID">
    </xs:attribute>
    <xs:attribute name="utype" type="xs:string">
    </xs:attribute>
    <xs:attribute name="type" default="results">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="results">
          </xs:enumeration>
          <xs:enumeration value="meta">
          </xs:enumeration>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:anyAttribute namespace="##other" processContents="lax">
    </xs:anyAttribute>
  </xs:complexType>
  <xs:element name="VOTABLE">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="DESCRIPTION" minOccurs="0" type="anyTEXT">
        </xs:element>
        <xs:element name="DEFINITIONS" minOccurs="0" type="Definitions">
        </xs:element>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="COOSYS" type="CoordinateSystem">
          </xs:element>
          <xs:element name="TIMESYS" type="TimeSystem">
          </xs:element>
          <xs:element name="GROUP" type="Group">
          </xs:element>
          <xs:element name="PARAM" type="Param">
          </xs:element>
          <xs:element name="INFO" minOccurs="0" maxOccurs="unbounded" type="Info">
          </xs:element>
        </xs:choice>
        <xs:element name="RESOURCE" minOccurs="1" maxOccurs="unbounded" type="Resource">
        </xs:element>
        <xs:element name="INFO" minOccurs="0" maxOccurs="unbounded" type="Info">
        </xs:element>
      </xs:sequence>
      <xs:attribute name="ID" type="xs:ID">
      </xs:attribute>
      <xs:attribute name="version">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="1.3">
            </xs:enumeration>
            <xs:enumeration value="1.4">
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>