<?xml version="1.0" encoding="UTF-8"?>
<!-- CityGML Version No. 1.0.0, May 19th, 2008-->
<!-- CityGML - GML3 application schema for the 3D city model of the Special Interest Group 3D (SIG 3D) of GDI NRW-->
<!-- Editors: PD Dr. Gerhard Groeger, Institute for Geodesy and Geoinformation, University of Bonn & -->
<!-- Prof. Dr. Thomas H. Kolbe, Institute for Geodesy and Geoinformation Science, Technical University of Berlin -->
<!-- For further information see: www.citygml.org -->
<!-- For the history of changes and additions to this CityGML schema see file history.txt -->
<xs:schema xmlns="http://www.opengis.net/citygml/vegetation/1.0" xmlns:core="http://www.opengis.net/citygml/1.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml"
    targetNamespace="http://www.opengis.net/citygml/vegetation/1.0" elementFormDefault="qualified"
    attributeFormDefault="unqualified">
    <xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd"/>
    <xs:import namespace="http://www.opengis.net/citygml/1.0" schemaLocation="http://schemas.opengis.net/citygml/1.0/cityGMLBase.xsd"/>
    <!-- ========================================================================================= -->
    <!-- ==============================CityGML Vegetation module ===================================== -->
    <!-- ========================================================================================= -->
    <xs:complexType name="AbstractVegetationObjectType" abstract="true">
        <xs:annotation>
            <xs:documentation>Type describing the abstract superclass for vegetation objects. A subclass is either a
                SolitaryVegetationObject or a PlantCover. </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="core:AbstractCityObjectType">
                <xs:sequence>
                    <xs:element ref="_GenericApplicationPropertyOfVegetationObject" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ========================================================================================= -->
    <xs:element name="_VegetationObject" type="AbstractVegetationObjectType" substitutionGroup="core:_CityObject"/>
    <!-- ========================================================================================= -->
    <xs:element name="_GenericApplicationPropertyOfVegetationObject" type="xs:anyType" abstract="true"/>
    <!-- ========================================================================================= -->
    <xs:complexType name="PlantCoverType">
        <xs:annotation>
            <xs:documentation>Type describing Plant Covers resp. Biotopes. As subclass of _CityObject, a VegetationObject inherits
                all attributes and relations, in particular an id, names, external references, and generalization relations.
            </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="AbstractVegetationObjectType">
                <xs:sequence>
                    <xs:element name="class" type="PlantCoverClassType" minOccurs="0"/>
                    <xs:element name="function" type="PlantCoverFunctionType" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="averageHeight" type="gml:LengthType" minOccurs="0"/>
                    <xs:element name="lod1MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                    <xs:element name="lod2MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                    <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                    <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                    <xs:element name="lod1MultiSolid" type="gml:MultiSolidPropertyType" minOccurs="0"/>
                    <xs:element name="lod2MultiSolid" type="gml:MultiSolidPropertyType" minOccurs="0"/>
                    <xs:element name="lod3MultiSolid" type="gml:MultiSolidPropertyType" minOccurs="0"/>
                    <xs:element ref="_GenericApplicationPropertyOfPlantCover" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ========================================================================================= -->
    <xs:element name="PlantCover" type="PlantCoverType" substitutionGroup="_VegetationObject"/>
    <!-- ========================================================================================= -->
    <xs:element name="_GenericApplicationPropertyOfPlantCover" type="xs:anyType" abstract="true"/>
    <!-- ========================================================================================= -->
    <xs:simpleType name="PlantCoverClassType">
        <xs:annotation>
            <xs:documentation>Class of a PlantCover. The values of this type are defined in the XML file PlantCoverClassType.xml,
                according to the dictionary concept of GML3. </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <!-- ========================================================================================= -->
    <xs:simpleType name="PlantCoverFunctionType">
        <xs:annotation>
            <xs:documentation>Function of a PlantCover. The values of this type are defined in the XML file
                PlantCoverFunctionType.xml, according to the dictionary concept of GML3. </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <!-- ========================================================================================= -->
    <xs:complexType name="SolitaryVegetationObjectType">
        <xs:annotation>
            <xs:documentation>Type describing solitary vegetation objects, e.g., trees. Its geometry is either defined explicitly
                by a GML 3 geometry with absolute coordinates, or in the case of multiple occurences of the same vegetation
                object, implicitly by a reference to a shape definition and a transformation. The shape definition may be given in
                an external file. As subclass of _CityObject, a SolitaryVegetationObject inherits all attributes and relations, in
                particular an id, names, external references, and generalization relations. </xs:documentation>
        </xs:annotation>
        <xs:complexContent>
            <xs:extension base="AbstractVegetationObjectType">
                <xs:sequence>
                    <xs:element name="class" type="PlantClassType" minOccurs="0"/>
                    <xs:element name="function" type="PlantFunctionType" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="species" type="SpeciesType" minOccurs="0"/>
                    <xs:element name="height" type="gml:LengthType" minOccurs="0"/>
                    <xs:element name="trunkDiameter" type="gml:LengthType" minOccurs="0"/>
                    <xs:element name="crownDiameter" type="gml:LengthType" minOccurs="0"/>
                    <xs:element name="lod1Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                    <xs:element name="lod2Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                    <xs:element name="lod3Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                    <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                    <xs:element name="lod1ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                    <xs:element name="lod2ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                    <xs:element name="lod3ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                    <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                    <xs:element ref="_GenericApplicationPropertyOfSolitaryVegetationObject" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <!-- ========================================================================================= -->
    <xs:element name="SolitaryVegetationObject" type="SolitaryVegetationObjectType" substitutionGroup="_VegetationObject"/>
    <!-- ========================================================================================= -->
    <xs:element name="_GenericApplicationPropertyOfSolitaryVegetationObject" type="xs:anyType" abstract="true"/>
    <!-- ========================================================================================= -->
    <xs:simpleType name="PlantClassType">
        <xs:annotation>
            <xs:documentation>Class of a SolitaryVegetationObject. The values of this type are defined in the XML file
                PlantClassType.xml, according to the dictionary concept of GML3. </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <!-- ========================================================================================= -->
    <xs:simpleType name="PlantFunctionType">
        <xs:annotation>
            <xs:documentation>Function of a PlantType. The values of this type are defined in the XML file PlantFunctionType.xml,
                according to the dictionary concept of GML3. </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <!-- ========================================================================================= -->
    <xs:simpleType name="SpeciesType">
        <xs:annotation>
            <xs:documentation>Type of a Species. The values of this type are defined in the XML file SpeciesType.xml, according to
                the dictionary concept of GML3. </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <!-- ========================================================================================= -->
</xs:schema>
