How To Setup an INSPIRE Download and View Services
Transcription
How To Setup an INSPIRE Download and View Services
Version Date: 01-05-13 Author: Arie Kraak How To Setup an INSPIRE Download and View Services This “How To” describes a way to build an INSPIRE View (WMS) and Download Service (WFS). The data used in this How To is the so called Protected Sites data from the Netherlands. Hyperlinks refer to background on specific deegree terminolology. Starting point Starting point for this “How to” is that the INSPIRE data are available in a normalized relational database (in this case a PostGIS database). The step to get from raw data to a normalized relational database is not trivial, but out of the scope of this deegree “How To”. The WFS (Download Service) will be “Read Only”. Workflow overview The following workflow has been followed in this How To. (Text in brackets refer to the menu of the deegree console). 1. 2. 3. 4. 5. 6. 7. Fire up the deegree console Create a new deegree workspace from scratch (general → workspaces) Create a connection to the database (server connections → jdbc) Create directory application schemas Create an SQL feature store (datastores → feature) Create a new WFS (web services → services) Create a new WMS 7.1 Create a new WMS configuration (web services → services) 7.2 Create a new layer store (map layers → layers) 7.3 Create a new theme (map layers → themes) 7.4 Configure more layers Note: Testing of the WFS and WMS can be done, by sending requests using the console (general → send requests) and by using a GIS client such as Open Source Quantum GIS (www.qgis.org/). Be sure to download its WFS 2.0.0 client plugin! Step by step 1 Fire up the deegree console. In this case deegree is running in TomCat and can be opened using the URL http://127.0.0.1:8081/deegree-webservices-3.2.0 2 Create a new deegree workspace from scratch 1. Go to the .deegree directory on your system 2. Create folder with desired workspace name. In this case “how-to-inspire” 3. In deegree console click “general → workspaces”. You workspace should now be listed under “Available workspaces”. 4. Click Start. Your workspace is now indicated as Active workspace at the top of the console interface window. Note: use the [Reload] button behind the workspace name to effectuate changes after editing of workspace files. 3 Create a connection to the database 1. In the deegree console click “server connections → jdbc” 2. Enter a name. In this case “cds-inspire” and click Create new Figure 1: jdbc 3. Enter the fields according to your settings (see figure 1). 4. Verify by clicking “test connection” and click “Create”. The new jdbc is now listed and indicated as “On” 4 Create application schemas. 1. Create a directory “appschemas” in the how-to-inspire workspace directory. 2. Place the right INSPIRE application schemas into this directory. In this case: • BaseType.xsd, • GeographicNames.xsd and • ProtectedSites.xsd. INSPIRE schema's can be downloaded from ??? Note: The GeographicNames.xsd describes the Feature Type NamedPlace whereas ProtectedSites.xsd describes the FeatureType: ProtectedSite. In INSPIRE terms “ProtectedSite” is a “NamedPlace”. In deegree we have to make a mapping for both FeatureTypes (see next chapter). 5 Create an SQL feature store This step describes the mapping of tables to features. FeatureType mapping is necessary to transform the information from the database tables into the XML schema as required by INSPIRE. The XML schema has a hierarchical structure, whereas the database tables itself do not have a hierarchy, but in this case only have relations to other database tables. 1. In the deegree console click datastores → feature 2. Enter a name. In this case `protectedSite`. Choose `SQL` and click Create new. 3. Choose `Create config manually` select right JDBC Connection and click `Next`. 4. Choose Config template `example` and click OK Note: now you enter the editing mode of the deegree console. Use `Turn on highlighting` (under editing window) to improve the readability of the XML code. You see a template with example configuration. We will edit this template. Remark on Namespaces: Every configuration file (XML) starts with definitions of name spaces. In general you may define your own name spaces. INSPIRE requires certain names paces, others are directly related to deegree and are automatically available when editing the deegree XML.. For instance the preposition “ps” refers to the namespace "urn:xinspire:specification:gmlas:ProtectedSites:3.0" EXAMPLE: protectedSite.xml <SQLFeatureStore xmlns="http://www.deegree.org/datasource/feature/sql" xmlns:ps="urn:x-inspire:specification:gmlas:ProtectedSites:3.0" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gn="urn:x-inspire:specification:gmlas:GeographicalNames:3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" configVersion="3.1.0" xsi:schemaLocation="http://www.deegree.org/datasource/feature/sql http://schemas.deegree.org/datasource/feature/sql/3.1.0/sql.xsd"> ... 5. Add <JDBCConnId>inspire</JDBCConnId> 6. Add <StorageCRS srid="28992" dim="2D">urn:ogc:def:crs:EPSG::28992</StorageCRS> This element relates the crs from the database to the srid of deegree xml. in this case local the CRS of The Netherlands (EPSG:28992). 7. Add <GMLSchema>../../appschemas/ProtectedSites.xsd</GMLSchema>. This refers to the schema in the directory created in Step 4 8. Next step is the actual mapping of tables to deegree xml. This step is complicated and presumes knowledge of the database used and knowledge and INSPIRE schemas, in this case the Protected Sites schema (ProtectedSites.xsd), which also refer to general INSPIRE schemas (BaseTypes.xsd and GeographicalNames.xsd). More on INSPIRE data specifications can be found at: http://inspire.ec.europa.eu/index.cfm/pageid/2 Afbeelding 2: Overview of GeographicalNames.xsd Afbeelding 3: Overview of ProtectedSites.xsd In this XML the mapping takes place of the following database tables (and its columns): database: “cds_inspire” → schema “inspire” and tables → "protected_site" "named_place" “site_designation" "site_protection_classification" “site_name” The table “named_places” has the following columns: "id" "geometry" "inspire_id_local_id" "inspire_id_namespace" The table “protected_site” has the following columns: “id” "geometry" “legal_foundation_date" "legal_foundation_document" “inspire_id_local_id" "inspire_id_namespace" The table “site_designation" has the columns: "fk_protected_site" "site_designation_schema" "site_designation" “percentage_under_designation" The table "site_protection_classification" has the colums: "Property" “Value" The table “site_name” has the columns “id” “fk_protected_site” “site_name” 9. Add the element <FeatureTypeMapping>. This determines the so called context for every following element, and links the XML name to the database queriable (table) name. Every following nested element is within this context. For instance. In this case the structure of the database requires two FeatureTypeMappings: <FeatureTypeMapping name="gn:NamedPlace" table="inspire.named_place"> and <FeatureTypeMapping name="ps:ProtectedSite" table="inspire.protected_site"> Both mappings will be elaborated in the next steps: Mapping “gn:NamedPlace” 10. Add the element <FIDMapping>. This element has to be unique, in this case it is sufficient to use the column name “id” from the database table: <FIDMapping> <Column name="id" type="integer"/> </FIDMapping> 11. Add the element <beginLifespanVersion> Explanation follows 12. Add The element <Geometry>. This element is within the context “inspire.protected_site”. <Geometry path="ps:geometry" mapping="geometry"/> In this case <Geometry path="ps:geometry" mapping="geometry"/>maps the column “geometry” from the database schema “inspire” and table “named_place”. The “path” determines the child name used in the XML schema (as required by INSPIRE) in relation to its FeatureType (in this case “gn:NamedPlacee”). Note: the element <geometry> links geometrical data whereas the element <primitive> links other data- types. The element <complex> makes it possible to map a “flat” database table to the required hierarchy within XML. 13. The following element maps the general “inspireID”: <Complex path="ps:inspireID"> <Complex path="base:Identifier"> <Primitive path="base:localId" mapping="inspire_id_local_id"/> <Primitive path="base:namespace" mapping="inspire_id_namespace"/> </Complex> </Complex> 14. Next element is: “gn:localTyp” <Complex path="gn:localType"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> Note: The @ sign determines the attribute (part of the tag in XML). An SQL constant In the expression is determined by “'text'“. Note that this value does not come from the database, but is set here. 15. The following element maps “gn:name” . This comes partly form the database table, and partly set here. Note: In this case it is also necessary to temporarily “leave” the current context, in order to link to information from another table. This can be done by “Join table”. In this case the “id” from the current context (table="inspire.named_place" as determined as context in the earlier element <FeatureTypeMapping >) has to be linked to the “id” from another context (table) namely “inspire.site_name”. <Complex path="gn:name"> <Complex path="gn:GeographicalName"> <Join table="inspire.site_name" fromColumns="id" toColumns="fk_protected_site"/> <Primitive path="gn:language" mapping="'nld'"/> <Complex path="gn:nativeness"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:nameStatus"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:sourceOfName"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:pronunciation"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:spelling"> <Complex path="gn:SpellingOfName"> <Primitive path="gn:text" mapping="site_name"/> <Primitive path="gn:script" mapping="'Latn'"/> </Complex> </Complex> </Complex> </Complex> Explanation follows 16. The final element maps “gn:type” <Complex path="gn:type"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> 17. Close the mapping </FeatureTypeMapping> Mapping “ps.ProtectedSite” 18. Add the element <FIDMapping>. This element has to be unique, in this case it is sufficient to use the column name “id” from the database table: <FIDMapping> <Column name="id" type="integer"/> </FIDMapping> 19. Add The element <Geometry>. This element is within the context “inspire.protected_site”. <Geometry path="ps:geometry" mapping="geometry"/> In this case <Geometry path="ps:geometry" mapping="geometry"/>maps the column “geometry” from the database schema “inspire” and table “protected_site”. The “path” determines the child name used in the XML schema (as required by INSPIRE) in relation to its FeatureType (in this case “ps.ProtectedSite”). Note: the element <geometry> links geometrical data whereas the element <primitive> links other data- types. The element <complex> makes it possible to map a “flat” database table to the required hierarchy within XML. 20. The following element maps the general “inspireID”: <Complex path="ps:inspireID"> <Complex path="base:Identifier"> <Primitive path="base:localId" mapping="inspire_id_local_id"/> <Primitive path="base:namespace" mapping="inspire_id_namespace"/> </Complex> </Complex> 21. Next element is: “ps:legalFoundationDate” <Primitive path="ps:legalFoundationDate" mapping="legal_foundation_date"/> 22. Next element is: "ps:legalFoundationDocument" The structure is defined by the iso standard (http://www.isotc211.org/2005/gmd). It is out of the scope of this How To to elaborate on that. <Complex path="ps:legalFoundationDocument"> <Complex path="gmd:CI_Citation"> <Complex path="gmd:title"> <Primitive path="gco:CharacterString" mapping="legal_foundation_document"/> </Complex> <Complex path="gmd:date"> <Complex path="gmd:CI_Date"> <Complex path="gmd:date"> <Primitive path="gco:DateTime" mapping="legal_foundation_date"/> </Complex> <Complex path="gmd:dateType"> <Complex path="gmd:CI_DateTypeCode"> <Primitive path="@codeListValue" mapping="'publication'"/> <Primitive path="@codeList" mapping="'http://www.isotc211.org/2005/resources/codeList.xml#CI_DateTypeC ode'"/> </Complex> </Complex> </Complex> </Complex> </Complex> </Complex> Note: Some information is not necessary available in the database table, but is still required by INSPIRE. For instance: <Primitive path="@codeListValue" mapping="'publication'"/> This means that the attribute (@) “CodeListValue” is directly related to the text “Publication. The quotes ' ' determines that it is text. 23. Next element is “ps:siteDesignation”. Note In this case it is necessary to temporarily “leave” the current context, in order to link to information from another table. This can be done by “Join table”. In this case the “id” from the current context (table="inspire.protected_site" as determined as context in the earlier element <FeatureTypeMapping >) has to be linked to the “id” from another context (table) namely “inspire.site_designation”. <Complex path="ps:siteDesignation"> <Complex path="ps:DesignationType"> <Join table="inspire.site_designation" fromColumns="id" toColumns="fk_protected_site"/> <Primitive path="ps:designationScheme" mapping="site_designation_schema"/> <Primitive path="ps:designation" mapping="site_designation"/> <Primitive path="ps:percentageUnderDesignation" mapping="percentage_under_designation"/> </Complex> </Complex> 24. Next element is “ps:siteName” which incorporates "gn:GeographicalName" from “GeographicalNames.xsd”. <Complex path="ps:siteName"> <Complex path="gn:GeographicalName"> <Join table="inspire.site_name" fromColumns="id" toColumns="fk_protected_site"/> <Primitive path="gn:language" mapping="'nld'"/> <Complex path="gn:nativeness"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:nameStatus"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:sourceOfName"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:pronunciation"> <Primitive path="@xsi:nil" mapping="'true'"/> </Complex> <Complex path="gn:spelling"> <Complex path="gn:SpellingOfName"> <Primitive path="gn:text" mapping="site_name"/> <Primitive path="gn:script" mapping="'Latn'"/> </Complex> </Complex> </Complex> </Complex> 25. Final element is: <Complex path="ps:siteProtectionClassification"> <Join table="inspire.site_protection_classification" fromColumns="id" toColumns="fk_protected_site"/> <Primitive path="text()" mapping="site_protection_classification"/> </Complex> 6 26. Close the mapping 27. The end tag </SQLFeatureStore> completes the protectedSie.xml </FeatureTypeMapping> Create a new WFS 1. In the console click on web services → services. 2. Enter a name for the new WFS. In this case “how-to-inspire-download-service”. Choose type “WFS” and click “Create new” Note: now you enter the editing mode of the deegree console. Use `Turn on highlighting` (under editing window) to improve the readability of the XML code. You see a template with example configuration, which you can adjust. 3. Add <SupportedVersions> . In this case we use Version 2.0.0. <SupportedVersions> <Version>2.0.0</Version> </SupportedVersions> 4. Set <EnableTransactions> to “false” (In this case a normalized database is used, which does not allow transactions (Read Only)): <EnableTransactions>false</EnableTransactions> 5. Set <EnableResponseBuffering> to “false” to avoid buffering of features: <EnableResponseBuffering>false</EnableResponseBuffering> 6. Add <FeatureStoreId> as chosen above. In this case: “protectedSite” <FeatureStoreId>protectedSite</FeatureStoreId> 7. Add the <queryCRS> as required by INSPIRE, plus local <queryCRS> (In this case for The Netherlands: EPSG:28992) <QueryCRS>urn:ogc:def:crs:EPSG::28992</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::4326</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::4258</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::900913</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::3035</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::3034</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::25830</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::25831</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::25832</QueryCRS> 8. Add <QueryMaxFeatures> and set to – 1 (unlimited) <QueryMaxFeatures>-1</QueryMaxFeatures> 9. Create directory “queries” in your workspace. Add the queries as required by INSPIRE: GetdataSetById, IdQuery and TypeQuery, and refer to them: <StoredQuery>../queries/GetDataSetById.xml</StoredQuery> <StoredQuery>../queries/IdQuery.xml</StoredQuery> <StoredQuery>../queries/TypeQuery.xml</StoredQuery> 10. Add <GMLFormat gmlVersion="GML_32"> element as required by INSPIRE. Note: <DisableDynamicSchema>true</DisableDynamicSchema> to get the original INSPIRE schema as response to DecribefeatureType, instead of the schema as generated by deegree. Note <DisableStreaming>false</DisableStreaming> to avoid that deegree uses its storage in memory first before actual serving data for download. 11. The configuration now looks like: EXAMPLE: inspire-how-to-download-service.xml <deegreeWFS xmlns="http://www.deegree.org/services/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" configVersion="3.2.0" xsi:schemaLocation="http://www.deegree.org/services/wfs http://schemas.deegree.org/services/wfs/3.2.0/wfs_configuration.xsd"> <SupportedVersions> <Version>2.0.0</Version> </SupportedVersions> <FeatureStoreId>protectedSite</FeatureStoreId> <EnableTransactions>false</EnableTransactions> <!-- QueryCRS [1...n]: Announced CRS, first element is the default CRS --> <QueryCRS>urn:ogc:def:crs:EPSG::28992</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::4326</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::4258</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::900913</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::3035</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::3034</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::25830</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::25831</QueryCRS> <QueryCRS>urn:ogc:def:crs:EPSG::25832</QueryCRS> <QueryMaxFeatures>-1</QueryMaxFeatures> <StoredQuery>../queries/GetDataSetById.xml</StoredQuery> <StoredQuery>../queries/IdQuery.xml</StoredQuery> <StoredQuery>../queries/TypeQuery.xml</StoredQuery> <GMLFormat gmlVersion="GML_32"> <MimeType>application/gml+xml; version=3.2</MimeType> <MimeType>text/xml; subtype=gml/3.2.1</MimeType> <GetFeatureResponse xmlns:gml="http://www.opengis.net/gml/3.2"> <ContainerElement>gml:FeatureCollection</ContainerElement> <FeatureMemberElement>gml:featureMember</FeatureMemberElement> <AdditionalSchemaLocation>http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/deprecatedTypes.xsd</AdditionalSchem aLocation> <DisableDynamicSchema>true</DisableDynamicSchema> <DisableStreaming>false</DisableStreaming> </GetFeatureResponse> </GMLFormat> 12. Click on Save and [Reload] to activate changes. NOTE: You can check the services using for instance QuantumGIS. Be sure you downloaded its WFS 2.0.0 plugin! TO DO: extended capabilities as required by INSPIRE To DO: metadata Services (as required by INSPIRE) To DO Edit global configuration 7 Create a new WMS In this case “inspire-how-to-view-service” 7.1 Create the WMS configuration file 1. In the console click on web services → services. 2. Enter a name for the new WMS. In this case “how-to-inspire-view-service”. Choose type “WMS” and click Create new. Note: now you enter the editing mode of the deegree console. Use `Turn on highlighting` (under editing window) to improve the readability of the XML code. You see a template with example configuration, which you can adjust. 3. Add <SupportedVersions> “Version 1.3.0 “ and “Version 1.1.1” Note: add version 1.1.1, to be able to use the “see layers” option in the console, which is based on OpenLayers. 4. Set <MaxFeatures> to “0” so that the number of rendered features is unlimited 5. Introduce a <wms:ThemeId>. In this case `how-to-inspire-themes`. The actual layer configuration will be done step 6.3. 6. The configuration looks like: EXAMPLE: how-to-inspire-view-service.xml <wms:deegreeWMS xmlns:wms="http://www.deegree.org/services/wms" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dgws="http://www.deegree.org/webservices" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" configVersion="3.2.0" xsi:schemaLocation="http://www.deegree.org/services/wms http://schemas.deegree.org/services/wms/3.2.0/wms_configuration.xsd"> <wms:SupportedVersions> <wms:Version>1.1.1</wms:Version> <wms:Version>1.3.0</wms:Version> </wms:SupportedVersions> <wms:ServiceConfiguration> <wms:DefaultLayerOptions> <wms:MaxFeatures>0</wms:MaxFeatures> </wms:DefaultLayerOptions> <wms:ThemeId>how-to-inspire-themes</wms:ThemeId> </wms:ServiceConfiguration> </wms:deegreeWMS> 7. Click on save and [Reload] to activate changes. To Do: Edit global configuration and metadata 7.2 Create a new layer store 1. In the console, click on map layers → layers . Enter a name and choose the type “ Feature” . In this case “how-to-inspire-layers”. Click Create new. The template configurations opens. 2. Set the right <FeatureStoreId>. In this case “protectedSite”. 3. We will omit the <Filter> element. 4. Use the appropriate INSPIRE names and title in this case “PS.ProtectedSite” and “Beschermde gebieden”. 5. We use a simple configuration, in which we will make use of default styling, by omitting the <l:StyleRef> element. 6. The configuration looks like: EXAMPLE how-to-inspire-layers.xml <FeatureLayers xmlns="http://www.deegree.org/layers/feature" xmlns:ogc='http://www.opengis.net/ogc' xmlns:ps="urn:x-inspire:specification:gmlas:ProtectedSites:3.0" xmlns:d="http://www.deegree.org/metadata/description" xmlns:l="http://www.deegree.org/layers/base" xmlns:s="http://www.deegree.org/metadata/spatial" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.deegree.org/layers/feature http://schemas.deegree.org/layers/feature/3.2.0/feature.xsd" configVersion="3.2.0"> <FeatureStoreId>protectedSite</FeatureStoreId> <FeatureLayer> <l:Name>PS.ProtectedSite</l:Name> <d:Title>Beschermde gebieden</d:Title> </FeatureLayer> </FeatureLayers> 7. Click on save and [Reload] to activate changes. 7.3 Create a new Theme 1. 2. 3. 4. In the console, click on map layers → themes. Enter a name (In this case “how-to-inspire-themes”), choose “Standard” and click Create new. Set the right <LayerStoreId>. In this case: “how-to-layers” as chosen in step 6.2. We will configure one theme layer. This has to be nested however in a base theme.Set the <Identifier>. In this case “ Base” 5. Choose a title <d:Title>: “Beschermde gebieden”. 6. Set the <s:CRS> The list of <s:CRS> is required by INSPIRE plus in this case local CRS for the Netherlands ( EPSG:28992). In this case local CRS for the Netherlands ( EPSG:28992) 7. Add <Theme> with <Identifier>, <d:Title> and <Layer>. The configuration looks in this case like: EXAMPLE: how-to-inspire-themes.xml <Themes xmlns="http://www.deegree.org/themes/standard" xmlns:d="http://www.deegree.org/metadata/description" xmlns:s="http://www.deegree.org/metadata/spatial" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" configVersion="3.2.0" xsi:schemaLocation="http://www.deegree.org/themes/standard http://schemas.deegree.org/themes/3.2.0/themes.xsd"> <LayerStoreId>how-to-layers</LayerStoreId> <Theme> <Identifier>Base</Identifier> <d:Title>Beschermde gebieden</d:Title> <s:CRS>EPSG:28992 EPSG:4326 EPSG:4258 EPSG:3035 EPSG:3034 EPSG:25830 EPSG:25831 EPSG:25832 urn:ogc:def:crs:EPSG::28992 urn:ogc:def:crs:EPSG::4326 urn:ogc:def:crs:EPSG::4258 urn:ogc:def:crs:EPSG::3035 urn:ogc:def:crs:EPSG::3034 urn:ogc:def:crs:EPSG::25830 urn:ogc:def:crs:EPSG::25831 urn:ogc:def:crs:EPSG::25832</s:CRS> <Theme> <Identifier>PS.ProtectedSite</Identifier> <d:Title>Beschermde gebieden</d:Title> <Layer>PS.ProtectedSite</Layer> </Theme> </Theme> </Themes> 7.4 Configure more layers: Note: Next steps seem to give a unexpected pronlem in deegree. Adding a sub-layer with filter element, does effect all layers! Notification has been send to the deegree userslist. 1. Make a new theme for each layer Note: The WMS considers a theme as a layer. Multiple datalayers under one theme is served by the WMS as one layer formed by the aggregate of the specified datalayers under that theme): 2. Insert the new theme into the existing theme configuration (In this case: ps.ProtectedSiteArchaeological) EXAMPLE: inspire-how-to-themes.xml … <Theme> <Identifier>ps.ProtectedSite</Identifier> <d:Title>Beschermde gebieden - Alles</d:Title> <Layer>ps.ProtectedSite</Layer> </Theme> <Theme> <Identifier>ps.ProtectedSiteArchaeological</Identifier> <d:Title>Beschermde gebieden - Archeologie</d:Title> <Layer>ps.ProtectedSiteArchaeological</Layer> </Theme> </Theme> 3. Define the right FeatureType and add a filter . Note: be sure that the right data (as required by INSPIRE) is filtered in the layerstore . (In this case : <ogc:PropertyName>ps:siteProtectionClassification</ogc:PropertyName> and <ogc:Literal>archaeological</ogc:Literal>) EXAMPLE: inspire-how-to-layers.xml … <FeatureLayer> <FeatureType>ps:ProtectedSite</FeatureType> <Filter> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>ps:siteProtectionClassification</ogc:PropertyName> <ogc:Literal>archaeological</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> </Filter> <l:Name>PS.ProtectedSiteArchaeological</l:Name> <d:Title>Beschermde gebieden - Archeologie</d:Title> </FeatureLayer> 4. Consult the INSPIRE requirements for more information on the required sub-layers TO DO Meta data configuration TO DO Extended capabilities as required by INSPIRE TO DO Styling N.a.v. In workspace bij datastore kan een boundingbox cache staan, met verkeerde waarden als gevolg van eerdere configuratiefouten. Tomcat stoppen. Deze cache weggooien en tomcat opnieuw starten, kan problemen met Bounding Boxes in bv quantum GIS verhelpen.