Novo validador INSPIRE – ETF

O novo validador INSPIRE está disponível para testes em http://inspire-sandbox.jrc.ec.europa.eu/etf-webapp/

Estão disponíveis testes de validação para metadados v.1.3, serviços WFS e GML dos temas do Anexo I.

ETF_Validator_TestSuitesETF_Validator_Metadados

Este novo validador baseia-se em conjuntos de  Abstract Test Suites (ATS) e Executable Test Suites (ETS) que estão disponíveis em https://github.com/inspire-eu-validation

O ETF é uma aplicação de código aberto para validar metadados, serviços e conjuntos de dados geográficos em infra-estruturas de informação geográfica, disponível em http://etf-validator.net/

Advertisements

Partilha de experiências

Olá. Trabalho na APA e ao longo dos meses de preparação do reporte 2016 da INSPIRE descobri uma série de coisas que desconhecia e que acho importante partilhar. Os colegas da DGT disponibilizaram este meio de comunicação e propuseram que eu o inaugurasse. Espero que os três temas que listo em baixo vos sejam uteis.

  1. Encontrei uma forma de listar as fichas de metadados INSPIRECORE no serviço de catálogo CSW, usando um filtro:

Usando no CSW da APA o pedido das primeiras 10 fichas com a palavra chave INSPIRECORE:

http://sniamb.apambiente.pt/geoportal/csw/discovery?Request=GetRecords&service=CSW&resultType=results&version=2.0.2&maxRecords=10&startPosition=1&typeNames=gmd:MD_Metadata&ElementSetName=full&outputSchema=http://www.isotc211.org/2005/gmd&outputFormat=application/xml&CONSTRAINTLANGUAGE=Filter&Constraint=%3CFilter%3E%3CPropertyIsLike%3E%3CPropertyName%3EAnyText%3C/PropertyName%3E%3CLiteral%3EINSPIRECORE%3C/Literal%3E%3C/PropertyIsLike%3E%3C/Filter%3E&constraint_language_version=1.1.0

Colando depois esse endereço no validador de metadados do JRC http://inspire-geoportal.ec.europa.eu/validator2/ (com o “Test Resource” ligado) obtém-se o seguinte resultado:

Assim, os gráficos no validador já aparecem preenchidos .

O CSW da APA tem 141 fichas de metadados INSPIRECORE, mas o validador aparentemente só consegue validar 10 fichas de cada vez, por isso é que no filtro usámos conjuntos de 10 fichas.

Os quadradinhos verdes, amarelos ou vermelhos só são criados para as fichas com erros. Os dados corretos aparecem diluídos nos gráficos.

Para se aceder às fichas individuais temos de escrever, à frente do endereço criado, o texto “datasets/1” ou “services/1” (se não for dataset é service), …, “datasets/10” ou “services/10”:

 

  1. Consegui resolver todos os erros de validação que fomos obtendo neste validador e já conseguimos criar WMS sem erros, porque se corrermos a validação do JRC numa ficha de metadados de um WMS com a opção “Test Resource” ligada, o validador vai cruzar a informação da ficha de metadados com a informação do getCapabilities do WMS, para além de cruzar com as fichas de metadados dos conjuntos de dados geográficos que são usados no WMS:

Teste de um WMS não conforme:

Endereço da ficha de metadados:  http://sniamb.apambiente.pt/geoportal/rest/document?id=96245759-8DA6-4BF0-AEB1-2490C13A92CA

Usando este endereço no validador do JRC obtemos uma lista dos erros encontrados:

Teste de um WMS conforme:

Endereço da ficha de metadados: http://sniamb.apambiente.pt/geoportal/rest/document?id=5A47AC4D-1512-4A55-97B9-90BB604C5206

