[FEATURE] [needs-docs] Metadata editor

Adds a new metadata tab to layer properties, representing the new metadata model from QEP #91
This commit is contained in:
Etienne Trimaille 2017-09-23 11:08:32 +07:00 committed by Nyall Dawson
parent e2678936df
commit ba81068f49
21 changed files with 3313 additions and 49 deletions

View File

@ -229,6 +229,13 @@ Returns the path to the translation directory.
:rtype: str
%End
static QString metadataPath();
%Docstring
Returns the path to the metadata directory.
.. versionadded:: 3.0
:rtype: str
%End
static QString qgisMasterDatabaseFilePath();
%Docstring
Returns the path to the master qgis.db file.

View File

@ -150,6 +150,7 @@
%Include qgsmessagebaritem.sip
%Include qgsmessagelogviewer.sip
%Include qgsmessageviewer.sip
%Include qgsmetadatawidget.sip
%Include qgsnewhttpconnection.sip
%Include qgsnewmemorylayerdialog.sip
%Include qgsnewnamedialog.sip

View File

@ -0,0 +1,88 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/qgsmetadatawidget.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
class QgsMetadataWidget : QWidget
{
%Docstring
A wizard to edit metadata on a map layer.
.. versionadded:: 3.0
%End
%TypeHeaderCode
#include "qgsmetadatawidget.h"
%End
public:
QgsMetadataWidget( QWidget *parent, QgsMapLayer *layer = 0 );
%Docstring
Constructor for the wizard.
%End
~QgsMetadataWidget();
void saveMetadata( QgsLayerMetadata &layerMetadata ) const;
%Docstring
Save all fields in a QgsLayerMetadata object.
%End
bool checkMetadata() const;
%Docstring
Check if values in the wizard are correct.
:rtype: bool
%End
void acceptMetadata();
%Docstring
Saves the metadata to the layer.
%End
static QMap<QString, QString> parseLanguages();
%Docstring
Returns a list of languages available by default in the wizard.
:rtype: QMap<str, QString>
%End
static QStringList parseLicenses();
%Docstring
Returns a list of licences available by default in the wizard.
:rtype: list of str
%End
static QStringList parseLinkTypes();
%Docstring
Returns a list of link types available by default in the wizard.
.. seealso:: https://github.com/OSGeo/Cat-Interop/blob/master/LinkPropertyLookupTable.csv
:rtype: list of str
%End
static QStringList parseMimeTypes();
%Docstring
Returns a list of MIME types available by default in the wizard.
.. seealso:: https://fr.wikipedia.org/wiki/Type_MIME
:rtype: list of str
%End
static QMap<QString, QString> parseTypes();
%Docstring
Returns a list of types available by default in the wizard.
:rtype: QMap<str, QString>
%End
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/qgsmetadatawidget.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -0,0 +1,68 @@
identifier,uri,label,url,target,owner,resource_type,registrant,comments,deprecated
OGC:CSW,http://www.opengis.net/def/serviceType/ogc/csw,OGC Catalog Service for the Web,http://www.opengeospatial.org/standards/cat,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Catalog service for the web v2.0.2 endpoint (should use different protocol identifier if the endpoint is not v2.0.2; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. ,
OGC:SOS,http://www.opengis.net/def/serviceType/ogc/sos,OGC Sensor Observation Service,http://www.opengeospatial.org/standards/sos,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Sensor Observation service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different offerings, the parameters necessary to access the correct offering should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.",urn:x-esri:specification:ServiceType:SOS; urn:x-esri:specification:ServiceType:sos:url
OGC:SPS,http://www.opengeospatial.org/standards/sps,OGC Sensor Planning Service,http://www.opengeospatial.org/standards/sps,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an Sensor Planning Service ,
OGC:SAS,http://www.ogcnetwork.net/SAS,OGC Sensor Alert Service,http://www.ogcnetwork.net/SAS,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an Sensor Alert Service,
OGC:WNS,http://www.ogcnetwork.net/WNS,OGC Web Notification Service,http://portal.opengeospatial.org/files/?artifact_id=1367,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an Web Notification Service ,
OGC:WCS,http://www.opengis.net/def/serviceType/ogc/wcs,OGC Web Coverage Service,http://www.opengeospatial.org/standards/wcs,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web coverage service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different coverages, the parameters necessary to access the correct coverage should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.",urn:x-esri:specification:ServiceType:WCS; urn:x-esri:specification:ServiceType:wcs:url
OGC:WFS,http://www.opengis.net/def/serviceType/ogc/wfs,OGC Web Feature Service,http://www.opengeospatial.org/standards/wfs,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Feature Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different feature types the typeName parameter necessary to access the correct data should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.,urn:x-esri:specification:ServiceType:WFS; urn:x-esri:specification:ServiceType:wfs:url
OGC:WMS,http://www.opengis.net/def/serviceType/ogc/wms,OGC Web Map Service,http://www.opengeospatial.org/standards/wms,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Map Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different map layers, the layers parameters necessary to access the correct data should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.",urn:x-esri:specification:ServiceType:WMS; urn:x-esri:specification:ServiceType:wms:url
OGC:WMS-C,http://www.opengis.net/def/serviceType/ogc/wms,OGC Web Map Service - Cached,https://wiki.osgeo.org/wiki/WMS_Tile_Caching,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pacioos,"This is an unofficial profile of WMS using OSGeo recommendations to pull cached map tiles from the server when available. Often this is specified with a 'tiled=true' URL parameter in the GetMap request.", "While WMS-C has been superseded by the OSGeo Tile Map Service specification (TMS) and the OGC Web Map Tile Service standard (WMTS), it is still widely supported."
OGC:WMTS,http://www.opengeospatial.org/standards/wmts,OGC Web Map Tile Service,http://www.opengeospatial.org/standards/wmts,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Map Tile Service,
OGC:WPS,http://www.opengis.net/def/serviceType/ogc/wps,OGC Web Processing Service,http://www.opengeospatial.org/standards/wps,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Processing Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Other parameters necessary to access the correct processing service should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.,
OGC:ODS,http://www.opengeospatial.org/standards/ols#ods,OGC OpenLS Directory Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Directory Service ,
OGC:OGS,http://www.opengeospatial.org/standards/ols#ogs,OGC OpenLS Gateway Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Gateway Service,
OGC:OUS,http://www.opengeospatial.org/standards/ols#ous,OGC OpenLS Utility Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Utility Service,
OGC:OPS,http://www.opengeospatial.org/standards/ols#ops,OGC OpenLS Presentation Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Presentation Service ,
OGC:ORS,http://www.opengeospatial.org/standards/ols#ors,OGC OpenLS Route Service,http://www.opengeospatial.org/standards/ols,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Route Service,
OGC:CT,http://www.opengeospatial.org/standards/ct,OGC Coordinate Transformation Service,http://www.opengeospatial.org/standards/ct,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Coordinate Transformation Service,
OGC:WFS-G,http://www.opengeospatial.org/standards/wfs-g,Gazetteer Service Profile of the Web Feature Service Implementation Specification,http://portal.opengeospatial.org/files/?artifact_id=7175,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Gazetteer Service Profile of the Web Feature Service Implementation Specification,
OGC:OWC,http://www.opengeospatial.org/standards/owc,OGC OWS Context,http://www.opengeospatial.org/standards/owc,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,Specifies a fully configured service set which can be exchanged,
OGC:GPKG,http://www.opengeospatial.org/standards/geopackage,OGC Geopackage,http://www.opengeospatial.org/standards/geopackage,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,SQLite Extension for exchange or direct use of vector geospatial features and / or tile matrix sets of earth images and raster maps at various scales,
OGC:IoT,http://www.ogcnetwork.net/IoT,OGC SensorThings API,http://ogc-iot.github.io/ogc-iot-api,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a SensorThings API,
ESRI:ArcIMS,urn:x-esri:serviceType:ArcIMS,ESRI ArcIMS Service,,srv:serviceType;gmd:protocol;usgin:overlayAPI,Esri Inc.,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an ArcIMS endpoint. ArcIMS requests are tunneled via HTTP Get URL's,
ESRI:ArcGIS,urn:x-esri:serviceType:ArcGIS,ESRI ArcGIS Service,,srv:serviceType;gmd:protocol;usgin:overlayAPI,Esri Inc.,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an ESRI Map service endpoint. ESRI REST requests are tunneled via HTTP Get URL's,
ESRI:MPK,http://esriurl.com/mpk.xml,ArcGIS Map Package, http://esriurl.com/mpk.xml,gmd:MD_Format/gmd:name;gmd:applicationProfile,Esri Inc.,data,@mhogeweg,"Example URI for ArcGIS Map Package. Mpk is a file format. A map package contains a map document (.mxd) and the data referenced by the layers it contains, packaged into one convenient, portable file.",
OPeNDAP:OPeNDAP,,OPeNDAP root URL,http://docs.opendap.org/index.php/UserGuideOPeNDAPMessages,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@tomkralidis,"Link is the root URL for an OpenDAP endpoint. An OPeNDAP server replies to queries for data and other services in the form of specially formed URLs that start with a root URL, and use a suffix on the root URL and a constraint expression to indicate which service is requested and what the parameters are. Example suffixes are dods, das, dds, nc. OpenDAP defines a syntax for constraint expressions as well.",urn:x-esri:specification:ServiceType:OPeNDAP; urn:x-esri:specification:ServiceType:odp:url
OPeNDAP:Hyrax,,OPeNDAP Hyrax server,http://docs.opendap.org/index.php/Hyrax,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@amilan17,"Link is the root URL for an This is the OPeNDAP 4 Data Server, also known as Hyrax. Hyrax is a data server that implements the DAP2 and DAP4 protocols, works with a number of different data formats and supports a wide variety of customization options from tailoring the look of the server's web pages to complex server-side processing operations.",
UNIDATA:NCSS,,NetCDF Subset Service,https://www.unidata.ucar.edu/software/thredds/current/tds/interfaceSpec/NetcdfSubsetService.html,gmd:protocol; usgin:overlayAPI,,service,@tomkralidis,"Link is the root URL for a THREDDS datasets. The NetCDF Subset Service enables subsetting CDM scientific datasets using earth coordinates, such as lat/lon bounding boxes and date ranges; requests are made via HTTP GET with key-value pairs (KVP) for parameters encoded in HTTP URIs. The resources identified are THREDDS datasets. The resource URIs have a root host name and path, typically something like http://servername:8080/thredds/ncss/, followed by a path that identifies a particular dataset {path/dataset}. A subset of the dataset is considered a view of a resource, specified by query parameters following the character '?' after the dataset path: http://servername:8080/thredds/ncss/{path/dataset}?{subset}. An 'accept' parameter may be used to specify the desired resource representation.",
UNIDATA:CDM,,Common Data Model Remote Web Service,https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,Unidata,service,@tomkralidis,Example,
UNIDATA:CdmRemote,,Common Data Model index subsetting,https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html,gmd:protocol; usgin:overlayAPI,Unidata,service,@smrazgs,"CDM Remote provides remote access to UNIDATA Common Data Model (CDM) datasets, using ncstream as the on-the-wire protocol. Client requests are of the form endpoint?query, and the specification defines a vocabulary of valid query parameters. There are two levels of service: 1) CdmRemote provides index subsetting on remote CDM datasets; 2) CdmrFeature provides coordinate subsetting on remote CDM Feature Datasets",
UNIDATA:CdmrFeature,,Common Data Model coordinate subsetting,https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html,gmd:protocol; usgin:overlayAPI,Unidata,,@smrazgs,"Link is endpoint URL that provides coordinate subsetting on UNIDATA Common Data Model (CDM) datasets, using ncstream as the on-the-wire protocol. Client requests are of the form endpoint?query, and the specification defines a vocabulary of valid query parameters.",
UNIDATA:THREDDS,http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0,THREDDS Catalog,http://www.unidata.ucar.edu/software/thredds/current/tds/catalog/InvCatalogSpec.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,Unidata,service,@kwilcox,"Link is a THREDDS Catalog URL that provides the XML for traversing programmatically. Can be used for datasets and collections of datasets.",
OGC:GML,http://www.opengis.net/gml,OGC Geography Markup Language,,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@tomkralidis,Example,
WWW:LINK,http://www.w3.org/TR/xlink/,Web Address (URL),,dct:references/@scheme,,information,@tomkralidis @smrazgs,Indicates that XLINK properties are encoded as key-value pairs in content of a dct:references element to provide a machine actionable link. ,
WWW:WSDL,http://www.w3.org/TR/wsdl,Web Service Description Language XML document describing service operation,http://www.w3.org/TR/wsdl,gmd:applicationProfile,W3C,,@smrazgs,,
WWW:SPARQL:1.1,http://www.w3.org/TR/sparql11-protocol,SPARQL protocol for HTTP,http://www.w3.org/TR/rdf-sparql-query,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,SPARQL Protocol specifies a means for conveying SPARQL queries and updates to a SPARQL processing service and returning the results via HTTP to the entity that requested them,
OpenSearch1.1,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax,OpenSearch template,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax,usgin:template;gmd:applicationProfile,OpenSearch.org,,@smrazgs,use to indicate link is a template conforming to the OpenSearch specification,
OpenSearch1.1:Description,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document,OpenSearch description document,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document,gmd:applicationProfile,OpenSearch.org,,@smrazgs,indicates a link to get an openSearch description document,
information,,link provides information about resource,,gmd:function,ISO TC211,,@smrazgs,function of link it to http:GET information about resource,
template,http://tools.ietf.org/html/rfc6570,link provides template to access resource,http://tools.ietf.org/html/rfc6570,gmd:function,USGIN,,@smrazgs,Link text is a URI template; applicationProfile attribute value associated with the link should indicate the specification for the template scheme (e.g. OpenSearch1.1).,
download,,link will get resource,,gmd:function,ISO TC211,,@smrazgs,function of link it to http:GET a representation of the resource; the link type attribute value(s) should indicate the MIME types of available representations,
service,,link is service endpoint,,gmd:function,ISO TC211,,@smrazgs,"Link value is the URL of a service endpoint; the link protocol and applicationProfile (and possibly other link properties like overlayAPI, depending on the link attributes profile in use) attribute values should identify the service protocol specification",
order,,link provides form to obtain resource,,gmd:function,ISO TC211,,@smrazgs,link value is URL of web application requiring user interaction to order/request access to the resource,
search,,link provides form for searching resource,,gmd:function,ISO TC211,,@smrazgs,link value is URL of web application requiring user interaction to search/browse/subset the resource.,
esip:CollectionCast,http://commons.esipfed.org/ns/discovery/1.2/collectionCast# ,ESIP collection cast,,gmd:applicationProfile,ESIP,,@smrazgs,,
tilejson:2.0.0,,tile mill map service description,https://github.com/mapbox/tilejson-spec,gmd:applicationProfile,MapBox,,@smrazgs,link is description of a TileMill map service endpoint. Link type would be application/json; function would be information.,
iris:fdsnws-event,http://service.iris.edu/fdsnws/event/1/,IRIS Seismic event service,http://service.iris.edu/fdsnws/event/1,gmd:applicationProfile;usgin:overlayAPI,IRIS,,@smrazgs,Link returns event (earthquake) information from the catalogs submitted to the IRIS DMC,
QuakeML1.2,http://quakeml.org /xmlns /quakeml/1.2,Earthquake markup language,https://quake.ethz.ch/quakeml,gmd:MD_Format/gmd:name;gmd:applicationProfile,quakeml@sed.ethz.ch,,@smrazgs,XML markup language for earthquake hypocenter data,
file,,a file,http://docs.ckan.org/en/ckan-1.8/domain-model-resource.html,gmd:function,OKFN,,@smrazgs,CKAN metadata vocabulary for populating the type attribute on a CKAN resource; indicates that an http GET of this url should yield a bitstream,
ISO 19115:2003/19139,,ISO 19115 metadata in ISO19139 encoding,,gmd:metadataStandardName,GeoNetwork,,@smrazgs,This is the CharacterString value used by Geonetwork OpenSource to identify ISO metadata record instances; apparently have to assume that its using the 2006 corrigendum with no specific profile conventions.,
ISO-USGIN,,USGIN-profile ISO 19115 metadata,http://repository.usgin.org/uri_gin/usgin/dlio/337,gmd:metadataStandardName,USGIN,,@smrazgs,This is the CharacterString Value mandated by the USGIN profile of ISO19115/19139 for instance documents to self-identify. ,
http,https://www.ietf.org/rfc/rfc2616,"Hypertext transfer Protocol, v1.1",https://www.ietf.org/rfc/rfc2616.txt,gmd:protocol,IETF,,@smrazgs,Use to indicate gmd:CI_OnlineResource URLs that are simple http links to a target resource representation for download; redundant as the URL prefix 'http:' conveys the same information.,
https,https://tools.ietf.org/html/rfc2818,HTTP over TLS,https://www.ietf.org/rfc/rfc2818.txt,gmd:protocol,IETF,,@amilan17,Use to indicate gmd:CI_OnlineResource URLs that are simple https links to a target resource representation for download; redundant as the URL prefix 'https:' conveys the same information.,
ftp,https://tools.ietf.org/html/rfc959,FILE TRANSFER PROTOCOL (FTP),https://www.ietf.org/rfc/rfc959.txt,gmd:protocol,IETF,,@amilan17,Use to indicate gmd:CI_OnlineResource URLs that are simple ftp links to a target resource representation for download; redundant as the URL prefix 'ftp:' conveys the same information.,
IETF:GeoJSON,http://geojson.org,GeoJSON,https://datatracker.ietf.org/doc/draft-butler-geojson,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON),
GIT,http://git-scm.com/,GIT,http://git-scm.com/book/commands,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a GIT repository,
OKFN:datapackage,http://data.okfn.org/doc/data-package,OKFN Data Package,http://dataprotocols.org/data-packages,gmd:MD_Format/gmd:name;gmd:applicationProfile,,data,@pvgenuchten,A Data Package is a simple way of packaging up data,
boundless:geogig,http://geogig.org,Boundless GeoGig,http://geogig.org/docs/interaction/web-api.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,Boundless,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a GeoGig REST API,
OASIS:OData:4.0,http://docs.oasis-open.org/odata/odata/v4.0,OData v4.0,http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for an OData JSON endpoint,
maxogden:dat,http://dat-data.com,dat REST API,https://github.com/maxogden/dat/blob/master/docs/rest-api.md,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a dat REST API,
geoserver:rest,http://docs.geoserver.org/latest/en/user/rest,GeoServer REST configuration API,http://docs.geoserver.org/latest/en/user/rest,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a Geoserver rest API to configure featuretypes in Geoserver (and mapserver) remotely,
google:protocol-buffers,https://developers.google.com/protocol-buffers,Google Protocol Buffers,https://developers.google.com/protocol-buffers,gmd:MD_Format/gmd:name;gmd:applicationProfile,Google,data,@pvgenuchten,Googles mechanism for serializing structured data,
google:fusion-tables,http://google.com/fusiontables,Google Fusion Tables,https://developers.google.com/fusiontables,gmd:MD_Format/gmd:name;gmd:applicationProfile,Google,data,@pvgenuchten,Google mechanism for interating with online data tables,
NOAA:LAS,http://ferret.pmel.noaa.gov/LAS,Live Access Server,http://ferret.pmel.noaa.gov/LAS/documentation/developer-documentation/the-xml-messages-used-by-las,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is a LAS endpoint,
OSM,http://wiki.openstreetmap.org/wiki/API,Open Street Map API,http://wiki.openstreetmap.org/wiki/API,srv:serviceType;gmd:protocol;usgin:overlayAPI,,service,@pvgenuchten,gmd:protocol value that indicates CI_OnlineResource URL is for a OSM APIfor fetching and saving raw geodata from/to an OpenStreetMap database ,
ERDDAP:griddap,http://coastwatch.pfeg.noaa.gov/erddap/griddap/documentation.html,ERDDAP Data Service for Gridded Datasets,http://coastwatch.pfeg.noaa.gov/erddap/griddap/documentation.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,@BobSimons,service,@BobSimons,"griddap lets you request a data subset, graph, or map from a gridded dataset (for example, sea surface temperature data from a satellite), via a specially formed URL. griddap uses the OPeNDAP (external link) Data Access Protocol (DAP) (external link) and its projection constraints (external link). Link is the root URL for an ERDDAP griddap service endpoint. The service responds to OPeNDAP requests and related ERDDAP-specific requests to a gridded dataset. A request starts with this root URL, adds a file type extension, and sometimes a constraint expression to specify a subset of data. Example file type extensions which don't require a constraint are .das, .dds, .html, and .graph. Example file type extensions which do require a constraint are .dods, .nc, .mat, .json, and .htmlTable. Full documentation for ERDDAP API at http://coastwatch.pfeg.noaa.gov/erddap/rest.html",
ERDDAP:tabledap,http://coastwatch.pfeg.noaa.gov/erddap/tabledap/documentation.html,ERDDAP Data Service for Tabular Datasets,http://coastwatch.pfeg.noaa.gov/erddap/tabledap/documentation.html,srv:serviceType;gmd:protocol;usgin:overlayAPI,@BobSimons,service,@BobSimons,"Tabledap lets you request a data subset, a graph, or a map from a tabular dataset (for example, buoy data), via a specially formed URL. tabledap uses the OPeNDAP (external link) Data Access Protocol (DAP) (external link) and its selection constraints (external link). Link is the root URL for an ERDDAP tabledap service endpoint. The service responds to OPeNDAP requests and related ERDDAP-specific requests to a tabular (sequence) dataset. A request starts with this root URL, adds a file type extension, and sometimes a constraint expression to specify a subset of data. Example file type extensions which don't require a constraint are .das, .dds, .html, and .graph. Example file type extensions which do require a constraint are .dods, .nc, .mat, .json, and .htmlTable. Full documentation for ERDDAP API at http://coastwatch.pfeg.noaa.gov/erddap/rest.html",
OASIS:AMQP,https://amqp.org,Advanced Message Queuing Protocol,https://amqp.org,gmd:protocol,,service,@tomkralidis,gmd:protocol value that indicates CI_OnlineResource URL is for an AMQP broker,
1 identifier uri label url target owner resource_type registrant comments deprecated
2 OGC:CSW http://www.opengis.net/def/serviceType/ogc/csw OGC Catalog Service for the Web http://www.opengeospatial.org/standards/cat srv:serviceType;gmd:protocol;usgin:overlayAPI service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Catalog service for the web v2.0.2 endpoint (should use different protocol identifier if the endpoint is not v2.0.2; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request.
3 OGC:SOS http://www.opengis.net/def/serviceType/ogc/sos OGC Sensor Observation Service http://www.opengeospatial.org/standards/sos srv:serviceType;gmd:protocol;usgin:overlayAPI service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Sensor Observation service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different offerings, the parameters necessary to access the correct offering should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters. urn:x-esri:specification:ServiceType:SOS; urn:x-esri:specification:ServiceType:sos:url
4 OGC:SPS http://www.opengeospatial.org/standards/sps OGC Sensor Planning Service http://www.opengeospatial.org/standards/sps srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an Sensor Planning Service
5 OGC:SAS http://www.ogcnetwork.net/SAS OGC Sensor Alert Service http://www.ogcnetwork.net/SAS srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an Sensor Alert Service
6 OGC:WNS http://www.ogcnetwork.net/WNS OGC Web Notification Service http://portal.opengeospatial.org/files/?artifact_id=1367 srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an Web Notification Service
7 OGC:WCS http://www.opengis.net/def/serviceType/ogc/wcs OGC Web Coverage Service http://www.opengeospatial.org/standards/wcs srv:serviceType;gmd:protocol;usgin:overlayAPI service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web coverage service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different coverages, the parameters necessary to access the correct coverage should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters. urn:x-esri:specification:ServiceType:WCS; urn:x-esri:specification:ServiceType:wcs:url
8 OGC:WFS http://www.opengis.net/def/serviceType/ogc/wfs OGC Web Feature Service http://www.opengeospatial.org/standards/wfs srv:serviceType;gmd:protocol;usgin:overlayAPI service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Feature Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different feature types the typeName parameter necessary to access the correct data should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters. urn:x-esri:specification:ServiceType:WFS; urn:x-esri:specification:ServiceType:wfs:url
9 OGC:WMS http://www.opengis.net/def/serviceType/ogc/wms OGC Web Map Service http://www.opengeospatial.org/standards/wms srv:serviceType;gmd:protocol;usgin:overlayAPI service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Map Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Note that if the service offers multiple datasets in different map layers, the layers parameters necessary to access the correct data should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters. urn:x-esri:specification:ServiceType:WMS; urn:x-esri:specification:ServiceType:wms:url
10 OGC:WMS-C http://www.opengis.net/def/serviceType/ogc/wms OGC Web Map Service - Cached https://wiki.osgeo.org/wiki/WMS_Tile_Caching srv:serviceType;gmd:protocol;usgin:overlayAPI service @pacioos This is an unofficial profile of WMS using OSGeo recommendations to pull cached map tiles from the server when available. Often this is specified with a 'tiled=true' URL parameter in the GetMap request. While WMS-C has been superseded by the OSGeo Tile Map Service specification (TMS) and the OGC Web Map Tile Service standard (WMTS), it is still widely supported.
11 OGC:WMTS http://www.opengeospatial.org/standards/wmts OGC Web Map Tile Service http://www.opengeospatial.org/standards/wmts srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Map Tile Service
12 OGC:WPS http://www.opengis.net/def/serviceType/ogc/wps OGC Web Processing Service http://www.opengeospatial.org/standards/wps srv:serviceType;gmd:protocol;usgin:overlayAPI service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Web Processing Service v?? endpoint (should use different protocol identifier if the endpoint is not that version; these are not yet defined here). The gmd:function value in the CI_Online resource should be 'information' if the provided URL is a getCapabilities request. Other parameters necessary to access the correct processing service should be specified in the gmd:CI_OnlineResource/gmd:description element; recommended practice is to use a JSON object with keys that are parameter names and values that are the necessary parameters.
13 OGC:ODS http://www.opengeospatial.org/standards/ols#ods OGC OpenLS Directory Service http://www.opengeospatial.org/standards/ols srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Directory Service
14 OGC:OGS http://www.opengeospatial.org/standards/ols#ogs OGC OpenLS Gateway Service http://www.opengeospatial.org/standards/ols srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Gateway Service
15 OGC:OUS http://www.opengeospatial.org/standards/ols#ous OGC OpenLS Utility Service http://www.opengeospatial.org/standards/ols srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Utility Service
16 OGC:OPS http://www.opengeospatial.org/standards/ols#ops OGC OpenLS Presentation Service http://www.opengeospatial.org/standards/ols srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Presentation Service
17 OGC:ORS http://www.opengeospatial.org/standards/ols#ors OGC OpenLS Route Service http://www.opengeospatial.org/standards/ols srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC OpenLS Route Service
18 OGC:CT http://www.opengeospatial.org/standards/ct OGC Coordinate Transformation Service http://www.opengeospatial.org/standards/ct srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Coordinate Transformation Service
19 OGC:WFS-G http://www.opengeospatial.org/standards/wfs-g Gazetteer Service Profile of the Web Feature Service Implementation Specification http://portal.opengeospatial.org/files/?artifact_id=7175 srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OGC Gazetteer Service Profile of the Web Feature Service Implementation Specification
20 OGC:OWC http://www.opengeospatial.org/standards/owc OGC OWS Context http://www.opengeospatial.org/standards/owc gmd:MD_Format/gmd:name;gmd:applicationProfile data @pvgenuchten Specifies a fully configured service set which can be exchanged
21 OGC:GPKG http://www.opengeospatial.org/standards/geopackage OGC Geopackage http://www.opengeospatial.org/standards/geopackage gmd:MD_Format/gmd:name;gmd:applicationProfile data @pvgenuchten SQLite Extension for exchange or direct use of vector geospatial features and / or tile matrix sets of earth images and raster maps at various scales
22 OGC:IoT http://www.ogcnetwork.net/IoT OGC SensorThings API http://ogc-iot.github.io/ogc-iot-api srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for a SensorThings API
23 ESRI:ArcIMS urn:x-esri:serviceType:ArcIMS ESRI ArcIMS Service srv:serviceType;gmd:protocol;usgin:overlayAPI Esri Inc. service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an ArcIMS endpoint. ArcIMS requests are tunneled via HTTP Get URL's
24 ESRI:ArcGIS urn:x-esri:serviceType:ArcGIS ESRI ArcGIS Service srv:serviceType;gmd:protocol;usgin:overlayAPI Esri Inc. service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an ESRI Map service endpoint. ESRI REST requests are tunneled via HTTP Get URL's
25 ESRI:MPK http://esriurl.com/mpk.xml ArcGIS Map Package http://esriurl.com/mpk.xml gmd:MD_Format/gmd:name;gmd:applicationProfile Esri Inc. data @mhogeweg Example URI for ArcGIS Map Package. Mpk is a file format. A map package contains a map document (.mxd) and the data referenced by the layers it contains, packaged into one convenient, portable file.
26 OPeNDAP:OPeNDAP OPeNDAP root URL http://docs.opendap.org/index.php/UserGuideOPeNDAPMessages srv:serviceType;gmd:protocol;usgin:overlayAPI service @tomkralidis Link is the root URL for an OpenDAP endpoint. An OPeNDAP server replies to queries for data and other services in the form of specially formed URLs that start with a root URL, and use a suffix on the root URL and a constraint expression to indicate which service is requested and what the parameters are. Example suffixes are dods, das, dds, nc. OpenDAP defines a syntax for constraint expressions as well. urn:x-esri:specification:ServiceType:OPeNDAP; urn:x-esri:specification:ServiceType:odp:url
27 OPeNDAP:Hyrax OPeNDAP Hyrax server http://docs.opendap.org/index.php/Hyrax srv:serviceType;gmd:protocol;usgin:overlayAPI service @amilan17 Link is the root URL for an This is the OPeNDAP 4 Data Server, also known as Hyrax. Hyrax is a data server that implements the DAP2 and DAP4 protocols, works with a number of different data formats and supports a wide variety of customization options from tailoring the look of the server's web pages to complex server-side processing operations.
28 UNIDATA:NCSS NetCDF Subset Service https://www.unidata.ucar.edu/software/thredds/current/tds/interfaceSpec/NetcdfSubsetService.html gmd:protocol; usgin:overlayAPI service @tomkralidis Link is the root URL for a THREDDS datasets. The NetCDF Subset Service enables subsetting CDM scientific datasets using earth coordinates, such as lat/lon bounding boxes and date ranges; requests are made via HTTP GET with key-value pairs (KVP) for parameters encoded in HTTP URIs. The resources identified are THREDDS datasets. The resource URIs have a root host name and path, typically something like http://servername:8080/thredds/ncss/, followed by a path that identifies a particular dataset {path/dataset}. A subset of the dataset is considered a view of a resource, specified by query parameters following the character '?' after the dataset path: http://servername:8080/thredds/ncss/{path/dataset}?{subset}. An 'accept' parameter may be used to specify the desired resource representation.
29 UNIDATA:CDM Common Data Model Remote Web Service https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html srv:serviceType;gmd:protocol;usgin:overlayAPI Unidata service @tomkralidis Example
30 UNIDATA:CdmRemote Common Data Model index subsetting https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html gmd:protocol; usgin:overlayAPI Unidata service @smrazgs CDM Remote provides remote access to UNIDATA Common Data Model (CDM) datasets, using ncstream as the on-the-wire protocol. Client requests are of the form endpoint?query, and the specification defines a vocabulary of valid query parameters. There are two levels of service: 1) CdmRemote provides index subsetting on remote CDM datasets; 2) CdmrFeature provides coordinate subsetting on remote CDM Feature Datasets
31 UNIDATA:CdmrFeature Common Data Model coordinate subsetting https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/stream/CdmRemote.html gmd:protocol; usgin:overlayAPI Unidata @smrazgs Link is endpoint URL that provides coordinate subsetting on UNIDATA Common Data Model (CDM) datasets, using ncstream as the on-the-wire protocol. Client requests are of the form endpoint?query, and the specification defines a vocabulary of valid query parameters.
32 UNIDATA:THREDDS http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0 THREDDS Catalog http://www.unidata.ucar.edu/software/thredds/current/tds/catalog/InvCatalogSpec.html srv:serviceType;gmd:protocol;usgin:overlayAPI Unidata service @kwilcox Link is a THREDDS Catalog URL that provides the XML for traversing programmatically. Can be used for datasets and collections of datasets.
33 OGC:GML http://www.opengis.net/gml OGC Geography Markup Language gmd:MD_Format/gmd:name;gmd:applicationProfile data @tomkralidis Example
34 WWW:LINK http://www.w3.org/TR/xlink/ Web Address (URL) dct:references/@scheme information @tomkralidis @smrazgs Indicates that XLINK properties are encoded as key-value pairs in content of a dct:references element to provide a machine actionable link.
35 WWW:WSDL http://www.w3.org/TR/wsdl Web Service Description Language XML document describing service operation http://www.w3.org/TR/wsdl gmd:applicationProfile W3C @smrazgs
36 WWW:SPARQL:1.1 http://www.w3.org/TR/sparql11-protocol SPARQL protocol for HTTP http://www.w3.org/TR/rdf-sparql-query srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten SPARQL Protocol specifies a means for conveying SPARQL queries and updates to a SPARQL processing service and returning the results via HTTP to the entity that requested them
37 OpenSearch1.1 http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax OpenSearch template http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax usgin:template;gmd:applicationProfile OpenSearch.org @smrazgs use to indicate link is a template conforming to the OpenSearch specification
38 OpenSearch1.1:Description http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document OpenSearch description document http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document gmd:applicationProfile OpenSearch.org @smrazgs indicates a link to get an openSearch description document
39 information link provides information about resource gmd:function ISO TC211 @smrazgs function of link it to http:GET information about resource
40 template http://tools.ietf.org/html/rfc6570 link provides template to access resource http://tools.ietf.org/html/rfc6570 gmd:function USGIN @smrazgs Link text is a URI template; applicationProfile attribute value associated with the link should indicate the specification for the template scheme (e.g. OpenSearch1.1).
41 download link will get resource gmd:function ISO TC211 @smrazgs function of link it to http:GET a representation of the resource; the link type attribute value(s) should indicate the MIME types of available representations
42 service link is service endpoint gmd:function ISO TC211 @smrazgs Link value is the URL of a service endpoint; the link protocol and applicationProfile (and possibly other link properties like overlayAPI, depending on the link attributes profile in use) attribute values should identify the service protocol specification
43 order link provides form to obtain resource gmd:function ISO TC211 @smrazgs link value is URL of web application requiring user interaction to order/request access to the resource
44 search link provides form for searching resource gmd:function ISO TC211 @smrazgs link value is URL of web application requiring user interaction to search/browse/subset the resource.
45 esip:CollectionCast http://commons.esipfed.org/ns/discovery/1.2/collectionCast# ESIP collection cast gmd:applicationProfile ESIP @smrazgs
46 tilejson:2.0.0 tile mill map service description https://github.com/mapbox/tilejson-spec gmd:applicationProfile MapBox @smrazgs link is description of a TileMill map service endpoint. Link type would be application/json; function would be information.
47 iris:fdsnws-event http://service.iris.edu/fdsnws/event/1/ IRIS Seismic event service http://service.iris.edu/fdsnws/event/1 gmd:applicationProfile;usgin:overlayAPI IRIS @smrazgs Link returns event (earthquake) information from the catalogs submitted to the IRIS DMC
48 QuakeML1.2 http://quakeml.org /xmlns /quakeml/1.2 Earthquake markup language https://quake.ethz.ch/quakeml gmd:MD_Format/gmd:name;gmd:applicationProfile quakeml@sed.ethz.ch @smrazgs XML markup language for earthquake hypocenter data
49 file a file http://docs.ckan.org/en/ckan-1.8/domain-model-resource.html gmd:function OKFN @smrazgs CKAN metadata vocabulary for populating the type attribute on a CKAN resource; indicates that an http GET of this url should yield a bitstream
50 ISO 19115:2003/19139 ISO 19115 metadata in ISO19139 encoding gmd:metadataStandardName GeoNetwork @smrazgs This is the CharacterString value used by Geonetwork OpenSource to identify ISO metadata record instances; apparently have to assume that its using the 2006 corrigendum with no specific profile conventions.
51 ISO-USGIN USGIN-profile ISO 19115 metadata http://repository.usgin.org/uri_gin/usgin/dlio/337 gmd:metadataStandardName USGIN @smrazgs This is the CharacterString Value mandated by the USGIN profile of ISO19115/19139 for instance documents to self-identify.
52 http https://www.ietf.org/rfc/rfc2616 Hypertext transfer Protocol, v1.1 https://www.ietf.org/rfc/rfc2616.txt gmd:protocol IETF @smrazgs Use to indicate gmd:CI_OnlineResource URLs that are simple http links to a target resource representation for download; redundant as the URL prefix 'http:' conveys the same information.
53 https https://tools.ietf.org/html/rfc2818 HTTP over TLS https://www.ietf.org/rfc/rfc2818.txt gmd:protocol IETF @amilan17 Use to indicate gmd:CI_OnlineResource URLs that are simple https links to a target resource representation for download; redundant as the URL prefix 'https:' conveys the same information.
54 ftp https://tools.ietf.org/html/rfc959 FILE TRANSFER PROTOCOL (FTP) https://www.ietf.org/rfc/rfc959.txt gmd:protocol IETF @amilan17 Use to indicate gmd:CI_OnlineResource URLs that are simple ftp links to a target resource representation for download; redundant as the URL prefix 'ftp:' conveys the same information.
55 IETF:GeoJSON http://geojson.org GeoJSON https://datatracker.ietf.org/doc/draft-butler-geojson gmd:MD_Format/gmd:name;gmd:applicationProfile data @pvgenuchten GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON)
56 GIT http://git-scm.com/ GIT http://git-scm.com/book/commands srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for a GIT repository
57 OKFN:datapackage http://data.okfn.org/doc/data-package OKFN Data Package http://dataprotocols.org/data-packages gmd:MD_Format/gmd:name;gmd:applicationProfile data @pvgenuchten A Data Package is a simple way of packaging up data
58 boundless:geogig http://geogig.org Boundless GeoGig http://geogig.org/docs/interaction/web-api.html srv:serviceType;gmd:protocol;usgin:overlayAPI Boundless service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for a GeoGig REST API
59 OASIS:OData:4.0 http://docs.oasis-open.org/odata/odata/v4.0 OData v4.0 http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for an OData JSON endpoint
60 maxogden:dat http://dat-data.com dat REST API https://github.com/maxogden/dat/blob/master/docs/rest-api.md srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for a dat REST API
61 geoserver:rest http://docs.geoserver.org/latest/en/user/rest GeoServer REST configuration API http://docs.geoserver.org/latest/en/user/rest srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for a Geoserver rest API to configure featuretypes in Geoserver (and mapserver) remotely
62 google:protocol-buffers https://developers.google.com/protocol-buffers Google Protocol Buffers https://developers.google.com/protocol-buffers gmd:MD_Format/gmd:name;gmd:applicationProfile Google data @pvgenuchten Googles mechanism for serializing structured data
63 google:fusion-tables http://google.com/fusiontables Google Fusion Tables https://developers.google.com/fusiontables gmd:MD_Format/gmd:name;gmd:applicationProfile Google data @pvgenuchten Google mechanism for interating with online data tables
64 NOAA:LAS http://ferret.pmel.noaa.gov/LAS Live Access Server http://ferret.pmel.noaa.gov/LAS/documentation/developer-documentation/the-xml-messages-used-by-las srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is a LAS endpoint
65 OSM http://wiki.openstreetmap.org/wiki/API Open Street Map API http://wiki.openstreetmap.org/wiki/API srv:serviceType;gmd:protocol;usgin:overlayAPI service @pvgenuchten gmd:protocol value that indicates CI_OnlineResource URL is for a OSM APIfor fetching and saving raw geodata from/to an OpenStreetMap database
66 ERDDAP:griddap http://coastwatch.pfeg.noaa.gov/erddap/griddap/documentation.html ERDDAP Data Service for Gridded Datasets http://coastwatch.pfeg.noaa.gov/erddap/griddap/documentation.html srv:serviceType;gmd:protocol;usgin:overlayAPI @BobSimons service @BobSimons griddap lets you request a data subset, graph, or map from a gridded dataset (for example, sea surface temperature data from a satellite), via a specially formed URL. griddap uses the OPeNDAP (external link) Data Access Protocol (DAP) (external link) and its projection constraints (external link). Link is the root URL for an ERDDAP griddap service endpoint. The service responds to OPeNDAP requests and related ERDDAP-specific requests to a gridded dataset. A request starts with this root URL, adds a file type extension, and sometimes a constraint expression to specify a subset of data. Example file type extensions which don't require a constraint are .das, .dds, .html, and .graph. Example file type extensions which do require a constraint are .dods, .nc, .mat, .json, and .htmlTable. Full documentation for ERDDAP API at http://coastwatch.pfeg.noaa.gov/erddap/rest.html
67 ERDDAP:tabledap http://coastwatch.pfeg.noaa.gov/erddap/tabledap/documentation.html ERDDAP Data Service for Tabular Datasets http://coastwatch.pfeg.noaa.gov/erddap/tabledap/documentation.html srv:serviceType;gmd:protocol;usgin:overlayAPI @BobSimons service @BobSimons Tabledap lets you request a data subset, a graph, or a map from a tabular dataset (for example, buoy data), via a specially formed URL. tabledap uses the OPeNDAP (external link) Data Access Protocol (DAP) (external link) and its selection constraints (external link). Link is the root URL for an ERDDAP tabledap service endpoint. The service responds to OPeNDAP requests and related ERDDAP-specific requests to a tabular (sequence) dataset. A request starts with this root URL, adds a file type extension, and sometimes a constraint expression to specify a subset of data. Example file type extensions which don't require a constraint are .das, .dds, .html, and .graph. Example file type extensions which do require a constraint are .dods, .nc, .mat, .json, and .htmlTable. Full documentation for ERDDAP API at http://coastwatch.pfeg.noaa.gov/erddap/rest.html
68 OASIS:AMQP https://amqp.org Advanced Message Queuing Protocol https://amqp.org gmd:protocol service @tomkralidis gmd:protocol value that indicates CI_OnlineResource URL is for an AMQP broker

