<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:gdml="http://cern.ch/2001/Schemas/GDML"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified" version="1.0">
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
  <xs:simpleType name="InlineExpressionType">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
  <xs:simpleType name="ExpressionOrIDREFType">
   <xs:union memberTypes="xs:IDREF InlineExpressionType xs:double"/>
  </xs:simpleType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
  <xs:complexType name="IdentifiableExpressionType">
   <xs:simpleContent>
    <xs:extension base="InlineExpressionType">
     <xs:attribute name="name" type="xs:ID" use="required"/>
    </xs:extension>
   </xs:simpleContent>
  </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!--
        <xs:complexType name="ExpressionType" mixed="true">
                <xs:annotation>
                        <xs:documentation>
        A base type for expressions
      </xs:documentation>
                </xs:annotation>
        </xs:complexType>
-->
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!--
        <xs:complexType name="IdentifiableExpressionType" mixed="true">
                <xs:annotation>
                        <xs:documentation>
        Named (referenced), global scope,
        expression (may contain named constants and quantities)
      </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                        <xs:extension base="ExpressionType">
                                <xs:attribute name="name" type="xs:ID" use="required"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
-->
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="ConstantType">
                <xs:annotation>
                        <xs:documentation>
        An anonymous, local scope, value
      </xs:documentation>
                </xs:annotation>
                <xs:attribute name="value" type="ExpressionOrIDREFType" use="required"/>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="IdentifiableConstantType">
                <xs:annotation>
                        <xs:documentation>
        Named (referenced), global scope, constant value
      </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                        <xs:extension base="ConstantType">
                                <xs:attribute name="name" type="xs:ID" use="required"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="QuantityType">
                <xs:annotation>
                        <xs:documentation>
        An anonymous quantity, local scope, with a unit,
        (possibly of a given type) quantity
      </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                        <xs:extension base="ConstantType">
        <!-- The unit attribute was originally required,
             but set to optional and is recommended to provide
             a default value in its derived type
         -->
                                <xs:attribute name="unit" type="xs:string" use="optional"/>
                                <xs:attribute name="type" type="xs:string" use="optional"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="IdentifiableQuantityType">
                <xs:annotation>
                        <xs:documentation>
        Named (referenced), global scope,(possibly of a given type) quantity
      </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                        <xs:extension base="QuantityType">
                                <xs:attribute name="name" type="xs:ID" use="required"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="ThreeVectorType">
                <xs:annotation>
                        <xs:documentation>
        An anonymous, 3 dimensional, local scope, vector of doubles
      </xs:documentation>
                </xs:annotation>
                <xs:attribute name="x" type="ExpressionOrIDREFType" default="0.0"/>
                <xs:attribute name="y" type="ExpressionOrIDREFType" default="0.0"/>
                <xs:attribute name="z" type="ExpressionOrIDREFType" default="0.0"/>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="IdentifiableThreeVectorType">
                <xs:annotation>
                        <xs:documentation>
        Named (referenced), 3 dimensional, global scope, vector of doubles
      </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                        <xs:extension base="ThreeVectorType">
                                <xs:attribute name="name" type="xs:ID" use="required"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="QuantityVectorType">
                <xs:annotation>
                        <xs:documentation>
        An anonymous, 3 dimensional, local scope, with a unit,
        (possibly of a given type) quantity vector
      </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                        <xs:extension base="ThreeVectorType">
        <!-- The unit attribute was originally required,
             but set to optional and is recommended to provide
             a default value in its derived type
         -->
                                <xs:attribute name="unit" type="xs:string" use="optional"/>
                                <xs:attribute name="type" type="xs:string" use="optional"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="IdentifiableQuantityVectorType">
                <xs:annotation>
                        <xs:documentation>
        Named (referenced), 3 dimensional, global scope, with a unit,
        (possibly of a given type) quantity vector
      </xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                        <xs:extension base="QuantityVectorType">
                                <xs:attribute name="name" type="xs:ID" use="required"/>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="ReferenceType">
                <xs:annotation>
                        <xs:documentation>
        Local reference to an element of a named type
      </xs:documentation>
                </xs:annotation>
                <xs:attribute name="ref" type="xs:IDREF" use="required"/>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
        <xs:complexType name="ReferenceListType">
                <xs:annotation>
                        <xs:documentation>
        List of local references to a set of element of a named type
      </xs:documentation>
                </xs:annotation>
                <xs:attribute name="refs" type="xs:IDREFS" use="required"/>
        </xs:complexType>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
</xs:schema>