Usando este endereço no validador do JRC não obtemos a lista dos erros encontrados e é devolvida a visualização da ficha de metadados:

 

  1. Os serviços passam a 100% no validador do JRC, mas devolvem erros para os nomes dos layer/temas no validador de WMS francês (http://inspire-tester.neogeo-online.net/ ).  Mas o validador françês não tem contemplados todos os layer/temas inspire (existe já um Registry para os layer/temas: http://inspire.ec.europa.eu/layer):

Indo ao código que estão a usar:

https://github.com/neogeo-technologies/inspire_tester

https://github.com/neogeo-technologies/inspire_tester/blob/master/wms_tester/wmsUtils/inspireTests.py

Vê-se que não têm ainda definidos todos os nome e titulo de Layer, nem em ENG nem em POR (a maior parte dos temas da APA são do anexo III):

{‘language’: ‘eng’, ‘layers’: [
{‘theme’: u’Geographical Names’, ‘title’: u’Geographical Names’, ‘name’: ‘GN.GeographicalNames’},
{‘theme’: u’Administrative Units’, ‘title’: u’Administrative unit’, ‘name’: ‘AU.AdministrativeUnit’},
{‘theme’: u’Administrative Units’, ‘title’: u’Administrative boundary’, ‘name’: ‘AU.AdministrativeBoundary’},
{‘theme’: u’Administrative Units’, ‘title’: u’Condominium’, ‘name’: ‘AU.Condominium’},
{‘theme’: u’Administrative Units’, ‘title’: u’NUTS Region’, ‘name’: ‘AU.NUTSRegion’},
{‘theme’: u’Addresses’, ‘title’: u’Addresses’, ‘name’: ‘AD.Address’},
{‘theme’: u’Cadastral Parcels’, ‘title’: u’Cadastral Parcel’, ‘name’: ‘CP.CadastralParcel’},
{‘theme’: u’Cadastral Parcels’, ‘title’: u’Cadastral Zoning’, ‘name’: ‘CP.CadastralZoning’},
{‘theme’: u’Cadastral Parcels’, ‘title’: u’Cadastral Boundary’, ‘name’: ‘CP.CadastralBoundary’},
{‘theme’: u’Transport networks’, ‘title’: u’Generic Transport Node’, ‘name’: ‘TN.CommonTransportElements.TransportNode’},
{‘theme’: u’Transport networks’, ‘title’: u’Generic Transport Link’, ‘name’: ‘TN.CommonTransportElements.TransportLink’},
{‘theme’: u’Transport networks’, ‘title’: u’Generic Transport Area’, ‘name’: ‘TN.CommonTransportElements.TransportArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Road Link’, ‘name’: ‘TN.RoadTransportNetwork.RoadLink’},
{‘theme’: u’Transport networks’, ‘title’: u’Vehicle traffic Area’, ‘name’: ‘TN.RoadTransportNetwork.VehicleTrafficArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Road Service Area’, ‘name’: ‘TN.RoadTransportNetwork.RoadServiceArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Road Area’, ‘name’: ‘TN.RoadTransportNetwork.RoadArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Railway Link’, ‘name’: ‘TN.RailTransportNetwork.RailwayLink’},
{‘theme’: u’Transport networks’, ‘title’: u’Railway Station Area’, ‘name’: ‘TN.RailTransportNetwork.RailwayStationArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Railway Yard Area’, ‘name’: ‘TN.RailTransportNetwork.RailwayYardArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Railway Area’, ‘name’: ‘TN.RailTransportNetwork.RailwayArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Waterway Link’, ‘name’: ‘TN.WaterTransportNetwork.WaterwayLink’},
{‘theme’: u’Transport networks’, ‘title’: u’Fairway Area’, ‘name’: ‘TN.WaterTransportNetwork.FairwayArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Port Area’, ‘name’: ‘TN.WaterTransportNetwork.PortArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Air Link’, ‘name’: ‘TN.AirTransportNetwork.AirLink’},
{‘theme’: u’Transport networks’, ‘title’: u’Aerodrome Area’, ‘name’: ‘TN.AirTransportNetwork.AerodromeArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Runway Area’, ‘name’: ‘TN.AirTransportNetwork.RunwayArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Airspace Area’, ‘name’: ‘TN.AirTransportNetwork.AirspaceArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Apron Area’, ‘name’: ‘TN.AirTransportNetwork.ApronArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Taxiway Area’, ‘name’: ‘TN.AirTransportNetwork.TaxiwayArea’},
{‘theme’: u’Transport networks’, ‘title’: u’Cableway Link’, ‘name’: ‘TN.CableTransportNetwork.CablewayLink’},
{‘theme’: u’Hydrography’, ‘title’: u’Waterbody’, ‘name’: ‘HY.PhysicalWaters.Waterbodies’},
{‘theme’: u’Hydrography’, ‘title’: u’Land-Water Boundary’, ‘name’: ‘HY.PhysicalWaters.LandWaterBoundary’},
{‘theme’: u’Hydrography’, ‘title’: u’Catchment’, ‘name’: ‘HY.PhysicalWaters.Catchments’},
{‘theme’: u’Hydrography’, ‘title’: u’Hydrographic Network’, ‘name’: ‘HY.Network’},
{‘theme’: u’Hydrography’, ‘title’: u’Hydro Point of Interest’, ‘name’: ‘HY.PhysicalWaters.HydroPointOfInterest’},
{‘theme’: u’Hydrography’, ‘title’: u’Man-made Object’, ‘name’: ‘HY.PhysicalWaters.ManMadeObject’},
{‘theme’: u’Hydrography’, ‘title’: u’Shore, Wetland’, ‘name’: ‘HY.HydroObject’},
{‘theme’: u’Hydrography’, ‘title’: u’WFD-River’, ‘name’: ‘HY.Reporting.WFDRiver’},
{‘theme’: u’Hydrography’, ‘title’: u’WFD-Lake’, ‘name’: ‘HY.Reporting.WFDLake’},
{‘theme’: u’Hydrography’, ‘title’: u’WFD-Transitional water’, ‘name’: ‘HY.Reporting.WFDTransitionalWater’},
{‘theme’: u’Hydrography’, ‘title’: u’WFD-Coastal water’, ‘name’: ‘HY.Reporting.WFDCoastalWater’},
{‘theme’: u’Hydrography’, ‘title’: u’Ocean Region’, ‘name’: ‘HY.OceanRegion’},
{‘theme’: u’Protected Sites’, ‘title’: u’Protected Sites’, ‘name’: ‘PS.ProtectedSite’}
]},
{‘language’: ‘por’, ‘layers’: [
{‘theme’: u’Toponímia’, ‘title’: u’Toponímia’, ‘name’: ‘GN.GeographicalNames’},
{‘theme’: u’Unidades Administrativas’, ‘title’: u’Unidade administrativa’, ‘name’: ‘AU.AdministrativeUnit’},
{‘theme’: u’Unidades Administrativas’, ‘title’: u’Fronteira administrativa’, ‘name’: ‘AU.AdministrativeBoundary’},
{‘theme’: u’Unidades Administrativas’, ‘title’: u’Condomínio’, ‘name’: ‘AU.Condominium’},
{‘theme’: u’Unidades Administrativas’, ‘title’: u’Região NUTS’, ‘name’: ‘AU.NUTSRegion’},
{‘theme’: u’Endereços’, ‘title’: u’Endereços’, ‘name’: ‘AD.Address’},
{‘theme’: u’Parcelas Cadastrais’, ‘title’: u’Parcela cadastral’, ‘name’: ‘CP.CadastralParcel’},
{‘theme’: u’Parcelas Cadastrais’, ‘title’: u’Zonamento cadastral’, ‘name’: ‘CP.CadastralZoning’},
{‘theme’: u’Parcelas Cadastrais’, ‘title’: u’Limite cadastral’, ‘name’: ‘CP.CadastralBoundary’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Nó de transporte genérico’, ‘name’: ‘TN.CommonTransportElements.TransportNode’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Segmento de transporte genérico’, ‘name’: ‘TN.CommonTransportElements.TransportLink’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de transporte genérica’, ‘name’: ‘TN.CommonTransportElements.TransportArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Segmento da estrada’, ‘name’: ‘TN.RoadTransportNetwork.RoadLink’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de circulação de veículos’, ‘name’: ‘TN.RoadTransportNetwork.VehicleTrafficArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de serviço rodoviário’, ‘name’: ‘TN.RoadTransportNetwork.RoadServiceArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área da estrada’, ‘name’: ‘TN.RoadTransportNetwork.RoadArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Segmento de via férrea’, ‘name’: ‘TN.RailTransportNetwork.RailwayLink’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de estação ferroviária’, ‘name’: ‘TN.RailTransportNetwork.RailwayStationArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de estação de triagem’, ‘name’: ‘TN.RailTransportNetwork.RailwayYardArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de linha férrea’, ‘name’: ‘TN.RailTransportNetwork.RailwayArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Segmento de via navegável’, ‘name’: ‘TN.WaterTransportNetwork.WaterwayLink’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de navegação’, ‘name’: ‘TN.WaterTransportNetwork.FairwayArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área portuária’, ‘name’: ‘TN.WaterTransportNetwork.PortArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Segmento de via aérea’, ‘name’: ‘TN.AirTransportNetwork.AirLink’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de aeródromo’, ‘name’: ‘TN.AirTransportNetwork.AerodromeArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de pista’, ‘name’: ‘TN.AirTransportNetwork.RunwayArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de espaço aéreo’, ‘name’: ‘TN.AirTransportNetwork.AirspaceArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Plataforma de estacionamento’, ‘name’: ‘TN.AirTransportNetwork.ApronArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Área de circulação’, ‘name’: ‘TN.AirTransportNetwork.TaxiwayArea’},
{‘theme’: u’Redes de Transporte’, ‘title’: u’Segmento de via cablada’, ‘name’: ‘TN.CableTransportNetwork.CablewayLink’},
{‘theme’: u’Hidrografia’, ‘title’: u’Massa de água’, ‘name’: ‘HY.PhysicalWaters.Waterbodies’},
{‘theme’: u’Hidrografia’, ‘title’: u’Fronteira terra-água’, ‘name’: ‘HY.PhysicalWaters.LandWaterBoundary’},
{‘theme’: u’Hidrografia’, ‘title’: u’Bacia hidrográfica’, ‘name’: ‘HY.PhysicalWaters.Catchments’},
{‘theme’: u’Hidrografia’, ‘title’: u’Rede hidrográfica’, ‘name’: ‘HY.Network’},
{‘theme’: u’Hidrografia’, ‘title’: u’Ponto de interesse hidrográfico’, ‘name’: ‘HY.PhysicalWaters.HydroPointOfInterest’},
{‘theme’: u’Hidrografia’, ‘title’: u’Objecto artificial’, ‘name’: ‘HY.PhysicalWaters.ManMadeObject’},
{‘theme’: u’Hidrografia’, ‘title’: u’Margem, zona húmida’, ‘name’: ‘HY.HydroObject’},
{‘theme’: u’Hidrografia’, ‘title’: u’Rio DQA’, ‘name’: ‘HY.Reporting.WFDRiver’},
{‘theme’: u’Hidrografia’, ‘title’: u’Lago DQA’, ‘name’: ‘HY.Reporting.WFDLake’},
{‘theme’: u’Hidrografia’, ‘title’: u’Águas de transição DQA’, ‘name’: ‘HY.Reporting.WFDTransitionalWater’},
{‘theme’: u’Hidrografia’, ‘title’: u’Águas costeiras DQA’, ‘name’: ‘HY.Reporting.WFDCoastalWater’},
{‘theme’: u’Hidrografia’, ‘title’: u’Região oceânica’, ‘name’: ‘HY.OceanRegion’},
{‘theme’: u’Sítios Protegidos’, ‘title’: u’Sítios protegidos’, ‘name’: ‘PS.ProtectedSite’}
]},