View File

@ -0,0 +1,250 @@
name,alpha-2,alpha-3,country-code,iso_3166-2,region,sub-region,region-code,sub-region-code
Afghanistan,AF,AFG,004,ISO 3166-2:AF,Asia,Southern Asia,142,034
Åland Islands,AX,ALA,248,ISO 3166-2:AX,Europe,Northern Europe,150,154
Albania,AL,ALB,008,ISO 3166-2:AL,Europe,Southern Europe,150,039
Algeria,DZ,DZA,012,ISO 3166-2:DZ,Africa,Northern Africa,002,015
American Samoa,AS,ASM,016,ISO 3166-2:AS,Oceania,Polynesia,009,061
Andorra,AD,AND,020,ISO 3166-2:AD,Europe,Southern Europe,150,039
Angola,AO,AGO,024,ISO 3166-2:AO,Africa,Middle Africa,002,017
Anguilla,AI,AIA,660,ISO 3166-2:AI,Americas,Caribbean,019,029
Antarctica,AQ,ATA,010,ISO 3166-2:AQ,,,,
Antigua and Barbuda,AG,ATG,028,ISO 3166-2:AG,Americas,Caribbean,019,029
Argentina,AR,ARG,032,ISO 3166-2:AR,Americas,South America,019,005
Armenia,AM,ARM,051,ISO 3166-2:AM,Asia,Western Asia,142,145
Aruba,AW,ABW,533,ISO 3166-2:AW,Americas,Caribbean,019,029
Australia,AU,AUS,036,ISO 3166-2:AU,Oceania,Australia and New Zealand,009,053
Austria,AT,AUT,040,ISO 3166-2:AT,Europe,Western Europe,150,155
Azerbaijan,AZ,AZE,031,ISO 3166-2:AZ,Asia,Western Asia,142,145
Bahamas,BS,BHS,044,ISO 3166-2:BS,Americas,Caribbean,019,029
Bahrain,BH,BHR,048,ISO 3166-2:BH,Asia,Western Asia,142,145
Bangladesh,BD,BGD,050,ISO 3166-2:BD,Asia,Southern Asia,142,034
Barbados,BB,BRB,052,ISO 3166-2:BB,Americas,Caribbean,019,029
Belarus,BY,BLR,112,ISO 3166-2:BY,Europe,Eastern Europe,150,151
Belgium,BE,BEL,056,ISO 3166-2:BE,Europe,Western Europe,150,155
Belize,BZ,BLZ,084,ISO 3166-2:BZ,Americas,Central America,019,013
Benin,BJ,BEN,204,ISO 3166-2:BJ,Africa,Western Africa,002,011
Bermuda,BM,BMU,060,ISO 3166-2:BM,Americas,Northern America,019,021
Bhutan,BT,BTN,064,ISO 3166-2:BT,Asia,Southern Asia,142,034
Bolivia (Plurinational State of),BO,BOL,068,ISO 3166-2:BO,Americas,South America,019,005
"Bonaire, Sint Eustatius and Saba",BQ,BES,535,ISO 3166-2:BQ,Americas,Caribbean,019,029
Bosnia and Herzegovina,BA,BIH,070,ISO 3166-2:BA,Europe,Southern Europe,150,039
Botswana,BW,BWA,072,ISO 3166-2:BW,Africa,Southern Africa,002,018
Bouvet Island,BV,BVT,074,ISO 3166-2:BV,,,,
Brazil,BR,BRA,076,ISO 3166-2:BR,Americas,South America,019,005
British Indian Ocean Territory,IO,IOT,086,ISO 3166-2:IO,,,,
Brunei Darussalam,BN,BRN,096,ISO 3166-2:BN,Asia,South-Eastern Asia,142,035
Bulgaria,BG,BGR,100,ISO 3166-2:BG,Europe,Eastern Europe,150,151
Burkina Faso,BF,BFA,854,ISO 3166-2:BF,Africa,Western Africa,002,011
Burundi,BI,BDI,108,ISO 3166-2:BI,Africa,Eastern Africa,002,014
Cambodia,KH,KHM,116,ISO 3166-2:KH,Asia,South-Eastern Asia,142,035
Cameroon,CM,CMR,120,ISO 3166-2:CM,Africa,Middle Africa,002,017
Canada,CA,CAN,124,ISO 3166-2:CA,Americas,Northern America,019,021
Cabo Verde,CV,CPV,132,ISO 3166-2:CV,Africa,Western Africa,002,011
Cayman Islands,KY,CYM,136,ISO 3166-2:KY,Americas,Caribbean,019,029
Central African Republic,CF,CAF,140,ISO 3166-2:CF,Africa,Middle Africa,002,017
Chad,TD,TCD,148,ISO 3166-2:TD,Africa,Middle Africa,002,017
Chile,CL,CHL,152,ISO 3166-2:CL,Americas,South America,019,005
China,CN,CHN,156,ISO 3166-2:CN,Asia,Eastern Asia,142,030
Christmas Island,CX,CXR,162,ISO 3166-2:CX,,,,
Cocos (Keeling) Islands,CC,CCK,166,ISO 3166-2:CC,,,,
Colombia,CO,COL,170,ISO 3166-2:CO,Americas,South America,019,005
Comoros,KM,COM,174,ISO 3166-2:KM,Africa,Eastern Africa,002,014
Congo,CG,COG,178,ISO 3166-2:CG,Africa,Middle Africa,002,017
Congo (Democratic Republic of the),CD,COD,180,ISO 3166-2:CD,Africa,Middle Africa,002,017
Cook Islands,CK,COK,184,ISO 3166-2:CK,Oceania,Polynesia,009,061
Costa Rica,CR,CRI,188,ISO 3166-2:CR,Americas,Central America,019,013
Côte d'Ivoire,CI,CIV,384,ISO 3166-2:CI,Africa,Western Africa,002,011
Croatia,HR,HRV,191,ISO 3166-2:HR,Europe,Southern Europe,150,039
Cuba,CU,CUB,192,ISO 3166-2:CU,Americas,Caribbean,019,029
Curaçao,CW,CUW,531,ISO 3166-2:CW,Americas,Caribbean,019,029
Cyprus,CY,CYP,196,ISO 3166-2:CY,Asia,Western Asia,142,145
Czech Republic,CZ,CZE,203,ISO 3166-2:CZ,Europe,Eastern Europe,150,151
Denmark,DK,DNK,208,ISO 3166-2:DK,Europe,Northern Europe,150,154
Djibouti,DJ,DJI,262,ISO 3166-2:DJ,Africa,Eastern Africa,002,014
Dominica,DM,DMA,212,ISO 3166-2:DM,Americas,Caribbean,019,029
Dominican Republic,DO,DOM,214,ISO 3166-2:DO,Americas,Caribbean,019,029
Ecuador,EC,ECU,218,ISO 3166-2:EC,Americas,South America,019,005
Egypt,EG,EGY,818,ISO 3166-2:EG,Africa,Northern Africa,002,015
El Salvador,SV,SLV,222,ISO 3166-2:SV,Americas,Central America,019,013
Equatorial Guinea,GQ,GNQ,226,ISO 3166-2:GQ,Africa,Middle Africa,002,017
Eritrea,ER,ERI,232,ISO 3166-2:ER,Africa,Eastern Africa,002,014
Estonia,EE,EST,233,ISO 3166-2:EE,Europe,Northern Europe,150,154
Ethiopia,ET,ETH,231,ISO 3166-2:ET,Africa,Eastern Africa,002,014
Falkland Islands (Malvinas),FK,FLK,238,ISO 3166-2:FK,Americas,South America,019,005
Faroe Islands,FO,FRO,234,ISO 3166-2:FO,Europe,Northern Europe,150,154
Fiji,FJ,FJI,242,ISO 3166-2:FJ,Oceania,Melanesia,009,054
Finland,FI,FIN,246,ISO 3166-2:FI,Europe,Northern Europe,150,154
France,FR,FRA,250,ISO 3166-2:FR,Europe,Western Europe,150,155
French Guiana,GF,GUF,254,ISO 3166-2:GF,Americas,South America,019,005
French Polynesia,PF,PYF,258,ISO 3166-2:PF,Oceania,Polynesia,009,061
French Southern Territories,TF,ATF,260,ISO 3166-2:TF,,,,
Gabon,GA,GAB,266,ISO 3166-2:GA,Africa,Middle Africa,002,017
Gambia,GM,GMB,270,ISO 3166-2:GM,Africa,Western Africa,002,011
Georgia,GE,GEO,268,ISO 3166-2:GE,Asia,Western Asia,142,145
Germany,DE,DEU,276,ISO 3166-2:DE,Europe,Western Europe,150,155
Ghana,GH,GHA,288,ISO 3166-2:GH,Africa,Western Africa,002,011
Gibraltar,GI,GIB,292,ISO 3166-2:GI,Europe,Southern Europe,150,039
Greece,GR,GRC,300,ISO 3166-2:GR,Europe,Southern Europe,150,039
Greenland,GL,GRL,304,ISO 3166-2:GL,Americas,Northern America,019,021
Grenada,GD,GRD,308,ISO 3166-2:GD,Americas,Caribbean,019,029
Guadeloupe,GP,GLP,312,ISO 3166-2:GP,Americas,Caribbean,019,029
Guam,GU,GUM,316,ISO 3166-2:GU,Oceania,Micronesia,009,057
Guatemala,GT,GTM,320,ISO 3166-2:GT,Americas,Central America,019,013
Guernsey,GG,GGY,831,ISO 3166-2:GG,Europe,Northern Europe,150,154
Guinea,GN,GIN,324,ISO 3166-2:GN,Africa,Western Africa,002,011
Guinea-Bissau,GW,GNB,624,ISO 3166-2:GW,Africa,Western Africa,002,011
Guyana,GY,GUY,328,ISO 3166-2:GY,Americas,South America,019,005
Haiti,HT,HTI,332,ISO 3166-2:HT,Americas,Caribbean,019,029
Heard Island and McDonald Islands,HM,HMD,334,ISO 3166-2:HM,,,,
Holy See,VA,VAT,336,ISO 3166-2:VA,Europe,Southern Europe,150,039
Honduras,HN,HND,340,ISO 3166-2:HN,Americas,Central America,019,013
Hong Kong,HK,HKG,344,ISO 3166-2:HK,Asia,Eastern Asia,142,030
Hungary,HU,HUN,348,ISO 3166-2:HU,Europe,Eastern Europe,150,151
Iceland,IS,ISL,352,ISO 3166-2:IS,Europe,Northern Europe,150,154
India,IN,IND,356,ISO 3166-2:IN,Asia,Southern Asia,142,034
Indonesia,ID,IDN,360,ISO 3166-2:ID,Asia,South-Eastern Asia,142,035
Iran (Islamic Republic of),IR,IRN,364,ISO 3166-2:IR,Asia,Southern Asia,142,034
Iraq,IQ,IRQ,368,ISO 3166-2:IQ,Asia,Western Asia,142,145
Ireland,IE,IRL,372,ISO 3166-2:IE,Europe,Northern Europe,150,154
Isle of Man,IM,IMN,833,ISO 3166-2:IM,Europe,Northern Europe,150,154
Israel,IL,ISR,376,ISO 3166-2:IL,Asia,Western Asia,142,145
Italy,IT,ITA,380,ISO 3166-2:IT,Europe,Southern Europe,150,039
Jamaica,JM,JAM,388,ISO 3166-2:JM,Americas,Caribbean,019,029
Japan,JP,JPN,392,ISO 3166-2:JP,Asia,Eastern Asia,142,030
Jersey,JE,JEY,832,ISO 3166-2:JE,Europe,Northern Europe,150,154
Jordan,JO,JOR,400,ISO 3166-2:JO,Asia,Western Asia,142,145
Kazakhstan,KZ,KAZ,398,ISO 3166-2:KZ,Asia,Central Asia,142,143
Kenya,KE,KEN,404,ISO 3166-2:KE,Africa,Eastern Africa,002,014
Kiribati,KI,KIR,296,ISO 3166-2:KI,Oceania,Micronesia,009,057
Korea (Democratic People's Republic of),KP,PRK,408,ISO 3166-2:KP,Asia,Eastern Asia,142,030
Korea (Republic of),KR,KOR,410,ISO 3166-2:KR,Asia,Eastern Asia,142,030
Kuwait,KW,KWT,414,ISO 3166-2:KW,Asia,Western Asia,142,145
Kyrgyzstan,KG,KGZ,417,ISO 3166-2:KG,Asia,Central Asia,142,143
Lao People's Democratic Republic,LA,LAO,418,ISO 3166-2:LA,Asia,South-Eastern Asia,142,035
Latvia,LV,LVA,428,ISO 3166-2:LV,Europe,Northern Europe,150,154
Lebanon,LB,LBN,422,ISO 3166-2:LB,Asia,Western Asia,142,145
Lesotho,LS,LSO,426,ISO 3166-2:LS,Africa,Southern Africa,002,018
Liberia,LR,LBR,430,ISO 3166-2:LR,Africa,Western Africa,002,011
Libya,LY,LBY,434,ISO 3166-2:LY,Africa,Northern Africa,002,015
Liechtenstein,LI,LIE,438,ISO 3166-2:LI,Europe,Western Europe,150,155
Lithuania,LT,LTU,440,ISO 3166-2:LT,Europe,Northern Europe,150,154
Luxembourg,LU,LUX,442,ISO 3166-2:LU,Europe,Western Europe,150,155
Macao,MO,MAC,446,ISO 3166-2:MO,Asia,Eastern Asia,142,030
Macedonia (the former Yugoslav Republic of),MK,MKD,807,ISO 3166-2:MK,Europe,Southern Europe,150,039
Madagascar,MG,MDG,450,ISO 3166-2:MG,Africa,Eastern Africa,002,014
Malawi,MW,MWI,454,ISO 3166-2:MW,Africa,Eastern Africa,002,014
Malaysia,MY,MYS,458,ISO 3166-2:MY,Asia,South-Eastern Asia,142,035
Maldives,MV,MDV,462,ISO 3166-2:MV,Asia,Southern Asia,142,034
Mali,ML,MLI,466,ISO 3166-2:ML,Africa,Western Africa,002,011
Malta,MT,MLT,470,ISO 3166-2:MT,Europe,Southern Europe,150,039
Marshall Islands,MH,MHL,584,ISO 3166-2:MH,Oceania,Micronesia,009,057
Martinique,MQ,MTQ,474,ISO 3166-2:MQ,Americas,Caribbean,019,029
Mauritania,MR,MRT,478,ISO 3166-2:MR,Africa,Western Africa,002,011
Mauritius,MU,MUS,480,ISO 3166-2:MU,Africa,Eastern Africa,002,014
Mayotte,YT,MYT,175,ISO 3166-2:YT,Africa,Eastern Africa,002,014
Mexico,MX,MEX,484,ISO 3166-2:MX,Americas,Central America,019,013
Micronesia (Federated States of),FM,FSM,583,ISO 3166-2:FM,Oceania,Micronesia,009,057
Moldova (Republic of),MD,MDA,498,ISO 3166-2:MD,Europe,Eastern Europe,150,151
Monaco,MC,MCO,492,ISO 3166-2:MC,Europe,Western Europe,150,155
Mongolia,MN,MNG,496,ISO 3166-2:MN,Asia,Eastern Asia,142,030
Montenegro,ME,MNE,499,ISO 3166-2:ME,Europe,Southern Europe,150,039
Montserrat,MS,MSR,500,ISO 3166-2:MS,Americas,Caribbean,019,029
Morocco,MA,MAR,504,ISO 3166-2:MA,Africa,Northern Africa,002,015
Mozambique,MZ,MOZ,508,ISO 3166-2:MZ,Africa,Eastern Africa,002,014
Myanmar,MM,MMR,104,ISO 3166-2:MM,Asia,South-Eastern Asia,142,035
Namibia,NA,NAM,516,ISO 3166-2:NA,Africa,Southern Africa,002,018
Nauru,NR,NRU,520,ISO 3166-2:NR,Oceania,Micronesia,009,057
Nepal,NP,NPL,524,ISO 3166-2:NP,Asia,Southern Asia,142,034
Netherlands,NL,NLD,528,ISO 3166-2:NL,Europe,Western Europe,150,155
New Caledonia,NC,NCL,540,ISO 3166-2:NC,Oceania,Melanesia,009,054
New Zealand,NZ,NZL,554,ISO 3166-2:NZ,Oceania,Australia and New Zealand,009,053
Nicaragua,NI,NIC,558,ISO 3166-2:NI,Americas,Central America,019,013
Niger,NE,NER,562,ISO 3166-2:NE,Africa,Western Africa,002,011
Nigeria,NG,NGA,566,ISO 3166-2:NG,Africa,Western Africa,002,011
Niue,NU,NIU,570,ISO 3166-2:NU,Oceania,Polynesia,009,061
Norfolk Island,NF,NFK,574,ISO 3166-2:NF,Oceania,Australia and New Zealand,009,053
Northern Mariana Islands,MP,MNP,580,ISO 3166-2:MP,Oceania,Micronesia,009,057
Norway,NO,NOR,578,ISO 3166-2:NO,Europe,Northern Europe,150,154
Oman,OM,OMN,512,ISO 3166-2:OM,Asia,Western Asia,142,145
Pakistan,PK,PAK,586,ISO 3166-2:PK,Asia,Southern Asia,142,034
Palau,PW,PLW,585,ISO 3166-2:PW,Oceania,Micronesia,009,057
"Palestine, State of",PS,PSE,275,ISO 3166-2:PS,Asia,Western Asia,142,145
Panama,PA,PAN,591,ISO 3166-2:PA,Americas,Central America,019,013
Papua New Guinea,PG,PNG,598,ISO 3166-2:PG,Oceania,Melanesia,009,054
Paraguay,PY,PRY,600,ISO 3166-2:PY,Americas,South America,019,005
Peru,PE,PER,604,ISO 3166-2:PE,Americas,South America,019,005
Philippines,PH,PHL,608,ISO 3166-2:PH,Asia,South-Eastern Asia,142,035
Pitcairn,PN,PCN,612,ISO 3166-2:PN,Oceania,Polynesia,009,061
Poland,PL,POL,616,ISO 3166-2:PL,Europe,Eastern Europe,150,151
Portugal,PT,PRT,620,ISO 3166-2:PT,Europe,Southern Europe,150,039
Puerto Rico,PR,PRI,630,ISO 3166-2:PR,Americas,Caribbean,019,029
Qatar,QA,QAT,634,ISO 3166-2:QA,Asia,Western Asia,142,145
Réunion,RE,REU,638,ISO 3166-2:RE,Africa,Eastern Africa,002,014
Romania,RO,ROU,642,ISO 3166-2:RO,Europe,Eastern Europe,150,151
Russian Federation,RU,RUS,643,ISO 3166-2:RU,Europe,Eastern Europe,150,151
Rwanda,RW,RWA,646,ISO 3166-2:RW,Africa,Eastern Africa,002,014
Saint Barthélemy,BL,BLM,652,ISO 3166-2:BL,Americas,Caribbean,019,029
"Saint Helena, Ascension and Tristan da Cunha",SH,SHN,654,ISO 3166-2:SH,Africa,Western Africa,002,011
Saint Kitts and Nevis,KN,KNA,659,ISO 3166-2:KN,Americas,Caribbean,019,029
Saint Lucia,LC,LCA,662,ISO 3166-2:LC,Americas,Caribbean,019,029
Saint Martin (French part),MF,MAF,663,ISO 3166-2:MF,Americas,Caribbean,019,029
Saint Pierre and Miquelon,PM,SPM,666,ISO 3166-2:PM,Americas,Northern America,019,021
Saint Vincent and the Grenadines,VC,VCT,670,ISO 3166-2:VC,Americas,Caribbean,019,029
Samoa,WS,WSM,882,ISO 3166-2:WS,Oceania,Polynesia,009,061
San Marino,SM,SMR,674,ISO 3166-2:SM,Europe,Southern Europe,150,039
Sao Tome and Principe,ST,STP,678,ISO 3166-2:ST,Africa,Middle Africa,002,017
Saudi Arabia,SA,SAU,682,ISO 3166-2:SA,Asia,Western Asia,142,145
Senegal,SN,SEN,686,ISO 3166-2:SN,Africa,Western Africa,002,011
Serbia,RS,SRB,688,ISO 3166-2:RS,Europe,Southern Europe,150,039
Seychelles,SC,SYC,690,ISO 3166-2:SC,Africa,Eastern Africa,002,014
Sierra Leone,SL,SLE,694,ISO 3166-2:SL,Africa,Western Africa,002,011
Singapore,SG,SGP,702,ISO 3166-2:SG,Asia,South-Eastern Asia,142,035
Sint Maarten (Dutch part),SX,SXM,534,ISO 3166-2:SX,Americas,Caribbean,019,029
Slovakia,SK,SVK,703,ISO 3166-2:SK,Europe,Eastern Europe,150,151
Slovenia,SI,SVN,705,ISO 3166-2:SI,Europe,Southern Europe,150,039
Solomon Islands,SB,SLB,090,ISO 3166-2:SB,Oceania,Melanesia,009,054
Somalia,SO,SOM,706,ISO 3166-2:SO,Africa,Eastern Africa,002,014
South Africa,ZA,ZAF,710,ISO 3166-2:ZA,Africa,Southern Africa,002,018
South Georgia and the South Sandwich Islands,GS,SGS,239,ISO 3166-2:GS,,,,
South Sudan,SS,SSD,728,ISO 3166-2:SS,Africa,Eastern Africa,002,014
Spain,ES,ESP,724,ISO 3166-2:ES,Europe,Southern Europe,150,039
Sri Lanka,LK,LKA,144,ISO 3166-2:LK,Asia,Southern Asia,142,034
Sudan,SD,SDN,729,ISO 3166-2:SD,Africa,Northern Africa,002,015
Suriname,SR,SUR,740,ISO 3166-2:SR,Americas,South America,019,005
Svalbard and Jan Mayen,SJ,SJM,744,ISO 3166-2:SJ,Europe,Northern Europe,150,154
Swaziland,SZ,SWZ,748,ISO 3166-2:SZ,Africa,Southern Africa,002,018
Sweden,SE,SWE,752,ISO 3166-2:SE,Europe,Northern Europe,150,154
Switzerland,CH,CHE,756,ISO 3166-2:CH,Europe,Western Europe,150,155
Syrian Arab Republic,SY,SYR,760,ISO 3166-2:SY,Asia,Western Asia,142,145
"Taiwan, Province of China",TW,TWN,158,ISO 3166-2:TW,Asia,Eastern Asia,142,030
Tajikistan,TJ,TJK,762,ISO 3166-2:TJ,Asia,Central Asia,142,143
"Tanzania, United Republic of",TZ,TZA,834,ISO 3166-2:TZ,Africa,Eastern Africa,002,014
Thailand,TH,THA,764,ISO 3166-2:TH,Asia,South-Eastern Asia,142,035
Timor-Leste,TL,TLS,626,ISO 3166-2:TL,Asia,South-Eastern Asia,142,035
Togo,TG,TGO,768,ISO 3166-2:TG,Africa,Western Africa,002,011
Tokelau,TK,TKL,772,ISO 3166-2:TK,Oceania,Polynesia,009,061
Tonga,TO,TON,776,ISO 3166-2:TO,Oceania,Polynesia,009,061
Trinidad and Tobago,TT,TTO,780,ISO 3166-2:TT,Americas,Caribbean,019,029
Tunisia,TN,TUN,788,ISO 3166-2:TN,Africa,Northern Africa,002,015
Turkey,TR,TUR,792,ISO 3166-2:TR,Asia,Western Asia,142,145
Turkmenistan,TM,TKM,795,ISO 3166-2:TM,Asia,Central Asia,142,143
Turks and Caicos Islands,TC,TCA,796,ISO 3166-2:TC,Americas,Caribbean,019,029
Tuvalu,TV,TUV,798,ISO 3166-2:TV,Oceania,Polynesia,009,061
Uganda,UG,UGA,800,ISO 3166-2:UG,Africa,Eastern Africa,002,014
Ukraine,UA,UKR,804,ISO 3166-2:UA,Europe,Eastern Europe,150,151
United Arab Emirates,AE,ARE,784,ISO 3166-2:AE,Asia,Western Asia,142,145
United Kingdom of Great Britain and Northern Ireland,GB,GBR,826,ISO 3166-2:GB,Europe,Northern Europe,150,154
United States of America,US,USA,840,ISO 3166-2:US,Americas,Northern America,019,021
United States Minor Outlying Islands,UM,UMI,581,ISO 3166-2:UM,,,,
Uruguay,UY,URY,858,ISO 3166-2:UY,Americas,South America,019,005
Uzbekistan,UZ,UZB,860,ISO 3166-2:UZ,Asia,Central Asia,142,143
Vanuatu,VU,VUT,548,ISO 3166-2:VU,Oceania,Melanesia,009,054
Venezuela (Bolivarian Republic of),VE,VEN,862,ISO 3166-2:VE,Americas,South America,019,005
Viet Nam,VN,VNM,704,ISO 3166-2:VN,Asia,South-Eastern Asia,142,035
Virgin Islands (British),VG,VGB,092,ISO 3166-2:VG,Americas,Caribbean,019,029
Virgin Islands (U.S.),VI,VIR,850,ISO 3166-2:VI,Americas,Caribbean,019,029
Wallis and Futuna,WF,WLF,876,ISO 3166-2:WF,Oceania,Polynesia,009,061
Western Sahara,EH,ESH,732,ISO 3166-2:EH,Africa,Northern Africa,002,015
Yemen,YE,YEM,887,ISO 3166-2:YE,Asia,Western Asia,142,145
Zambia,ZM,ZMB,894,ISO 3166-2:ZM,Africa,Eastern Africa,002,014
Zimbabwe,ZW,ZWE,716,ISO 3166-2:ZW,Africa,Eastern Africa,002,014
1 name alpha-2 alpha-3 country-code iso_3166-2 region sub-region region-code sub-region-code
2 Afghanistan AF AFG 004 ISO 3166-2:AF Asia Southern Asia 142 034
3 Åland Islands AX ALA 248 ISO 3166-2:AX Europe Northern Europe 150 154
4 Albania AL ALB 008 ISO 3166-2:AL Europe Southern Europe 150 039
5 Algeria DZ DZA 012 ISO 3166-2:DZ Africa Northern Africa 002 015
6 American Samoa AS ASM 016 ISO 3166-2:AS Oceania Polynesia 009 061
7 Andorra AD AND 020 ISO 3166-2:AD Europe Southern Europe 150 039
8 Angola AO AGO 024 ISO 3166-2:AO Africa Middle Africa 002 017
9 Anguilla AI AIA 660 ISO 3166-2:AI Americas Caribbean 019 029
10 Antarctica AQ ATA 010 ISO 3166-2:AQ
11 Antigua and Barbuda AG ATG 028 ISO 3166-2:AG Americas Caribbean 019 029
12 Argentina AR ARG 032 ISO 3166-2:AR Americas South America 019 005
13 Armenia AM ARM 051 ISO 3166-2:AM Asia Western Asia 142 145
14 Aruba AW ABW 533 ISO 3166-2:AW Americas Caribbean 019 029
15 Australia AU AUS 036 ISO 3166-2:AU Oceania Australia and New Zealand 009 053
16 Austria AT AUT 040 ISO 3166-2:AT Europe Western Europe 150 155
17 Azerbaijan AZ AZE 031 ISO 3166-2:AZ Asia Western Asia 142 145
18 Bahamas BS BHS 044 ISO 3166-2:BS Americas Caribbean 019 029
19 Bahrain BH BHR 048 ISO 3166-2:BH Asia Western Asia 142 145
20 Bangladesh BD BGD 050 ISO 3166-2:BD Asia Southern Asia 142 034
21 Barbados BB BRB 052 ISO 3166-2:BB Americas Caribbean 019 029
22 Belarus BY BLR 112 ISO 3166-2:BY Europe Eastern Europe 150 151
23 Belgium BE BEL 056 ISO 3166-2:BE Europe Western Europe 150 155
24 Belize BZ BLZ 084 ISO 3166-2:BZ Americas Central America 019 013
25 Benin BJ BEN 204 ISO 3166-2:BJ Africa Western Africa 002 011
26 Bermuda BM BMU 060 ISO 3166-2:BM Americas Northern America 019 021
27 Bhutan BT BTN 064 ISO 3166-2:BT Asia Southern Asia 142 034
28 Bolivia (Plurinational State of) BO BOL 068 ISO 3166-2:BO Americas South America 019 005
29 Bonaire, Sint Eustatius and Saba BQ BES 535 ISO 3166-2:BQ Americas Caribbean 019 029
30 Bosnia and Herzegovina BA BIH 070 ISO 3166-2:BA Europe Southern Europe 150 039
31 Botswana BW BWA 072 ISO 3166-2:BW Africa Southern Africa 002 018
32 Bouvet Island BV BVT 074 ISO 3166-2:BV
33 Brazil BR BRA 076 ISO 3166-2:BR Americas South America 019 005
34 British Indian Ocean Territory IO IOT 086 ISO 3166-2:IO
35 Brunei Darussalam BN BRN 096 ISO 3166-2:BN Asia South-Eastern Asia 142 035
36 Bulgaria BG BGR 100 ISO 3166-2:BG Europe Eastern Europe 150 151
37 Burkina Faso BF BFA 854 ISO 3166-2:BF Africa Western Africa 002 011
38 Burundi BI BDI 108 ISO 3166-2:BI Africa Eastern Africa 002 014
39 Cambodia KH KHM 116 ISO 3166-2:KH Asia South-Eastern Asia 142 035
40 Cameroon CM CMR 120 ISO 3166-2:CM Africa Middle Africa 002 017
41 Canada CA CAN 124 ISO 3166-2:CA Americas Northern America 019 021
42 Cabo Verde CV CPV 132 ISO 3166-2:CV Africa Western Africa 002 011
43 Cayman Islands KY CYM 136 ISO 3166-2:KY Americas Caribbean 019 029
44 Central African Republic CF CAF 140 ISO 3166-2:CF Africa Middle Africa 002 017
45 Chad TD TCD 148 ISO 3166-2:TD Africa Middle Africa 002 017
46 Chile CL CHL 152 ISO 3166-2:CL Americas South America 019 005
47 China CN CHN 156 ISO 3166-2:CN Asia Eastern Asia 142 030
48 Christmas Island CX CXR 162 ISO 3166-2:CX
49 Cocos (Keeling) Islands CC CCK 166 ISO 3166-2:CC
50 Colombia CO COL 170 ISO 3166-2:CO Americas South America 019 005
51 Comoros KM COM 174 ISO 3166-2:KM Africa Eastern Africa 002 014
52 Congo CG COG 178 ISO 3166-2:CG Africa Middle Africa 002 017
53 Congo (Democratic Republic of the) CD COD 180 ISO 3166-2:CD Africa Middle Africa 002 017
54 Cook Islands CK COK 184 ISO 3166-2:CK Oceania Polynesia 009 061
55 Costa Rica CR CRI 188 ISO 3166-2:CR Americas Central America 019 013
56 Côte d'Ivoire CI CIV 384 ISO 3166-2:CI Africa Western Africa 002 011
57 Croatia HR HRV 191 ISO 3166-2:HR Europe Southern Europe 150 039
58 Cuba CU CUB 192 ISO 3166-2:CU Americas Caribbean 019 029
59 Curaçao CW CUW 531 ISO 3166-2:CW Americas Caribbean 019 029
60 Cyprus CY CYP 196 ISO 3166-2:CY Asia Western Asia 142 145
61 Czech Republic CZ CZE 203 ISO 3166-2:CZ Europe Eastern Europe 150 151
62 Denmark DK DNK 208 ISO 3166-2:DK Europe Northern Europe 150 154
63 Djibouti DJ DJI 262 ISO 3166-2:DJ Africa Eastern Africa 002 014
64 Dominica DM DMA 212 ISO 3166-2:DM Americas Caribbean 019 029
65 Dominican Republic DO DOM 214 ISO 3166-2:DO Americas Caribbean 019 029
66 Ecuador EC ECU 218 ISO 3166-2:EC Americas South America 019 005
67 Egypt EG EGY 818 ISO 3166-2:EG Africa Northern Africa 002 015
68 El Salvador SV SLV 222 ISO 3166-2:SV Americas Central America 019 013
69 Equatorial Guinea GQ GNQ 226 ISO 3166-2:GQ Africa Middle Africa 002 017
70 Eritrea ER ERI 232 ISO 3166-2:ER Africa Eastern Africa 002 014
71 Estonia EE EST 233 ISO 3166-2:EE Europe Northern Europe 150 154
72 Ethiopia ET ETH 231 ISO 3166-2:ET Africa Eastern Africa 002 014
73 Falkland Islands (Malvinas) FK FLK 238 ISO 3166-2:FK Americas South America 019 005
74 Faroe Islands FO FRO 234 ISO 3166-2:FO Europe Northern Europe 150 154
75 Fiji FJ FJI 242 ISO 3166-2:FJ Oceania Melanesia 009 054
76 Finland FI FIN 246 ISO 3166-2:FI Europe Northern Europe 150 154
77 France FR FRA 250 ISO 3166-2:FR Europe Western Europe 150 155
78 French Guiana GF GUF 254 ISO 3166-2:GF Americas South America 019 005
79 French Polynesia PF PYF 258 ISO 3166-2:PF Oceania Polynesia 009 061
80 French Southern Territories TF ATF 260 ISO 3166-2:TF
81 Gabon GA GAB 266 ISO 3166-2:GA Africa Middle Africa 002 017
82 Gambia GM GMB 270 ISO 3166-2:GM Africa Western Africa 002 011
83 Georgia GE GEO 268 ISO 3166-2:GE Asia Western Asia 142 145
84 Germany DE DEU 276 ISO 3166-2:DE Europe Western Europe 150 155
85 Ghana GH GHA 288 ISO 3166-2:GH Africa Western Africa 002 011
86 Gibraltar GI GIB 292 ISO 3166-2:GI Europe Southern Europe 150 039
87 Greece GR GRC 300 ISO 3166-2:GR Europe Southern Europe 150 039
88 Greenland GL GRL 304 ISO 3166-2:GL Americas Northern America 019 021
89 Grenada GD GRD 308 ISO 3166-2:GD Americas Caribbean 019 029
90 Guadeloupe GP GLP 312 ISO 3166-2:GP Americas Caribbean 019 029
91 Guam GU GUM 316 ISO 3166-2:GU Oceania Micronesia 009 057
92 Guatemala GT GTM 320 ISO 3166-2:GT Americas Central America 019 013
93 Guernsey GG GGY 831 ISO 3166-2:GG Europe Northern Europe 150 154
94 Guinea GN GIN 324 ISO 3166-2:GN Africa Western Africa 002 011
95 Guinea-Bissau GW GNB 624 ISO 3166-2:GW Africa Western Africa 002 011
96 Guyana GY GUY 328 ISO 3166-2:GY Americas South America 019 005
97 Haiti HT HTI 332 ISO 3166-2:HT Americas Caribbean 019 029
98 Heard Island and McDonald Islands HM HMD 334 ISO 3166-2:HM
99 Holy See VA VAT 336 ISO 3166-2:VA Europe Southern Europe 150 039
100 Honduras HN HND 340 ISO 3166-2:HN Americas Central America 019 013
101 Hong Kong HK HKG 344 ISO 3166-2:HK Asia Eastern Asia 142 030
102 Hungary HU HUN 348 ISO 3166-2:HU Europe Eastern Europe 150 151
103 Iceland IS ISL 352 ISO 3166-2:IS Europe Northern Europe 150 154
104 India IN IND 356 ISO 3166-2:IN Asia Southern Asia 142 034
105 Indonesia ID IDN 360 ISO 3166-2:ID Asia South-Eastern Asia 142 035
106 Iran (Islamic Republic of) IR IRN 364 ISO 3166-2:IR Asia Southern Asia 142 034
107 Iraq IQ IRQ 368 ISO 3166-2:IQ Asia Western Asia 142 145
108 Ireland IE IRL 372 ISO 3166-2:IE Europe Northern Europe 150 154
109 Isle of Man IM IMN 833 ISO 3166-2:IM Europe Northern Europe 150 154
110 Israel IL ISR 376 ISO 3166-2:IL Asia Western Asia 142 145
111 Italy IT ITA 380 ISO 3166-2:IT Europe Southern Europe 150 039
112 Jamaica JM JAM 388 ISO 3166-2:JM Americas Caribbean 019 029
113 Japan JP JPN 392 ISO 3166-2:JP Asia Eastern Asia 142 030
114 Jersey JE JEY 832 ISO 3166-2:JE Europe Northern Europe 150 154
115 Jordan JO JOR 400 ISO 3166-2:JO Asia Western Asia 142 145
116 Kazakhstan KZ KAZ 398 ISO 3166-2:KZ Asia Central Asia 142 143
117 Kenya KE KEN 404 ISO 3166-2:KE Africa Eastern Africa 002 014
118 Kiribati KI KIR 296 ISO 3166-2:KI Oceania Micronesia 009 057
119 Korea (Democratic People's Republic of) KP PRK 408 ISO 3166-2:KP Asia Eastern Asia 142 030
120 Korea (Republic of) KR KOR 410 ISO 3166-2:KR Asia Eastern Asia 142 030
121 Kuwait KW KWT 414 ISO 3166-2:KW Asia Western Asia 142 145
122 Kyrgyzstan KG KGZ 417 ISO 3166-2:KG Asia Central Asia 142 143
123 Lao People's Democratic Republic LA LAO 418 ISO 3166-2:LA Asia South-Eastern Asia 142 035
124 Latvia LV LVA 428 ISO 3166-2:LV Europe Northern Europe 150 154
125 Lebanon LB LBN 422 ISO 3166-2:LB Asia Western Asia 142 145
126 Lesotho LS LSO 426 ISO 3166-2:LS Africa Southern Africa 002 018
127 Liberia LR LBR 430 ISO 3166-2:LR Africa Western Africa 002 011
128 Libya LY LBY 434 ISO 3166-2:LY Africa Northern Africa 002 015
129 Liechtenstein LI LIE 438 ISO 3166-2:LI Europe Western Europe 150 155
130 Lithuania LT LTU 440 ISO 3166-2:LT Europe Northern Europe 150 154
131 Luxembourg LU LUX 442 ISO 3166-2:LU Europe Western Europe 150 155
132 Macao MO MAC 446 ISO 3166-2:MO Asia Eastern Asia 142 030
133 Macedonia (the former Yugoslav Republic of) MK MKD 807 ISO 3166-2:MK Europe Southern Europe 150 039
134 Madagascar MG MDG 450 ISO 3166-2:MG Africa Eastern Africa 002 014
135 Malawi MW MWI 454 ISO 3166-2:MW Africa Eastern Africa 002 014
136 Malaysia MY MYS 458 ISO 3166-2:MY Asia South-Eastern Asia 142 035
137 Maldives MV MDV 462 ISO 3166-2:MV Asia Southern Asia 142 034
138 Mali ML MLI 466 ISO 3166-2:ML Africa Western Africa 002 011
139 Malta MT MLT 470 ISO 3166-2:MT Europe Southern Europe 150 039
140 Marshall Islands MH MHL 584 ISO 3166-2:MH Oceania Micronesia 009 057
141 Martinique MQ MTQ 474 ISO 3166-2:MQ Americas Caribbean 019 029
142 Mauritania MR MRT 478 ISO 3166-2:MR Africa Western Africa 002 011
143 Mauritius MU MUS 480 ISO 3166-2:MU Africa Eastern Africa 002 014
144 Mayotte YT MYT 175 ISO 3166-2:YT Africa Eastern Africa 002 014
145 Mexico MX MEX 484 ISO 3166-2:MX Americas Central America 019 013
146 Micronesia (Federated States of) FM FSM 583 ISO 3166-2:FM Oceania Micronesia 009 057
147 Moldova (Republic of) MD MDA 498 ISO 3166-2:MD Europe Eastern Europe 150 151
148 Monaco MC MCO 492 ISO 3166-2:MC Europe Western Europe 150 155
149 Mongolia MN MNG 496 ISO 3166-2:MN Asia Eastern Asia 142 030
150 Montenegro ME MNE 499 ISO 3166-2:ME Europe Southern Europe 150 039
151 Montserrat MS MSR 500 ISO 3166-2:MS Americas Caribbean 019 029
152 Morocco MA MAR 504 ISO 3166-2:MA Africa Northern Africa 002 015
153 Mozambique MZ MOZ 508 ISO 3166-2:MZ Africa Eastern Africa 002 014
154 Myanmar MM MMR 104 ISO 3166-2:MM Asia South-Eastern Asia 142 035
155 Namibia NA NAM 516 ISO 3166-2:NA Africa Southern Africa 002 018
156 Nauru NR NRU 520 ISO 3166-2:NR Oceania Micronesia 009 057
157 Nepal NP NPL 524 ISO 3166-2:NP Asia Southern Asia 142 034
158 Netherlands NL NLD 528 ISO 3166-2:NL Europe Western Europe 150 155
159 New Caledonia NC NCL 540 ISO 3166-2:NC Oceania Melanesia 009 054
160 New Zealand NZ NZL 554 ISO 3166-2:NZ Oceania Australia and New Zealand 009 053
161 Nicaragua NI NIC 558 ISO 3166-2:NI Americas Central America 019 013
162 Niger NE NER 562 ISO 3166-2:NE Africa Western Africa 002 011
163 Nigeria NG NGA 566 ISO 3166-2:NG Africa Western Africa 002 011
164 Niue NU NIU 570 ISO 3166-2:NU Oceania Polynesia 009 061
165 Norfolk Island NF NFK 574 ISO 3166-2:NF Oceania Australia and New Zealand 009 053
166 Northern Mariana Islands MP MNP 580 ISO 3166-2:MP Oceania Micronesia 009 057
167 Norway NO NOR 578 ISO 3166-2:NO Europe Northern Europe 150 154
168 Oman OM OMN 512 ISO 3166-2:OM Asia Western Asia 142 145
169 Pakistan PK PAK 586 ISO 3166-2:PK Asia Southern Asia 142 034
170 Palau PW PLW 585 ISO 3166-2:PW Oceania Micronesia 009 057
171 Palestine, State of PS PSE 275 ISO 3166-2:PS Asia Western Asia 142 145
172 Panama PA PAN 591 ISO 3166-2:PA Americas Central America 019 013
173 Papua New Guinea PG PNG 598 ISO 3166-2:PG Oceania Melanesia 009 054
174 Paraguay PY PRY 600 ISO 3166-2:PY Americas South America 019 005
175 Peru PE PER 604 ISO 3166-2:PE Americas South America 019 005
176 Philippines PH PHL 608 ISO 3166-2:PH Asia South-Eastern Asia 142 035
177 Pitcairn PN PCN 612 ISO 3166-2:PN Oceania Polynesia 009 061
178 Poland PL POL 616 ISO 3166-2:PL Europe Eastern Europe 150 151
179 Portugal PT PRT 620 ISO 3166-2:PT Europe Southern Europe 150 039
180 Puerto Rico PR PRI 630 ISO 3166-2:PR Americas Caribbean 019 029
181 Qatar QA QAT 634 ISO 3166-2:QA Asia Western Asia 142 145
182 Réunion RE REU 638 ISO 3166-2:RE Africa Eastern Africa 002 014
183 Romania RO ROU 642 ISO 3166-2:RO Europe Eastern Europe 150 151
184 Russian Federation RU RUS 643 ISO 3166-2:RU Europe Eastern Europe 150 151
185 Rwanda RW RWA 646 ISO 3166-2:RW Africa Eastern Africa 002 014
186 Saint Barthélemy BL BLM 652 ISO 3166-2:BL Americas Caribbean 019 029
187 Saint Helena, Ascension and Tristan da Cunha SH SHN 654 ISO 3166-2:SH Africa Western Africa 002 011
188 Saint Kitts and Nevis KN KNA 659 ISO 3166-2:KN Americas Caribbean 019 029
189 Saint Lucia LC LCA 662 ISO 3166-2:LC Americas Caribbean 019 029
190 Saint Martin (French part) MF MAF 663 ISO 3166-2:MF Americas Caribbean 019 029
191 Saint Pierre and Miquelon PM SPM 666 ISO 3166-2:PM Americas Northern America 019 021
192 Saint Vincent and the Grenadines VC VCT 670 ISO 3166-2:VC Americas Caribbean 019 029
193 Samoa WS WSM 882 ISO 3166-2:WS Oceania Polynesia 009 061
194 San Marino SM SMR 674 ISO 3166-2:SM Europe Southern Europe 150 039
195 Sao Tome and Principe ST STP 678 ISO 3166-2:ST Africa Middle Africa 002 017
196 Saudi Arabia SA SAU 682 ISO 3166-2:SA Asia Western Asia 142 145
197 Senegal SN SEN 686 ISO 3166-2:SN Africa Western Africa 002 011
198 Serbia RS SRB 688 ISO 3166-2:RS Europe Southern Europe 150 039
199 Seychelles SC SYC 690 ISO 3166-2:SC Africa Eastern Africa 002 014
200 Sierra Leone SL SLE 694 ISO 3166-2:SL Africa Western Africa 002 011
201 Singapore SG SGP 702 ISO 3166-2:SG Asia South-Eastern Asia 142 035
202 Sint Maarten (Dutch part) SX SXM 534 ISO 3166-2:SX Americas Caribbean 019 029
203 Slovakia SK SVK 703 ISO 3166-2:SK Europe Eastern Europe 150 151
204 Slovenia SI SVN 705 ISO 3166-2:SI Europe Southern Europe 150 039
205 Solomon Islands SB SLB 090 ISO 3166-2:SB Oceania Melanesia 009 054
206 Somalia SO SOM 706 ISO 3166-2:SO Africa Eastern Africa 002 014
207 South Africa ZA ZAF 710 ISO 3166-2:ZA Africa Southern Africa 002 018
208 South Georgia and the South Sandwich Islands GS SGS 239 ISO 3166-2:GS
209 South Sudan SS SSD 728 ISO 3166-2:SS Africa Eastern Africa 002 014
210 Spain ES ESP 724 ISO 3166-2:ES Europe Southern Europe 150 039
211 Sri Lanka LK LKA 144 ISO 3166-2:LK Asia Southern Asia 142 034
212 Sudan SD SDN 729 ISO 3166-2:SD Africa Northern Africa 002 015
213 Suriname SR SUR 740 ISO 3166-2:SR Americas South America 019 005
214 Svalbard and Jan Mayen SJ SJM 744 ISO 3166-2:SJ Europe Northern Europe 150 154
215 Swaziland SZ SWZ 748 ISO 3166-2:SZ Africa Southern Africa 002 018
216 Sweden SE SWE 752 ISO 3166-2:SE Europe Northern Europe 150 154
217 Switzerland CH CHE 756 ISO 3166-2:CH Europe Western Europe 150 155
218 Syrian Arab Republic SY SYR 760 ISO 3166-2:SY Asia Western Asia 142 145
219 Taiwan, Province of China TW TWN 158 ISO 3166-2:TW Asia Eastern Asia 142 030
220 Tajikistan TJ TJK 762 ISO 3166-2:TJ Asia Central Asia 142 143
221 Tanzania, United Republic of TZ TZA 834 ISO 3166-2:TZ Africa Eastern Africa 002 014
222 Thailand TH THA 764 ISO 3166-2:TH Asia South-Eastern Asia 142 035
223 Timor-Leste TL TLS 626 ISO 3166-2:TL Asia South-Eastern Asia 142 035
224 Togo TG TGO 768 ISO 3166-2:TG Africa Western Africa 002 011
225 Tokelau TK TKL 772 ISO 3166-2:TK Oceania Polynesia 009 061
226 Tonga TO TON 776 ISO 3166-2:TO Oceania Polynesia 009 061
227 Trinidad and Tobago TT TTO 780 ISO 3166-2:TT Americas Caribbean 019 029
228 Tunisia TN TUN 788 ISO 3166-2:TN Africa Northern Africa 002 015
229 Turkey TR TUR 792 ISO 3166-2:TR Asia Western Asia 142 145
230 Turkmenistan TM TKM 795 ISO 3166-2:TM Asia Central Asia 142 143
231 Turks and Caicos Islands TC TCA 796 ISO 3166-2:TC Americas Caribbean 019 029
232 Tuvalu TV TUV 798 ISO 3166-2:TV Oceania Polynesia 009 061
233 Uganda UG UGA 800 ISO 3166-2:UG Africa Eastern Africa 002 014
234 Ukraine UA UKR 804 ISO 3166-2:UA Europe Eastern Europe 150 151
235 United Arab Emirates AE ARE 784 ISO 3166-2:AE Asia Western Asia 142 145
236 United Kingdom of Great Britain and Northern Ireland GB GBR 826 ISO 3166-2:GB Europe Northern Europe 150 154
237 United States of America US USA 840 ISO 3166-2:US Americas Northern America 019 021
238 United States Minor Outlying Islands UM UMI 581 ISO 3166-2:UM
239 Uruguay UY URY 858 ISO 3166-2:UY Americas South America 019 005
240 Uzbekistan UZ UZB 860 ISO 3166-2:UZ Asia Central Asia 142 143
241 Vanuatu VU VUT 548 ISO 3166-2:VU Oceania Melanesia 009 054
242 Venezuela (Bolivarian Republic of) VE VEN 862 ISO 3166-2:VE Americas South America 019 005
243 Viet Nam VN VNM 704 ISO 3166-2:VN Asia South-Eastern Asia 142 035
244 Virgin Islands (British) VG VGB 092 ISO 3166-2:VG Americas Caribbean 019 029
245 Virgin Islands (U.S.) VI VIR 850 ISO 3166-2:VI Americas Caribbean 019 029
246 Wallis and Futuna WF WLF 876 ISO 3166-2:WF Oceania Polynesia 009 061
247 Western Sahara EH ESH 732 ISO 3166-2:EH Africa Northern Africa 002 015
248 Yemen YE YEM 887 ISO 3166-2:YE Asia Western Asia 142 145
249 Zambia ZM ZMB 894 ISO 3166-2:ZM Africa Eastern Africa 002 014
250 Zimbabwe ZW ZWE 716 ISO 3166-2:ZW Africa Eastern Africa 002 014

View File

@ -0,0 +1,185 @@
alpha2,English
aa,Afar
ab,Abkhazian
ae,Avestan
af,Afrikaans
ak,Akan
am,Amharic
an,Aragonese
ar,Arabic
as,Assamese
av,Avaric
ay,Aymara
az,Azerbaijani
ba,Bashkir
be,Belarusian
bg,Bulgarian
bh,Bihari languages
bi,Bislama
bm,Bambara
bn,Bengali
bo,Tibetan
br,Breton
bs,Bosnian
ca,Catalan; Valencian
ce,Chechen
ch,Chamorro
co,Corsican
cr,Cree
cs,Czech
cu,Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
cv,Chuvash
cy,Welsh
da,Danish
de,German
dv,Divehi; Dhivehi; Maldivian
dz,Dzongkha
ee,Ewe
el,"Greek, Modern (1453-)"
en,English
eo,Esperanto
es,Spanish; Castilian
et,Estonian
eu,Basque
fa,Persian
ff,Fulah
fi,Finnish
fj,Fijian
fo,Faroese
fr,French
fy,Western Frisian
ga,Irish
gd,Gaelic; Scottish Gaelic
gl,Galician
gn,Guarani
gu,Gujarati
gv,Manx
ha,Hausa
he,Hebrew
hi,Hindi
ho,Hiri Motu
hr,Croatian
ht,Haitian; Haitian Creole
hu,Hungarian
hy,Armenian
hz,Herero
ia,Interlingua (International Auxiliary Language Association)
id,Indonesian
ie,Interlingue; Occidental
ig,Igbo
ii,Sichuan Yi; Nuosu
ik,Inupiaq
io,Ido
is,Icelandic
it,Italian
iu,Inuktitut
ja,Japanese
jv,Javanese
ka,Georgian
kg,Kongo
ki,Kikuyu; Gikuyu
kj,Kuanyama; Kwanyama
kk,Kazakh
kl,Kalaallisut; Greenlandic
km,Central Khmer
kn,Kannada
ko,Korean
kr,Kanuri
ks,Kashmiri
ku,Kurdish
kv,Komi
kw,Cornish
ky,Kirghiz; Kyrgyz
la,Latin
lb,Luxembourgish; Letzeburgesch
lg,Ganda
li,Limburgan; Limburger; Limburgish
ln,Lingala
lo,Lao
lt,Lithuanian
lu,Luba-Katanga
lv,Latvian
mg,Malagasy
mh,Marshallese
mi,Maori
mk,Macedonian
ml,Malayalam
mn,Mongolian
mr,Marathi
ms,Malay
mt,Maltese
my,Burmese
na,Nauru
nb,"Bokmål, Norwegian; Norwegian Bokmål"
nd,"Ndebele, North; North Ndebele"
ne,Nepali
ng,Ndonga
nl,Dutch; Flemish
nn,"Norwegian Nynorsk; Nynorsk, Norwegian"
no,Norwegian
nr,"Ndebele, South; South Ndebele"
nv,Navajo; Navaho
ny,Chichewa; Chewa; Nyanja
oc,Occitan (post 1500); Provençal
oj,Ojibwa
om,Oromo
or,Oriya
os,Ossetian; Ossetic
pa,Panjabi; Punjabi
pi,Pali
pl,Polish
ps,Pushto; Pashto
pt,Portuguese
qu,Quechua
rm,Romansh
rn,Rundi
ro,Romanian; Moldavian; Moldovan
ru,Russian
rw,Kinyarwanda
sa,Sanskrit
sc,Sardinian
sd,Sindhi
se,Northern Sami
sg,Sango
si,Sinhala; Sinhalese
sk,Slovak
sl,Slovenian
sm,Samoan
sn,Shona
so,Somali
sq,Albanian
sr,Serbian
ss,Swati
st,"Sotho, Southern"
su,Sundanese
sv,Swedish
sw,Swahili
ta,Tamil
te,Telugu
tg,Tajik
th,Thai
ti,Tigrinya
tk,Turkmen
tl,Tagalog
tn,Tswana
to,Tonga (Tonga Islands)
tr,Turkish
ts,Tsonga
tt,Tatar
tw,Twi
ty,Tahitian
ug,Uighur; Uyghur
uk,Ukrainian
ur,Urdu
uz,Uzbek
ve,Venda
vi,Vietnamese
vo,Volapük
wa,Walloon
wo,Wolof
xh,Xhosa
yi,Yiddish
yo,Yoruba
za,Zhuang; Chuang
zh,Chinese
zu,Zulu
1 alpha2 English
2 aa Afar
3 ab Abkhazian
4 ae Avestan
5 af Afrikaans
6 ak Akan
7 am Amharic
8 an Aragonese
9 ar Arabic
10 as Assamese
11 av Avaric
12 ay Aymara
13 az Azerbaijani
14 ba Bashkir
15 be Belarusian
16 bg Bulgarian
17 bh Bihari languages
18 bi Bislama
19 bm Bambara
20 bn Bengali
21 bo Tibetan
22 br Breton
23 bs Bosnian
24 ca Catalan; Valencian
25 ce Chechen
26 ch Chamorro
27 co Corsican
28 cr Cree
29 cs Czech
30 cu Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
31 cv Chuvash
32 cy Welsh
33 da Danish
34 de German
35 dv Divehi; Dhivehi; Maldivian
36 dz Dzongkha
37 ee Ewe
38 el Greek, Modern (1453-)
39 en English
40 eo Esperanto
41 es Spanish; Castilian
42 et Estonian
43 eu Basque
44 fa Persian
45 ff Fulah
46 fi Finnish
47 fj Fijian
48 fo Faroese
49 fr French
50 fy Western Frisian
51 ga Irish
52 gd Gaelic; Scottish Gaelic
53 gl Galician
54 gn Guarani
55 gu Gujarati
56 gv Manx
57 ha Hausa
58 he Hebrew
59 hi Hindi
60 ho Hiri Motu
61 hr Croatian
62 ht Haitian; Haitian Creole
63 hu Hungarian
64 hy Armenian
65 hz Herero
66 ia Interlingua (International Auxiliary Language Association)
67 id Indonesian
68 ie Interlingue; Occidental
69 ig Igbo
70 ii Sichuan Yi; Nuosu
71 ik Inupiaq
72 io Ido
73 is Icelandic
74 it Italian
75 iu Inuktitut
76 ja Japanese
77 jv Javanese
78 ka Georgian
79 kg Kongo
80 ki Kikuyu; Gikuyu
81 kj Kuanyama; Kwanyama
82 kk Kazakh
83 kl Kalaallisut; Greenlandic
84 km Central Khmer
85 kn Kannada
86 ko Korean
87 kr Kanuri
88 ks Kashmiri
89 ku Kurdish
90 kv Komi
91 kw Cornish
92 ky Kirghiz; Kyrgyz
93 la Latin
94 lb Luxembourgish; Letzeburgesch
95 lg Ganda
96 li Limburgan; Limburger; Limburgish
97 ln Lingala
98 lo Lao
99 lt Lithuanian
100 lu Luba-Katanga
101 lv Latvian
102 mg Malagasy
103 mh Marshallese
104 mi Maori
105 mk Macedonian
106 ml Malayalam
107 mn Mongolian
108 mr Marathi
109 ms Malay
110 mt Maltese
111 my Burmese
112 na Nauru
113 nb Bokmål, Norwegian; Norwegian Bokmål
114 nd Ndebele, North; North Ndebele
115 ne Nepali
116 ng Ndonga
117 nl Dutch; Flemish
118 nn Norwegian Nynorsk; Nynorsk, Norwegian
119 no Norwegian
120 nr Ndebele, South; South Ndebele
121 nv Navajo; Navaho
122 ny Chichewa; Chewa; Nyanja
123 oc Occitan (post 1500); Provençal
124 oj Ojibwa
125 om Oromo
126 or Oriya
127 os Ossetian; Ossetic
128 pa Panjabi; Punjabi
129 pi Pali
130 pl Polish
131 ps Pushto; Pashto
132 pt Portuguese
133 qu Quechua
134 rm Romansh
135 rn Rundi
136 ro Romanian; Moldavian; Moldovan
137 ru Russian
138 rw Kinyarwanda
139 sa Sanskrit
140 sc Sardinian
141 sd Sindhi
142 se Northern Sami
143 sg Sango
144 si Sinhala; Sinhalese
145 sk Slovak
146 sl Slovenian
147 sm Samoan
148 sn Shona
149 so Somali
150 sq Albanian
151 sr Serbian
152 ss Swati
153 st Sotho, Southern
154 su Sundanese
155 sv Swedish
156 sw Swahili
157 ta Tamil
158 te Telugu
159 tg Tajik
160 th Thai
161 ti Tigrinya
162 tk Turkmen
163 tl Tagalog
164 tn Tswana
165 to Tonga (Tonga Islands)
166 tr Turkish
167 ts Tsonga
168 tt Tatar
169 tw Twi
170 ty Tahitian
171 ug Uighur; Uyghur
172 uk Ukrainian
173 ur Urdu
174 uz Uzbek
175 ve Venda
176 vi Vietnamese
177 vo Volapük
178 wa Walloon
179 wo Wolof
180 xh Xhosa
181 yi Yiddish
182 yo Yoruba
183 za Zhuang; Chuang
184 zh Chinese
185 zu Zulu

View File

@ -0,0 +1,7 @@
name,code
Creative Commons CC Zero,CC0
Open Data Commons Public Domain Dedication and Licence,PDDL
Creative Commons Attribution 4.0,CC-BY-4.0
Open Data Commons Attribution License,ODC-BY
Creative Commons Attribution Share-Alike 4.0,CC-BY-SA-4.0
Open Data Commons Open Database License,ODBL
1 name code
2 Creative Commons CC Zero CC0
3 Open Data Commons Public Domain Dedication and Licence PDDL
4 Creative Commons Attribution 4.0 CC-BY-4.0
5 Open Data Commons Attribution License ODC-BY
6 Creative Commons Attribution Share-Alike 4.0 CC-BY-SA-4.0
7 Open Data Commons Open Database License ODBL

View File

@ -0,0 +1,16 @@
attribute;information applies to the attribute class
attributeType;information applies to the characteristic of a feature
collectionHardware;information applies to the collection hardware class
collectionSession;information applies to the collection session
dataset;information applies to the dataset
series;information applies to the series
nonGeographicDataset;information applies to non-geographic data
dimensionGroup;information applies to a dimension group
feature;information applies to a feature
featureType;information applies to a feature type
propertyType;information applies to a property type
fieldSession;information applies to a field session
software;information applies to a computer program or routine
service;information applies to a capability which a service provider entity makes available to a service user entity through a set of interfaces that define a behavior, such as a use case
model;information applies to a copy or imitation of an existing or hypothetical object
tile;information applies to a tile, a spatial subset of geographic data
1 attribute information applies to the attribute class
2 attributeType information applies to the characteristic of a feature
3 collectionHardware information applies to the collection hardware class
4 collectionSession information applies to the collection session
5 dataset information applies to the dataset
6 series information applies to the series
7 nonGeographicDataset information applies to non-geographic data
8 dimensionGroup information applies to a dimension group
9 feature information applies to a feature
10 featureType information applies to a feature type
11 propertyType information applies to a property type
12 fieldSession information applies to a field session
13 software information applies to a computer program or routine
14 service information applies to a capability which a service provider entity makes available to a service user entity through a set of interfaces that define a behavior, such as a use case
15 model information applies to a copy or imitation of an existing or hypothetical object
16 tile information applies to a tile, a spatial subset of geographic data

View File

@ -0,0 +1,25 @@
application/octet-stream
application/pdf
application/xhtml+xml
application/json
application/xml
application/zip
image/gif
image/jpeg
image/png
image/tiff
image/svg+xml
text/csv
text/html
text/plain
text/xml
application/vnd.oasis.opendocument.text
application/vnd.oasis.opendocument.spreadsheet
application/vnd.oasis.opendocument.presentation
application/vnd.oasis.opendocument.graphics
application/vnd.ms-excel
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.ms-powerpoint
application/vnd.openxmlformats-officedocument.presentationml.presentation
application/msword
application/vnd.openxmlformats-officedocument.wordprocessingml.document
1 application/octet-stream
2 application/pdf
3 application/xhtml+xml
4 application/json
5 application/xml
6 application/zip
7 image/gif
8 image/jpeg
9 image/png
10 image/tiff
11 image/svg+xml
12 text/csv
13 text/html
14 text/plain
15 text/xml
16 application/vnd.oasis.opendocument.text
17 application/vnd.oasis.opendocument.spreadsheet
18 application/vnd.oasis.opendocument.presentation
19 application/vnd.oasis.opendocument.graphics
20 application/vnd.ms-excel
21 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
22 application/vnd.ms-powerpoint
23 application/vnd.openxmlformats-officedocument.presentationml.presentation
24 application/msword
25 application/vnd.openxmlformats-officedocument.wordprocessingml.document

View File

@ -31,6 +31,7 @@
#include "qgsmaplayerstyleguiutils.h"
#include "qgsmaptoolemitpoint.h"
#include "qgsmaptopixel.h"
#include "qgsmetadatawidget.h"
#include "qgsmultibandcolorrenderer.h"
#include "qgsmultibandcolorrendererwidget.h"
#include "qgspalettedrendererwidget.h"
@ -231,6 +232,13 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer *lyr, QgsMapCanv
mOptsPage_Histogram->setEnabled( false );
}
QVBoxLayout *layout = new QVBoxLayout( metadataFrame );
layout->setMargin( 0 );
mMetadataWidget = new QgsMetadataWidget( this, mRasterLayer );
mMetadataWidget->layout()->setContentsMargins( -1, 0, -1, 0 );
layout->addWidget( mMetadataWidget );
metadataFrame->setLayout( layout );
QgsDebugMsg( "Setting crs to " + mRasterLayer->crs().toWkt() );
QgsDebugMsg( "Setting crs to " + mRasterLayer->crs().authid() + " - " + mRasterLayer->crs().description() );
mCrsSelector->setCrs( mRasterLayer->crs() );
@ -829,6 +837,9 @@ void QgsRasterLayerProperties::apply()
mRasterLayer->setRenderer( rendererWidget->renderer() );
}
mMetadataWidget->acceptMetadata();
mMetadataFilled = false;
//transparency settings
QgsRasterRenderer *rasterRenderer = mRasterLayer->renderer();
if ( rasterRenderer )

