<?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:core="http://www.opengis.net/citygml/3.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xAL="urn:oasis:names:tc:ciq:xal:3" elementFormDefault="qualified" targetNamespace="http://www.opengis.net/citygml/3.0" version="3.0.0">
  <annotation>
    <documentation>The Core module defines the basic components of the CityGML conceptual model. This includes abstract base classes that define the core properties of more specialized thematic classes defined in other modules as well as concrete classes that are common to other modules, for example basic data types.</documentation>
  </annotation>
  <import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
  <!-- Change xAL to import W3C XLink instead of using OASIS xAL which imports custom XLink -->
  <import namespace="urn:oasis:names:tc:ciq:xal:3" schemaLocation="../xAL/3.0/xAL.xsd"/>
  <!--XML Schema document created by ShapeChange - http://shapechange.net/-->
  <element abstract="true" name="ADEOfAbstractAppearance" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractAppearanceType">
    <annotation>
      <documentation>ADEOfAbstractAppearance acts as a hook to define properties within an ADE that are to be added to AbstractAppearance.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractAppearanceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractAppearancePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractAppearance"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractCityObject" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractCityObjectType">
    <annotation>
      <documentation>ADEOfAbstractCityObject acts as a hook to define properties within an ADE that are to be added to AbstractCityObject.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractCityObjectType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractCityObjectPropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractCityObject"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractDynamizer" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractDynamizerType">
    <annotation>
      <documentation>ADEOfAbstractDynamizer acts as a hook to define properties within an ADE that are to be added to AbstractDynamizer.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractDynamizerType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractDynamizerPropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractDynamizer"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractFeature" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractFeatureType">
    <annotation>
      <documentation>ADEOfAbstractFeature acts as a hook to define properties within an ADE that are to be added to AbstractFeature.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractFeatureType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractFeaturePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractFeature"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractFeatureWithLifespan" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractFeatureWithLifespanType">
    <annotation>
      <documentation>ADEOfAbstractFeatureWithLifespan acts as a hook to define properties within an ADE that are to be added to AbstractFeatureWithLifespan.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractFeatureWithLifespanType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractFeatureWithLifespanPropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractFeatureWithLifespan"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractLogicalSpace" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractLogicalSpaceType">
    <annotation>
      <documentation>ADEOfAbstractLogicalSpace acts as a hook to define properties within an ADE that are to be added to AbstractLogicalSpace.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractLogicalSpaceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractLogicalSpacePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractLogicalSpace"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractOccupiedSpace" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractOccupiedSpaceType">
    <annotation>
      <documentation>ADEOfAbstractOccupiedSpace acts as a hook to define properties within an ADE that are to be added to AbstractOccupiedSpace.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractOccupiedSpaceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractOccupiedSpacePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractOccupiedSpace"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractPhysicalSpace" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractPhysicalSpaceType">
    <annotation>
      <documentation>ADEOfAbstractPhysicalSpace acts as a hook to define properties within an ADE that are to be added to AbstractPhysicalSpace.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractPhysicalSpaceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractPhysicalSpacePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractPhysicalSpace"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractPointCloud" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractPointCloudType">
    <annotation>
      <documentation>ADEOfAbstractPointCloud acts as a hook to define properties within an ADE that are to be added to AbstractPointCloud.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractPointCloudType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractPointCloudPropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractPointCloud"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractSpace" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractSpaceType">
    <annotation>
      <documentation>ADEOfAbstractSpace acts as a hook to define properties within an ADE that are to be added to AbstractSpace.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractSpaceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractSpacePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractSpace"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractSpaceBoundary" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractSpaceBoundaryType">
    <annotation>
      <documentation>ADEOfAbstractSpaceBoundary acts as a hook to define properties within an ADE that are to be added to AbstractSpaceBoundary.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractSpaceBoundaryType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractSpaceBoundaryPropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractSpaceBoundary"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractThematicSurface" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractThematicSurfaceType">
    <annotation>
      <documentation>ADEOfAbstractThematicSurface acts as a hook to define properties within an ADE that are to be added to AbstractThematicSurface.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractThematicSurfaceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractThematicSurfacePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractThematicSurface"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractUnoccupiedSpace" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractUnoccupiedSpaceType">
    <annotation>
      <documentation>ADEOfAbstractUnoccupiedSpace acts as a hook to define properties within an ADE that are to be added to AbstractUnoccupiedSpace.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractUnoccupiedSpaceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractUnoccupiedSpacePropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractUnoccupiedSpace"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractVersion" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractVersionType">
    <annotation>
      <documentation>ADEOfAbstractVersion acts as a hook to define properties within an ADE that are to be added to AbstractVersion.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractVersionType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractVersionPropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractVersion"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAbstractVersionTransition" substitutionGroup="gml:AbstractObject" type="core:ADEOfAbstractVersionTransitionType">
    <annotation>
      <documentation>ADEOfAbstractVersionTransition acts as a hook to define properties within an ADE that are to be added to AbstractVersionTransition.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAbstractVersionTransitionType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAbstractVersionTransitionPropertyType">
    <sequence>
      <element ref="core:ADEOfAbstractVersionTransition"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfAddress" substitutionGroup="gml:AbstractObject" type="core:ADEOfAddressType">
    <annotation>
      <documentation>ADEOfAddress acts as a hook to define properties within an ADE that are to be added to an Address.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfAddressType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfAddressPropertyType">
    <sequence>
      <element ref="core:ADEOfAddress"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfCityModel" substitutionGroup="gml:AbstractObject" type="core:ADEOfCityModelType">
    <annotation>
      <documentation>ADEOfCityModel acts as a hook to define properties within an ADE that are to be added to a CityModel.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfCityModelType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfCityModelPropertyType">
    <sequence>
      <element ref="core:ADEOfCityModel"/>
    </sequence>
  </complexType>
  <element abstract="true" name="ADEOfClosureSurface" substitutionGroup="gml:AbstractObject" type="core:ADEOfClosureSurfaceType">
    <annotation>
      <documentation>ADEOfClosureSurface acts as a hook to define properties within an ADE that are to be added to a ClosureSurface.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="ADEOfClosureSurfaceType">
    <sequence/>
  </complexType>
  <complexType name="ADEOfClosureSurfacePropertyType">
    <sequence>
      <element ref="core:ADEOfClosureSurface"/>
    </sequence>
  </complexType>
  <element abstract="true" name="AbstractAppearance" substitutionGroup="core:AbstractFeatureWithLifespan" type="core:AbstractAppearanceType">
    <annotation>
      <documentation>AbstractAppearance is the abstract superclass to represent any kind of appearance objects.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractAppearanceType">
    <complexContent>
      <extension base="core:AbstractFeatureWithLifespanType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractAppearance" type="core:ADEOfAbstractAppearancePropertyType">
            <annotation>
              <documentation>Augments AbstractAppearance with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractAppearancePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractAppearance"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractCityObject" substitutionGroup="core:AbstractFeatureWithLifespan" type="core:AbstractCityObjectType">
    <annotation>
      <documentation>AbstractCityObject is the abstract superclass of all thematic classes within the CityGML Conceptual Model.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractCityObjectType">
    <complexContent>
      <extension base="core:AbstractFeatureWithLifespanType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="externalReference" type="core:ExternalReferencePropertyType">
            <annotation>
              <documentation>References external objects in other information systems that have a relation to the city object.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="generalizesTo" type="gml:ReferenceType">
            <annotation>
              <documentation>Relates generalized representations of the same real-world object in different Levels of Detail to the city object. The direction of this relation is from the city object to the corresponding generalized city objects.</documentation>
              <appinfo>
                <targetElement xmlns="http://www.opengis.net/gml/3.2">core:AbstractCityObject</targetElement>
              </appinfo>
            </annotation>
          </element>
          <element minOccurs="0" name="relativeToTerrain" type="core:RelativeToTerrainType">
            <annotation>
              <documentation>Describes the vertical position of the city object relative to the surrounding terrain.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="relativeToWater" type="core:RelativeToWaterType">
            <annotation>
              <documentation>Describes the vertical position of the city object relative to the surrounding water surface.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="relatedTo">
            <complexType>
              <sequence>
                <element ref="core:CityObjectRelation"/>
              </sequence>
              <attributeGroup ref="gml:OwnershipAttributeGroup"/>
            </complexType>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="appearance">
            <annotation>
              <documentation>Relates appearances to the city object.</documentation>
            </annotation>
            <complexType>
              <complexContent>
                <extension base="gml:AbstractFeatureMemberType">
                  <sequence minOccurs="0">
                    <element ref="core:AbstractAppearance"/>
                  </sequence>
                  <attributeGroup ref="gml:AssociationAttributeGroup"/>
                </extension>
              </complexContent>
            </complexType>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="genericAttribute" type="core:AbstractGenericAttributePropertyType">
            <annotation>
              <documentation>Relates generic attributes to the city object.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="dynamizer" type="core:AbstractDynamizerPropertyType">
            <annotation>
              <documentation>Relates Dynamizer objects to the city object. These allow timeseries data to override static attribute values of the city object.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractCityObject" type="core:ADEOfAbstractCityObjectPropertyType">
            <annotation>
              <documentation>Augments AbstractCityObject with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractCityObjectPropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractCityObject"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractDynamizer" substitutionGroup="core:AbstractFeatureWithLifespan" type="core:AbstractDynamizerType">
    <annotation>
      <documentation>AbstractDynamizer is the abstract superclass to represent Dynamizer objects.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractDynamizerType">
    <complexContent>
      <extension base="core:AbstractFeatureWithLifespanType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractDynamizer" type="core:ADEOfAbstractDynamizerPropertyType">
            <annotation>
              <documentation>Augments AbstractDynamizer with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractDynamizerPropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractDynamizer"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractFeature" substitutionGroup="gml:AbstractFeature" type="core:AbstractFeatureType">
    <annotation>
      <documentation>AbstractFeature is the abstract superclass of all feature types within the CityGML Conceptual Model.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractFeatureType">
    <complexContent>
      <extension base="gml:AbstractFeatureType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractFeature" type="core:ADEOfAbstractFeaturePropertyType">
            <annotation>
              <documentation>Augments AbstractFeature with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractFeaturePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractFeature"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractFeatureWithLifespan" substitutionGroup="core:AbstractFeature" type="core:AbstractFeatureWithLifespanType">
    <annotation>
      <documentation>AbstractFeatureWithLifespan is the base class for all CityGML features. This class allows the optional specification of the real-world and database times for the existence of each feature.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractFeatureWithLifespanType">
    <complexContent>
      <extension base="core:AbstractFeatureType">
        <sequence>
          <element minOccurs="0" name="creationDate" type="dateTime">
            <annotation>
              <documentation>Indicates the date at which a CityGML feature was added to the CityModel.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="terminationDate" type="dateTime">
            <annotation>
              <documentation>Indicates the date at which a CityGML feature was removed from the CityModel.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="validFrom" type="dateTime">
            <annotation>
              <documentation>Indicates the date at which a CityGML feature started to exist in the real world.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="validTo" type="dateTime">
            <annotation>
              <documentation>Indicates the date at which a CityGML feature ended to exist in the real world.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractFeatureWithLifespan" type="core:ADEOfAbstractFeatureWithLifespanPropertyType">
            <annotation>
              <documentation>Augments AbstractFeatureWithLifespan with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractFeatureWithLifespanPropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractFeatureWithLifespan"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractGenericAttribute" substitutionGroup="gml:AbstractObject" type="core:AbstractGenericAttributeType">
    <annotation>
      <documentation>AbstractGenericAttribute is the abstract superclass for all types of generic attributes.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractGenericAttributeType">
    <sequence/>
  </complexType>
  <complexType name="AbstractGenericAttributePropertyType">
    <sequence>
      <element ref="core:AbstractGenericAttribute"/>
    </sequence>
  </complexType>
  <element abstract="true" name="AbstractLogicalSpace" substitutionGroup="core:AbstractSpace" type="core:AbstractLogicalSpaceType">
    <annotation>
      <documentation>AbstractLogicalSpace is the abstract superclass for all types of logical spaces. Logical space refers to spaces that are not bounded by physical surfaces but are defined according to thematic considerations.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractLogicalSpaceType">
    <complexContent>
      <extension base="core:AbstractSpaceType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractLogicalSpace" type="core:ADEOfAbstractLogicalSpacePropertyType">
            <annotation>
              <documentation>Augments AbstractLogicalSpace with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractLogicalSpacePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractLogicalSpace"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractOccupiedSpace" substitutionGroup="core:AbstractPhysicalSpace" type="core:AbstractOccupiedSpaceType">
    <annotation>
      <documentation>AbstractOccupiedSpace is the abstract superclass for all types of physically occupied spaces. Occupied space refers to spaces that are partially or entirely filled with matter.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractOccupiedSpaceType">
    <complexContent>
      <extension base="core:AbstractPhysicalSpaceType">
        <sequence>
          <element minOccurs="0" name="lod1ImplicitRepresentation" type="core:ImplicitGeometryPropertyType">
            <annotation>
              <documentation>Relates to an implicit geometry that represents the occupied space in Level of Detail 1.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod2ImplicitRepresentation" type="core:ImplicitGeometryPropertyType">
            <annotation>
              <documentation>Relates to an implicit geometry that represents the occupied space in Level of Detail 2.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod3ImplicitRepresentation" type="core:ImplicitGeometryPropertyType">
            <annotation>
              <documentation>Relates to an implicit geometry that represents the occupied space in Level of Detail 3.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractOccupiedSpace" type="core:ADEOfAbstractOccupiedSpacePropertyType">
            <annotation>
              <documentation>Augments AbstractOccupiedSpace with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractOccupiedSpacePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractOccupiedSpace"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractPhysicalSpace" substitutionGroup="core:AbstractSpace" type="core:AbstractPhysicalSpaceType">
    <annotation>
      <documentation>AbstractPhysicalSpace is the abstract superclass for all types of physical spaces. Physical space refers to spaces that are fully or partially bounded by physical objects.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractPhysicalSpaceType">
    <complexContent>
      <extension base="core:AbstractSpaceType">
        <sequence>
          <element minOccurs="0" name="lod1TerrainIntersectionCurve" type="gml:MultiCurvePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiCurve geometry that represents the terrain intersection curve of the physical space in Level of Detail 1.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod2TerrainIntersectionCurve" type="gml:MultiCurvePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiCurve geometry that represents the terrain intersection curve of the physical space in Level of Detail 2.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod3TerrainIntersectionCurve" type="gml:MultiCurvePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiCurve geometry that represents the terrain intersection curve of the physical space in Level of Detail 3.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="pointCloud" type="core:AbstractPointCloudPropertyType">
            <annotation>
              <documentation>Relates to a 3D PointCloud that represents the physical space.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractPhysicalSpace" type="core:ADEOfAbstractPhysicalSpacePropertyType">
            <annotation>
              <documentation>Augments AbstractPhysicalSpace with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractPhysicalSpacePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractPhysicalSpace"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractPointCloud" substitutionGroup="core:AbstractFeature" type="core:AbstractPointCloudType">
    <annotation>
      <documentation>AbstractPointCloud is the abstract superclass to represent PointCloud objects.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractPointCloudType">
    <complexContent>
      <extension base="core:AbstractFeatureType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractPointCloud" type="core:ADEOfAbstractPointCloudPropertyType">
            <annotation>
              <documentation>Augments AbstractPointCloud with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractPointCloudPropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractPointCloud"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractSpace" substitutionGroup="core:AbstractCityObject" type="core:AbstractSpaceType">
    <annotation>
      <documentation>AbstractSpace is the abstract superclass for all types of spaces. A space is an entity of volumetric extent in the real world.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractSpaceType">
    <complexContent>
      <extension base="core:AbstractCityObjectType">
        <sequence>
          <element minOccurs="0" name="spaceType" type="core:SpaceTypeType">
            <annotation>
              <documentation>Specifies the degree of openness of a space.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="volume" type="core:QualifiedVolumePropertyType">
            <annotation>
              <documentation>Specifies qualified volumes related to the space.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="area" type="core:QualifiedAreaPropertyType">
            <annotation>
              <documentation>Specifies qualified areas related to the space.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="boundary" type="core:AbstractSpaceBoundaryPropertyType">
            <annotation>
              <documentation>Relates to surfaces that bound the space.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod0Point" type="gml:PointPropertyType">
            <annotation>
              <documentation>Relates to a 3D Point geometry that represents the space in Level of Detail 0.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod0MultiSurface" type="gml:MultiSurfacePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiSurface geometry that represents the space in Level of Detail 0.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod0MultiCurve" type="gml:MultiCurvePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiCurve geometry that represents the space in Level of Detail 0.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod1Solid" type="gml:SolidPropertyType">
            <annotation>
              <documentation>Relates to a 3D Solid geometry that represents the space in Level of Detail 1.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod2Solid" type="gml:SolidPropertyType">
            <annotation>
              <documentation>Relates to a 3D Solid geometry that represents the space in Level of Detail 2.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod2MultiSurface" type="gml:MultiSurfacePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiSurface geometry that represents the space in Level of Detail 2.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod2MultiCurve" type="gml:MultiCurvePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiCurve geometry that represents the space in Level of Detail 2.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod3Solid" type="gml:SolidPropertyType">
            <annotation>
              <documentation>Relates to a 3D Solid geometry that represents the space in Level of Detail 3.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod3MultiSurface" type="gml:MultiSurfacePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiSurface geometry that represents the space in Level of Detail 3.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod3MultiCurve" type="gml:MultiCurvePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiCurve geometry that represents the space in Level of Detail 3.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractSpace" type="core:ADEOfAbstractSpacePropertyType">
            <annotation>
              <documentation>Augments AbstractSpace with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractSpacePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractSpace"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractSpaceBoundary" substitutionGroup="core:AbstractCityObject" type="core:AbstractSpaceBoundaryType">
    <annotation>
      <documentation>AbstractSpaceBoundary is the abstract superclass for all types of space boundaries. A space boundary is an entity with areal extent in the real world. Space boundaries are objects that bound a Space. They also realize the contact between adjacent spaces.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractSpaceBoundaryType">
    <complexContent>
      <extension base="core:AbstractCityObjectType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractSpaceBoundary" type="core:ADEOfAbstractSpaceBoundaryPropertyType">
            <annotation>
              <documentation>Augments AbstractSpaceBoundary with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractSpaceBoundaryPropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractSpaceBoundary"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractThematicSurface" substitutionGroup="core:AbstractSpaceBoundary" type="core:AbstractThematicSurfaceType">
    <annotation>
      <documentation>AbstractThematicSurface is the abstract superclass for all types of thematic surfaces.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractThematicSurfaceType">
    <complexContent>
      <extension base="core:AbstractSpaceBoundaryType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="area" type="core:QualifiedAreaPropertyType">
            <annotation>
              <documentation>Specifies qualified areas related to the thematic surface.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod0MultiCurve" type="gml:MultiCurvePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiCurve geometry that represents the thematic surface in Level of Detail 0.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod0MultiSurface" type="gml:MultiSurfacePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiSurface geometry that represents the thematic surface in Level of Detail 0.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod1MultiSurface" type="gml:MultiSurfacePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiSurface geometry that represents the thematic surface in Level of Detail 1.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod2MultiSurface" type="gml:MultiSurfacePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiSurface geometry that represents the thematic surface in Level of Detail 2.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="lod3MultiSurface" type="gml:MultiSurfacePropertyType">
            <annotation>
              <documentation>Relates to a 3D MultiSurface geometry that represents the thematic surface in Level of Detail 3.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="pointCloud" type="core:AbstractPointCloudPropertyType">
            <annotation>
              <documentation>Relates to a 3D PointCloud that represents the thematic surface.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractThematicSurface" type="core:ADEOfAbstractThematicSurfacePropertyType">
            <annotation>
              <documentation>Augments AbstractThematicSurface with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractThematicSurfacePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractThematicSurface"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractUnoccupiedSpace" substitutionGroup="core:AbstractPhysicalSpace" type="core:AbstractUnoccupiedSpaceType">
    <annotation>
      <documentation>AbstractUnoccupiedSpace is the abstract superclass for all types of physically unoccupied spaces. Unoccupied space refers to spaces that are entirely or mostly free of matter.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractUnoccupiedSpaceType">
    <complexContent>
      <extension base="core:AbstractPhysicalSpaceType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractUnoccupiedSpace" type="core:ADEOfAbstractUnoccupiedSpacePropertyType">
            <annotation>
              <documentation>Augments AbstractUnoccupiedSpace with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractUnoccupiedSpacePropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractUnoccupiedSpace"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractVersion" substitutionGroup="core:AbstractFeatureWithLifespan" type="core:AbstractVersionType">
    <annotation>
      <documentation>AbstractVersion is the abstract superclass to represent Version objects.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractVersionType">
    <complexContent>
      <extension base="core:AbstractFeatureWithLifespanType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractVersion" type="core:ADEOfAbstractVersionPropertyType">
            <annotation>
              <documentation>Augments AbstractVersion with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractVersionPropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractVersion"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element abstract="true" name="AbstractVersionTransition" substitutionGroup="core:AbstractFeatureWithLifespan" type="core:AbstractVersionTransitionType">
    <annotation>
      <documentation>AbstractVersionTransition is the abstract superclass to represent VersionTransition objects.</documentation>
    </annotation>
  </element>
  <complexType abstract="true" name="AbstractVersionTransitionType">
    <complexContent>
      <extension base="core:AbstractFeatureWithLifespanType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAbstractVersionTransition" type="core:ADEOfAbstractVersionTransitionPropertyType">
            <annotation>
              <documentation>Augments AbstractVersionTransition with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AbstractVersionTransitionPropertyType">
    <sequence minOccurs="0">
      <element ref="core:AbstractVersionTransition"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element name="Address" substitutionGroup="core:AbstractFeature" type="core:AddressType">
    <annotation>
      <documentation>Address represents an address of a city object.</documentation>
    </annotation>
  </element>
  <complexType name="AddressType">
    <complexContent>
      <extension base="core:AbstractFeatureType">
        <sequence>
          <element name="xalAddress">
            <annotation>
              <documentation>Relates an OASIS address object to the Address.</documentation>
            </annotation>
            <complexType>
              <sequence>
                <element ref="xAL:Address"/>
              </sequence>
            </complexType>
          </element>
          <element minOccurs="0" name="multiPoint" type="gml:MultiPointPropertyType">
            <annotation>
              <documentation>Relates to the MultiPoint geometry of the Address. The geometry relates the address spatially to a city object.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfAddress" type="core:ADEOfAddressPropertyType">
            <annotation>
              <documentation>Augments the Address with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="AddressPropertyType">
    <sequence minOccurs="0">
      <element ref="core:Address"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element name="CityModel" substitutionGroup="core:AbstractFeatureWithLifespan" type="core:CityModelType">
    <annotation>
      <documentation>CityModel is the container for all objects belonging to a city model.</documentation>
    </annotation>
  </element>
  <complexType name="CityModelType">
    <complexContent>
      <extension base="core:AbstractFeatureWithLifespanType">
        <sequence>
          <element minOccurs="0" name="engineeringCRS">
            <annotation>
              <documentation>Specifies the local engineering coordinate reference system of the CityModel that can be provided inline the CityModel instead of referencing a well-known CRS definition. The definition of an engineering CRS requires an anchor point which relates the origin of the local coordinate system to a point on the earth's surface in order to facilitate the transformation of coordinates from the local engineering CRS.</documentation>
            </annotation>
            <complexType>
              <complexContent>
                <extension base="gml:AbstractMetadataPropertyType">
                  <sequence minOccurs="0">
                    <element ref="gml:EngineeringCRS"/>
                  </sequence>
                  <attributeGroup ref="gml:AssociationAttributeGroup"/>
                </extension>
              </complexContent>
            </complexType>
          </element>
          <group maxOccurs="unbounded" minOccurs="0" ref="core:CityModelMemberGroup">
            <annotation>
              <documentation>Relates to all objects that are part of the CityModel.</documentation>
            </annotation>
          </group>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfCityModel" type="core:ADEOfCityModelPropertyType">
            <annotation>
              <documentation>Augments the CityModel with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="CityModelPropertyType">
    <sequence minOccurs="0">
      <element ref="core:CityModel"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <group name="CityModelMemberGroup">
    <annotation>
      <documentation>CityModelMember is a union type that enumerates the different types of objects that can occur as members of a city model.</documentation>
    </annotation>
    <choice>
      <element name="cityObjectMember">
        <annotation>
          <documentation>Specifies the city objects that are part of the CityModel.</documentation>
        </annotation>
        <complexType>
          <complexContent>
            <extension base="gml:AbstractFeatureMemberType">
              <sequence minOccurs="0">
                <element ref="core:AbstractCityObject"/>
              </sequence>
              <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </extension>
          </complexContent>
        </complexType>
      </element>
      <element name="appearanceMember">
        <annotation>
          <documentation>Specifies the appearances of the CityModel.</documentation>
        </annotation>
        <complexType>
          <complexContent>
            <extension base="gml:AbstractFeatureMemberType">
              <sequence minOccurs="0">
                <element ref="core:AbstractAppearance"/>
              </sequence>
              <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </extension>
          </complexContent>
        </complexType>
      </element>
      <element name="versionMember">
        <annotation>
          <documentation>Specifies the different versions of the CityModel.</documentation>
        </annotation>
        <complexType>
          <complexContent>
            <extension base="gml:AbstractFeatureMemberType">
              <sequence minOccurs="0">
                <element ref="core:AbstractVersion"/>
              </sequence>
              <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </extension>
          </complexContent>
        </complexType>
      </element>
      <element name="versionTransitionMember">
        <annotation>
          <documentation>Specifies the transitions between the different versions of the CityModel.</documentation>
        </annotation>
        <complexType>
          <complexContent>
            <extension base="gml:AbstractFeatureMemberType">
              <sequence minOccurs="0">
                <element ref="core:AbstractVersionTransition"/>
              </sequence>
              <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </extension>
          </complexContent>
        </complexType>
      </element>
      <element name="featureMember">
        <annotation>
          <documentation>Specifies the feature objects that are part of the CityModel. It allows to include objects that are not derived from a class defined in the CityGML conceptual model, but from the ISO 19109 class AnyFeature.</documentation>
        </annotation>
        <complexType>
          <complexContent>
            <extension base="gml:AbstractFeatureMemberType">
              <sequence minOccurs="0">
                <element ref="core:AbstractFeature"/>
              </sequence>
              <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </extension>
          </complexContent>
        </complexType>
      </element>
    </choice>
  </group>
  <element name="CityObjectRelation" substitutionGroup="gml:AbstractGML" type="core:CityObjectRelationType">
    <annotation>
      <documentation>CityObjectRelation represents a specific relation from the city object in which the relation is included to another city object.</documentation>
    </annotation>
  </element>
  <complexType name="CityObjectRelationType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="genericAttribute" type="core:AbstractGenericAttributePropertyType">
            <annotation>
              <documentation>Relates generic attributes to the CityObjectRelation.</documentation>
            </annotation>
          </element>
          <element name="relationType" type="gml:CodeType"/>
          <element name="relatedTo" type="gml:ReferenceType">
            <annotation>
              <appinfo>
                <targetElement xmlns="http://www.opengis.net/gml/3.2">core:AbstractCityObject</targetElement>
              </appinfo>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="CityObjectRelationPropertyType">
    <sequence minOccurs="0">
      <element ref="core:CityObjectRelation"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <element name="ClosureSurface" substitutionGroup="core:AbstractThematicSurface" type="core:ClosureSurfaceType">
    <annotation>
      <documentation>ClosureSurface is a special type of thematic surface used to close holes in volumetric objects. Closure surfaces are virtual (non-physical) surfaces.</documentation>
    </annotation>
  </element>
  <complexType name="ClosureSurfaceType">
    <complexContent>
      <extension base="core:AbstractThematicSurfaceType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="adeOfClosureSurface" type="core:ADEOfClosureSurfacePropertyType">
            <annotation>
              <documentation>Augments the ClosureSurface with properties defined in an ADE.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="ClosureSurfacePropertyType">
    <sequence minOccurs="0">
      <element ref="core:ClosureSurface"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <simpleType name="DoubleBetween0and1Type">
    <annotation>
      <documentation>DoubleBetween0and1 is a basic type for values, which are greater or equal than 0 and less or equal than 1. The type is used for color encoding, for example.</documentation>
    </annotation>
    <restriction base="double">
      <minInclusive value="0"/>
      <maxInclusive value="1"/>
    </restriction>
  </simpleType>
  <element name="ExternalReference" substitutionGroup="gml:AbstractObject" type="core:ExternalReferenceType">
    <annotation>
      <documentation>ExternalReference is a reference to a corresponding object in another information system, for example in the German cadastre (ALKIS), the German topographic information system (ATKIS), or the OS UK MasterMap®.</documentation>
    </annotation>
  </element>
  <complexType name="ExternalReferenceType">
    <sequence>
      <element name="targetResource" type="anyURI">
        <annotation>
          <documentation>Specifies the URI that points to the object in the external information system.</documentation>
        </annotation>
      </element>
      <element minOccurs="0" name="informationSystem" type="anyURI">
        <annotation>
          <documentation>Specifies the URI that points to the external information system.</documentation>
        </annotation>
      </element>
      <element minOccurs="0" name="relationType" type="anyURI">
        <annotation>
          <documentation>Specifies a URI that additionally qualifies the ExternalReference. The URI can point to a definition from an external ontology (e.g., the sameAs relation from OWL) and allows for mapping the ExternalReference to RDF triples.</documentation>
        </annotation>
      </element>
    </sequence>
  </complexType>
  <complexType name="ExternalReferencePropertyType">
    <sequence>
      <element ref="core:ExternalReference"/>
    </sequence>
  </complexType>
  <element name="ImplicitGeometry" substitutionGroup="gml:AbstractGML" type="core:ImplicitGeometryType">
    <annotation>
      <documentation>ImplicitGeometry is a geometry representation where the shape is stored only once as a prototypical geometry. Examples are a tree or other vegetation object, a traffic light or a traffic sign. This prototypic geometry object can be re-used or referenced many times, wherever the corresponding feature occurs in the 3D city model.</documentation>
    </annotation>
  </element>
  <complexType name="ImplicitGeometryType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="transformationMatrix" type="core:TransformationMatrix4x4Type">
            <annotation>
              <documentation>Specifies the mathematical transformation (translation, rotation, and scaling) between the prototypical geometry and the actual spatial position of the object.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="mimeType" type="gml:CodeType">
            <annotation>
              <documentation>Specifies the MIME type of the external file that stores the prototypical geometry.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="libraryObject" type="anyURI">
            <annotation>
              <documentation>Specifies the URI that points to the prototypical geometry stored in an external file.</documentation>
            </annotation>
          </element>
          <element name="referencePoint" type="gml:PointPropertyType">
            <annotation>
              <documentation>Relates to a 3D Point geometry that represents the base point of the object in the world coordinate system.</documentation>
            </annotation>
          </element>
          <element minOccurs="0" name="relativeGeometry" type="gml:GeometryPropertyType">
            <annotation>
              <documentation>Relates to a prototypical geometry in a local coordinate system stored inline with the city model.</documentation>
            </annotation>
          </element>
          <element maxOccurs="unbounded" minOccurs="0" name="appearance" type="core:AbstractAppearancePropertyType">
            <annotation>
              <documentation>Relates appearances to the ImplicitGeometry.</documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <complexType name="ImplicitGeometryPropertyType">
    <sequence minOccurs="0">
      <element ref="core:ImplicitGeometry"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
  </complexType>
  <simpleType name="IntegerBetween0and3Type">
    <annotation>
      <documentation>IntegerBetween0and3 is a basic type for integer values, which are greater or equal than 0 and less or equal than 3. The type is used for encoding the LOD number.</documentation>
    </annotation>
    <restriction base="integer">
      <minInclusive value="0"/>
      <maxInclusive value="3"/>
    </restriction>
  </simpleType>
  <element name="Occupancy" substitutionGroup="gml:AbstractObject" type="core:OccupancyType">
    <annotation>
      <documentation>Occupancy is an application-dependent indication of what is contained by a feature.</documentation>
    </annotation>
  </element>
  <complexType name="OccupancyType">
    <sequence>
      <element name="numberOfOccupants" type="integer">
        <annotation>
          <documentation>Indicates the number of occupants contained by a feature.</documentation>
        </annotation>
      </element>
      <element minOccurs="0" name="interval" type="gml:CodeType">
        <annotation>
          <documentation>Indicates the time period the occupants are contained by a feature.</documentation>
        </annotation>
      </element>
      <element minOccurs="0" name="occupantType" type="gml:CodeType">
        <annotation>
          <documentation>Indicates the specific type of the occupants that are contained by a feature.</documentation>
        </annotation>
      </element>
    </sequence>
  </complexType>
  <complexType name="OccupancyPropertyType">
    <sequence>
      <element ref="core:Occupancy"/>
    </sequence>
  </complexType>
  <element name="QualifiedArea" substitutionGroup="gml:AbstractObject" type="core:QualifiedAreaType">
    <annotation>
      <documentation>QualifiedArea is an application-dependent measure of the area of a space or of a thematic surface.</documentation>
    </annotation>
  </element>
  <complexType name="QualifiedAreaType">
    <sequence>
      <element name="area" type="gml:AreaType">
        <annotation>
          <documentation>Specifies the value of the QualifiedArea.</documentation>
        </annotation>
      </element>
      <element name="typeOfArea" type="gml:CodeType">
        <annotation>
          <documentation>Indicates the specific type of the QualifiedArea.</documentation>
        </annotation>
      </element>
    </sequence>
  </complexType>
  <complexType name="QualifiedAreaPropertyType">
    <sequence>
      <element ref="core:QualifiedArea"/>
    </sequence>
  </complexType>
  <element name="QualifiedVolume" substitutionGroup="gml:AbstractObject" type="core:QualifiedVolumeType">
    <annotation>
      <documentation>QualifiedVolume is an application-dependent measure of the volume of a space.</documentation>
    </annotation>
  </element>
  <complexType name="QualifiedVolumeType">
    <sequence>
      <element name="volume" type="gml:VolumeType">
        <annotation>
          <documentation>Specifies the value of the QualifiedVolume.</documentation>
        </annotation>
      </element>
      <element name="typeOfVolume" type="gml:CodeType">
        <annotation>
          <documentation>Indicates the specific type of the QualifiedVolume.</documentation>
        </annotation>
      </element>
    </sequence>
  </complexType>
  <complexType name="QualifiedVolumePropertyType">
    <sequence>
      <element ref="core:QualifiedVolume"/>
    </sequence>
  </complexType>
  <simpleType name="RelativeToTerrainType">
    <annotation>
      <documentation>RelativeToTerrain enumerates the spatial relations of a city object relative to terrain in a qualitative way.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="entirelyAboveTerrain">
        <annotation>
          <documentation>Indicates that the city object is located entirely above the terrain.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="substantiallyAboveTerrain">
        <annotation>
          <documentation>Indicates that the city object is for the most part located above the terrain.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="substantiallyAboveAndBelowTerrain">
        <annotation>
          <documentation>Indicates that the city object is located half above the terrain and half below the terrain.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="substantiallyBelowTerrain">
        <annotation>
          <documentation>Indicates that the city object is for the most part located below the terrain.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="entirelyBelowTerrain">
        <annotation>
          <documentation>Indicates that the city object is located entirely below the terrain.</documentation>
        </annotation>
      </enumeration>
    </restriction>
  </simpleType>
  <simpleType name="RelativeToWaterType">
    <annotation>
      <documentation>RelativeToWater enumerates the spatial relations of a city object relative to the water surface in a qualitative way.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="entirelyAboveWaterSurface">
        <annotation>
          <documentation>Indicates that the city object is located entirely above the water surface.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="substantiallyAboveWaterSurface">
        <annotation>
          <documentation>Indicates that the city object is for the most part located above the water surface.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="substantiallyAboveAndBelowWaterSurface">
        <annotation>
          <documentation>Indicates that the city object is located half above the water surface and half below the water surface.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="substantiallyBelowWaterSurface">
        <annotation>
          <documentation>Indicates that the city object is for the most part located below the water surface.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="entirelyBelowWaterSurface">
        <annotation>
          <documentation>Indicates that the city object is located entirely below the water surface.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="temporarilyAboveAndBelowWaterSurface">
        <annotation>
          <documentation>Indicates that the city object is temporarily located above or below the water level, because the height of the water surface is varying.</documentation>
        </annotation>
      </enumeration>
    </restriction>
  </simpleType>
  <simpleType name="SpaceTypeType">
    <annotation>
      <documentation>SpaceType is an enumeration that characterises a space according to its closure properties.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="closed">
        <annotation>
          <documentation>Indicates that the space has boundaries at the bottom, at the top, and on all sides.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="open">
        <annotation>
          <documentation>Indicates that the space has at maximum a boundary at the bottom.</documentation>
        </annotation>
      </enumeration>
      <enumeration value="semiOpen">
        <annotation>
          <documentation>Indicates that the space has a boundary at the bottom and on at least one side.</documentation>
        </annotation>
      </enumeration>
    </restriction>
  </simpleType>
  <simpleType name="TransformationMatrix2x2Type">
    <annotation>
      <documentation>TransformationMatrix2x2 is a 2 by 2 matrix represented as a list of four double values in row major order.</documentation>
    </annotation>
    <restriction>
      <simpleType>
        <list itemType="double"/>
      </simpleType>
      <length value="4"/>
    </restriction>
  </simpleType>
  <simpleType name="TransformationMatrix3x4Type">
    <annotation>
      <documentation>TransformationMatrix3x4 is a 3 by 4 matrix represented as a list of twelve double values in row major order.</documentation>
    </annotation>
    <restriction>
      <simpleType>
        <list itemType="double"/>
      </simpleType>
      <length value="12"/>
    </restriction>
  </simpleType>
  <simpleType name="TransformationMatrix4x4Type">
    <annotation>
      <documentation>TransformationMatrix4x4 is a 4 by 4 matrix represented as a list of sixteen double values in row major order.</documentation>
    </annotation>
    <restriction>
      <simpleType>
        <list itemType="double"/>
      </simpleType>
      <length value="16"/>
    </restriction>
  </simpleType>
</schema>
