{ "components" : {
    "schemas" : {
      "exception" : {
        "required" : [ "code" ],
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "root" : {
        "required" : [ "links" ],
        "type" : "object",
        "properties" : {
          "links" : {
            "type" : "array",
            "example" : [ {
              "href" : "http://data.example.org/",
              "rel" : "self",
              "type" : "application/json",
              "title" : "this document"
            }, {
              "href" : "http://data.example.org/api",
              "rel" : "service",
              "type" : "application/openapi+json;version=3.0",
              "title" : "the API definition"
            }, {
              "href" : "http://data.example.org/conformance",
              "rel" : "conformance",
              "type" : "application/json",
              "title" : "WFS 3.0 conformance classes implemented by this server"
            }, {
              "href" : "http://data.example.org/collections",
              "rel" : "data",
              "type" : "application/json",
              "title" : "Metadata about the feature collections"
            } ],
            "items" : {
              "$ref" : "#/components/schemas/link"
            }
          }
        }
      },
      "req-classes" : {
        "required" : [ "conformsTo" ],
        "type" : "object",
        "properties" : {
          "conformsTo" : {
            "type" : "array",
            "example" : [ "http://www.opengis.net/spec/wfs-1/3.0/req/core", "http://www.opengis.net/spec/wfs-1/3.0/req/oas30", "http://www.opengis.net/spec/wfs-1/3.0/req/html", "http://www.opengis.net/spec/wfs-1/3.0/req/geojson" ],
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "link" : {
        "required" : [ "href" ],
        "type" : "object",
        "properties" : {
          "href" : {
            "type" : "string",
            "example" : "http://data.example.com/buildings/123"
          },
          "rel" : {
            "type" : "string",
            "example" : "prev"
          },
          "type" : {
            "type" : "string",
            "example" : "application/geo+json"
          },
          "hreflang" : {
            "type" : "string",
            "example" : "en"
          }
        }
      },
      "content" : {
        "required" : [ "collections", "links" ],
        "type" : "object",
        "properties" : {
          "links" : {
            "type" : "array",
            "example" : [ {
              "href" : "http://data.example.org/collections.json",
              "rel" : "self",
              "type" : "application/json",
              "title" : "this document"
            }, {
              "href" : "http://data.example.org/collections.html",
              "rel" : "alternate",
              "type" : "text/html",
              "title" : "this document as HTML"
            }, {
              "href" : "http://schemas.example.org/1.0/foobar.xsd",
              "rel" : "describedBy",
              "type" : "application/xml",
              "title" : "XML schema for Acme Corporation data"
            } ],
            "items" : {
              "$ref" : "#/components/schemas/link"
            }
          },
          "collections" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/collectionInfo"
            }
          }
        }
      },
      "collectionInfo" : {
        "required" : [ "links", "name" ],
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string",
            "description" : "identifier of the collection used, for example, in URIs",
            "example" : "buildings"
          },
          "title" : {
            "type" : "string",
            "description" : "human readable title of the collection",
            "example" : "Buildings"
          },
          "description" : {
            "type" : "string",
            "description" : "a description of the features in the collection",
            "example" : "Buildings in the city of Bonn."
          },
          "links" : {
            "type" : "array",
            "example" : [ {
              "href" : "http://data.example.org/collections/buildings/items",
              "rel" : "item",
              "type" : "application/geo+json",
              "title" : "Buildings"
            }, {
              "href" : "http://example.com/concepts/buildings.html",
              "rel" : "describedBy",
              "type" : "text/html",
              "title" : "Feature catalog for buildings"
            } ],
            "items" : {
              "$ref" : "#/components/schemas/link"
            }
          },
          "extent" : {
            "$ref" : "#/components/schemas/extent"
          },
          "crs" : {
            "type" : "array",
            "description" : "The coordinate reference systems in which geometries may be retrieved. Coordinate reference systems are identified by a URI. The first coordinate reference system is the coordinate reference system that is used by default. This is always \"http://www.opengis.net/def/crs/OGC/1.3/CRS84\", i.e. WGS84 longitude/latitude.",
            "example" : [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "http://www.opengis.net/def/crs/EPSG/0/4326" ],
            "items" : {
              "type" : "string"
            },
            "default" : [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84" ]
          },
          "relations" : {
            "type" : "object",
            "description" : "Related collections that may be retrieved for this collection",
            "example" : "{\"id\": \"label\"}"
          }
        }
      },
      "extent" : {
        "required" : [ "spatial" ],
        "type" : "object",
        "properties" : {
          "crs" : {
            "type" : "string",
            "description" : "Coordinate reference system of the coordinates in the spatial extent (property `spatial`). In the Core, only WGS84 longitude/latitude is supported. Extensions may support additional coordinate reference systems.",
            "enum" : [ "http://www.opengis.net/def/crs/OGC/1.3/CRS84" ],
            "default" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
          },
          "spatial" : {
            "maxItems" : 6,
            "minItems" : 4,
            "type" : "array",
            "description" : "West, north, east, south edges of the spatial extent. The minimum and maximum values apply to the coordinate reference system WGS84 longitude/latitude that is supported in the Core. If, for example, a projected coordinate reference system is used, the minimum and maximum values need to be adjusted.",
            "example" : [ -180, -90, 180, 90 ],
            "items" : {
              "type" : "number"
            }
          },
          "temporal" : {
            "description" : "The temporal extent of the features in the collection.",
            "type" : "object",
            "properties" : {
               "interval" : {
                 "description" : "One or more time intervals that describe the temporal extent of the dataset.\nThe value `null` is supported and indicates an open time interval.\nIn the Core only a single time interval is supported. Extensions may support multiple intervals. If multiple intervals are provided, the union of the intervals describes the temporal extent.",
                 "type": "array",
                 "minItems": 1,
                 "items" : {
                   "description" : "Begin and end times of the time interval. The timestamps\nare in the coordinate reference system specified in `trs`. By default\nthis is the Gregorian calendar.",
                   "type": "array",
                   "minItems": 2,
                   "maxItems": 2,
                   "items": {
                     "type" : "string",
                     "format" : "date-time",
                     "nullable" : true,
                     "example" : [
                         "2011-11-11T12:22:11Z",
                         null
                       ],
                     "trs" : {
                       "description": "Coordinate reference system of the coordinates in the temporal extent\n(property `interval`). The default reference system is the Gregorian calendar.\nIn the Core this is the only supported temporal reference system.\nExtensions may support additional temporal reference systems and add\nadditional enum values.",
                       "type": "string",
                       "enum" : [
                         "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
                         ],
                       "default" : "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
                     }
                   }
                 }
               }
            }
          }
        }
      },
      "featureCollectionGeoJSON" : {
        "required" : [ "features", "type" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string",
            "enum" : [ "FeatureCollection" ]
          },
          "features" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/featureGeoJSON"
            }
          },
          "links" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/link"
            }
          },
          "timeStamp" : {
            "type" : "string",
            "format" : "dateTime"
          },
          "numberMatched" : {
            "minimum" : 0,
            "type" : "integer"
          },
          "numberReturned" : {
            "minimum" : 0,
            "type" : "integer"
          }
        }
      },
      "featureGeoJSON" : {
        "required" : [ "geometry", "properties", "type" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string",
            "enum" : [ "Feature" ]
          },
          "geometry" : {
            "$ref" : "#/components/schemas/geometryGeoJSON"
          },
          "properties" : {
            "type" : "object",
            "nullable" : true
          },
          "id" : {
            "oneOf" : [ {
              "type" : "string"
            }, {
              "type" : "integer"
            } ]
          }
        }
      },
      "geometryGeoJSON" : {
        "required" : [ "type" ],
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string",
            "enum" : [ "Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection" ]
          }
        }
      }
    },
    "parameters" : {      
      "limit" : {
        "name" : "limit",
        "in" : "query",
        "description" : "The optional limit parameter limits the number of items that are presented in the response document.\nOnly items are counted that are on the first level of the collection in the response document.  Nested objects contained within the explicitly requested items shall not be counted.\nMinimum = 1.\nMaximum = 10000.\nDefault = 10.",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "maximum" : 10000,
          "minimum" : 1,
          "type" : "integer",
          "default" : 10
        },
        "example" : 10
      },
      "offset" : {
        "name" : "offset",
        "in" : "query",
        "description" : "The optional offset parameter indicates the index within the result set from which the server shall begin presenting results in the response document. The first element has an index of 0.\nMinimum = 0.\nDefault = 0.",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "minimum" : 0,
          "type" : "integer",
          "default" : 0
        },
        "example" : 0
      },
      "bbox" : {
        "name" : "bbox",
        "in" : "query",
        "description" : "Only features that have a geometry that intersects the bounding box are selected. The bounding box is provided as four or six numbers, depending on whether the coordinate reference system includes a vertical axis (elevation or depth):\n \n* Lower left corner, coordinate axis 1\n* Lower left corner, coordinate axis 2\n* Lower left corner, coordinate axis 3 (optional)\n* Upper right corner, coordinate axis 1\n* Upper right corner, coordinate axis 2\n* Upper right corner, coordinate axis 3 (optional)\n\nThe coordinate reference system of the values is WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate reference system is specified in the parameter `bbox-crs`.\n\nFor WGS84 longitude/latitude the values are in most cases the sequence of minimum longitude, minimum latitude, maximum longitude and maximum latitude. However, in cases where the box spans the antimeridian the first value (west-most box edge) is larger than the third value (east-most box edge).\n\nIf a feature has multiple spatial geometry properties, it is the decision of the server whether only a single spatial geometry property is used to determine the extent or all relevant geometries.",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "maxItems" : 6,
          "minItems" : 4,
          "type" : "array",
          "items" : {
            "type" : "number"
          }
        }
      },
      "datetime" : {
        "name" : "datetime",
        "in" : "query",
        "description" : "Either a date-time or an interval, open or closed. Date and time expressions\nadhere to RFC 3339. Open intervals are expressed using double-dots.\n\nExamples:\n   * A date-time: \"2018-02-12T23:20:50Z\"\n   * A closed interval: \"2018-02-12T00:00:00Z/2018-03-18T12:31:12Z\"\n    * Open intervals: \"2018-02-12T00:00:00Z/..\" or \"../2018-03-18T12:31:12Z\"\nOnly features that have a temporal property that intersects the value of\n`datetime` are selected.\nIf a feature has multiple temporal properties, it is the decision of the\nserver whether only a single temporal property is used to determine\nthe extent or all relevant temporal properties.",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "type" : "string"
        }
      },
      "resultType" : {
        "name" : "resultType",
        "in" : "query",
        "description" : "This service will respond to a query in one of two ways (excluding an exception response). It may either generate a complete response document containing resources that satisfy the operation or it may simply generate an empty response container that indicates the count of the total number of resources that the operation would return. Which of these two responses is generated is determined by the value of the optional resultType parameter.\nThe allowed values for this parameter are \"results\" and \"hits\".\nIf the value of the resultType parameter is set to \"results\", the server will generate a complete response document containing resources that satisfy the operation.\nIf the value of the resultType attribute is set to \"hits\", the server will generate an empty response document containing no resource instances.\nDefault = \"results\".",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "type" : "string",
          "enum" : [ "hits", "results" ],
          "default" : "results"
        },
        "example" : "results"
      },
      "featureId" : {
        "name" : "featureId",
        "in" : "path",
        "description" : "Local identifier of a specific feature",
        "required" : true,
        "schema" : {
          "type" : "string"
        }
      },
      "sortby" : {
        "name" : "sortby",
        "in" : "query",
        "description" : "Sort results by the specified field name",
        "required" : false,
        "schema" : {
          "type" : "string"
        }
      },
      "sortdesc" : {
        "name" : "sortdesc",
        "in" : "query",
        "description" : "Sort results in descending order, field name must be specified with 'sortby' parameter",
        "required" : false,
        "schema" : {
          "type" : "boolean"
        }
      },
      "relations" : {
        "name" : "relations",
        "in" : "query",
        "description" : "Comma-separated list of related collections that should be shown for this feature",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "type" : "array",
          "items" : {
            "type" : "string"
          }
        }
      },
      "crs" : {
        "name" : "crs",
        "in" : "query",
        "description" : "The coordinate reference system of the response geometries. Default is WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84).",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "type" : "string",
          "enum" : [ "http://www.opengis.net/def/crs/EPSG/0/25832", "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "http://www.opengis.net/def/crs/EPSG/0/3034", "http://www.opengis.net/def/crs/EPSG/0/3035", "http://www.opengis.net/def/crs/EPSG/0/3043", "http://www.opengis.net/def/crs/EPSG/0/3044", "http://www.opengis.net/def/crs/EPSG/0/3045", "http://www.opengis.net/def/crs/EPSG/0/3857", "http://www.opengis.net/def/crs/EPSG/0/4258", "http://www.opengis.net/def/crs/EPSG/0/4326", "http://www.opengis.net/def/crs/EPSG/0/4647", "http://www.opengis.net/def/crs/EPSG/0/5649", "http://www.opengis.net/def/crs/EPSG/0/5650", "http://www.opengis.net/def/crs/EPSG/0/5651", "http://www.opengis.net/def/crs/EPSG/0/5652", "http://www.opengis.net/def/crs/EPSG/0/5653", "http://www.opengis.net/def/crs/EPSG/0/28992", "http://www.opengis.net/def/crs/EPSG/0/25831", "http://www.opengis.net/def/crs/EPSG/0/25833" ],
          "default" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
        }
      },
      "bbox-crs" : {
        "name" : "bbox-crs",
        "in" : "query",
        "description" : "The coordinate reference system of the bbox parameter. Default is WGS84 longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84).",
        "required" : false,
        "style" : "form",
        "explode" : false,
        "schema" : {
          "type" : "string",
          "enum" : [ "http://www.opengis.net/def/crs/EPSG/0/25832", "http://www.opengis.net/def/crs/OGC/1.3/CRS84", "http://www.opengis.net/def/crs/EPSG/0/3034", "http://www.opengis.net/def/crs/EPSG/0/3035", "http://www.opengis.net/def/crs/EPSG/0/3043", "http://www.opengis.net/def/crs/EPSG/0/3044", "http://www.opengis.net/def/crs/EPSG/0/3045", "http://www.opengis.net/def/crs/EPSG/0/3857", "http://www.opengis.net/def/crs/EPSG/0/4258", "http://www.opengis.net/def/crs/EPSG/0/4326", "http://www.opengis.net/def/crs/EPSG/0/4647", "http://www.opengis.net/def/crs/EPSG/0/5649", "http://www.opengis.net/def/crs/EPSG/0/5650", "http://www.opengis.net/def/crs/EPSG/0/5651", "http://www.opengis.net/def/crs/EPSG/0/5652", "http://www.opengis.net/def/crs/EPSG/0/5653", "http://www.opengis.net/def/crs/EPSG/0/28992", "http://www.opengis.net/def/crs/EPSG/0/25831", "http://www.opengis.net/def/crs/EPSG/0/25833" ],
          "default" : "http://www.opengis.net/def/crs/OGC/1.3/CRS84"
        }
      }
    }
  }
}