View File

@ -31,6 +31,7 @@ class QgsMapLayer;
class QgsMapCanvas;
class QgsRasterLayer;
class QgsMapToolEmitPoint;
class QgsMetadataWidget;
class QgsRasterRenderer;
class QgsRasterRendererWidget;
class QgsRasterHistogramWidget;
@ -154,6 +155,7 @@ class APP_EXPORT QgsRasterLayerProperties : public QgsOptionsDialogBase, private
//bool mRasterLayerIsInternal;
QgsRasterRendererWidget *mRendererWidget = nullptr;
QgsMetadataWidget *mMetadataWidget = nullptr;
bool rasterIsMultiBandColor();

View File

@ -37,6 +37,7 @@
#include "qgsmapcanvas.h"
#include "qgsmaplayerconfigwidgetfactory.h"
#include "qgsmaplayerstyleguiutils.h"
#include "qgsmetadatawidget.h"
#include "qgspluginmetadata.h"
#include "qgspluginregistry.h"
#include "qgsproject.h"
@ -247,6 +248,14 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
diagLayout->addWidget( diagramPropertiesDialog );
mDiagramFrame->setLayout( diagLayout );
// Metadata tab
QVBoxLayout *metadataLayout = new QVBoxLayout( metadataFrame );
metadataLayout->setMargin( 0 );
mMetadataWidget = new QgsMetadataWidget( this, mLayer );
mMetadataWidget->layout()->setContentsMargins( -1, 0, -1, 0 );
metadataLayout->addWidget( mMetadataWidget );
metadataFrame->setLayout( metadataLayout );
// Legend tab
mLegendConfigEmbeddedWidget->setLayer( mLayer );
@ -489,6 +498,10 @@ void QgsVectorLayerProperties::apply()
// apply legend settings
mLegendConfigEmbeddedWidget->applyToLayer();
// save metadata
mMetadataWidget->acceptMetadata();
mMetadataFilled = false;
//
// Set up sql subset query if applicable
//

View File

@ -42,6 +42,7 @@ class QgsFieldsProperties;
class QgsRendererPropertiesDialog;
class QgsMapLayerConfigWidgetFactory;
class QgsMapLayerConfigWidget;
class QgsMetadataWidget;
class QgsPanelWidget;
class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private Ui::QgsVectorLayerPropertiesBase, private QgsExpressionContextGenerator
@ -212,6 +213,8 @@ class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private
void showHelp();
QgsMetadataWidget *mMetadataWidget = nullptr;
private slots:
void openPanel( QgsPanelWidget *panel );
};

View File

@ -626,6 +626,11 @@ QString QgsApplication::i18nPath()
return ABISYM( mPkgDataPath ) + QStringLiteral( "/i18n/" );
}
QString QgsApplication::metadataPath()
{
return ABISYM( mPkgDataPath ) + QStringLiteral( "/resources/metadata-ISO/" );
}
QString QgsApplication::qgisMasterDatabaseFilePath()
{
return ABISYM( mPkgDataPath ) + QStringLiteral( "/resources/qgis.db" );

View File

@ -237,6 +237,11 @@ class CORE_EXPORT QgsApplication : public QApplication
//! Returns the path to the translation directory.
static QString i18nPath();
/** Returns the path to the metadata directory.
* \since QGIS 3.0
*/
static QString metadataPath();
//! Returns the path to the master qgis.db file.
static QString qgisMasterDatabaseFilePath();

View File

@ -293,6 +293,7 @@ SET(QGIS_GUI_SRCS
qgsmessagebaritem.cpp
qgsmessagelogviewer.cpp
qgsmessageviewer.cpp
qgsmetadatawidget.cpp
qgsnewhttpconnection.cpp
qgsnewmemorylayerdialog.cpp
qgsnewnamedialog.cpp
@ -452,6 +453,7 @@ SET(QGIS_GUI_MOC_HDRS
qgsmessagebaritem.h
qgsmessagelogviewer.h
qgsmessageviewer.h
qgsmetadatawidget.h
qgsnewhttpconnection.h
qgsnewmemorylayerdialog.h
qgsnewnamedialog.h

View File

@ -0,0 +1,840 @@
/***************************************************************************
qgsmetadatawidget.h - description
-------------------
begin : 17/05/2017
copyright : (C) 2017 by Etienne Trimaille
email : etienne at kartoza.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <QtWidgets>
#include <QIcon>
#include <QPushButton>
#include <QComboBox>
#include <QString>
#include <QInputDialog>
#include <QStringListModel>
#include "qgsmetadatawidget.h"
#include "qgslogger.h"
#include "qgslayermetadatavalidator.h"
#include "qgsapplication.h"
QgsMetadataWidget::QgsMetadataWidget( QWidget *parent, QgsMapLayer *layer )
: QWidget( parent ),
mLayer( layer )
{
setupUi( this );
mMetadata = layer->metadata();
tabWidget->setCurrentIndex( 0 );
// Disable the encoding and contacts
encodingFrame->setHidden( true );
tabWidget->removeTab( 5 );
// Default categories, we want them translated, so we are not using a CSV.
mDefaultCategories << tr( "Farming" ) << tr( "Climatology Meteorology Atmosphere" ) << tr( "Location" ) << tr( "Intelligence Military" ) << tr( "Transportation" ) << tr( "Structure" ) << tr( "Boundaries" );
mDefaultCategories << tr( "Inland Waters" ) << tr( "Planning Cadastre" ) << tr( "Geoscientific Information" ) << tr( "Elevation" ) << tr( "Health" ) << tr( "Biota" ) << tr( "Oceans" ) << tr( "Environment" );
mDefaultCategories << tr( "Utilities Communication" ) << tr( "Economy" ) << tr( "Society" ) << tr( "Imagery Base Maps Earth Cover" );
mDefaultCategoriesModel = new QStringListModel( mDefaultCategories );
mDefaultCategoriesModel->sort( 0 ); // Sorting using translations
listDefaultCategories->setModel( mDefaultCategoriesModel );
// Categories
mCategoriesModel = new QStringListModel( listCategories );
listCategories->setModel( mCategoriesModel );
// Rights
mRightsModel = new QStringListModel( listRights );
listRights->setModel( mRightsModel );
// Setup the constraints view
mConstraintsModel = new QStandardItemModel( tabConstraints );
mConstraintsModel->setColumnCount( 2 );
QStringList constraintheaders;
constraintheaders << tr( "Type" ) << tr( "Constraint" );
mConstraintsModel->setHorizontalHeaderLabels( constraintheaders );
tabConstraints->setModel( mConstraintsModel );
tabConstraints->setItemDelegate( new ConstraintItemDelegate() );
// Setup the link view
mLinksModel = new QStandardItemModel( tabLinks );
mLinksModel->setColumnCount( 7 );
QStringList headers = QStringList();
headers << tr( "Name" ) << tr( "Type" ) << tr( "URL" ) << tr( "Description" ) << tr( "Format" ) << tr( "MIME" ) << tr( "Size" );
mLinksModel->setHorizontalHeaderLabels( headers );
tabLinks->setModel( mLinksModel );
tabLinks->setItemDelegate( new LinkItemDelegate() );
// History
mHistoryModel = new QStringListModel( listHistory );
listHistory->setModel( mHistoryModel );
// Connect signals and slots
connect( tabWidget, &QTabWidget::currentChanged, this, &QgsMetadataWidget::updatePanel );
connect( btnAutoSource, &QPushButton::clicked, this, &QgsMetadataWidget::fillSourceFromLayer );
connect( btnAddVocabulary, &QPushButton::clicked, this, &QgsMetadataWidget::addVocabulary );
connect( btnRemoveVocabulary, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedVocabulary );
connect( btnAddRight, &QPushButton::clicked, this, &QgsMetadataWidget::addRight );
connect( btnRemoveRight, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedRight );
connect( btnAddLicence, &QPushButton::clicked, this, &QgsMetadataWidget::addLicence );
connect( btnRemoveLicence, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedLicence );
connect( btnAddConstraint, &QPushButton::clicked, this, &QgsMetadataWidget::addConstraint );
connect( btnRemoveConstraint, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedConstraint );
connect( btnAutoCrs, &QPushButton::clicked, this, &QgsMetadataWidget::fillCrsFromLayer );
connect( btnAddContact, &QPushButton::clicked, this, &QgsMetadataWidget::addContact );
connect( btnRemoveContact, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedContact );
connect( tabContacts, &QTableWidget::itemSelectionChanged, this, &QgsMetadataWidget::updateContactDetails );
connect( btnAddLink, &QPushButton::clicked, this, &QgsMetadataWidget::addLink );
connect( btnRemoveLink, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedLink );
connect( btnAddHistory, &QPushButton::clicked, this, &QgsMetadataWidget::addHistory );
connect( btnRemoveHistory, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedHistory );
connect( btnNewCategory, &QPushButton::clicked, this, &QgsMetadataWidget::addNewCategory );
connect( btnAddDefaultCategory, &QPushButton::clicked, this, &QgsMetadataWidget::addDefaultCategory );
connect( btnRemoveCategory, &QPushButton::clicked, this, &QgsMetadataWidget::removeSelectedCategory );
fillComboBox();
setPropertiesFromLayer();
updateContactDetails();
}
QgsMetadataWidget::~QgsMetadataWidget()
{
}
void QgsMetadataWidget::fillSourceFromLayer() const
{
lineEditIdentifier->setText( mLayer->publicSource() );
}
void QgsMetadataWidget::addVocabulary() const
{
int row = tabKeywords->rowCount();
tabKeywords->setRowCount( row + 1 );
QTableWidgetItem *pCell = nullptr;
// Vocabulary
pCell = new QTableWidgetItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) );
tabKeywords->setItem( row, 0, pCell );
// Keywords
pCell = new QTableWidgetItem();
tabKeywords->setItem( row, 1, pCell );
}
void QgsMetadataWidget::removeSelectedVocabulary() const
{
QItemSelectionModel *selectionModel = tabKeywords->selectionModel();
const QModelIndexList selectedRows = selectionModel->selectedRows();
for ( int i = 0 ; i < selectedRows.size() ; i++ )
{
tabKeywords->model()->removeRow( selectedRows[i].row() );
}
}
void QgsMetadataWidget::addLicence()
{
QString newLicence = QInputDialog::getItem( this, tr( "New Licence" ), tr( "New Licence" ), parseLicenses(), 0, true );
if ( tabLicenses->findItems( newLicence, Qt::MatchExactly ).isEmpty() )
{
int row = tabLicenses->rowCount();
tabLicenses->setRowCount( row + 1 );
QTableWidgetItem *pCell = new QTableWidgetItem( newLicence );
tabLicenses->setItem( row, 0, pCell );
}
}
void QgsMetadataWidget::removeSelectedLicence() const
{
QItemSelectionModel *selectionModel = tabLicenses->selectionModel();
const QModelIndexList selectedRows = selectionModel->selectedRows();
for ( int i = 0 ; i < selectedRows.size() ; i++ )
{
tabLicenses->model()->removeRow( selectedRows[i].row() );
}
}
void QgsMetadataWidget::addRight()
{
QString newRight = QInputDialog::getText( this, tr( "New Right" ), tr( "New Right" ) );
QStringList existingRights = mRightsModel->stringList();
if ( ! existingRights.contains( newRight ) )
{
existingRights.append( newRight );
mRightsModel->setStringList( existingRights );
}
}
void QgsMetadataWidget::removeSelectedRight() const
{
QItemSelectionModel *selection = listRights->selectionModel();
if ( selection->hasSelection() )
{
QModelIndex indexElementSelectionne = selection->currentIndex();
QVariant item = mRightsModel->data( indexElementSelectionne, Qt::DisplayRole );
QStringList list = mRightsModel->stringList();
list.removeOne( item.toString() );
mRightsModel->setStringList( list );
}
}
void QgsMetadataWidget::addConstraint() const
{
int row = mConstraintsModel->rowCount();
mConstraintsModel->setItem( row, 0, new QStandardItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) ) );
mConstraintsModel->setItem( row, 1, new QStandardItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) ) );
}
void QgsMetadataWidget::removeSelectedConstraint() const
{
const QModelIndexList selectedRows = tabConstraints->selectionModel()->selectedRows();
mConstraintsModel->removeRow( selectedRows[0].row() );
}
void QgsMetadataWidget::fillCrsFromLayer() const
{
selectionCrs->setCrs( mLayer->crs() );
}
void QgsMetadataWidget::addContact() const
{
int row = tabContacts->rowCount();
tabContacts->setRowCount( row + 1 );
QTableWidgetItem *pCell;
// Name
pCell = new QTableWidgetItem( QString( tr( "unnamed %1" ) ).arg( row + 1 ) );
tabContacts->setItem( row, 0, pCell );
// Organization
pCell = new QTableWidgetItem();
tabContacts->setItem( row, 1, pCell );
// Set last item selected
tabContacts->selectRow( row );
}
void QgsMetadataWidget::removeSelectedContact() const
{
QItemSelectionModel *selectionModel = tabContacts->selectionModel();
const QModelIndexList selectedRows = selectionModel->selectedRows();
for ( int i = 0 ; i < selectedRows.size() ; i++ )
{
tabContacts->model()->removeRow( selectedRows[i].row() );
}
}
void QgsMetadataWidget::updateContactDetails() const
{
QItemSelectionModel *selectionModel = tabContacts->selectionModel();
const QModelIndexList selectedRows = selectionModel->selectedRows();
if ( ! selectedRows.isEmpty() )
{
panelDetails->setDisabled( false );
lineEditContactName->setText( tabContacts->item( selectedRows[0].row(), 0 )->text() );
lineEditContactOrganization->setText( tabContacts->item( selectedRows[0].row(), 1 )->text() );
}
else
{
panelDetails->setDisabled( true );
lineEditContactName->clear();
lineEditContactOrganization->clear();
}
}
void QgsMetadataWidget::addLink() const
{
int row = mLinksModel->rowCount();
mLinksModel->setItem( row, 0, new QStandardItem( QString( tr( "undefined %1" ) ).arg( row + 1 ) ) );
mLinksModel->setItem( row, 1, new QStandardItem() );
mLinksModel->setItem( row, 2, new QStandardItem() );
mLinksModel->setItem( row, 3, new QStandardItem() );
mLinksModel->setItem( row, 4, new QStandardItem() );
mLinksModel->setItem( row, 5, new QStandardItem() );
mLinksModel->setItem( row, 6, new QStandardItem() );
}
void QgsMetadataWidget::removeSelectedLink() const
{
const QModelIndexList selectedRows = tabLinks->selectionModel()->selectedRows();
mLinksModel->removeRow( selectedRows[0].row() );
}
void QgsMetadataWidget::addHistory()
{
QString newHistory = QInputDialog::getText( this, tr( "New History" ), tr( "New History" ) );
QStringList existingHistory = mHistoryModel->stringList();
if ( ! existingHistory.contains( newHistory ) )
{
existingHistory.append( newHistory );
mHistoryModel->setStringList( existingHistory );
}
}
void QgsMetadataWidget::removeSelectedHistory() const
{
QItemSelectionModel *selection = listHistory->selectionModel();
if ( selection->hasSelection() )
{
QModelIndex indexElementSelectionne = selection->currentIndex();
QVariant item = mHistoryModel->data( indexElementSelectionne, Qt::DisplayRole );
QStringList list = mHistoryModel->stringList();
list.removeOne( item.toString() );
mHistoryModel->setStringList( list );
}
}
void QgsMetadataWidget::fillComboBox() const
{
// Set default values in type combobox
// It is advised to use the ISO 19115 MD_ScopeCode values. E.g. 'dataset' or 'series'.
// http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml
comboType->setEditable( true );
comboType->clear();
QMap<QString, QString> types = parseTypes();
const QStringList &keys = types.keys();
int i = 0;
for ( const QString &type : keys )
{
comboType->insertItem( i, type );
comboType->setItemData( i, types.value( type ), Qt::ToolTipRole );
i++;
}
// Set default values in language combobox
// It is advised to use the ISO 639.2 or ISO 3166 specifications, e.g. 'ENG' or 'SPA',
comboLanguage->setEditable( true );
comboLanguage->clear();
QMap<QString, QString> countries = parseLanguages();
const QStringList &k = countries.keys();
i = 0;
for ( const QString &countryCode : k )
{
comboLanguage->insertItem( i, countryCode );
comboLanguage->setItemData( i, countries.value( countryCode ), Qt::ToolTipRole );
i++;
}
}
void QgsMetadataWidget::setPropertiesFromLayer() const
{
// Parent ID
lineEditParentId->setText( mMetadata.parentIdentifier() );
// Identifier
if ( ! mMetadata.identifier().isEmpty() )
{
lineEditIdentifier->setText( mMetadata.identifier() );
}
// Title
if ( ! mMetadata.title().isEmpty() )
{
lineEditTitle->setText( mMetadata.title() );
}
// Type
if ( ! mMetadata.type().isEmpty() )
{
if ( comboType->findText( mMetadata.type() ) == -1 )
{
comboType->addItem( mMetadata.type() );
}
comboType->setCurrentIndex( comboType->findText( mMetadata.type() ) );
}
// Language
if ( ! mMetadata.language().isEmpty() )
{
if ( comboLanguage->findText( mMetadata.language() ) == -1 )
{
comboLanguage->addItem( mMetadata.language() );
}
comboLanguage->setCurrentIndex( comboLanguage->findText( mMetadata.language() ) );
}
// Abstract
textEditAbstract->setPlainText( mMetadata.abstract() );
// Categories
mCategoriesModel->setStringList( mMetadata.categories() );
// Keywords
tabKeywords->setRowCount( 0 );
QMapIterator<QString, QStringList> i( mMetadata.keywords() );
while ( i.hasNext() )
{
i.next();
addVocabulary();
int currentRow = tabKeywords->rowCount() - 1;
tabKeywords->item( currentRow, 0 )->setText( i.key() );
tabKeywords->item( currentRow, 1 )->setText( i.value().join( "," ) );
}
// Fees
lineEditFees->setText( mMetadata.fees() );
// Licenses
tabLicenses->setRowCount( 0 );
const QStringList &licenses = mMetadata.licenses();
for ( const QString &licence : licenses )
{
int currentRow = tabLicenses->rowCount();
tabLicenses->setRowCount( currentRow + 1 );
QTableWidgetItem *pCell = tabLicenses->item( currentRow, 0 );
if ( !pCell )
{
pCell = new QTableWidgetItem;
tabLicenses->setItem( currentRow, 0, pCell );
}
pCell->setText( licence );
}
// Rights
mRightsModel->setStringList( mMetadata.rights() );
// Constraints
const QList<QgsLayerMetadata::Constraint> &constraints = mMetadata.constraints();
for ( const QgsLayerMetadata::Constraint &constraint : constraints )
{
int row = mConstraintsModel->rowCount();
mConstraintsModel->setItem( row, 0, new QStandardItem( constraint.type ) );
mConstraintsModel->setItem( row, 1, new QStandardItem( constraint.constraint ) );
}
// CRS
if ( mMetadata.crs().isValid() )
{
selectionCrs->setCrs( mMetadata.crs() );
}
// Links
const QList<QgsLayerMetadata::Link> &links = mMetadata.links();
for ( const QgsLayerMetadata::Link &link : links )
{
int row = mLinksModel->rowCount();
mLinksModel->setItem( row, 0, new QStandardItem( link.name ) );
mLinksModel->setItem( row, 1, new QStandardItem( link.type ) );
mLinksModel->setItem( row, 2, new QStandardItem( link.url ) );
mLinksModel->setItem( row, 3, new QStandardItem( link.description ) );
mLinksModel->setItem( row, 4, new QStandardItem( link.format ) );
mLinksModel->setItem( row, 5, new QStandardItem( link.mimeType ) );
mLinksModel->setItem( row, 6, new QStandardItem( link.size ) );
}
// History
mHistoryModel->setStringList( mMetadata.history() );
}
void QgsMetadataWidget::saveMetadata( QgsLayerMetadata &layerMetadata ) const
{
layerMetadata.setParentIdentifier( lineEditParentId->text() );
layerMetadata.setIdentifier( lineEditIdentifier->text() );
layerMetadata.setTitle( lineEditTitle->text() );
layerMetadata.setType( comboType->currentText() );
layerMetadata.setLanguage( comboLanguage->currentText() );
layerMetadata.setAbstract( textEditAbstract->toPlainText() );
// Keywords, it will save categories too.
syncFromCategoriesTabToKeywordsTab();
QMap<QString, QStringList> keywords;
for ( int i = 0 ; i < tabKeywords->rowCount() ; i++ )
{
keywords.insert( tabKeywords->item( i, 0 )->text(), tabKeywords->item( i, 1 )->text().split( ',' ) );
}
layerMetadata.setKeywords( keywords );
// Fees
layerMetadata.setFees( lineEditFees->text() );
// Licenses
QStringList licenses;
for ( int i = 0 ; i < tabLicenses->rowCount() ; i++ )
{
licenses.append( tabLicenses->item( i, 0 )->text() );
}
layerMetadata.setLicenses( licenses );
// Rights
layerMetadata.setRights( mRightsModel->stringList() );
// Constraints
QList<QgsLayerMetadata::Constraint> constraints;
for ( int row = 0 ; row < mConstraintsModel->rowCount() ; row++ )
{
struct QgsLayerMetadata::Constraint constraint = QgsLayerMetadata::Constraint();
constraint.type = mConstraintsModel->item( row, 0 )->text();
constraint.constraint = mConstraintsModel->item( row, 1 )->text();
constraints.append( constraint );
}
layerMetadata.setConstraints( constraints );
// CRS
layerMetadata.setCrs( selectionCrs->crs() );
// Links
QList<QgsLayerMetadata::Link> links;
for ( int row = 0 ; row < mLinksModel->rowCount() ; row++ )
{
struct QgsLayerMetadata::Link link = QgsLayerMetadata::Link();
link.name = mLinksModel->item( row, 0 )->text();
link.type = mLinksModel->item( row, 1 )->text();
link.url = mLinksModel->item( row, 2 )->text();
link.description = mLinksModel->item( row, 3 )->text();
link.format = mLinksModel->item( row, 4 )->text();
link.mimeType = mLinksModel->item( row, 5 )->text();
link.size = mLinksModel->item( row, 6 )->text();
links.append( link );
}
layerMetadata.setLinks( links );
// History
layerMetadata.setHistory( mHistoryModel->stringList() );
}
bool QgsMetadataWidget::checkMetadata() const
{
QgsLayerMetadata metadata = QgsLayerMetadata();
saveMetadata( metadata );
QgsNativeMetadataValidator validator;
QList<QgsMetadataValidator::ValidationResult> validationResults;
bool results = validator.validate( metadata, validationResults );
QString errors;
if ( results == false )
{
errors = QStringLiteral();
for ( const QgsMetadataValidator::ValidationResult &result : validationResults )
{
errors += QLatin1String( "<b>" ) % result.section;
if ( ! result.identifier.isNull() )
{
errors += QLatin1String( " " ) % QVariant( result.identifier.toInt() + 1 ).toString();
}
errors += QLatin1String( "</b>: " ) % result.note % QLatin1String( "<br />" );
}
}
else
{
errors = QString( tr( "Ok, it seems valid according to the QGIS Schema." ) );
}
QString myStyle = QgsApplication::reportStyleSheet();
myStyle.append( QStringLiteral( "body { margin: 10px; }\n " ) );
resultsCheckMetadata->clear();
resultsCheckMetadata->document()->setDefaultStyleSheet( myStyle );
resultsCheckMetadata->setHtml( errors );
return results;
}
QMap<QString, QString> QgsMetadataWidget::parseLanguages()
{
QMap<QString, QString> countries;
countries.insert( QString(), QString() ); // We add an empty line, because it's not compulsory.
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "language_codes_ISO_639.csv" ) );
QFile file( path );
if ( !file.open( QIODevice::ReadOnly ) )
{
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
return countries;
}
// Skip the first line of the CSV
file.readLine();
while ( !file.atEnd() )
{
QByteArray line = file.readLine();
QList<QByteArray> items = line.split( ',' );
countries.insert( QString( items.at( 0 ).constData() ).trimmed(), QString( items.at( 1 ).constData() ).trimmed() );
}
file.close();
path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "country_code_ISO_3166.csv" ) );
QFile secondFile( path );
if ( !secondFile.open( QIODevice::ReadOnly ) )
{
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
return countries;
}
// Skip the first line of the CSV
secondFile.readLine();
while ( !secondFile.atEnd() )
{
QByteArray line = secondFile.readLine();
QList<QByteArray> items = line.split( ',' );
countries.insert( QString( items.at( 2 ).constData() ).trimmed(), QString( items.at( 0 ).constData() ).trimmed() );
}
secondFile.close();
return countries;
}
QStringList QgsMetadataWidget::parseLicenses()
{
QStringList wordList;
wordList.append( QString() ); // We add an empty line, because it's not compulsory.
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "licenses.csv" ) );
QFile file( path );
if ( !file.open( QIODevice::ReadOnly ) )
{
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
return wordList;
}
// Skip the first line of the CSV
file.readLine();
while ( !file.atEnd() )
{
QByteArray line = file.readLine();
wordList.append( line.split( ',' ).at( 0 ).trimmed() );
}
file.close();
return wordList;
}
QStringList QgsMetadataWidget::parseLinkTypes()
{
QStringList wordList;
wordList.append( QString() ); // We add an empty line, because it's not compulsory.
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "LinkPropertyLookupTable.csv" ) );
QFile file( path );
if ( !file.open( QIODevice::ReadOnly ) )
{
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
return wordList;
}
// Skip the first line of the CSV
file.readLine();
while ( !file.atEnd() )
{
QByteArray line = file.readLine();
wordList.append( line.split( ',' ).at( 0 ).trimmed() );
}
file.close();
return wordList;
}
QStringList QgsMetadataWidget::parseMimeTypes()
{
QStringList wordList;
wordList.append( QString() ); // We add an empty line, because it's not compulsory.
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QString( "mime.csv" ) );
QFile file( path );
if ( !file.open( QIODevice::ReadOnly ) )
{
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
return wordList;
}
while ( !file.atEnd() )
{
QByteArray line = file.readLine();
wordList.append( line.split( ',' ).at( 0 ).trimmed() );
}
file.close();
return wordList;
}
QMap<QString, QString> QgsMetadataWidget::parseTypes()
{
QMap<QString, QString> types;
types.insert( QString(), QString() ); // We add an empty line, because it's not compulsory.
QString path = QDir( QgsApplication::metadataPath() ).absoluteFilePath( QStringLiteral( "md_scope_codes.csv" ) );
QFile file( path );
if ( !file.open( QIODevice::ReadOnly ) )
{
QgsDebugMsg( QString( "Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
return types;
}
types.insert( QString(), QString() ); // We add an empty line, because it's not compulsory.
while ( !file.atEnd() )
{
QByteArray line = file.readLine();
QList<QByteArray> items = line.split( ';' );
types.insert( items.at( 0 ).constData(), items.at( 1 ).constData() );
}
file.close();
return types;
}
void QgsMetadataWidget::acceptMetadata()
{
saveMetadata( mMetadata );
// Save layer metadata properties
mLayer->setMetadata( mMetadata );
}
void QgsMetadataWidget::syncFromCategoriesTabToKeywordsTab() const
{
if ( mCategoriesModel->rowCount() > 0 )
{
QList<QTableWidgetItem *> categories = tabKeywords->findItems( QStringLiteral( "gmd:topicCategory" ), Qt::MatchExactly );
int row;
if ( !categories.isEmpty() )
{
row = categories.at( 0 )->row();
}
else
{
// Create a new line with 'gmd:topicCategory'
addVocabulary();
row = tabKeywords->rowCount() - 1;
tabKeywords->item( row, 0 )->setText( QStringLiteral( "gmd:topicCategory" ) );
}
tabKeywords->item( row, 1 )->setText( mCategoriesModel->stringList().join( "," ) );
}
}
void QgsMetadataWidget::updatePanel() const
{
int index = tabWidget->currentIndex();
QString currentTabText = tabWidget->widget( index )->objectName();
if ( currentTabText == QStringLiteral( "tabCategoriesDialog" ) )
{
// Categories tab
// We need to take keywords and insert them into the list
QList<QTableWidgetItem *> categories = tabKeywords->findItems( QStringLiteral( "gmd:topicCategory" ), Qt::MatchExactly );
if ( !categories.isEmpty() )
{
int row = categories.at( 0 )->row();
mCategoriesModel->setStringList( tabKeywords->item( row, 1 )->text().split( "," ) );
}
else
{
mCategoriesModel->setStringList( QStringList() );
}
}
else if ( currentTabText == QStringLiteral( "tabKeywordsDialog" ) )
{
// Keywords tab
// We need to take categories and insert them into the table
syncFromCategoriesTabToKeywordsTab();
}
else if ( currentTabText == QStringLiteral( "tabValidationDialog" ) )
{
checkMetadata();
}
}
void QgsMetadataWidget::addNewCategory()
{
bool ok;
QString text = QInputDialog::getText( this, tr( "New Category" ),
tr( "New Category:" ), QLineEdit::Normal,
QString(), &ok );
if ( ok && !text.isEmpty() )
{
QStringList list = mCategoriesModel->stringList();
if ( ! list.contains( text ) )
{
list.append( text );
mCategoriesModel->setStringList( list );
mCategoriesModel->sort( 0 );
}
}
}
void QgsMetadataWidget::addDefaultCategory() const
{
QItemSelectionModel *selection = listDefaultCategories->selectionModel();
if ( selection->hasSelection() )
{
QModelIndex indexElementSelectionne = selection->currentIndex();
QVariant item = mDefaultCategoriesModel->data( indexElementSelectionne, Qt::DisplayRole );
QStringList list = mDefaultCategoriesModel->stringList();
list.removeOne( item.toString() );
mDefaultCategoriesModel->setStringList( list );
list = mCategoriesModel->stringList();
list.append( item.toString() );
mCategoriesModel->setStringList( list );
mCategoriesModel->sort( 0 );
}
}
void QgsMetadataWidget::removeSelectedCategory() const
{
QItemSelectionModel *selection = listCategories->selectionModel();
if ( selection->hasSelection() )
{
QModelIndex indexElementSelectionne = listCategories->selectionModel()->currentIndex();
QVariant item = mCategoriesModel->data( indexElementSelectionne, Qt::DisplayRole );
QStringList list = mCategoriesModel->stringList();
list.removeOne( item.toString() );
mCategoriesModel->setStringList( list );
if ( mDefaultCategories.contains( item.toString() ) )
{
list = mDefaultCategoriesModel->stringList();
list.append( item.toString() );
mDefaultCategoriesModel->setStringList( list );
mDefaultCategoriesModel->sort( 0 );
}
}
}
QWidget *LinkItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if ( index.column() == 1 )
{
// Link type
QComboBox *typeEditor = new QComboBox( parent );
typeEditor->setEditable( true );
QStringListModel *model = new QStringListModel( parent );
model->setStringList( QgsMetadataWidget::parseLinkTypes() );
typeEditor->setModel( model );
return typeEditor;
}
else if ( index.column() == 5 )
{
// MIME
QComboBox *mimeEditor = new QComboBox( parent );
mimeEditor->setEditable( true );
QStringListModel *model = new QStringListModel( parent );
model->setStringList( QgsMetadataWidget::parseMimeTypes() );
mimeEditor->setModel( model );
return mimeEditor;
}
return QStyledItemDelegate::createEditor( parent, option, index );
}
QWidget *ConstraintItemDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
if ( index.column() == 0 )
{
// Constraint type
QComboBox *typeEditor = new QComboBox( parent );
typeEditor->setEditable( true );
QStringList types;
types << QString( "access" ) << QString( "use" ) << QString( "other" );
QStringListModel *model = new QStringListModel( parent );
model->setStringList( types );
typeEditor->setModel( model );
return typeEditor;
}
return QStyledItemDelegate::createEditor( parent, option, index );
}

175
src/gui/qgsmetadatawidget.h Normal file
View File

@ -0,0 +1,175 @@
/***************************************************************************
qgsmetadatawidget.h - description
-------------------
begin : 17/05/2017
copyright : (C) 2017 by Etienne Trimaille
email : etienne at kartoza.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSMETADATAWIDGET_H
#define QGSMETADATAWIDGET_H
#include "QStandardItemModel"
#include "QStyledItemDelegate"
#include "qgis_gui.h"
#include "qgsmaplayer.h"
#include "qgslayermetadata.h"
#include "ui_qgsmetadatawidget.h"
/**
* \ingroup gui
* \class QgsMetadataWidget
* \brief A wizard to edit metadata on a map layer.
*
* \since QGIS 3.0
*/
class GUI_EXPORT QgsMetadataWidget : public QWidget, private Ui::QgsMetadataWidget
{
Q_OBJECT
public:
/**
* Constructor for the wizard.
*/
QgsMetadataWidget( QWidget *parent, QgsMapLayer *layer = nullptr );
~QgsMetadataWidget();
/**
* Save all fields in a QgsLayerMetadata object.
*/
void saveMetadata( QgsLayerMetadata &layerMetadata ) const;
/**
* Check if values in the wizard are correct.
*/
bool checkMetadata() const;
/**
* Saves the metadata to the layer.
*/
void acceptMetadata();
/**
* Returns a list of languages available by default in the wizard.
*/
static QMap<QString, QString> parseLanguages();
/**
* Returns a list of licences available by default in the wizard.
*/
static QStringList parseLicenses();
/**
* Returns a list of link types available by default in the wizard.
* \see https://github.com/OSGeo/Cat-Interop/blob/master/LinkPropertyLookupTable.csv
*/
static QStringList parseLinkTypes();
/**
* Returns a list of MIME types available by default in the wizard.
* \see https://fr.wikipedia.org/wiki/Type_MIME
*/
static QStringList parseMimeTypes();
/**
* Returns a list of types available by default in the wizard.
*/
static QMap<QString, QString> parseTypes();
private:
void updatePanel() const;
void fillSourceFromLayer() const;
void fillCrsFromLayer() const;
void addDefaultCategory() const;
void addNewCategory();
void removeSelectedCategory() const;
void addVocabulary() const;
void removeSelectedVocabulary() const;
void addLicence();
void removeSelectedLicence() const;
void addRight();
void removeSelectedRight() const;
void addConstraint() const;
void removeSelectedConstraint() const;
void addContact() const;
void removeSelectedContact() const;
void addLink() const;
void removeSelectedLink() const;
void addHistory();
void removeSelectedHistory() const;
void updateContactDetails() const;
void fillComboBox() const;
void setPropertiesFromLayer() const;
void syncFromCategoriesTabToKeywordsTab() const;
QStringList mDefaultCategories;
QgsMapLayer *mLayer = nullptr;
QgsLayerMetadata mMetadata;
QStandardItemModel *mConstraintsModel = nullptr;
QStandardItemModel *mLinksModel = nullptr;
QStringListModel *mCategoriesModel = nullptr;
QStringListModel *mDefaultCategoriesModel = nullptr;
QStringListModel *mRightsModel = nullptr;
QStringListModel *mHistoryModel = nullptr;
};
#ifndef SIP_RUN
/**
\\\@cond PRIVATE
* \ingroup gui
* \class LinkItemDelegate
* \brief Special delegate for the link view in the metadata wizard.
*
* \since QGIS 3.0
*/
class LinkItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
/**
* Create a special editor with a QCombobox in the link view.
*/
QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
};
/**
* \ingroup gui
* \class ConstraintItemDelegate
* \brief Special delegate for the constraint view in the metadata wizard.
*
* \since QGIS 3.0
*/
class ConstraintItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
/**
* Create a special editor with a QCombobox in the constraint view.
*/
QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
};
/**
\\\@endcond
*/
#endif
#endif

1272
src/ui/qgsmetadatawidget.ui Normal file

File diff suppressed because it is too large Load Diff

View File

@ -110,6 +110,15 @@
<normaloff>:/images/themes/default/propertyicons/system.svg</normaloff>:/images/themes/default/propertyicons/system.svg</iconset>
</property>
</item>
<item>
<property name="text">
<string>Metadata</string>
</property>
<property name="icon">
<iconset resource="../../images/images.qrc">
<normaloff>:/images/themes/default/propertyicons/editmetadata.svg</normaloff>:/images/themes/default/propertyicons/editmetadata.svg</iconset>
</property>
</item>
<item>
<property name="text">
<string>Style</string>
@ -227,7 +236,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>1</number>
<number>2</number>
</property>
<widget class="QWidget" name="mOptsPage_Information">
<layout class="QVBoxLayout" name="verticalLayout_20">
@ -342,6 +351,20 @@ border-radius: 2px;</string>
</item>
</layout>
</widget>
<widget class="QWidget" name="mOptsPage_Metadata">
<layout class="QVBoxLayout" name="verticalLayout_13">
<item>
<widget class="QFrame" name="metadataFrame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="mOptsPage_Style">
<layout class="QVBoxLayout" name="verticalLayout_14">
<property name="leftMargin">

View File

@ -46,7 +46,16 @@
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -111,6 +120,15 @@
<normaloff>:/images/themes/default/propertyicons/system.svg</normaloff>:/images/themes/default/propertyicons/system.svg</iconset>
</property>
</item>
<item>
<property name="text">
<string>Metadata</string>
</property>
<property name="icon">
<iconset resource="../../images/images.qrc">
<normaloff>:/images/themes/default/propertyicons/editmetadata.svg</normaloff>:/images/themes/default/propertyicons/editmetadata.svg</iconset>
</property>
</item>
<item>
<property name="text">
<string>Symbology</string>
@ -273,7 +291,16 @@
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -285,11 +312,20 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>5</number>
<number>2</number>
</property>
<widget class="QWidget" name="mOptsPage_Information">
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -301,7 +337,16 @@
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -318,7 +363,16 @@
</widget>
<widget class="QWidget" name="mOptsPage_Source">
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -334,12 +388,21 @@
<rect>
<x>0</x>
<y>0</y>
<width>651</width>
<height>537</height>
<width>644</width>
<height>522</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -394,7 +457,16 @@ border-radius: 2px;</string>
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -443,7 +515,7 @@ border-radius: 2px;</string>
<property name="checkable">
<bool>false</bool>
</property>
<property name="syncGroup">
<property name="syncGroup" stdset="0">
<string notr="true">vectorgeneral</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_28">
@ -458,7 +530,7 @@ border-radius: 2px;</string>
</widget>
</item>
<item>
<widget class="QgsProjectionSelectionWidget" name="mCrsSelector">
<widget class="QgsProjectionSelectionWidget" name="mCrsSelector" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
@ -564,9 +636,32 @@ border-radius: 2px;</string>
</item>
</layout>
</widget>
<widget class="QWidget" name="mOptsPage_Metadata">
<layout class="QVBoxLayout" name="verticalLayout_27">
<item>
<widget class="QFrame" name="metadataFrame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="mOptsPage_Style">
<layout class="QVBoxLayout" name="verticalLayout_11">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -582,12 +677,21 @@ border-radius: 2px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>651</width>
<height>537</height>
<width>644</width>
<height>522</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_18">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -617,7 +721,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Labels">
<layout class="QVBoxLayout" name="verticalLayout_12">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -640,7 +753,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Fields">
<layout class="QVBoxLayout" name="verticalLayout_15">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -656,12 +778,21 @@ border-radius: 2px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>651</width>
<height>537</height>
<width>644</width>
<height>522</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_20">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -682,7 +813,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Rendering">
<layout class="QVBoxLayout" name="verticalLayout_19">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -698,12 +838,21 @@ border-radius: 2px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>651</width>
<height>537</height>
<width>673</width>
<height>507</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_32">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -716,7 +865,7 @@ border-radius: 2px;</string>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<item row="0" column="0">
<widget class="QgsScaleRangeWidget" name="mScaleRangeWidget">
<widget class="QgsScaleRangeWidget" name="mScaleRangeWidget" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
@ -980,7 +1129,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Display">
<layout class="QVBoxLayout" name="verticalLayout_25">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -989,7 +1147,16 @@ border-radius: 2px;</string>
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_10">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
@ -1000,7 +1167,7 @@ border-radius: 2px;</string>
</widget>
</item>
<item row="0" column="1">
<widget class="QgsFieldExpressionWidget" name="mDisplayExpressionWidget">
<widget class="QgsFieldExpressionWidget" name="mDisplayExpressionWidget" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
@ -1051,7 +1218,7 @@ border-radius: 2px;</string>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QgsFieldExpressionWidget" name="mMapTipExpressionFieldWidget">
<widget class="QgsFieldExpressionWidget" name="mMapTipExpressionFieldWidget" native="true">
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
@ -1070,7 +1237,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Actions">
<layout class="QVBoxLayout" name="verticalLayout_16">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1091,7 +1267,16 @@ border-radius: 2px;</string>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_21">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1118,7 +1303,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Joins">
<layout class="QVBoxLayout" name="verticalLayout_17">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1134,12 +1328,21 @@ border-radius: 2px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>128</width>
<height>116</height>
<width>199</width>
<height>123</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_23">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1223,7 +1426,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Diagrams">
<layout class="QVBoxLayout" name="verticalLayout_10">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1246,7 +1458,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Variables">
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1269,7 +1490,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Legend">
<layout class="QVBoxLayout" name="verticalLayout_8">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1288,7 +1518,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_DataDependencies">
<layout class="QVBoxLayout" name="verticalLayout_29">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1344,7 +1583,16 @@ border-radius: 2px;</string>
</widget>
<widget class="QWidget" name="mOptsPage_Server">
<layout class="QVBoxLayout" name="verticalLayout_14">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1360,12 +1608,21 @@ border-radius: 2px;</string>
<rect>
<x>0</x>
<y>0</y>
<width>651</width>
<height>537</height>
<width>359</width>
<height>527</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_13">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
@ -1373,7 +1630,7 @@ border-radius: 2px;</string>
<property name="title">
<string>Description</string>
</property>
<property name="syncGroup">
<property name="syncGroup" stdset="0">
<string notr="true">vectormeta</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
@ -1515,7 +1772,7 @@ border-radius: 2px;</string>
<property name="title">
<string>Attribution</string>
</property>
<property name="syncGroup">
<property name="syncGroup" stdset="0">
<string notr="true">vectormeta</string>
</property>
<layout class="QGridLayout" name="gridLayout_7">
@ -1561,7 +1818,7 @@ border-radius: 2px;</string>
<property name="title">
<string>MetadataUrl</string>
</property>
<property name="syncGroup">
<property name="syncGroup" stdset="0">
<string notr="true">vectormeta</string>
</property>
<layout class="QGridLayout" name="gridLayout_9">
@ -1759,7 +2016,16 @@ border-radius: 2px;</string>
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_btnbox">
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="2" column="1" colspan="4">