diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..0594c8dcc9 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,8 @@ +**Geochestra/geonetwork checklist** + + +- [ ] PR only involves cherry picked commits from upstream. +- [ ] PR contains custom code which will be soon available in a release on upstream and can be overrided. Mention core-geonetwork version if possible. +- [ ] PR contains custom georchestra code, which need to be verified in future migration. + - [ ] I have properly filled [migration-helper-changelog.md](..%2Fgeorchestra-migration%2Fmigration-helper-changelog.md) file. + diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5b5069a923..55efecfc03 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,10 +13,10 @@ name: "CodeQL" on: push: - branches: [ main ] + branches: [ 4.2.x ] pull_request: # The branches below must be a subset of the branches above - branches: [ main ] + branches: [ 4.2.x ] schedule: - cron: '44 20 * * 5' @@ -38,10 +38,12 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 - + uses: actions/checkout@v4 + with: + show-progress: 'false' + - name: Setup Java JDK - uses: actions/setup-java@v3.5.1 + uses: actions/setup-java@v3.12.0 with: java-version: 8 # Java distribution. See the list of supported distributions in README file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000000..c9bc76806f --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,41 @@ +name: Documentation + +on: + push: + branches: + - 4.2.x + paths: + - "docs/manual/**" + pull_request: + branches: + - 4.2.x + paths: + - "docs/manual/**" + workflow_dispatch: + +jobs: + deploy-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout GeoNetwork + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: 3.x + - name: mkdocs install + run: pip install --upgrade pip && pip install -r docs/manual/requirements.txt + - name: git configuration + run: git config user.name 'github-actions[bot]' && git config user.email 'github-actions[bot]@users.noreply.github.com' + - name: build docs without publishing them + if: ${{ github.event_name == 'pull_request' }} + working-directory: docs/manual + run: | + mike deploy --title "4.2 Stable" --no-redirect --update-aliases 4.2 stable + - name: deploy 4.2 docs to gh-pages branch + if: ${{ github.event_name != 'pull_request' }} + working-directory: docs/manual + run: | + mike deploy --push --title "4.2 Stable" --no-redirect --update-aliases 4.2 stable diff --git a/.github/workflows/georchestra-gn4.yml b/.github/workflows/georchestra-gn4.yml index ee8d54355a..076d172150 100644 --- a/.github/workflows/georchestra-gn4.yml +++ b/.github/workflows/georchestra-gn4.yml @@ -56,12 +56,6 @@ jobs: - name: "run tests" run: mvn verify -Pit - - name: "Building the docker image" - working-directory: web/ - run: | - mvn clean package docker:build -Pdocker,log4j-logstash,sentry-log4j \ - -DdockerImageName=georchestra/geonetwork:${DOCKER_TAG} -DskipTests - - name: "publish the webapp as artifact" if: github.repository == 'georchestra/geonetwork' && github.actor != 'dependabot[bot]' && github.ref == 'refs/heads/georchestra-gn4.2.x' && github.event_name != 'pull_request' uses: actions/upload-artifact@v1 diff --git a/.gitignore b/.gitignore index 5a40ff33a1..23cf0b3eb7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,8 +12,11 @@ git*.properties */*/.* */*/target/ */target/ +**/.idea +**/.settings .*/ -GeoNetwork* +!.github +#GeoNetwork* /geonetwork* camel-harvesters/wfsfeature-harvester/logs changes-* @@ -81,6 +84,7 @@ web/src/main/webapp/WEB-INF/data/wro4j-cache* web/src/main/webapp/WEB-INF/data_* web/src/main/webapp/WEB-INF/metadata_subversion/ web/src/main/webapp/WEB-INF/server.prop +web/src/main/webapp/WEB-INF/prebuilt web/src/main/webapp/data/ web/src/main/webapp/doc/en web/src/main/webapp/doc/fr diff --git a/.gitmodules b/.gitmodules index 67303aee7d..ec6788d718 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,6 +7,3 @@ [submodule "web-ui/src/main/resources/catalog/lib/bootstrap-table"] path = web-ui/src/main/resources/catalog/lib/bootstrap-table url = https://github.com/wenzhixin/bootstrap-table.git -[submodule "docs/manuals"] - path = docs/manuals - url = https://github.com/geonetwork/doc.git diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 698871368c..ab418f3efe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,13 +11,19 @@ Thank you for contributing to GeoNetwork: * Pull requests must be applied to `main`, before being backported. +* Before merging a pull request, should be defined the following properties: + + - Milestone to include the change. + - Add the label `changelog` when the change is relevant to be added to the release changelog file . + - Add the label(s) to the backport to previous branch(es), when the change is a bug fix or if it is a small improvement that may be relevant to the backport. + * Good housekeeping: Anytime you commit, try and clean the code around it to latest style guide. If you improve a function without comments: add comments. If you modify functionality that does not have tests: write a test. If you fix functionality without documentation: add documentation. -* History: Clean commit messages and history: avoid big commits with hundreds of files, break commits commits up into understandable chunks, longer verbose commit messages are encouraged. Beware of reformatting and needless whitespace changes. +* History: Clean commit messages and history: avoid big commits with hundreds of files, break commits up into understandable chunks, longer verbose commit messages are encouraged. Beware of reformatting and needless whitespace changes. * Draft: Use pull request *Draft** (or even the text "WIP") to identify work in progress. -* Rebase: No merge commits with current branch: use rebase! +* Rebase / Squash and merge: No merge commits with current branch, use Rebase or Squash and merge! * API Change: Please identify any API change or behavior changes in commit messages. diff --git a/cachingxslt/pom.xml b/cachingxslt/pom.xml index ed9b89e9d1..145fd678a2 100644 --- a/cachingxslt/pom.xml +++ b/cachingxslt/pom.xml @@ -31,7 +31,7 @@ org.geonetwork-opensource geonetwork - 4.2.2-georchestra + 4.2.7-georchestra diff --git a/code_quality/README.md b/code_quality/README.md index fcea5269fb..5c708c35ae 100644 --- a/code_quality/README.md +++ b/code_quality/README.md @@ -1,3 +1,3 @@ The files in this directory are used for configuring IDEs or are used by the build tool to make certain code quality checks. -For example findbugs-ecludes is used by both the build tool's findbugs implementation as well as IDES for running findbugs. \ No newline at end of file +For example, findbugs-excludes is used by both the build tool's findbugs implementation as well as IDES for running findbugs. diff --git a/common/pom.xml b/common/pom.xml index f447dc7a8e..c54acce505 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -31,7 +31,7 @@ org.geonetwork-opensource geonetwork - 4.2.2-georchestra + 4.2.7-georchestra diff --git a/common/src/main/java/org/fao/geonet/utils/AbstractHttpRequest.java b/common/src/main/java/org/fao/geonet/utils/AbstractHttpRequest.java index 457842d0a4..9d4f92adc1 100644 --- a/common/src/main/java/org/fao/geonet/utils/AbstractHttpRequest.java +++ b/common/src/main/java/org/fao/geonet/utils/AbstractHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -83,7 +83,7 @@ public class AbstractHttpRequest { private boolean useProxy; private String proxyHost; private int proxyPort; - private ArrayList alSimpleParams = new ArrayList(); + private ArrayList alSimpleParams = new ArrayList<>(); private String postData; private boolean preemptiveBasicAuth; private HttpClientContext httpClientContext; @@ -303,9 +303,9 @@ protected HttpRequestBase setupHttpMethod() throws IOException { } if (host == null || protocol == null) { - throw new IllegalStateException(String.format(getClass().getSimpleName() + " is not ready to be executed: \n\tprotocol: '%s' " + + throw new IllegalStateException(String.format("%s is not ready to be executed: \n\tprotocol: '%s' " + "\n\tuserinfo: '%s'\n\thost: '%s' \n\tport: '%s' \n\taddress: '%s'\n\tquery '%s'" + - "\n\tfragment: '%s'", protocol, userInfo, host, port, address, query, fragment)); + "\n\tfragment: '%s'", getClass().getSimpleName(), protocol, userInfo, host, port, address, query, fragment)); } HttpRequestBase httpMethod; @@ -352,25 +352,25 @@ protected HttpRequestBase setupHttpMethod() throws IOException { protected String getSentData(HttpRequestBase httpMethod) { URI uri = httpMethod.getURI(); - StringBuilder sentData = new StringBuilder(httpMethod.getMethod()).append(" ").append(uri.getPath()); + StringBuilder sentDataValue = new StringBuilder(httpMethod.getMethod()).append(" ").append(uri.getPath()); if (uri.getQuery() != null) { - sentData.append("?" + uri.getQuery()); + sentDataValue.append("?" + uri.getQuery()); } - sentData.append("\r\n"); + sentDataValue.append("\r\n"); for (Header h : httpMethod.getAllHeaders()) { - sentData.append(h); + sentDataValue.append(h); } - sentData.append("\r\n"); + sentDataValue.append("\r\n"); if (httpMethod instanceof HttpPost) { - sentData.append(postData); + sentDataValue.append(postData); } - return sentData.toString(); + return sentDataValue.toString(); } private Element soapEmbed(Element elem) { @@ -393,7 +393,7 @@ protected Element soapUnembed(Element envelope) throws BadSoapResponseEx { List list = body.getChildren(); - if (list.size() == 0) + if (list.isEmpty()) throw new BadSoapResponseEx(envelope); return list.get(0); diff --git a/common/src/main/java/org/fao/geonet/utils/GeonetHttpRequestFactory.java b/common/src/main/java/org/fao/geonet/utils/GeonetHttpRequestFactory.java index 7ba666fd2a..bd548561c0 100644 --- a/common/src/main/java/org/fao/geonet/utils/GeonetHttpRequestFactory.java +++ b/common/src/main/java/org/fao/geonet/utils/GeonetHttpRequestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -200,6 +200,7 @@ public HttpClientBuilder getDefaultHttpClientBuilder() { final HttpClientBuilder builder = HttpClientBuilder.create(); builder.setRedirectStrategy(new LaxRedirectStrategy()); builder.disableContentCompression(); + builder.useSystemProperties(); synchronized (this) { if (connectionManager == null) { @@ -249,40 +250,40 @@ public void closeIdleConnections(long idleTimeout, TimeUnit tunit) { private static class AdaptingResponse extends AbstractClientHttpResponse { - private final CloseableHttpResponse _response; - private final CloseableHttpClient _client; + private final CloseableHttpResponse response; + private final CloseableHttpClient client; public AdaptingResponse(CloseableHttpClient client, CloseableHttpResponse response) { - this._response = response; - this._client = client; + this.response = response; + this.client = client; } @Override public int getRawStatusCode() throws IOException { - return _response.getStatusLine().getStatusCode(); + return response.getStatusLine().getStatusCode(); } @Override public String getStatusText() throws IOException { - return _response.getStatusLine().getReasonPhrase(); + return response.getStatusLine().getReasonPhrase(); } @Override public void close() { - IOUtils.closeQuietly(_response); - IOUtils.closeQuietly(_client); + IOUtils.closeQuietly(response); + IOUtils.closeQuietly(client); } @Override public InputStream getBody() throws IOException { - return _response.getEntity().getContent(); + return response.getEntity().getContent(); } @Override public HttpHeaders getHeaders() { final HttpHeaders httpHeaders = new HttpHeaders(); - final Header[] headers = _response.getAllHeaders(); + final Header[] headers = response.getAllHeaders(); for (Header header : headers) { final HeaderElement[] elements = header.getElements(); diff --git a/common/src/main/java/org/fao/geonet/utils/IO.java b/common/src/main/java/org/fao/geonet/utils/IO.java index f3eaeeb034..bfdcb57dd2 100644 --- a/common/src/main/java/org/fao/geonet/utils/IO.java +++ b/common/src/main/java/org/fao/geonet/utils/IO.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2005 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -30,6 +30,8 @@ import org.fao.geonet.utils.debug.DebuggingInputStream; import org.fao.geonet.utils.debug.DebuggingReader; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -37,31 +39,15 @@ import java.net.URI; import java.net.URL; import java.nio.charset.Charset; -import java.nio.file.DirectoryStream; -import java.nio.file.FileSystem; -import java.nio.file.FileSystemNotFoundException; -import java.nio.file.FileSystems; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.StandardCopyOption; +import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileTime; import java.sql.ResultSet; import java.sql.Statement; -import java.util.Comparator; -import java.util.HashMap; import java.util.Iterator; -import java.util.Map; import java.util.Objects; -import java.util.TreeSet; import java.util.concurrent.TimeUnit; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - //============================================================================= /** diff --git a/common/src/main/java/org/fao/geonet/utils/Log.java b/common/src/main/java/org/fao/geonet/utils/Log.java index 5521672ab0..094dfb4942 100644 --- a/common/src/main/java/org/fao/geonet/utils/Log.java +++ b/common/src/main/java/org/fao/geonet/utils/Log.java @@ -105,6 +105,16 @@ public final class Log { public static final String TRANSFORMER_FACTORY = JEEVES + ".transformerFactory"; + /** + * This is the name of the RollingFileAppender in your log4j2.xml configuration file. + *

+ * LogConfig uses this name to lookup RollingFileAppender to check configuration in + * case a custom log file location has been used. + */ + private static final String FILE_APPENDER_NAME = "File"; + + public static final String GEONETWORK_MODULE = "geonetwork"; + /** * Default constructor. Builds a Log. */ @@ -331,4 +341,62 @@ public static File toLogFile(Appender appender) { return null; } + public static File getLogfile() { + // Appender is supplied by LogUtils based on parsing log4j2.xml file indicated + // by database settings + + // First, try the fileappender from the logger named "geonetwork" + org.apache.log4j.Appender appender = org.apache.log4j.Logger.getLogger(GEONETWORK_MODULE).getAppender(FILE_APPENDER_NAME); + // If still not found, try the one from the logger named "jeeves" + if (appender == null) { + appender = org.apache.log4j.Logger.getLogger(Log.JEEVES).getAppender(FILE_APPENDER_NAME); + } + if (appender != null) { + if (appender instanceof AppenderWrapper) { + AppenderWrapper wrapper = (AppenderWrapper) appender; + org.apache.logging.log4j.core.Appender appender2 = wrapper.getAppender(); + + if (appender2 instanceof FileAppender) { + FileAppender fileAppender = (FileAppender) appender2; + String logFileName = fileAppender.getFileName(); + if (logFileName != null) { + File logFile = new File(logFileName); + if (logFile.exists()) { + return logFile; + } + } + } + if (appender2 instanceof RollingFileAppender) { + RollingFileAppender fileAppender = (RollingFileAppender) appender2; + String logFileName = fileAppender.getFileName(); + if (logFileName != null) { + File logFile = new File(logFileName); + if (logFile.exists()) { + return logFile; + } + } + } + } + } + Log.warning(GEONETWORK_MODULE, "Error when getting logger file for the " + "appender named '" + FILE_APPENDER_NAME + "'. " + + "Check your log configuration file. " + + "A FileAppender or RollingFileAppender is required to return last activity to the user interface." + + "Appender file not found."); + + if (System.getProperties().containsKey("log_dir")) { + File logDir = new File(System.getProperty("log_dir")); + if (logDir.exists() && logDir.isDirectory()) { + File logFile = new File(logDir, "logs/geonetwork.log"); + if (logFile.exists()) { + return logFile; + } + } + } else { + File logFile = new File("logs/geonetwork.log"); + if (logFile.exists()) { + return logFile; + } + } + return null; // unavailable + } } diff --git a/common/src/main/java/org/fao/geonet/utils/Xml.java b/common/src/main/java/org/fao/geonet/utils/Xml.java index 59636fc9c9..c796fbfe4e 100644 --- a/common/src/main/java/org/fao/geonet/utils/Xml.java +++ b/common/src/main/java/org/fao/geonet/utils/Xml.java @@ -31,14 +31,9 @@ import net.sf.saxon.Configuration; import net.sf.saxon.Controller; import net.sf.saxon.FeatureKeys; -import org.apache.commons.io.IOUtils; import org.apache.fop.apps.Fop; import org.apache.fop.apps.FopFactory; import org.apache.fop.apps.MimeConstants; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.DefaultHttpClient; import org.apache.xml.resolver.tools.CatalogResolver; import org.fao.geonet.exceptions.XSDValidationErrorEx; import org.fao.geonet.utils.nio.NioPathAwareEntityResolver; @@ -100,7 +95,6 @@ import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder; -import java.nio.charset.StandardCharsets; import java.nio.file.FileSystemNotFoundException; import java.nio.file.Files; import java.nio.file.NoSuchFileException; @@ -135,6 +129,7 @@ public final class Xml { + "\uE000-\uFFFD" + "\ud800\udc00-\udbff\udfff" + "]"; + public static final String XML_VERSION_HEADER = "<\\?xml version=['\"]1.0['\"] encoding=['\"].*['\"]\\?>\\s*"; public static SAXBuilder getSAXBuilder(boolean validate) { SAXBuilder builder = getSAXBuilderWithPathXMLResolver(validate, null); @@ -398,6 +393,9 @@ public static Object unmarshall(Element xml, Class clazz) throws Exception { public static Element transform(Element xml, Path styleSheetPath, Map params) throws Exception { JDOMResult resXml = new JDOMResult(); transform(xml, styleSheetPath, resXml, params); + if (resXml.getDocument() == null) { + throw new NullPointerException("Failed to create a Document for " + resXml.getResult()); + } return (Element) resXml.getDocument().getRootElement().detach(); } //-------------------------------------------------------------------------- @@ -1118,6 +1116,10 @@ private static void doCreateAttributesXpathExpr(StringBuilder builder, List")); + assertEquals(true, + Xml.isXMLLike("")); + assertEquals(true, + Xml.isXMLLike("\n")); + assertEquals(true, + Xml.isRDFLike("\n")); + assertEquals(true, + Xml.isRDFLike("\n")); + } } diff --git a/core/README.md b/core/README.md index f9d23d22e6..cc99498e81 100644 --- a/core/README.md +++ b/core/README.md @@ -1,9 +1,9 @@ -The core module contains the core Geonetwork classes. For example SearchManager for searching the metadata index, DataManager for saving +The core module contains the core Geonetwork classes. For example, EsSearchManager for searching the metadata index, DataManager for saving and loading Metadata. -Services, Harvesters, etc... that are are plugins will usually depend on core and will make use of these core classes to implement their +Services, Harvesters, etc... that are plugins will usually depend on core and will make use of these core classes to implement their services. -Geonetwork is wired together via Spring-Dependency-Injection. The critical classes (DataManager, SchemaManager, SearchManager, etc...) are +Geonetwork is wired together via Spring-Dependency-Injection. The critical classes (DataManager, SchemaManager, EsSearchManager, etc...) are all singleton beans in the application context and can be either injected into other beans or obtained via the ServiceContext.getBean -method (or ServiceContext.getApplicationContext()). \ No newline at end of file +method (or ServiceContext.getApplicationContext()). diff --git a/core/pom.xml b/core/pom.xml index 0ba137fc72..c961a0fb62 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -27,13 +27,13 @@ geonetwork org.geonetwork-opensource - 4.2.2-georchestra + 4.2.7-georchestra 4.0.0 gn-core GeoNetwork core - 4.2.2-georchestra + 4.2.7-georchestra @@ -386,26 +386,20 @@ ${project.groupId} gn-domain - ${project.parent.version} + ${project.version} tests test ${project.groupId} gn-events - ${project.parent.version} + ${project.version} org.apache.jclouds jclouds-all - 2.2.1 - - - javax.annotation - jsr250-api - - + 2.3.0 @@ -501,27 +495,27 @@ ${project.groupId} gn-oaipmh - ${project.parent.version} + ${project.version} ${project.groupId} gn-domain - ${project.parent.version} + ${project.version} ${project.groupId} gn-cachingxslt - ${project.parent.version} + ${project.version} org.geonetwork-opensource.schemas gn-schema-iso19139 - ${project.parent.version} + ${project.version} ${project.groupId} gn-dummy-api - ${project.parent.version} + ${project.version} @@ -593,7 +587,7 @@ ${project.groupId} gn-index - ${project.parent.version} + ${project.version} org.springframework @@ -607,7 +601,7 @@ com.amazonaws aws-java-sdk-s3 - 1.11.618 + 1.12.261 org.jasypt diff --git a/core/src/main/java/jeeves/config/springutil/JeevesNodeAwareLogoutSuccessHandler.java b/core/src/main/java/jeeves/config/springutil/JeevesNodeAwareLogoutSuccessHandler.java index e1c0aec969..8442c90959 100644 --- a/core/src/main/java/jeeves/config/springutil/JeevesNodeAwareLogoutSuccessHandler.java +++ b/core/src/main/java/jeeves/config/springutil/JeevesNodeAwareLogoutSuccessHandler.java @@ -26,11 +26,15 @@ import org.fao.geonet.NodeInfo; import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.setting.Settings; +import org.fao.geonet.constants.Geonet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; +import org.apache.commons.lang3.StringUtils; +import org.fao.geonet.kernel.setting.SettingInfo; + import java.io.IOException; import java.net.MalformedURLException; @@ -84,8 +88,10 @@ protected String determineTargetUrl(HttpServletRequest request, HttpServletRespo String siteHost = settingManager.getValue(Settings.SYSTEM_SERVER_HOST); String siteProtocol = settingManager.getValue(Settings.SYSTEM_SERVER_PROTOCOL); - int sitePort = settingManager.getValueAsInt(Settings.SYSTEM_SERVER_PORT); - + + // some conditional logic to handle the case where there's no port in the settings + SettingInfo si = new SettingInfo(); + int sitePort = si.getSitePort(); if (!hostName.equalsIgnoreCase(siteHost) || !protocol.equalsIgnoreCase(siteProtocol) || diff --git a/core/src/main/java/jeeves/server/dispatchers/ServiceManager.java b/core/src/main/java/jeeves/server/dispatchers/ServiceManager.java index b742d7f00d..c99f6b92b4 100644 --- a/core/src/main/java/jeeves/server/dispatchers/ServiceManager.java +++ b/core/src/main/java/jeeves/server/dispatchers/ServiceManager.java @@ -356,17 +356,26 @@ public ServiceContext createServiceContext(String name, ConfigurableApplicationC return context; } + /** + * If we do have the optional x-forwarded-for request header then + * use whatever is in it to record ip address of client + */ + public static String getRequestIpAddress(HttpServletRequest request) { + String xForwardedForHeader = request.getHeader("x-forwarded-for"); + return StringUtils.isNotEmpty(xForwardedForHeader) + ? xForwardedForHeader : request.getRemoteAddr(); + } + + public ServiceContext createServiceContext(String name, String lang, HttpServletRequest request) { ServiceContext context = new ServiceContext(name, ApplicationContextHolder.get(), htContexts, entityManager); context.setBaseUrl(baseUrl); context.setLanguage(lang); - context.setIpAddress(request.getRemoteAddr()); + context.setIpAddress(getRequestIpAddress(request)); context.setMaxUploadSize(maxUploadSize); context.setServlet(servlet); - String ip = request.getRemoteAddr(); - // Session is created by ApiInterceptor when needed // Save the session here in the ServiceContext (not used in the API package). final HttpSession httpSession = request.getSession(false); diff --git a/core/src/main/java/jeeves/server/sources/ServiceRequestFactory.java b/core/src/main/java/jeeves/server/sources/ServiceRequestFactory.java index 8310e69764..5e89a7d534 100644 --- a/core/src/main/java/jeeves/server/sources/ServiceRequestFactory.java +++ b/core/src/main/java/jeeves/server/sources/ServiceRequestFactory.java @@ -24,6 +24,7 @@ package jeeves.server.sources; import jeeves.constants.Jeeves; +import jeeves.server.dispatchers.ServiceManager; import jeeves.server.sources.ServiceRequest.InputMethod; import jeeves.server.sources.ServiceRequest.OutputMethod; import jeeves.server.sources.http.HttpServiceRequest; @@ -102,9 +103,7 @@ public static ServiceRequest create(HttpServletRequest req, srvReq.setLanguage(lang); srvReq.setService(service); srvReq.setJSONOutput(extractJSONFlag(req.getQueryString())); - String ip = req.getRemoteAddr(); - String forwardedFor = req.getHeader("x-forwarded-for"); - if (forwardedFor != null) ip = forwardedFor; + String ip = ServiceManager.getRequestIpAddress(req); srvReq.setAddress(ip); srvReq.setOutputStream(res.getOutputStream()); diff --git a/core/src/main/java/jeeves/server/sources/http/JeevesServlet.java b/core/src/main/java/jeeves/server/sources/http/JeevesServlet.java index 154a268212..17ef9e745b 100644 --- a/core/src/main/java/jeeves/server/sources/http/JeevesServlet.java +++ b/core/src/main/java/jeeves/server/sources/http/JeevesServlet.java @@ -29,6 +29,7 @@ import jeeves.constants.Jeeves; import jeeves.server.JeevesEngine; import jeeves.server.UserSession; +import jeeves.server.dispatchers.ServiceManager; import jeeves.server.sources.ServiceRequest; import jeeves.server.sources.ServiceRequestFactory; @@ -113,13 +114,7 @@ public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOExc //--------------------------------------------------------------------------- private void execute(HttpServletRequest req, HttpServletResponse res) throws IOException { - String ip = req.getRemoteAddr(); - // if we do have the optional x-forwarded-for request header then - // use whatever is in it to record ip address of client - String forwardedFor = req.getHeader("x-forwarded-for"); - if (forwardedFor != null) { - ip = forwardedFor; - } + String ip = ServiceManager.getRequestIpAddress(req); Log.info(Log.REQUEST, "=========================================================="); Log.info(Log.REQUEST, "HTML Request (from " + ip + ") : " + req.getRequestURI()); diff --git a/core/src/main/java/jeeves/services/RegExpReplace.java b/core/src/main/java/jeeves/services/RegExpReplace.java index 9a6dc18149..a172f82c4e 100644 --- a/core/src/main/java/jeeves/services/RegExpReplace.java +++ b/core/src/main/java/jeeves/services/RegExpReplace.java @@ -42,7 +42,7 @@ //============================================================================= /** - * This service reads a configuration xml file containint containing pattern-replacement pairs and + * This service reads a configuration xml file containing pattern-replacement pairs and * applies all the pairs to each text element of the output. The configuration is read from * xml/regexp.xml and is formatted: */ diff --git a/core/src/main/java/org/fao/geonet/MetadataResourceDatabaseMigration.java b/core/src/main/java/org/fao/geonet/MetadataResourceDatabaseMigration.java index 7cf4be53b1..ff9e62cc6b 100644 --- a/core/src/main/java/org/fao/geonet/MetadataResourceDatabaseMigration.java +++ b/core/src/main/java/org/fao/geonet/MetadataResourceDatabaseMigration.java @@ -78,7 +78,7 @@ public class MetadataResourceDatabaseMigration extends DatabaseMigrationTask { "gmd:fileDescription/gco:CharacterString = 'large_thumbnail']/gmd:fileName/" + "gco:CharacterString[not(starts-with(normalize-space(text()), 'http'))]"; private static final String XPATH_THUMBNAIL_WITH_URL = - "*//gmd:graphicOverview/gmd:MD_BrowseGraphic[gmd:fileDescription/gco:CharacterString]/gmd:fileName/gco:CharacterString[starts-with(normalize-space(text()), 'http')]"; + "*//gmd:graphicOverview/gmd:MD_BrowseGraphic/gmd:fileName/gco:CharacterString[starts-with(normalize-space(text()), 'http')]"; private static final String XPATH_ATTACHMENTS_WITH_URL = "*//gmd:CI_OnlineResource/gmd:linkage/gmd:URL"; diff --git a/core/src/main/java/org/fao/geonet/api/records/attachments/CMISStore.java b/core/src/main/java/org/fao/geonet/api/records/attachments/CMISStore.java index 3aea91d393..87f74ab998 100644 --- a/core/src/main/java/org/fao/geonet/api/records/attachments/CMISStore.java +++ b/core/src/main/java/org/fao/geonet/api/records/attachments/CMISStore.java @@ -65,6 +65,8 @@ public class CMISStore extends AbstractStore { private Path baseMetadataDir = null; + private static final String CMIS_PROPERTY_PREFIX = "cmis:"; + @Autowired CMISConfiguration cmisConfiguration; @@ -214,75 +216,64 @@ protected MetadataResource putResource(final ServiceContext context, final Strin // Reset Filter from the default operationalContext to include all fields because we may need secondary properties. oc.setFilter(null); - CmisObject cmisObject; + Map properties = new HashMap(); + Document doc; try { - cmisObject = cmisConfiguration.getClient().getObjectByPath(key, oc); - } catch (Exception e) { - cmisObject = null; - } + doc = (Document) cmisConfiguration.getClient().getObjectByPath(key, oc); - Map properties = new HashMap(); - if (!StringUtils.isEmpty(cmisConfiguration.getCmisMetadataUUIDPropertyName()) && !cmisConfiguration.existMetadataUUIDSecondaryProperty()) { - setCmisMetadataUUIDPrimary(properties, metadataUuid); + // Update existing document + setCmisProperties(metadataUuid, properties, doc, additionalProperties); + doc = cmisUtils.saveDocument(key, doc, properties, is, changeDate); + } catch (CmisObjectNotFoundException e) { + // add new document + setCmisProperties(metadataUuid, properties, null, additionalProperties); + doc = cmisUtils.saveDocument(key, null, properties, is, changeDate); } - // If cmisObject is empty then it is a new record. With new records, we need to set the default value for the status. - MetadataResourceExternalManagementProperties.ValidationStatus defaultStatus = null; - // We only need to set the default if there is a status property supplied. - if (!StringUtils.isEmpty(cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName())) { - if (cmisConfiguration.getExternalResourceManagementValidationStatusDefaultValue() != null) { - // If a default property name does exist then use it - defaultStatus = MetadataResourceExternalManagementProperties.ValidationStatus.valueOf(cmisConfiguration.getExternalResourceManagementValidationStatusDefaultValue()); - } else { - // Otherwise lets default to incomplete. - // Reason - as the administrator decided to use the status, it most likely means that there are extra properties that need to be set after a file is uploaded so defaulting it to - // incomplete seems reasonable. - defaultStatus = MetadataResourceExternalManagementProperties.ValidationStatus.INCOMPLETE; - } - if (cmisObject==null && - !cmisConfiguration.existExternalResourceManagementValidationStatusSecondaryProperty() && - !properties.containsKey(cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName()) - ) { - setCmisExternalManagementResourceStatusPrimary(properties, defaultStatus); - } + return createResourceDescription(context, metadataUuid, visibility, filename, + doc, metadataId, approved); + } + + protected void setCmisProperties(String metadataUuid, Map properties, Document doc, Map additionalProperties) { + + // Add additional properties if exists. + if (MapUtils.isNotEmpty(additionalProperties)) { + properties.putAll(additionalProperties); } - Document doc = cmisUtils.saveDocument(key, cmisObject, properties, is, changeDate); + // now update metadata uuid and status within primary cmis fields if needed. - // The optional metadata UUID is assigned to a user-defined property in the content management system. - // In some content management systems, custom properties appear as CMIS Secondary properties. - // CMIS Secondary properties cannot be set in the same call that creates the document and sets it's properties, - // so this is done in the following call after the document is created + // Don't allow users metadata uuid to be supplied as a property so let's overwrite any value that may exist. + if (!StringUtils.isEmpty(cmisConfiguration.getCmisMetadataUUIDPropertyName())) { + setCmisMetadataUUIDPrimary(properties, metadataUuid); + } + // If document is empty it is a new record so set the default status value property if it does not already exist as an additional property. + if (doc == null && + !StringUtils.isEmpty(cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName()) && + !properties.containsKey(cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName())) { + setCmisExternalManagementResourceStatusPrimary(properties, cmisConfiguration.getValidationStatusDefaultValue()); + } + + // If we have secondary properties then lets apply those changes as well. if (cmisConfiguration.existSecondaryProperty()) { - Map secondaryProperties = new HashMap<>(); - if (MapUtils.isNotEmpty(additionalProperties)) { - secondaryProperties.putAll(additionalProperties); + Property secondaryProperties = null; + if (doc != null) { + secondaryProperties = doc.getProperty(PropertyIds.SECONDARY_OBJECT_TYPE_IDS); } + + // Don't allow users metadata uuid to be supplied as a property so let's overwrite any value that may exist. if (cmisConfiguration.existMetadataUUIDSecondaryProperty()) { - setCmisMetadataUUIDSecondary(doc, secondaryProperties, metadataUuid); + setCmisMetadataUUIDSecondary(secondaryProperties, properties, metadataUuid); } - - // If cmisObject is empty and the property does not already exist as an additional secondary property then it is a new record. - // With new records, we need to set the default value for the status. - if (cmisObject==null && + // If document is empty it is a new record so set the default status value property if it does not already exist as an additional secondary property. + if (doc == null && cmisConfiguration.existExternalResourceManagementValidationStatusSecondaryProperty() && - !secondaryProperties.containsKey(cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName().split(CMISConfiguration.CMIS_SECONDARY_PROPERTY_SEPARATOR)[1])) { - setCmisExternalManagementResourceStatusSecondary(doc, secondaryProperties, defaultStatus); - } - - try { - doc.updateProperties(secondaryProperties); - } catch (Exception e) { - Log.error(Geonet.RESOURCES, - String.format("Unable to update CMIS secondary property on metadata resource '%s' for metadata '%s'.", key, metadataUuid), e); - throw e; + !properties.containsKey(cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName().split(CMISConfiguration.CMIS_SECONDARY_PROPERTY_SEPARATOR)[1])) { + setCmisExternalManagementResourceStatusSecondary(secondaryProperties, properties, cmisConfiguration.getValidationStatusDefaultValue()); } } - return createResourceDescription(context, metadataUuid, visibility, filename, - doc, metadataId, approved); } - protected void setCmisMetadataUUIDPrimary(Map properties, String metadataUuid) { setCmisPrimaryProperty(properties, cmisConfiguration.getCmisMetadataUUIDPropertyName(), metadataUuid); } @@ -298,22 +289,21 @@ protected void setCmisPrimaryProperty(Map properties, String pro } } - protected void setCmisExternalManagementResourceStatusSecondary(Document doc, Map properties, MetadataResourceExternalManagementProperties.ValidationStatus status) { - setCmisSecondaryProperty(doc, properties, cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName(), status.getValue()); + protected void setCmisExternalManagementResourceStatusSecondary(Property secondaryProperty, Map properties, MetadataResourceExternalManagementProperties.ValidationStatus status) { + setCmisSecondaryProperty(secondaryProperty, properties, cmisConfiguration.getExternalResourceManagementValidationStatusPropertyName(), status.getValue()); } - protected void setCmisMetadataUUIDSecondary(Document doc, Map properties, String metadataUuid) { - setCmisSecondaryProperty(doc, properties, cmisConfiguration.getCmisMetadataUUIDPropertyName(), metadataUuid); + protected void setCmisMetadataUUIDSecondary(Property secondaryProperty, Map properties, String metadataUuid) { + setCmisSecondaryProperty(secondaryProperty, properties, cmisConfiguration.getCmisMetadataUUIDPropertyName(), metadataUuid); } - protected void setCmisSecondaryProperty(Document doc, Map properties, String propertyName, Object value) { + protected void setCmisSecondaryProperty(Property secondaryProperty, Map properties, String propertyName, Object value) { if (!StringUtils.isEmpty(propertyName) && propertyName.contains(cmisConfiguration.getSecondaryPropertySeparator())) { String[] splitPropertyNames = propertyName.split(Pattern.quote(cmisConfiguration.getSecondaryPropertySeparator())); String aspectName = splitPropertyNames[0]; String secondaryPropertyName = splitPropertyNames[1]; List aspects = null; - Property secondaryProperty = doc.getProperty(PropertyIds.SECONDARY_OBJECT_TYPE_IDS); if (secondaryProperty != null) { // It may return an unmodifiable list and we need to potentially modify the list so lets make a copy of the list. aspects = new ArrayList<>(secondaryProperty.getValues()); @@ -501,21 +491,19 @@ public MetadataResourceContainer getResourceContainerDescription(final ServiceCo final String key = getMetadataDir(context, metadataId); - try { - String folderRoot = cmisConfiguration.getExternalResourceManagementFolderRoot(); - if (folderRoot == null) { - folderRoot = ""; - } - Folder parentFolder = cmisUtils.getFolderCache(key + folderRoot); - MetadataResourceExternalManagementProperties metadataResourceExternalManagementProperties = - getMetadataResourceExternalManagementProperties(context, metadataId, metadataUuid, null, String.valueOf(metadataId), null, null, parentFolder.getId(), parentFolder.getType(), MetadataResourceExternalManagementProperties.ValidationStatus.UNKNOWN); - return new FilesystemStoreResourceContainer(metadataUuid, metadataId, metadataUuid, - settingManager.getNodeURL() + "api/records/", metadataResourceExternalManagementProperties, approved); - - } catch (CmisObjectNotFoundException e) { - return null; + String folderRoot = cmisConfiguration.getExternalResourceManagementFolderRoot(); + if (folderRoot == null) { + folderRoot = ""; } + Folder parentFolder = cmisUtils.getFolderCache(key + folderRoot, false, true); + MetadataResourceExternalManagementProperties metadataResourceExternalManagementProperties = + getMetadataResourceExternalManagementProperties(context, metadataId, metadataUuid, null, String.valueOf(metadataId), null, null, parentFolder.getId(), parentFolder.getType(), MetadataResourceExternalManagementProperties.ValidationStatus.UNKNOWN); + + return new FilesystemStoreResourceContainer(metadataUuid, metadataId, metadataUuid, + settingManager.getNodeURL() + "api/records/", metadataResourceExternalManagementProperties, approved); + + } @Override @@ -536,28 +524,33 @@ public void copyResources(ServiceContext context, String sourceUuid, String targ Document sourceDocument = sourceEntry.getValue(); // Get cmis properties from the source document - Map sourceProperties = getSecondaryProperties(sourceDocument); + Map sourceProperties = getProperties(sourceDocument); putResource(context, targetUuid, sourceDocument.getName(), sourceDocument.getContentStream().getStream(), null, metadataResourceVisibility, targetApproved, sourceProperties); } - } catch (CmisObjectNotFoundException e) { - Log.warning("Cannot find folder object from CMIS ... Abort copping resources from "+sourceResourceTypeDir, e); + } catch (CmisObjectNotFoundException | ResourceNotFoundException e) { + Log.warning(Geonet.RESOURCES, "Cannot find folder object from CMIS ... Abort copping resources from " + sourceResourceTypeDir); } } - protected Map getSecondaryProperties(Document document) { - String aspectId=null; + protected Map getProperties(Document document) { + Map properties = new HashMap<>(); + + // Get secondary properties aspect if it exists. + String aspectId = null; Property aspectProperty = document.getProperty(PropertyIds.SECONDARY_OBJECT_TYPE_IDS); - if (aspectProperty != null) { + if (aspectProperty != null && !StringUtils.isEmpty(aspectProperty.getValueAsString())) { aspectId = aspectProperty.getValueAsString(); } - Map properties = new HashMap<>(); - if (!StringUtils.isEmpty(aspectId)) { - for (Property property:document.getProperties()) { - if (property.getId().startsWith(aspectId) && property.getValue()!=null) { - properties.put(property.getId(), property.getValue()); - } + for (Property property : document.getProperties()) { + // Add secondary properties if exists. + if (aspectId != null && property.getId().startsWith(aspectId) && property.getValue() != null) { + properties.put(property.getId(), property.getValue()); + } + // Add other common cmis properties. + if (property.getId().startsWith(CMIS_PROPERTY_PREFIX) && property.getValue() != null) { + properties.put(property.getId(), property.getValue()); } } diff --git a/core/src/main/java/org/fao/geonet/api/tools/i18n/TranslationPackBuilder.java b/core/src/main/java/org/fao/geonet/api/tools/i18n/TranslationPackBuilder.java index 3d301ab938..f290068098 100644 --- a/core/src/main/java/org/fao/geonet/api/tools/i18n/TranslationPackBuilder.java +++ b/core/src/main/java/org/fao/geonet/api/tools/i18n/TranslationPackBuilder.java @@ -201,72 +201,59 @@ public Map getDbTranslation(String language, List type) if (type == null || type.contains("StatusValue")) { List valueList = statusValueRepository.findAll(); - Iterator valueIterator = valueList.iterator(); - while (valueIterator.hasNext()) { - StatusValue entity = valueIterator.next(); - translations.put("status-" + entity.getId() + "", - getLabelOrKey(entity, language, entity.getId() + "")); + for (StatusValue entity : valueList) { + String label = getLabelOrKey(entity, language, entity.getId() + ""); + translations.put("status-" + entity.getId(), label); + translations.put("status-" + entity.getName(), label); } } if (type == null || type.contains("MetadataCategory")) { List metadataCategoryList = categoryRepository.findAll(); - Iterator metadataCategoryIterator = metadataCategoryList.iterator(); - while (metadataCategoryIterator.hasNext()) { - MetadataCategory entity = metadataCategoryIterator.next(); - translations.put("cat-" + entity.getName() + "", + for (MetadataCategory entity : metadataCategoryList) { + translations.put("cat-" + entity.getName(), getLabelOrKey(entity, language, entity.getName())); } } if (type == null || type.contains("Group")) { List groupList = groupRepository.findAll(); - Iterator groupIterator = groupList.iterator(); - while (groupIterator.hasNext()) { - Group entity = groupIterator.next(); - translations.put("group-" + entity.getId() + "", + for (Group entity : groupList) { + translations.put("group-" + entity.getId(), getLabelOrKey(entity, language, entity.getName())); } } if (type == null || type.contains("Operation")) { List operationList = operationRepository.findAll(); - Iterator operationIterator = operationList.iterator(); - while (operationIterator.hasNext()) { - Operation entity = operationIterator.next(); - translations.put("op-" + entity.getId() + "", - getLabelOrKey(entity, language, entity.getId() + "")); - translations.put("op-" + entity.getName() + "", + for (Operation entity : operationList) { + translations.put("op-" + entity.getId(), + getLabelOrKey(entity, language, String.valueOf(entity.getId()))); + translations.put("op-" + entity.getName(), getLabelOrKey(entity, language, entity.getName())); } } if (type == null || type.contains("Source")) { List sourceList = sourceRepository.findAll(); - Iterator sourceIterator = sourceList.iterator(); - while (sourceIterator.hasNext()) { - Source entity = sourceIterator.next(); - translations.put("source-" + entity.getUuid() + "", + for (Source entity : sourceList) { + translations.put("source-" + entity.getUuid(), getLabelOrKey(entity, language, entity.getUuid())); } } if (type == null || type.contains("Schematron")) { List schematronList = schematronRepository.findAll(); - Iterator schematronIterator = schematronList.iterator(); - while (schematronIterator.hasNext()) { - Schematron entity = schematronIterator.next(); - translations.put("sch-" + entity.getRuleName() + "", + for (Schematron entity : schematronList) { + translations.put("sch-" + entity.getRuleName(), getLabelOrKey(entity, language, entity.getRuleName())); } } if (type == null || type.contains("IsoLanguage")) { List isoLanguageList = isoLanguageRepository.findAll(); - Iterator isoLanguageIterator = isoLanguageList.iterator(); - while (isoLanguageIterator.hasNext()) { - IsoLanguage entity = isoLanguageIterator.next(); - translations.put("lang-" + entity.getCode() + "", + for (IsoLanguage entity : isoLanguageList) { + translations.put("lang-" + entity.getCode(), getLabelOrKey(entity, language, entity.getCode())); } } diff --git a/core/src/main/java/org/fao/geonet/constants/Geonet.java b/core/src/main/java/org/fao/geonet/constants/Geonet.java index c24900cffb..ac51983fc4 100644 --- a/core/src/main/java/org/fao/geonet/constants/Geonet.java +++ b/core/src/main/java/org/fao/geonet/constants/Geonet.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2021 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -183,6 +183,7 @@ public static final class Path { public static final String XSLT_FOLDER = "xslt"; public static final String CONV_STYLESHEETS = STYLESHEETS + "/conversion"; public static final String IMPORT_STYLESHEETS = CONV_STYLESHEETS + "/import"; + public static final String IMPORT_STYLESHEETS_SCHEMA_PREFIX = "schema:"; public static final String WFS_STYLESHEETS = "convert/WFSToFragments"; public static final String TDS_STYLESHEETS = "convert/ThreddsToFragments"; public static final String TDS_19119_19139_STYLESHEETS = "convert/ThreddsCatalogto19119"; @@ -659,6 +660,8 @@ public static class IndexFieldNames { public static final String ANY = "any"; public static final String LOCALE = "locale"; public static final String IS_PUBLISHED_TO_ALL = "isPublishedToAll"; + public static final String IS_PUBLISHED_TO_INTRANET = "isPublishedToIntranet"; + public static final String IS_PUBLISHED_TO_GUEST = "isPublishedToGuest"; public static final String FEEDBACKCOUNT = "feedbackCount"; public static final String DRAFT = "draft"; public static final String DRAFT_ID = "draftId"; @@ -680,6 +683,7 @@ public static class RecordLink { public static final String INSPIRE_VALIDATION_DATE = "_inspireValidationDate"; public static final String STATUS_WORKFLOW = "statusWorkflow"; public static final String USER_SAVED_COUNT = "userSavedCount"; + public static final String INDEXING_DATE = "indexingDate"; } public static class SearchConfig { diff --git a/core/src/main/java/org/fao/geonet/kernel/AbstractSchematronValidator.java b/core/src/main/java/org/fao/geonet/kernel/AbstractSchematronValidator.java index 324895f4f4..d8ad4b2df5 100644 --- a/core/src/main/java/org/fao/geonet/kernel/AbstractSchematronValidator.java +++ b/core/src/main/java/org/fao/geonet/kernel/AbstractSchematronValidator.java @@ -47,7 +47,7 @@ public class AbstractSchematronValidator { protected void runSchematron(String lang, Path schemaDir, List validations, Element schemaTronXmlOut, - int metadataId, Element md, ApplicableSchematron applicable) { + int metadataId, Element md, ApplicableSchematron applicable) { final ConfigurableApplicationContext applicationContext = ApplicationContextHolder.get(); ThesaurusManager thesaurusManager = applicationContext.getBean(ThesaurusManager.class); @@ -61,6 +61,9 @@ protected void runSchematron(String lang, Path schemaDir, List params = new HashMap(); params.put("lang", lang); @@ -74,28 +77,33 @@ protected void runSchematron(String lang, Path schemaDir, List i = xmlReport.getDescendants(new ElementFilter("fired-rule", Geonet.Namespaces.SVRL)); - int firedRules = Iterators.size(i); + firedRules = Iterators.size(i); i = xmlReport.getDescendants(new ElementFilter("failed-assert", Geonet.Namespaces.SVRL)); - int invalidRules = Iterators.size(i); + invalidRules = Iterators.size(i); - if (validations != null) { - validations.add(new MetadataValidation(). - setId(new MetadataValidationId(metadataId, ruleId)). - setStatus(invalidRules != 0 ? MetadataValidationStatus.INVALID : MetadataValidationStatus.VALID). - setRequired(requirement == SchematronRequirement.REQUIRED). - setNumTests(firedRules). - setNumFailures(invalidRules)); - - } + metadataValidationStatus = invalidRules != 0 ? MetadataValidationStatus.INVALID : MetadataValidationStatus.VALID; } } catch (Exception e) { Log.error(Geonet.DATA_MANAGER, "WARNING: schematron xslt " + ruleId + " failed", e); // If an error occurs that prevents to verify schematron rules, add to show in report Element errorReport = new Element("schematronVerificationError", Edit.NAMESPACE); - errorReport.addContent("Schematron error ocurred, rules could not be verified: " + e.getMessage()); + errorReport.addContent("Schematron error occurred, rules could not be verified: " + e.getMessage()); report.addContent(errorReport); + + // As the validation failed due to an exception lets identify the metadata as never validated. + metadataValidationStatus = MetadataValidationStatus.NEVER_CALCULATED; + } finally { + if (metadataValidationStatus != null && validations != null) { + validations.add(new MetadataValidation(). + setId(new MetadataValidationId(metadataId, ruleId)). + setStatus(metadataValidationStatus). + setRequired(requirement == SchematronRequirement.REQUIRED). + setNumTests(firedRules). + setNumFailures(invalidRules)); + + } } // -- append report to main XML report. diff --git a/core/src/main/java/org/fao/geonet/kernel/AccessManager.java b/core/src/main/java/org/fao/geonet/kernel/AccessManager.java index 1b19757027..4c8820b248 100644 --- a/core/src/main/java/org/fao/geonet/kernel/AccessManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/AccessManager.java @@ -23,41 +23,16 @@ package org.fao.geonet.kernel; -import static org.fao.geonet.kernel.setting.Settings.SYSTEM_METADATAPRIVS_PUBLICATIONBYGROUPOWNERONLY; -import static org.fao.geonet.repository.specification.OperationAllowedSpecs.hasMetadataId; -import static org.fao.geonet.repository.specification.OperationAllowedSpecs.hasOperation; -import static org.springframework.data.jpa.domain.Specification.where; - -import java.sql.SQLException; -import java.util.*; - +import jeeves.server.UserSession; +import jeeves.server.context.ServiceContext; import org.apache.commons.lang.StringUtils; import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.constants.Geonet; -import org.fao.geonet.domain.AbstractMetadata; -import org.fao.geonet.domain.Group; -import org.fao.geonet.domain.MetadataSourceInfo; -import org.fao.geonet.domain.Operation; -import org.fao.geonet.domain.OperationAllowed; -import org.fao.geonet.domain.Pair; -import org.fao.geonet.domain.Profile; -import org.fao.geonet.domain.ReservedGroup; -import org.fao.geonet.domain.ReservedOperation; -import org.fao.geonet.domain.Setting; -import org.fao.geonet.domain.User; -import org.fao.geonet.domain.UserGroup; -import org.fao.geonet.domain.User_; +import org.fao.geonet.domain.*; import org.fao.geonet.kernel.datamanager.IMetadataUtils; import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.setting.Settings; -import org.fao.geonet.repository.GroupRepository; -import org.fao.geonet.repository.GroupRepositoryCustom; -import org.fao.geonet.repository.OperationAllowedRepository; -import org.fao.geonet.repository.OperationRepository; -import org.fao.geonet.repository.SettingRepository; -import org.fao.geonet.repository.SortUtils; -import org.fao.geonet.repository.UserGroupRepository; -import org.fao.geonet.repository.UserRepository; +import org.fao.geonet.repository.*; import org.fao.geonet.repository.specification.UserGroupSpecs; import org.fao.geonet.utils.Log; import org.jdom.Element; @@ -65,10 +40,15 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.data.jpa.domain.Specification; -import org.springframework.data.jpa.domain.Specification; -import jeeves.server.UserSession; -import jeeves.server.context.ServiceContext; +import java.sql.SQLException; +import java.util.*; + +import static org.fao.geonet.kernel.setting.Settings.SYSTEM_INTRANET_IP_SEPARATOR; +import static org.fao.geonet.kernel.setting.Settings.SYSTEM_METADATAPRIVS_PUBLICATIONBYGROUPOWNERONLY; +import static org.fao.geonet.repository.specification.OperationAllowedSpecs.hasMetadataId; +import static org.fao.geonet.repository.specification.OperationAllowedSpecs.hasOperation; +import static org.springframework.data.jpa.domain.Specification.where; /** * Handles the access to a metadata depending on the metadata/group. @@ -543,11 +523,29 @@ public String getPrivilegeName(int id) { return operation.isPresent()?operation.get().getName():""; } + public boolean isLocalhost(String ip) { + return ip.startsWith("0:0:0:0:0:0:0:1") || ip.equals("127.0.0.1"); + } + + private boolean isValidIntranetSettings( + String[] networkArray, + String[] netmaskArray + ) { + if (networkArray.length != netmaskArray.length) { + Log.error(Geonet.ACCESS_MANAGER, + String.format( + "Invalid intranet configuration. Define as many network mask (currently %d) as network ip (currently %d). Check Settings > Intranet.", + netmaskArray.length, networkArray.length)); + return false; + } else { + return true; + } + } + public boolean isIntranet(String ip) { //--- consider IPv4 & IPv6 loopback //--- we use 'startsWith' because some addresses can be 0:0:0:0:0:0:0:1%0 - - if (ip.startsWith("0:0:0:0:0:0:0:1") || ip.equals("127.0.0.1")) return true; + if (isLocalhost(ip)) return true; // IPv6 link-local String ipv6LinkLocalPrefix = "fe80:"; @@ -564,12 +562,26 @@ else if (ip.indexOf(':') >= 0) { Optional netmask = settingRepository.findById(Settings.SYSTEM_INTRANET_NETMASK); try { - if (network.isPresent() && netmask.isPresent() && - StringUtils.isNotEmpty(network.get().getValue()) && StringUtils.isNotEmpty(netmask.get().getValue())) { - long lIntranetNet = getAddress(network.get().getValue()); - long lIntranetMask = getAddress(netmask.get().getValue()); + if (network.isPresent() + && netmask.isPresent() + && StringUtils.isNotEmpty(network.get().getValue()) + && StringUtils.isNotEmpty(netmask.get().getValue())) { long lAddress = getAddress(ip.split(",")[0]); - return (lAddress & lIntranetMask) == (lIntranetNet & lIntranetMask); + String[] networkArray = network + .get().getValue().split(SYSTEM_INTRANET_IP_SEPARATOR); + String[] netmaskArray = netmask + .get().getValue().split(SYSTEM_INTRANET_IP_SEPARATOR); + + if (isValidIntranetSettings(networkArray, netmaskArray)) { + for (int i = 0; i < networkArray.length; i++) { + long lIntranetNet = getAddress(networkArray[i]); + long lIntranetMask = getAddress(netmaskArray[i]); + if ((lAddress & lIntranetMask) == (lIntranetNet & lIntranetMask)) { + return true; + } + } + } + return false; } } catch (Exception nfe) { Log.error(Geonet.ACCESS_MANAGER,"isIntranet error: " + nfe.getMessage(), nfe); @@ -612,10 +624,6 @@ private long getAddress(String ip) { * @return True if there's an uthenticated session, False otherwise. */ private boolean isUserAuthenticated(UserSession us) { - if (us == null || !us.isAuthenticated()) { - return false; - } else { - return true; - } + return us != null && us.isAuthenticated(); } } diff --git a/core/src/main/java/org/fao/geonet/kernel/AllThesaurus.java b/core/src/main/java/org/fao/geonet/kernel/AllThesaurus.java index 5de03269a5..971e1c072a 100644 --- a/core/src/main/java/org/fao/geonet/kernel/AllThesaurus.java +++ b/core/src/main/java/org/fao/geonet/kernel/AllThesaurus.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -166,7 +166,7 @@ public String getKeywordUrl() { } @Override - public void retrieveThesaurusTitle() { + public void retrieveThesaurusInformation() { // nothing to do } diff --git a/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java b/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java index 2f511299d8..ea4444d061 100644 --- a/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java +++ b/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java @@ -25,11 +25,6 @@ import jeeves.server.ServiceConfig; import jeeves.server.sources.http.JeevesServlet; -import org.apache.log4j.Appender; -import org.apache.log4j.Logger; -import org.apache.log4j.bridge.AppenderWrapper; -import org.apache.logging.log4j.core.appender.FileAppender; -import org.apache.logging.log4j.core.appender.RollingFileAppender; import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.constants.Geonet; import org.fao.geonet.utils.IO; @@ -45,6 +40,8 @@ import java.nio.file.Path; import java.util.Iterator; +import static org.fao.geonet.constants.Geonet.Path.IMPORT_STYLESHEETS_SCHEMA_PREFIX; + /** * The GeoNetwork data directory is the location on the file system where GeoNetwork stores all of * its custom configuration. This configuration defines such things as: What thesaurus is used by @@ -122,15 +119,6 @@ public void init(final String webappName, final Path webappDir, Path systemDataD this.init(webappName, webappDir, handlerConfig, jeevesServlet); } - - /** - * This is the name of the RollingFileAppender in your log4j2.xml configuration file. - *

- * LogConfig uses this name to lookup RollingFileAppender to check configuration in - * case a custom log file location has been used. - */ - private static final String FILE_APPENDER_NAME = "File"; - /** * Logfile location as determined from appender, or system property, or default. *

@@ -139,62 +127,7 @@ public void init(final String webappName, final Path webappDir, Path systemDataD * @return logfile location, or {@code null} if unable to determine */ public static File getLogfile() { - // Appender is supplied by LogUtils based on parsing log4j2.xml file indicated - // by database settings - - // First, try the fileappender from the logger named "geonetwork" - Appender appender = Logger.getLogger(Geonet.GEONETWORK).getAppender(FILE_APPENDER_NAME); - // If still not found, try the one from the logger named "jeeves" - if (appender == null) { - appender = Logger.getLogger(Log.JEEVES).getAppender(FILE_APPENDER_NAME); - } - if (appender != null) { - if (appender instanceof AppenderWrapper) { - AppenderWrapper wrapper = (AppenderWrapper) appender; - org.apache.logging.log4j.core.Appender appender2 = wrapper.getAppender(); - - if (appender2 instanceof FileAppender) { - FileAppender fileAppender = (FileAppender) appender2; - String logFileName = fileAppender.getFileName(); - if (logFileName != null) { - File logFile = new File(logFileName); - if (logFile.exists()) { - return logFile; - } - } - } - if (appender2 instanceof RollingFileAppender) { - RollingFileAppender fileAppender = (RollingFileAppender) appender2; - String logFileName = fileAppender.getFileName(); - if (logFileName != null) { - File logFile = new File(logFileName); - if (logFile.exists()) { - return logFile; - } - } - } - } - } - Log.warning(Geonet.GEONETWORK, "Error when getting logger file for the " + "appender named '" + FILE_APPENDER_NAME + "'. " - + "Check your log configuration file. " - + "A FileAppender or RollingFileAppender is required to return last activity to the user interface." - + "Appender file not found."); - - if (System.getProperties().containsKey("log_dir")) { - File logDir = new File(System.getProperty("log_dir")); - if (logDir.exists() && logDir.isDirectory()) { - File logFile = new File(logDir, "logs/geonetwork.log"); - if (logFile.exists()) { - return logFile; - } - } - } else { - File logFile = new File("logs/geonetwork.log"); - if (logFile.exists()) { - return logFile; - } - } - return null; // unavailable + return Log.getLogfile(); } /** @@ -456,6 +389,29 @@ private void initDataDirectory() throws IOException { } } + Path resourcesConfigDir = this.resourcesDir.resolve("config"); + if (!Files.exists(resourcesConfigDir) || IO.isEmptyDir(resourcesConfigDir)) { + Log.info(Geonet.DATA_DIRECTORY, " - Copying config ..."); + try { + Files.createDirectories(resourcesConfigDir); + final Path fromDir = getDefaultDataDir(webappDir).resolve("data").resolve("resources").resolve("config"); + + if (Files.exists(fromDir)) { + try (DirectoryStream paths = Files.newDirectoryStream(fromDir)) { + for (Path path : paths) { + final Path relativePath = fromDir.relativize(path); + final Path dest = resourcesConfigDir.resolve(relativePath.toString()); + if (!Files.exists(dest)) { + IO.copyDirectoryOrFile(path, dest, false); + } + } + } + } + } catch (IOException e) { + Log.error(Geonet.DATA_DIRECTORY, " - Config copy failed: " + e.getMessage(), e); + } + } + logoDir = this.resourcesDir.resolve("images").resolve("harvesting"); if (!Files.exists(logoDir) || IO.isEmptyDir(logoDir)) { Log.info(Geonet.DATA_DIRECTORY, " - Copying logos ..."); @@ -816,6 +772,22 @@ public void setBackupDir(Path backupDir) { this.backupDir = backupDir; } + + public Path getXsltConversion(String conversionId) { + if (conversionId.startsWith(IMPORT_STYLESHEETS_SCHEMA_PREFIX)) { + String[] pathToken = conversionId.split(":"); + if (pathToken.length == 3) { + return this.getSchemaPluginsDir() + .resolve(pathToken[1]) + .resolve(pathToken[2] + ".xsl"); + } + } else { + return this.getWebappDir().resolve(Geonet.Path.IMPORT_STYLESHEETS). + resolve(conversionId + ".xsl"); + } + return null; + } + /** * Event is raised when GeonetworkDataDirectory has finished being initialized. */ diff --git a/core/src/main/java/org/fao/geonet/kernel/SpringLocalServiceInvoker.java b/core/src/main/java/org/fao/geonet/kernel/SpringLocalServiceInvoker.java index 87da11f488..fa3711cb85 100644 --- a/core/src/main/java/org/fao/geonet/kernel/SpringLocalServiceInvoker.java +++ b/core/src/main/java/org/fao/geonet/kernel/SpringLocalServiceInvoker.java @@ -22,8 +22,6 @@ */ package org.fao.geonet.kernel; -import org.fao.geonet.NodeInfo; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockHttpSession; @@ -43,16 +41,19 @@ public class SpringLocalServiceInvoker { - @Autowired - public RequestMappingHandlerMapping requestMappingHandlerMapping; + public final RequestMappingHandlerMapping requestMappingHandlerMapping; - @Autowired - public RequestMappingHandlerAdapter requestMappingHandlerAdapter; + public final RequestMappingHandlerAdapter requestMappingHandlerAdapter; private HandlerMethodArgumentResolverComposite argumentResolvers; private HandlerMethodReturnValueHandlerComposite returnValueHandlers; private DefaultDataBinderFactory webDataBinderFactory; + public SpringLocalServiceInvoker(RequestMappingHandlerMapping requestMappingHandlerMapping, RequestMappingHandlerAdapter requestMappingHandlerAdapter) { + this.requestMappingHandlerMapping = requestMappingHandlerMapping; + this.requestMappingHandlerAdapter = requestMappingHandlerAdapter; + } + public void init() { argumentResolvers = new HandlerMethodArgumentResolverComposite().addResolvers(requestMappingHandlerAdapter.getArgumentResolvers()); returnValueHandlers = new HandlerMethodReturnValueHandlerComposite().addHandlers(requestMappingHandlerAdapter.getReturnValueHandlers()); diff --git a/core/src/main/java/org/fao/geonet/kernel/Thesaurus.java b/core/src/main/java/org/fao/geonet/kernel/Thesaurus.java index e4a2073596..d9937ed895 100644 --- a/core/src/main/java/org/fao/geonet/kernel/Thesaurus.java +++ b/core/src/main/java/org/fao/geonet/kernel/Thesaurus.java @@ -1,4 +1,4 @@ -//=== Copyright (C) 2001-2005 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -75,6 +75,14 @@ public class Thesaurus { private static final String DEFAULT_THESAURUS_NAMESPACE = "http://custom.shared.obj.ch/concept#"; + private static final String RDF_NAMESPACE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; + + private static final String SKOS_NAMESPACE = "http://www.w3.org/2004/02/skos/core#"; + + private static final String DCTERMS_NAMESPACE = "http://purl.org/dc/terms/"; + + private static final String DC_NAMESPACE = "http://purl.org/dc/elements/1.1/"; + private String fname; private String type; @@ -91,6 +99,12 @@ public class Thesaurus { private String date; + private String createdDate; + + private String issuedDate; + + private String modifiedDate; + private String defaultNamespace; private String downloadUrl; @@ -99,12 +113,14 @@ public class Thesaurus { private IsoLanguagesMapper isoLanguageMapper; - private Map multilingualTitles = new Hashtable(); + private Map multilingualTitles = new Hashtable<>(); + + private Map multilingualDescriptions = new Hashtable<>(); // map of lang -> dictionary of values // key is a dublinCore element (i.e. https://guides.library.ucsc.edu/c.php?g=618773&p=4306386) // see #retrieveDublinCore() for example - private Map> dublinCoreMultilingual = new Hashtable>(); + private Map> dublinCoreMultilingual = new Hashtable<>(); private Cache THESAURUS_SEARCH_CACHE; @@ -129,7 +145,8 @@ public Thesaurus(IsoLanguagesMapper isoLanguageMapper, String fname, String tnam } public Thesaurus(IsoLanguagesMapper isoLanguageMapper, String fname, - String tname, String description, String tnamespace, String type, String dname, Path thesaurusFile, String siteUrl, + Map multilingualTitles, Map multilingualDescriptions, + String tnamespace, String type, String dname, Path thesaurusFile, String siteUrl, boolean ignoreMissingError, int thesaurusCacheMaxSize) { super(); @@ -151,14 +168,26 @@ public Thesaurus(IsoLanguagesMapper isoLanguageMapper, String fname, this.defaultNamespace = (tnamespace == null ? DEFAULT_THESAURUS_NAMESPACE : tnamespace); - if (tname != null) { - this.title = tname; - } else { - retrieveThesaurusTitle(thesaurusFile, dname + "." + fname, ignoreMissingError); + retrieveThesaurusInformation(thesaurusFile, dname + "." + fname, ignoreMissingError); + + if (multilingualTitles != null) { + this.multilingualTitles = multilingualTitles; + + if (StringUtils.isBlank(this.title)) { + this.title = this.multilingualTitles.get(toiso639_1_Lang(Geonet.DEFAULT_LANGUAGE)); + } + + if (StringUtils.isBlank(this.title)) { + this.title = dname + "." + fname; + } } - if (description != null) { - this.description = description; + if (multilingualDescriptions != null) { + this.multilingualDescriptions = multilingualDescriptions; + + if (StringUtils.isBlank(this.description)) { + this.description = this.multilingualDescriptions.get(toiso639_1_Lang(Geonet.DEFAULT_LANGUAGE)); + } } } @@ -185,6 +214,18 @@ public Map> getDublinCoreMultilingual() { return Collections.unmodifiableMap(this.dublinCoreMultilingual); } + public Map getMultilingualDescriptions() { + return Collections.unmodifiableMap(this.multilingualDescriptions); + } + + public void setMultilingualTitles(Map multilingualTitles) { + this.multilingualTitles = multilingualTitles; + } + + public void setMultilingualDescriptions(Map multilingualDescriptions) { + this.multilingualDescriptions = multilingualDescriptions; + } + /** * @return Thesaurus identifier */ @@ -223,6 +264,18 @@ public String getDate() { return date; } + public String getCreatedDate() { + return createdDate; + } + + public String getIssuedDate() { + return issuedDate; + } + + public String getModifiedDate() { + return modifiedDate; + } + @Nonnull public FileTime getLastModifiedTime() { FileTime lastModified; @@ -247,8 +300,8 @@ public String getKeywordUrl() { return keywordUrl; } - public void retrieveThesaurusTitle() { - retrieveThesaurusTitle(thesaurusFile, dname + "." + fname, false); + public void retrieveThesaurusInformation() { + retrieveThesaurusInformation(thesaurusFile, dname + "." + fname, false); } protected String buildDownloadUrl(String fname, String type, String dname, String siteUrl) { @@ -289,15 +342,11 @@ public synchronized Thesaurus initRepository() throws ConfigurationException, IO return this; } - /** - * TODO javadoc. - */ public synchronized QueryResultsTable performRequest(String query) throws IOException, MalformedQueryException, QueryEvaluationException, AccessDeniedException { if (Log.isDebugEnabled(Geonet.THESAURUS)) Log.debug(Geonet.THESAURUS, "Query : " + query); - //printResultsTable(resultsTable); return repository.performTableQuery(QueryLanguage.SERQL, query); } @@ -332,30 +381,7 @@ public List getConceptSchemes() { return ret; } catch (Exception e) { Log.error(Geonet.THESAURUS_MAN, "Error retrieving concept schemes for " + thesaurusFile + ". Error is: " + e.getMessage()); - return Collections.EMPTY_LIST; - } - } - - /** - * - * @param resultsTable - */ - @SuppressWarnings("unused") - private void printResultsTable(QueryResultsTable resultsTable) { - int rowCount = resultsTable.getRowCount(); - int columnCount = resultsTable.getColumnCount(); - - for (int row = 0; row < rowCount; row++) { - for (int column = 0; column < columnCount; column++) { - Value value = resultsTable.getValue(row, column); - - if (value != null) { - System.out.print(value.toString()); - } else { - System.out.print("null"); - } - System.out.print("\t"); - } + return Collections.emptyList(); } } @@ -371,18 +397,17 @@ public synchronized URI addElement(KeywordBean keyword) throws IOException, Acce ValueFactory myFactory = myGraph.getValueFactory(); // Define namespace - String namespaceSkos = "http://www.w3.org/2004/02/skos/core#"; String namespaceGml = "http://www.opengis.net/gml#"; // Create subject URI mySubject = myFactory.createURI(keyword.getUriCode()); - URI skosClass = myFactory.createURI(namespaceSkos, "Concept"); + URI skosClass = myFactory.createURI(SKOS_NAMESPACE, "Concept"); URI rdfType = myFactory.createURI(org.openrdf.vocabulary.RDF.TYPE); URI predicatePrefLabel = myFactory - .createURI(namespaceSkos, "prefLabel"); + .createURI(SKOS_NAMESPACE, "prefLabel"); URI predicateScopeNote = myFactory - .createURI(namespaceSkos, "scopeNote"); + .createURI(SKOS_NAMESPACE, "scopeNote"); URI predicateBoundedBy = myFactory.createURI(namespaceGml, "BoundedBy"); URI predicateEnvelope = myFactory.createURI(namespaceGml, "Envelope"); @@ -502,9 +527,8 @@ public synchronized URI updateElement(KeywordBean keyword, boolean replace) thro // Set namespace skos and predicates ValueFactory myFactory = myGraph.getValueFactory(); - String namespaceSkos = "http://www.w3.org/2004/02/skos/core#"; - URI predicatePrefLabel = myFactory.createURI(namespaceSkos, "prefLabel"); - URI predicateScopeNote = myFactory.createURI(namespaceSkos, "scopeNote"); + URI predicatePrefLabel = myFactory.createURI(SKOS_NAMESPACE, "prefLabel"); + URI predicateScopeNote = myFactory.createURI(SKOS_NAMESPACE, "scopeNote"); // Get subject (URI) URI subject = myFactory.createURI(keyword.getUriCode()); @@ -544,7 +568,7 @@ public synchronized URI updateElement(KeywordBean keyword, boolean replace) thro BNode subjectGml = null; iter = myGraph.getStatements(subject, predicateBoundedBy, null); while (iter.hasNext()) { - AtomicReference st = new AtomicReference(iter.next()); + AtomicReference st = new AtomicReference<>(iter.next()); if (st.get().getObject() instanceof BNode) { subjectGml = (BNode) st.get().getObject(); } @@ -556,7 +580,7 @@ public synchronized URI updateElement(KeywordBean keyword, boolean replace) thro if (!(iter.hasNext())) { break; } - AtomicReference st = new AtomicReference(iter.next()); + AtomicReference st = new AtomicReference<>(iter.next()); myGraph.remove(st.get()); break; } @@ -566,7 +590,7 @@ public synchronized URI updateElement(KeywordBean keyword, boolean replace) thro if (!(iter.hasNext())) { break; } - AtomicReference st = new AtomicReference(iter.next()); + AtomicReference st = new AtomicReference<>(iter.next()); myGraph.remove(st.get()); break; } @@ -586,7 +610,7 @@ public synchronized URI updateElement(KeywordBean keyword, boolean replace) thro private void removeMatchingLiterals(boolean replace, Graph myGraph, StatementIterator iter, Set valueLanguages) { try { - ArrayList toRemove = new ArrayList(); + ArrayList toRemove = new ArrayList<>(); while (iter.hasNext()) { Statement st = iter.next(); if (st.getObject() instanceof Literal) { @@ -619,11 +643,11 @@ public synchronized boolean isFreeCode(String namespace, String code) throws Acc ValueFactory myFactory = myGraph.getValueFactory(); URI obj = namespace == null ? myFactory.createURI(code) : myFactory.createURI(namespace, code); Collection statementsCollection = myGraph.getStatementCollection(obj, null, null); - if (statementsCollection != null && statementsCollection.size() > 0) { + if (statementsCollection != null && !statementsCollection.isEmpty()) { res = false; } statementsCollection = myGraph.getStatementCollection(null, null, obj); - if (statementsCollection != null && statementsCollection.size() > 0) { + if (statementsCollection != null && !statementsCollection.isEmpty()) { res = false; } return res; @@ -669,7 +693,7 @@ public synchronized Thesaurus updateCodeByURI(String olduri, String newuri) thro private Thesaurus updateElementCode(Graph myGraph, URI oldobj, URI newobj) { StatementIterator iterStSubject = myGraph.getStatements(oldobj, null, null); while (iterStSubject.hasNext()) { - AtomicReference st = new AtomicReference(iterStSubject.next()); + AtomicReference st = new AtomicReference<>(iterStSubject.next()); myGraph.add(newobj, st.get().getPredicate(), st.get().getObject()); } @@ -685,42 +709,125 @@ private Thesaurus updateElementCode(Graph myGraph, URI oldobj, URI newobj) { public void writeConceptScheme(String thesaurusTitle, String namespace) throws IOException, AccessDeniedException, GraphException { - writeConceptScheme(thesaurusTitle, null, null, null, namespace); + Graph myGraph = new org.openrdf.model.impl.GraphImpl(); + writeConceptScheme(myGraph, thesaurusTitle, null, null, null, null, null, namespace); + repository.addGraph(myGraph); } /** - * Set the title of the thesaurus and save the graph to the repository. + * Set the information about a new thesaurus and save the graph to the repository. */ - public void writeConceptScheme(String thesaurusTitle, - String description, - String identifier, - String type, - String namespace) throws IOException, AccessDeniedException, GraphException { + public void createConceptScheme(String thesaurusTitle, + Map multilingualTitles, + String thesaurusDescription, + Map multilingualDescriptions, + String identifier, + String type, + String namespace) throws IOException, AccessDeniedException, GraphException { Graph myGraph = new org.openrdf.model.impl.GraphImpl(); - ValueFactory myFactory = myGraph.getValueFactory(); + writeConceptScheme(myGraph, + thesaurusTitle, + multilingualTitles, + thesaurusDescription, + multilingualDescriptions, + identifier, + type, + namespace); + + repository.addGraph(myGraph); + } + + + /** + * Set the information about an existing thesaurus. + */ + public void updateConceptScheme(String thesaurusTitle, + Map multilingualTitles, + String thesaurusDescription, + Map multilingualDescriptions, + String identifier, + String type, + String namespace) throws AccessDeniedException, GraphException { + Graph myGraph = repository.getGraph(); + removeElement(getConceptSchemes().get(0)); + + writeConceptScheme(myGraph, + thesaurusTitle, + multilingualTitles, + thesaurusDescription, + multilingualDescriptions, + identifier, + type, + namespace); + } + + public void writeConceptScheme(Graph myGraph, String thesaurusTitle, + Map multilingualTitles, + String thesaurusDescription, + Map multilingualDescriptions, + String identifier, + String type, + String namespace) throws GraphException { - String namespaceSkos = "http://www.w3.org/2004/02/skos/core#"; - String namespaceDC = "http://purl.org/dc/elements/1.1/"; + ValueFactory myFactory = myGraph.getValueFactory(); URI mySubject = myFactory.createURI(namespace); - URI skosClass = myFactory.createURI(namespaceSkos, "ConceptScheme"); + URI skosClass = myFactory.createURI(SKOS_NAMESPACE, "ConceptScheme"); URI rdfType = myFactory.createURI(org.openrdf.vocabulary.RDF.TYPE); mySubject.addProperty(rdfType, skosClass); - addElement("title", thesaurusTitle, myGraph, myFactory, mySubject); - addElement("description", description, myGraph, myFactory, mySubject); + URI titleURI = myFactory.createURI(DC_NAMESPACE, "title"); + + boolean addTitleElement = true; + if (multilingualTitles != null) { + for (Entry entrySet : multilingualTitles.entrySet()) { + if (StringUtils.isNotEmpty(entrySet.getValue())) { + String language = toiso639_1_Lang(entrySet.getKey()); + Value valueObj = myFactory.createLiteral(entrySet.getValue(), language); + myGraph.add(mySubject, titleURI, valueObj); + + addTitleElement = false; + } + } + } + + if (addTitleElement) { + addElement("title", thesaurusTitle, myGraph, myFactory, mySubject); + } + + + boolean addDescriptionElement = true; + URI descriptionURI = myFactory.createURI(DC_NAMESPACE, "description"); + + if (multilingualDescriptions != null) { + for (Entry entrySet : multilingualDescriptions.entrySet()) { + if (StringUtils.isNotEmpty(entrySet.getValue())) { + String language = toiso639_1_Lang(entrySet.getKey()); + Value valueObj = myFactory.createLiteral(entrySet.getValue(), language); + myGraph.add(mySubject, descriptionURI, valueObj); + + addDescriptionElement = false; + } + } + } + + if (addDescriptionElement) { + addElement("description", thesaurusDescription, myGraph, myFactory, mySubject); + } + addElement("identifier", identifier, myGraph, myFactory, mySubject); addElement("type", type, myGraph, myFactory, mySubject); - - repository.addGraph(myGraph); } + + + + private void addElement(String name, String value, Graph myGraph, ValueFactory myFactory, URI mySubject) { - String namespaceDC = "http://purl.org/dc/elements/1.1/"; if (StringUtils.isNotEmpty(value)) { - URI uri = myFactory.createURI(namespaceDC, name); + URI uri = myFactory.createURI(DC_NAMESPACE, name); Value object = myFactory.createLiteral(value); myGraph.add(mySubject, uri, object); } @@ -751,11 +858,7 @@ private void addElement(String name, String value, Graph myGraph, ValueFactory m // note - only looks at language-specified elements // private void retrieveDublinCore(Element thesaurusEl) { - List theNSs = new ArrayList(); - theNSs.add(Namespace.getNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")); - theNSs.add(Namespace.getNamespace("skos", "http://www.w3.org/2004/02/skos/core#")); - theNSs.add(Namespace.getNamespace("dc", "http://purl.org/dc/elements/1.1/")); - theNSs.add(Namespace.getNamespace("dcterms", "http://purl.org/dc/terms/")); + List theNSs = getThesaurusNamespaces(); Namespace xmlNS = Namespace.getNamespace("xml","http://www.w3.org/XML/1998/namespace"); try { @@ -767,11 +870,9 @@ private void retrieveDublinCore(Element thesaurusEl) { String value = el.getTextTrim(); String name = el.getName(); if (!dublinCoreMultilingual.containsKey(lang)) { - dublinCoreMultilingual.put(lang,new HashMap()); + dublinCoreMultilingual.put(lang,new HashMap<>()); } dublinCoreMultilingual.get(lang).put(name,value); - - int t=0; } } catch (Exception e) { Log.warning(Geonet.THESAURUS,"error extracting multilingual dublin core items from thesaurus",e); @@ -792,34 +893,50 @@ private void retrieveDublinCore(Element thesaurusEl) { // "fr": "French Version (fr)" // } private void retrieveMultiLingualTitles(Element thesaurusEl) { - List theNSs = new ArrayList(); - theNSs.add(Namespace.getNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#")); - theNSs.add(Namespace.getNamespace("skos", "http://www.w3.org/2004/02/skos/core#")); - theNSs.add(Namespace.getNamespace("dc", "http://purl.org/dc/elements/1.1/")); - theNSs.add(Namespace.getNamespace("dcterms", "http://purl.org/dc/terms/")); - - Namespace xmlNS = Namespace.getNamespace("xml","http://www.w3.org/XML/1998/namespace"); - try { - List multiLingualTitles = (List) Xml.selectNodes(thesaurusEl, - "skos:ConceptScheme/dc:title[@xml:lang]|skos:ConceptScheme/dcterms:title[@xml:lang]", theNSs); + String xpathTitles = "skos:ConceptScheme/dc:title[@xml:lang]|skos:ConceptScheme/dcterms:title[@xml:lang]|rdf:Description[rdf:type/@rdf:resource = 'http://www.w3.org/2004/02/skos/core#ConceptScheme']/dc:title[@xml:lang]"; multilingualTitles.clear(); - for (Element el: multiLingualTitles) { - String lang = isoLanguageMapper.iso639_2_to_iso639_1(el.getAttribute("lang", xmlNS).getValue()); - String title = el.getTextTrim(); - multilingualTitles.put(lang,title); - } + multilingualTitles.putAll(retrieveMultilingualField(thesaurusEl, xpathTitles)); } catch (Exception e) { Log.warning(Geonet.THESAURUS,"error extracting multilingual titles from thesaurus",e); } } + private void retrieveMultiLingualDescriptions(Element thesaurusEl) { + try { + String xpathDescriptions = "skos:ConceptScheme/dc:description[@xml:lang]|skos:ConceptScheme/dcterms:description[@xml:lang]|rdf:Description[rdf:type/@rdf:resource = 'http://www.w3.org/2004/02/skos/core#ConceptScheme']/dc:description[@xml:lang]"; + multilingualDescriptions.clear(); + multilingualDescriptions.putAll(retrieveMultilingualField(thesaurusEl, xpathDescriptions)); + } catch (Exception e) { + Log.warning(Geonet.THESAURUS,"error extracting multilingual descriptions from thesaurus",e); + } + } + + private Map retrieveMultilingualField(Element thesaurusEl, String xpath) throws JDOMException { + List theNSs = getThesaurusNamespaces(); + + Namespace xmlNS = Namespace.getNamespace("xml","http://www.w3.org/XML/1998/namespace"); + + Map multilingualValues = new HashMap<>(); + List multilingualValuesEl = (List) Xml.selectNodes(thesaurusEl, + xpath, theNSs); + for (Element el: multilingualValuesEl) { + String lang = isoLanguageMapper.iso639_2_to_iso639_1(el.getAttribute("lang", xmlNS).getValue()); + String titleValue = el.getTextTrim(); + multilingualValues.put(lang, titleValue); + } + + return multilingualValues; + } + /** - * Retrieves the thesaurus title from rdf file. + * Retrieves the thesaurus information from rdf file. * * Used to set the thesaurusName and thesaurusDate for keywords. */ - private void retrieveThesaurusTitle(Path thesaurusFile, String defaultTitle, boolean ignoreMissingError) { + private void retrieveThesaurusInformation(Path thesaurusFile, String defaultTitle, boolean ignoreMissingError) { + if (!Files.exists(thesaurusFile)) return; + // set defaults as in the case of a local thesaurus file, this info // may not be present yet this.title = defaultTitle; @@ -827,36 +944,38 @@ private void retrieveThesaurusTitle(Path thesaurusFile, String defaultTitle, boo try { Element thesaurusEl = Xml.loadFile(thesaurusFile); - List theNSs = new ArrayList(); - Namespace rdfNamespace = Namespace.getNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); + List theNSs = new ArrayList<>(); + Namespace rdfNamespace = Namespace.getNamespace("rdf", RDF_NAMESPACE); theNSs.add(rdfNamespace); - theNSs.add(Namespace.getNamespace("skos", "http://www.w3.org/2004/02/skos/core#")); - theNSs.add(Namespace.getNamespace("dc", "http://purl.org/dc/elements/1.1/")); - theNSs.add(Namespace.getNamespace("dcterms", "http://purl.org/dc/terms/")); + theNSs.add(Namespace.getNamespace("skos", SKOS_NAMESPACE)); + theNSs.add(Namespace.getNamespace("dc", DC_NAMESPACE)); + theNSs.add(Namespace.getNamespace("dcterms", DCTERMS_NAMESPACE)); this.defaultNamespace = null; retrieveMultiLingualTitles(thesaurusEl); retrieveDublinCore(thesaurusEl); - Element title = Xml.selectElement(thesaurusEl, + Element titleEl = Xml.selectElement(thesaurusEl, "skos:ConceptScheme/dc:title|skos:ConceptScheme/dcterms:title|" + "skos:Collection/dc:title|skos:Collection/dcterms:title|" + "rdf:Description/dc:title|rdf:Description/dcterms:title", theNSs); - if (title != null) { - this.title = title.getValue(); - this.defaultNamespace = title.getParentElement().getAttributeValue("about", rdfNamespace); + if (titleEl != null) { + this.title = titleEl.getValue(); + this.defaultNamespace = titleEl.getParentElement().getAttributeValue("about", rdfNamespace); } else { this.title = defaultTitle; this.defaultNamespace = DEFAULT_THESAURUS_NAMESPACE; } - Element description = Xml.selectElement(thesaurusEl, + Element descriptionEl = Xml.selectElement(thesaurusEl, "skos:ConceptScheme/dc:description|skos:ConceptScheme/dcterms:description|" + "skos:Collection/dc:description|skos:Collection/dcterms:description|" + "rdf:Description/dc:description|rdf:Description/dcterms:description", theNSs); - this.description = description != null ? description.getValue() : ""; + this.description = descriptionEl != null ? descriptionEl.getValue() : ""; + + retrieveMultiLingualDescriptions(thesaurusEl); try { new java.net.URI(this.defaultNamespace); @@ -864,8 +983,17 @@ private void retrieveThesaurusTitle(Path thesaurusFile, String defaultTitle, boo this.defaultNamespace = DEFAULT_THESAURUS_NAMESPACE; } - Element dateEl = Xml.selectElement(thesaurusEl, "skos:ConceptScheme/dcterms:issued|skos:Collection/dc:date", theNSs); + Element issuedDateEl = Xml.selectElement(thesaurusEl, "skos:ConceptScheme/dcterms:issued", theNSs); + this.issuedDate = issuedDateEl==null? "": issuedDateEl.getText(); + + Element modifiedDateEl = Xml.selectElement(thesaurusEl, "skos:ConceptScheme/dcterms:modified", theNSs); + this.modifiedDate = modifiedDateEl==null? "": modifiedDateEl.getText(); + Element createdDateEl = Xml.selectElement(thesaurusEl, "skos:ConceptScheme/dcterms:created", theNSs); + this.createdDate = createdDateEl==null? "": createdDateEl.getText(); + + // Default date + Element dateEl = Xml.selectElement(thesaurusEl, "skos:ConceptScheme/dcterms:issued|skos:Collection/dc:date", theNSs); Date thesaususDate = parseThesaurusDate(dateEl); if (thesaususDate == null) { @@ -921,11 +1049,13 @@ private Date parseThesaurusDate(Element dateEl) { String dateVal = dateEl.getText(); // Try several date formats (date format seem not unified) - List dfList = new ArrayList(); + List dfList = new ArrayList<>(); dfList.add(new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy")); dfList.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); dfList.add(new SimpleDateFormat("yyyy-MM-dd")); + dfList.add(new SimpleDateFormat("yyyy-MM")); + dfList.add(new SimpleDateFormat("yyyy")); StringBuffer errorMsg = new StringBuffer("Error parsing the thesaurus date value: "); errorMsg.append(dateVal); @@ -980,9 +1110,8 @@ public synchronized void addRelation(String subject, KeywordRelation related, St // Set namespace skos and predicates ValueFactory myFactory = myGraph.getValueFactory(); - String namespaceSkos = "http://www.w3.org/2004/02/skos/core#"; - URI relationURI = myFactory.createURI(namespaceSkos, related.name); - URI opposteRelationURI = myFactory.createURI(namespaceSkos, related.opposite().name); + URI relationURI = myFactory.createURI(SKOS_NAMESPACE, related.name); + URI opposteRelationURI = myFactory.createURI(SKOS_NAMESPACE, related.opposite().name); URI subjectURI = myFactory.createURI(subject); URI relatedSubjectURI = myFactory.createURI(relatedSubject); @@ -1094,7 +1223,7 @@ public List getNarrower(String uri, String... languages) { */ public boolean hasBroader(String uri) { - return getRelated(uri, KeywordRelation.NARROWER).size() > 0; + return !getRelated(uri, KeywordRelation.NARROWER).isEmpty(); } /** @@ -1154,79 +1283,13 @@ public KeywordBean getKeywordWithLabel(String label, String langCode) { throw new RuntimeException(e); } - if (matchingKeywords.size() == 0) { + if (matchingKeywords.isEmpty()) { throw new TermNotFoundException(label); } return matchingKeywords.get(0); } - // ------------------------------- Deprecated methods ----------------------------- - - /** - * @deprecated since 2.9.0. Use {@link #addElement(KeywordBean)} - */ - URI addElement(String code, String prefLab, String note, String lang) throws GraphException, IOException, - AccessDeniedException { - - KeywordBean bean = new KeywordBean(getIsoLanguageMapper()) - .setUriCode(code) - .setValue(prefLab, lang) - .setDefinition(note, lang); - - return addElement(bean); - } - - /** - * @deprecated since 2.9.0 use {@link #addElement(KeywordBean)} - */ - URI addElement(String code, String prefLab, String note, String east, String west, String south, - String north, String lang) throws IOException, AccessDeniedException, GraphException { - - return addElement(new KeywordBean(getIsoLanguageMapper()) - .setUriCode(code) - .setValue(prefLab, lang) - .setDefinition(note, lang) - .setCoordEast(east) - .setCoordNorth(north) - .setCoordSouth(south) - .setCoordWest(west)); - } - - - /** - * @deprecated since 2.9.0 use {@link #updateElement(KeywordBean, boolean)} - */ - URI updateElement(String namespace, String id, String prefLab, String note, String lang) throws IOException, - MalformedQueryException, QueryEvaluationException, AccessDeniedException, GraphException { - KeywordBean keyword = new KeywordBean(getIsoLanguageMapper()) - .setNamespaceCode(namespace) - .setRelativeCode(id) - .setValue(prefLab, lang) - .setDefinition(note, lang); - return updateElement(keyword, false); - } - - /** - * @deprecated Since 2.9.0 use {@link #updateElement(KeywordBean, boolean)} - */ - URI updateElement(String namespace, String id, String prefLab, String note, String east, String west, - String south, String north, String lang) throws AccessDeniedException, IOException, - MalformedQueryException, QueryEvaluationException, GraphException { - - KeywordBean bean = new KeywordBean(getIsoLanguageMapper()) - .setNamespaceCode(namespace) - .setRelativeCode(id) - .setValue(prefLab, lang) - .setDefinition(note, lang) - .setCoordEast(east) - .setCoordNorth(north) - .setCoordSouth(south) - .setCoordWest(west); - - return updateElement(bean, true); - } - public synchronized void clear() throws IOException, AccessDeniedException { AdminListener listener = new DummyAdminListener(); repository.clear(listener); @@ -1298,8 +1361,19 @@ private List> classifyBroaderTerms(KeywordBean term, Str } private ArrayList classifyTermWithNoBroaderTerms(KeywordBean term) { - ArrayList list = new ArrayList (); + ArrayList list = new ArrayList <>(); list.add(term); return list; } + + + private List getThesaurusNamespaces() { + List theNSs = new ArrayList<>(); + theNSs.add(Namespace.getNamespace("rdf", RDF_NAMESPACE)); + theNSs.add(Namespace.getNamespace("skos", SKOS_NAMESPACE)); + theNSs.add(Namespace.getNamespace("dc", DC_NAMESPACE)); + theNSs.add(Namespace.getNamespace("dcterms", DCTERMS_NAMESPACE)); + + return theNSs; + } } diff --git a/core/src/main/java/org/fao/geonet/kernel/ThesaurusManager.java b/core/src/main/java/org/fao/geonet/kernel/ThesaurusManager.java index 9dbb6165cf..a48563dc3d 100644 --- a/core/src/main/java/org/fao/geonet/kernel/ThesaurusManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/ThesaurusManager.java @@ -1,4 +1,4 @@ -//=== Copyright (C) 2001-2005 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -34,18 +34,16 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import org.apache.commons.lang.StringUtils; import org.fao.geonet.Util; import org.fao.geonet.constants.Geonet; import org.fao.geonet.domain.AbstractMetadata; -import org.fao.geonet.domain.Constants; -import org.fao.geonet.domain.ThesaurusActivation; import org.fao.geonet.kernel.datamanager.IMetadataManager; import org.fao.geonet.kernel.datamanager.IMetadataSchemaUtils; import org.fao.geonet.kernel.datamanager.IMetadataUtils; @@ -53,7 +51,6 @@ import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.setting.Settings; import org.fao.geonet.languages.IsoLanguagesMapper; -import org.fao.geonet.repository.ThesaurusActivationRepository; import org.fao.geonet.utils.IO; import org.fao.geonet.utils.Log; import org.fao.geonet.utils.Xml; @@ -90,16 +87,13 @@ public class ThesaurusManager implements ThesaurusFinder { @Autowired private IsoLanguagesMapper isoLanguagesMapper; - @Autowired - private ThesaurusActivationRepository thesaurusActivationRepository; - @Autowired private IMetadataSchemaUtils metadataSchemaUtils; @Autowired private AllThesaurus allThesaurus; - private ConcurrentHashMap thesauriMap = new ConcurrentHashMap(); + private ConcurrentHashMap thesauriMap = new ConcurrentHashMap<>(); private LocalService service = null; private Path thesauriDirectory = null; private boolean initialized = false; @@ -300,9 +294,11 @@ public void addThesaurus(Thesaurus gst, boolean writeConceptScheme) throws Excep thesauriMap.put(thesaurusName, gst); if (writeConceptScheme) { - gst.writeConceptScheme( + gst.createConceptScheme( gst.getTitle(), + gst.getMultilingualTitles(), gst.getDescription(), + gst.getMultilingualDescriptions(), gst.getFname(), gst.getDname(), gst.getDefaultNamespace()); @@ -440,7 +436,7 @@ public String createUpdateThesaurusFromRegister(String uuid, String type, Servic } String theKey = gst.getKey(); - gst.retrieveThesaurusTitle(); + gst.retrieveThesaurusInformation(); addOrReloadThesaurus(gst); @@ -487,15 +483,17 @@ public Element buildResultfromThTable(ServiceContext context) throws SQLExceptio // ], Element elMultilingualTitles = new Element("multilingualTitles"); for (Map.Entry entry : currentTh.getMultilingualTitles().entrySet()) { - Element elMultilingualTitle = new Element("multilingualTitle"); - Element elMultilingualTitl_lang = new Element("lang"); - elMultilingualTitl_lang.setText(entry.getKey()); - Element elMultilingualTitle_title = new Element("title"); - elMultilingualTitle_title.setText(entry.getValue()); - elMultilingualTitle.addContent(elMultilingualTitl_lang); - elMultilingualTitle.addContent(elMultilingualTitle_title); - - elMultilingualTitles.addContent(elMultilingualTitle); + if (StringUtils.isNotBlank(entry.getValue())) { + Element elMultilingualTitle = new Element("multilingualTitle"); + Element elMultilingualTitleLang = new Element("lang"); + elMultilingualTitleLang.setText(entry.getKey()); + Element elMultilingualTitleTitle = new Element("title"); + elMultilingualTitleTitle.setText(entry.getValue()); + elMultilingualTitle.addContent(elMultilingualTitleLang); + elMultilingualTitle.addContent(elMultilingualTitleTitle); + + elMultilingualTitles.addContent(elMultilingualTitle); + } } //add dublin core items to the response @@ -507,20 +505,41 @@ public Element buildResultfromThTable(ServiceContext context) throws SQLExceptio for (Map.Entry> entryLang : currentTh.getDublinCoreMultilingual().entrySet()) { String lang = entryLang.getKey(); for (Map.Entry entryItem : entryLang.getValue().entrySet()) { - Element elItem = new Element("dublinCoreMultilingual"); - Element elLang = new Element("lang"); - elLang.setText(lang); - Element elTag = new Element("tag"); - elTag.setText(entryItem.getKey()); - Element elValue = new Element("value"); - elValue.setText(entryItem.getValue()); - - elItem.addContent(elLang); - elItem.addContent(elTag); - elItem.addContent(elValue); - + if (StringUtils.isNotBlank(entryItem.getValue())) { + Element elItem = new Element("dublinCoreMultilingual"); + Element elLang = new Element("lang"); + elLang.setText(lang); + Element elTag = new Element("tag"); + elTag.setText(entryItem.getKey()); + Element elValue = new Element("value"); + elValue.setText(entryItem.getValue()); + + elItem.addContent(elLang); + elItem.addContent(elTag); + elItem.addContent(elValue); + + elDublinCoreMultilingual.addContent(elItem); + } + } + } - elDublinCoreMultilingual.addContent(elItem); + //add multilingual descriptions in to response + // "multilingualDescriptions": [ + // { "lang": "fr","title": "Data Usage Scope FR"}, + // {"lang": "en","title": "Data Usage Scope EN"} + // ], + Element elMultilingualDescriptions = new Element("multilingualDescriptions"); + for (Map.Entry entry : currentTh.getMultilingualDescriptions().entrySet()) { + if (StringUtils.isNotBlank(entry.getValue())) { + Element elMultilingualDescription = new Element("multilingualDescription"); + Element elMultilingualDescLang = new Element("lang"); + elMultilingualDescLang.setText(entry.getKey()); + Element elMultilingualDescDesc = new Element("description"); + elMultilingualDescDesc.setText(entry.getValue()); + elMultilingualDescription.addContent(elMultilingualDescLang); + elMultilingualDescription.addContent(elMultilingualDescDesc); + + elMultilingualDescriptions.addContent(elMultilingualDescription); } } @@ -532,6 +551,18 @@ public Element buildResultfromThTable(ServiceContext context) throws SQLExceptio String date = currentTh.getDate(); elDate.addContent(date); + Element elCreatedDate = new Element("createdDate"); + String createdDate = currentTh.getCreatedDate(); + elCreatedDate.addContent(createdDate); + + Element elIssuedDate = new Element("issuedDate"); + String issuedDate = currentTh.getIssuedDate(); + elIssuedDate.addContent(issuedDate); + + Element elModifiedDate = new Element("modifiedDate"); + String modifiedDate = currentTh.getModifiedDate(); + elModifiedDate.addContent(modifiedDate); + Element elUrl = new Element("url"); String url = currentTh.getDownloadUrl(); elUrl.addContent(url); @@ -540,17 +571,6 @@ public Element buildResultfromThTable(ServiceContext context) throws SQLExceptio String defaultURI = currentTh.getDefaultNamespace(); elDefaultURI.addContent(defaultURI); - - Element elActivated = new Element("activated"); - - // By default thesaurus are enabled (if nothing defined in db) - char activated = Constants.YN_TRUE; - final Optional activation = thesaurusActivationRepository.findById(currentTh.getKey()); - if (activation.isPresent() && !activation.get().isActivated()) { - activated = Constants.YN_FALSE; - } - elActivated.setText("" + activated); - elLoop.addContent(elKey); elLoop.addContent(elDname); elLoop.addContent(description); @@ -558,11 +578,14 @@ public Element buildResultfromThTable(ServiceContext context) throws SQLExceptio elLoop.addContent(elTitle); elLoop.addContent(elMultilingualTitles); elLoop.addContent(elDublinCoreMultilingual); + elLoop.addContent(elMultilingualDescriptions); elLoop.addContent(elDate); + elLoop.addContent(elCreatedDate); + elLoop.addContent(elIssuedDate); + elLoop.addContent(elModifiedDate); elLoop.addContent(elUrl); elLoop.addContent(elDefaultURI); elLoop.addContent(elType); - elLoop.addContent(elActivated); elRoot.addContent(elLoop); } diff --git a/core/src/main/java/org/fao/geonet/kernel/backup/ArchiveAllMetadataJob.java b/core/src/main/java/org/fao/geonet/kernel/backup/ArchiveAllMetadataJob.java index a0edb9b06e..8e7453c5a8 100644 --- a/core/src/main/java/org/fao/geonet/kernel/backup/ArchiveAllMetadataJob.java +++ b/core/src/main/java/org/fao/geonet/kernel/backup/ArchiveAllMetadataJob.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -23,20 +23,14 @@ package org.fao.geonet.kernel.backup; -import java.nio.file.Files; -import java.nio.file.Path; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; - -import javax.annotation.Nullable; - +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import jeeves.server.UserSession; +import jeeves.server.context.ServiceContext; +import jeeves.server.dispatchers.ServiceManager; +import org.apache.commons.io.FileUtils; import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.constants.Geonet; -import org.fao.geonet.domain.AbstractMetadata; import org.fao.geonet.domain.Metadata; import org.fao.geonet.domain.MetadataType; import org.fao.geonet.domain.Profile; @@ -51,25 +45,26 @@ import org.fao.geonet.repository.specification.UserSpecs; import org.fao.geonet.utils.IO; import org.fao.geonet.utils.Log; +import org.locationtech.jts.util.Assert; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Bean; import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.domain.Specification; -import org.springframework.data.jpa.domain.Specification; import org.springframework.scheduling.quartz.QuartzJobBean; import org.springframework.stereotype.Service; -import com.google.common.base.Function; -import com.google.common.collect.Lists; -import org.locationtech.jts.util.Assert; - -import jeeves.server.UserSession; -import jeeves.server.context.ServiceContext; -import jeeves.server.dispatchers.ServiceManager; +import javax.annotation.Nullable; +import java.nio.file.Files; +import java.nio.file.Path; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; @Service public class ArchiveAllMetadataJob extends QuartzJobBean { @@ -122,6 +117,7 @@ public void createBackup(ServiceContext serviceContext) throws Exception { return; } long startTime = System.currentTimeMillis(); + Path srcFile = null; try { Log.info(BACKUP_LOG, "Starting backup of all metadata"); @@ -145,7 +141,7 @@ public String apply(@Nullable Metadata input) { boolean resolveXlink = true; boolean removeXlinkAttribute = false; boolean skipOnError = true; - Path srcFile = MEFLib.doMEF2Export(serviceContext, new HashSet<>(uuids), format, false, stylePath, + srcFile = MEFLib.doMEF2Export(serviceContext, new HashSet<>(uuids), format, false, stylePath, resolveXlink, removeXlinkAttribute, skipOnError, true, true); Path backupDir = dataDirectory.getBackupDir().resolve(BACKUP_DIR); @@ -155,7 +151,7 @@ public String apply(@Nullable Metadata input) { Files.createDirectories(destFile.getParent()); Files.move(srcFile, destFile); if (!Files.exists(destFile)) { - throw new Exception("Moving backup file failed!"); + throw new Exception("Target file already exists. Moving backup file failed!"); } long timeMinutes = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - startTime); Log.info(BACKUP_LOG, "Backup finished. Backup time: " + timeMinutes + " Backup file: " + destFile); @@ -163,6 +159,9 @@ public String apply(@Nullable Metadata input) { Log.error(BACKUP_LOG, "Failed to create a back up of metadata", t); } finally { backupIsRunning.set(false); + if (srcFile != null) { + FileUtils.deleteQuietly(srcFile.toFile()); + } } } diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataManager.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataManager.java index 512d881061..83c4b8d05d 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataManager.java @@ -62,6 +62,9 @@ public interface IMetadataManager { /** * Removes the record with the id metadataId + * from the database and index without sending events. + * + * This is useful for harvesting tasks. * * @param context * @param metadataId @@ -69,6 +72,17 @@ public interface IMetadataManager { */ void deleteMetadata(ServiceContext context, String metadataId) throws Exception; + /** + * Delete the record with the id metadataId + * from the database and index + * and additionally take care of cleaning up resources, send events, ... + * + * @param context + * @param metadataId + * @throws Exception + */ + void purgeMetadata(ServiceContext context, String metadataId, boolean withBackup) throws Exception; + /** * Removes a record without notifying. * diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataStatus.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataStatus.java index 89fa4efd6d..96b0aa34ee 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataStatus.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataStatus.java @@ -100,6 +100,15 @@ public interface IMetadataStatus { */ MetadataStatus getStatus(int metadataId) throws Exception; + /** + * Given a metadata id, return the previous status of the metadata + * + * @param metadataId + * @return + * @throws Exception + */ + MetadataStatus getPreviousStatus(int metadataId) throws Exception; + /** * Given a metadata id, return the status of the metadata * diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataUtils.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataUtils.java index 4dc52beb5b..63c3dadb55 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataUtils.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataUtils.java @@ -23,6 +23,7 @@ package org.fao.geonet.kernel.datamanager; +import java.io.IOException; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -31,6 +32,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; +import org.fao.geonet.api.exception.ResourceNotFoundException; import org.fao.geonet.domain.AbstractMetadata; import org.fao.geonet.domain.ISODate; import org.fao.geonet.domain.MetadataSourceInfo; @@ -39,6 +41,7 @@ import org.fao.geonet.repository.SimpleMetadata; import org.fao.geonet.repository.reports.MetadataReportsQueries; import org.jdom.Element; +import org.jdom.JDOMException; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -118,6 +121,14 @@ public interface IMetadataUtils { LinkedHashMap extractTitles(@Nonnull String id) throws Exception; + String getPermalink(String uuid, String language); + + String getDefaultUrl(String uuid, String language); + + String getDoi(String uuid) throws ResourceNotFoundException, IOException, JDOMException; + + String getResourceIdentifier(String uuid) throws ResourceNotFoundException, JDOMException, IOException; + /** * Extract the last editing date from the record * diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataValidator.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataValidator.java index d0fe5b4e37..70d1532250 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataValidator.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/IMetadataValidator.java @@ -28,7 +28,6 @@ import org.fao.geonet.domain.AbstractMetadata; import org.fao.geonet.domain.MetadataValidation; import org.fao.geonet.domain.Pair; -import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; @@ -37,7 +36,7 @@ /** * Interface to handle all operations related to validations of records - * + * * @author delawen * */ @@ -51,9 +50,9 @@ public interface IMetadataValidator { void validateExternalMetadata(String schema, Element xml, ServiceContext context, String fileName, Integer groupOwner) throws Exception; /** - * + * * if the metadata has no namespace or already has a namespace then we must skip this phase - * + * * @param md */ void setNamespacePrefix(Element md); @@ -72,9 +71,9 @@ public interface IMetadataValidator { * Used by harvesters that need to validate metadata. * * @param metadata metadata - * @param lang Language from context + * @param lang Language from context */ - boolean doValidate(AbstractMetadata metadata, String lang); + Pair doValidate(AbstractMetadata metadata, String lang); /** * Used by the validate embedded service. The validation report is stored in the session. @@ -100,7 +99,7 @@ Pair doValidate(UserSession session, String schema, String meta /** * Adds the namespace to the element - * + * * @param md * @param ns */ @@ -108,7 +107,7 @@ Pair doValidate(UserSession session, String schema, String meta /** * Helper function to prevent loop on dependencies - * + * * @param metadataManager */ void setMetadataManager(IMetadataManager metadataManager); diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataIndexer.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataIndexer.java index 261d9a442a..09b5c4faa4 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataIndexer.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataIndexer.java @@ -410,13 +410,13 @@ public void indexMetadata(final String metadataId, fields.put(IndexFields.DRAFT, "n"); fields.put(IndexFields.INDEXING_ERROR_FIELD, true); fields.put(IndexFields.INDEXING_ERROR_MSG, String.format( - "Schema '%s' is not registerd in this catalog. Install it or remove those records", + "Schema '%s' is not registered in this catalog. Install it or remove those records", schema )); searchManager.index(null, md, indexKey, fields, metadataType, forceRefreshReaders, indexingMode); Log.error(Geonet.DATA_MANAGER, String.format( - "Record %s / Schema '%s' is not registerd in this catalog. Install it or remove those records. Record is indexed indexing error flag.", + "Record %s / Schema '%s' is not registered in this catalog. Install it or remove those records. Record is indexed indexing error flag.", metadataId, schema)); } else { @@ -527,7 +527,11 @@ public void indexMetadata(final String metadataId, // TODO: Check if ignore INSPIRE validation? if (!type.equalsIgnoreCase("inspire")) { - if (status == MetadataValidationStatus.INVALID && vi.isRequired()) { + // If never validated and required then set status to never validated. + if (status == MetadataValidationStatus.NEVER_CALCULATED && vi.isRequired()) { + isValid = "-1"; + } + if (status == MetadataValidationStatus.INVALID && vi.isRequired() && isValid != "-1") { isValid = "0"; } } else { @@ -585,6 +589,8 @@ private Multimap buildFieldsForPrivileges(int recordId) { List operationsAllowed = operationAllowedRepository.findAllById_MetadataId(recordId); Multimap privilegesFields = ArrayListMultimap.create(); boolean isPublishedToAll = false; + boolean isPublishedToIntranet = false; + boolean isPublishedToGuest = false; for (OperationAllowed operationAllowed : operationsAllowed) { OperationAllowedId operationAllowedId = operationAllowed.getId(); @@ -601,6 +607,10 @@ private Multimap buildFieldsForPrivileges(int recordId) { if (g.get().getId() == ReservedGroup.all.getId()) { isPublishedToAll = true; + } else if (g.get().getId() == ReservedGroup.intranet.getId()) { + isPublishedToIntranet = true; + } else if (g.get().getId() == ReservedGroup.guest.getId()) { + isPublishedToGuest = true; } } } @@ -611,6 +621,19 @@ private Multimap buildFieldsForPrivileges(int recordId) { } else { privilegesFields.put(Geonet.IndexFieldNames.IS_PUBLISHED_TO_ALL, false); } + + if (isPublishedToIntranet) { + privilegesFields.put(Geonet.IndexFieldNames.IS_PUBLISHED_TO_INTRANET, true); + } else { + privilegesFields.put(Geonet.IndexFieldNames.IS_PUBLISHED_TO_INTRANET, false); + } + + if (isPublishedToGuest) { + privilegesFields.put(Geonet.IndexFieldNames.IS_PUBLISHED_TO_GUEST, true); + } else { + privilegesFields.put(Geonet.IndexFieldNames.IS_PUBLISHED_TO_GUEST, false); + } + return privilegesFields; } diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java index cf8a38e6a7..61ba225106 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java @@ -32,23 +32,27 @@ import jeeves.transaction.TransactionManager; import jeeves.transaction.TransactionTask; import jeeves.xlink.Processor; -import org.apache.commons.lang.NotImplementedException; import org.apache.commons.lang.StringUtils; import org.fao.geonet.ApplicationContextHolder; +import org.fao.geonet.api.records.attachments.Store; import org.fao.geonet.constants.Edit; import org.fao.geonet.constants.Geonet; import org.fao.geonet.constants.Params; import org.fao.geonet.domain.*; +import org.fao.geonet.events.history.RecordDeletedEvent; +import org.fao.geonet.events.md.MetadataPreRemove; +import org.fao.geonet.exceptions.UnAuthorizedException; import org.fao.geonet.kernel.*; import org.fao.geonet.kernel.datamanager.*; +import org.fao.geonet.kernel.mef.MEFLib; import org.fao.geonet.kernel.schema.MetadataSchema; import org.fao.geonet.kernel.schema.SchemaPlugin; import org.fao.geonet.kernel.search.EsSearchManager; import org.fao.geonet.kernel.search.IndexingMode; -import org.fao.geonet.kernel.search.MetaSearcher; import org.fao.geonet.kernel.search.index.BatchOpsMetadataReindexer; import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.setting.Settings; +import org.fao.geonet.kernel.setting.SettingInfo; import org.fao.geonet.lib.Lib; import org.fao.geonet.repository.*; import org.fao.geonet.repository.specification.MetadataFileUploadSpecs; @@ -289,14 +293,9 @@ protected void deleteMetadataFromDB(ServiceContext context, String id) throws Ex AbstractMetadata metadata = metadataUtils.findOne(Integer.valueOf(id)); if (!settingManager.getValueAsBool(Settings.SYSTEM_XLINK_ALLOW_REFERENCED_DELETION) && metadata.getDataInfo().getType() == MetadataType.SUB_TEMPLATE) { - -// TODOES - throw new NotImplementedException("SYSTEM_XLINK_ALLOW_REFERENCED_DELETION not implemented in ES."); -// MetaSearcher searcher = searcherForReferencingMetadata(context, metadata); -// Map result = ((LuceneSearcher) searcher).getAllMdInfo(context, 1); -// if (result.size() > 0) { -// throw new Exception("this template is referenced."); -// } + if (this.hasReferencingMetadata(context, metadata)) { + throw new UnAuthorizedException("This template is referenced.", metadata); + } } // --- remove operations @@ -322,22 +321,6 @@ public javax.persistence.criteria.Path getPath(Root getXmlSerializer().delete(id, context); } - private MetaSearcher searcherForReferencingMetadata(ServiceContext context, AbstractMetadata metadata) - throws Exception { - // TODOES - throw new NotImplementedException("searcherForReferencingMetadata not implemented in ES."); -// MetaSearcher searcher = context.getBean(SearchManager.class).newSearcher(SearcherType.LUCENE, -// Geonet.File.SEARCH_LUCENE); -// Element parameters = new Element(Jeeves.Elem.REQUEST); -// parameters.addContent(new Element(Geonet.IndexFieldNames.XLINK).addContent("*" + metadata.getUuid() + "*")); -// parameters.addContent(new Element(Geonet.SearchResult.BUILD_SUMMARY).setText("false")); -// parameters.addContent(new Element(SearchParameter.ISADMIN).addContent("true")); -// parameters.addContent(new Element(SearchParameter.ISTEMPLATE).addContent("y or n")); -// ServiceConfig config = new ServiceConfig(); -// searcher.search(context, parameters, config); -// return searcher; - } - // -------------------------------------------------------------------------- // --- // --- Metadata thumbnail API @@ -366,6 +349,36 @@ public void deleteMetadata(ServiceContext context, String metadataId) throws Exc // _entityManager.clear(); } + /** + * Delete the record with the id metadataId and additionally take care of cleaning up resources, send events, ... + */ + @Override + public void purgeMetadata(ServiceContext context, String metadataId, boolean withBackup) throws Exception { + AbstractMetadata metadata = metadataUtils.findOne(metadataId); + Store store = context.getBean("resourceStore", Store.class); + + MetadataPreRemove preRemoveEvent = new MetadataPreRemove(metadata); + ApplicationContextHolder.get().publishEvent(preRemoveEvent); + + if (metadata.getDataInfo().getType() != MetadataType.SUB_TEMPLATE + && metadata.getDataInfo().getType() != MetadataType.TEMPLATE_OF_SUB_TEMPLATE && withBackup) { + MEFLib.backupRecord(metadata, context); + } + + boolean approved = true; + if (metadata instanceof MetadataDraft) { + approved = false; + } + + store.delResources(context, metadata.getUuid(), approved); + + RecordDeletedEvent recordDeletedEvent = new RecordDeletedEvent( + metadata.getId(), metadata.getUuid(), new LinkedHashMap<>(), + context.getUserSession().getUserIdAsInt(), metadata.getData()); + deleteMetadata(context, metadataId); + recordDeletedEvent.publish(ApplicationContextHolder.get()); + } + /** * @param context * @param metadataId @@ -393,8 +406,7 @@ public String createMetadata(ServiceContext context, String templateId, String g } /** - * Creates a new metadata duplicating an existing template with an specified - * uuid. + * Creates a new metadata duplicating an existing template with a specified uuid. * * @param isTemplate * @param fullRightsForGroup @@ -421,7 +433,7 @@ public String createMetadata(ServiceContext context, String templateId, String g xml = duplicateMetadata(schema, xml, context); } else if (type == MetadataType.SUB_TEMPLATE - || type == MetadataType.TEMPLATE_OF_SUB_TEMPLATE) { + || type == MetadataType.TEMPLATE_OF_SUB_TEMPLATE) { xml.setAttribute("uuid", uuid); } @@ -515,7 +527,7 @@ private void setMetadataTitle(String schema, Element xml, String language, boole * @param createDate date of creation * @param changeDate date of modification * @param ufo whether to apply automatic changes - * @param indexingMode whether to index this metadata + * @param indexingMode whether to index this metadata * @return id, as a string * @throws Exception hmm */ @@ -717,7 +729,7 @@ public void apply(@Nonnull Metadata entity) { */ @Override public synchronized AbstractMetadata updateMetadata(final ServiceContext context, final String metadataId, final Element md, - final boolean validate, final boolean ufo, final String lang, final String changeDate, + final boolean validate, final boolean ufo, final String lang, String changeDate, final boolean updateDateStamp, final IndexingMode indexingMode) throws Exception { Log.trace(Geonet.DATA_MANAGER, "Update record with id " + metadataId); @@ -730,13 +742,22 @@ public synchronized AbstractMetadata updateMetadata(final ServiceContext context } String schema = metadataSchemaUtils.getMetadataSchema(metadataId); + final AbstractMetadata metadata = metadataUtils.findOne(metadataId); + + if (updateDateStamp) { + if (StringUtils.isEmpty(changeDate)) { + changeDate = new ISODate().toString(); + metadata.getDataInfo().setChangeDate(new ISODate()); + } else { + metadata.getDataInfo().setChangeDate(new ISODate(changeDate)); + } + } + String uuidBeforeUfo = null; if (ufo) { String parentUuid = null; Integer intId = Integer.valueOf(metadataId); - final AbstractMetadata metadata = metadataUtils.findOne(metadataId); - uuidBeforeUfo = findUuid(metadataXml, schema, metadata); metadataXml = updateFixedInfo(schema, Optional.of(intId), uuidBeforeUfo, metadataXml, parentUuid, @@ -746,9 +767,6 @@ public synchronized AbstractMetadata updateMetadata(final ServiceContext context // --- force namespace prefix for iso19139 metadata setNamespacePrefixUsingSchemas(schema, metadataXml); - // Notifies the metadata change to metatada notifier service - final AbstractMetadata metadata = metadataUtils.findOne(metadataId); - String uuid = findUuid(metadataXml, schema, metadata); metadataUtils.checkMetadataWithSameUuidExist(uuid, metadata.getId()); @@ -896,15 +914,8 @@ private Element buildInfoElem(ServiceContext context, String id, String version) } // add baseUrl of this site (from settings) - String protocol = settingManager.getValue(Settings.SYSTEM_SERVER_PROTOCOL); - String host = settingManager.getValue(Settings.SYSTEM_SERVER_HOST); - String port = settingManager.getValue(Settings.SYSTEM_SERVER_PORT); - if (port.equals("80")) { - port = ""; - } else { - port = ":" + port; - } - addElement(info, Edit.Info.Elem.BASEURL, protocol + "://" + host + port + context.getBaseUrl()); + SettingInfo si = new SettingInfo(); + addElement(info, Edit.Info.Elem.BASEURL, si.getSiteUrl() + context.getBaseUrl()); addElement(info, Edit.Info.Elem.LOCSERV, "/srv/en"); return info; } @@ -951,8 +962,7 @@ public Element updateFixedInfo(String schema, Optional metadataId, Stri if (metadata != null) { changeDate = metadata.getDataInfo().getChangeDate().getDateAndTime(); createDate = metadata.getDataInfo().getCreateDate().getDateAndTime(); - } - else { + } else { createDate = new ISODate().toString(); } env.addContent(new Element("changeDate").setText(changeDate)); @@ -1007,8 +1017,8 @@ public Element updateFixedInfo(String schema, Optional metadataId, Stri Path styleSheet = metadataSchemaUtils.getSchemaDir(schema).resolve( metadata != null && ( - metadata.getDataInfo().getType() == MetadataType.SUB_TEMPLATE - || metadata.getDataInfo().getType() == MetadataType.TEMPLATE_OF_SUB_TEMPLATE)? + metadata.getDataInfo().getType() == MetadataType.SUB_TEMPLATE + || metadata.getDataInfo().getType() == MetadataType.TEMPLATE_OF_SUB_TEMPLATE) ? Geonet.File.UPDATE_FIXED_INFO_SUBTEMPLATE : Geonet.File.UPDATE_FIXED_INFO); result = Xml.transform(result, styleSheet); @@ -1222,13 +1232,13 @@ private void setNamespacePrefixUsingSchemas(String schema, Element md) throws Ex * Applies a xslt process when duplicating a metadata, typically to remove identifiers * or other information like DOI (Digital Object Identifiers) and returns the updated metadata. * - * @param schema Metadata schema. - * @param md Metadata to duplicate. + * @param schema Metadata schema. + * @param md Metadata to duplicate. * @param srvContext - * @return If the xslt process exists, the metadata processed, otherwise the original metadata. + * @return If the xslt process exists, the metadata processed, otherwise the original metadata. * @throws Exception */ - private Element duplicateMetadata(String schema, Element md, ServiceContext srvContext) throws Exception { + private Element duplicateMetadata(String schema, Element md, ServiceContext srvContext) throws Exception { Path styleSheet = metadataSchemaUtils.getSchemaDir(schema).resolve( Geonet.File.DUPLICATE_METADATA); @@ -1329,4 +1339,10 @@ public boolean isValid(Integer id) { } return true; } + + boolean hasReferencingMetadata(ServiceContext context, AbstractMetadata metadata) throws Exception { + StringBuilder query = new StringBuilder(String.format("xlink:*%s*", metadata.getUuid())); + return this.searchManager.query(query.toString(), null, 0, 0).getHits().getTotalHits().value > 0; + } + } diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataStatus.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataStatus.java index ee0300922f..150bd65a81 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataStatus.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataStatus.java @@ -96,6 +96,21 @@ public MetadataStatus getStatus(int metadataId) throws Exception { } } + /** + * Return previous workflow status for the metadata id + */ + @Override + public MetadataStatus getPreviousStatus(int metadataId) throws Exception { + String sortField = SortUtils.createPath(MetadataStatus_.id, MetadataStatus_.changeDate); + List metadataStatusList = metadataStatusRepository.findAllByMetadataIdAndByType( + metadataId, StatusValueType.workflow, Sort.by(Sort.Direction.DESC, sortField)); + if (metadataStatusList.isEmpty() || metadataStatusList.size() == 1) { + return null; + } else { + return metadataStatusList.get(1); + } + } + /** * Return all status for the metadata id */ diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataUtils.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataUtils.java index 1baae5cb26..64ad3fc04f 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataUtils.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataUtils.java @@ -27,8 +27,10 @@ import jeeves.server.UserSession; import jeeves.server.context.ServiceContext; import org.apache.commons.lang.NotImplementedException; +import org.apache.commons.lang.StringUtils; import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.NodeInfo; +import org.fao.geonet.api.exception.ResourceNotFoundException; import org.fao.geonet.constants.Edit; import org.fao.geonet.constants.Geonet; import org.fao.geonet.domain.*; @@ -36,6 +38,8 @@ import org.fao.geonet.kernel.SchemaManager; import org.fao.geonet.kernel.XmlSerializer; import org.fao.geonet.kernel.datamanager.*; +import org.fao.geonet.kernel.schema.MetadataSchema; +import org.fao.geonet.kernel.schema.SavedQuery; import org.fao.geonet.kernel.search.EsSearchManager; import org.fao.geonet.kernel.search.IndexingMode; import org.fao.geonet.kernel.search.index.IndexingList; @@ -47,7 +51,9 @@ import org.fao.geonet.repository.specification.OperationAllowedSpecs; import org.fao.geonet.utils.Log; import org.fao.geonet.utils.Xml; +import org.fao.geonet.web.DefaultLanguage; import org.jdom.Element; +import org.jdom.JDOMException; import org.jdom.Namespace; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; @@ -60,9 +66,12 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.PostConstruct; +import java.io.IOException; import java.nio.file.Path; import java.util.*; +import java.util.regex.Pattern; +import static org.fao.geonet.kernel.setting.Settings.*; import static org.fao.geonet.repository.specification.MetadataSpecs.hasMetadataUuid; public class BaseMetadataUtils implements IMetadataUtils { @@ -79,6 +88,10 @@ public class BaseMetadataUtils implements IMetadataUtils { protected SchemaManager schemaManager; @Autowired protected MetadataRatingByIpRepository ratingByIpRepository; + + @Autowired + protected LanguageRepository languageRepository; + @Autowired @Lazy protected SettingManager settingManager; @@ -95,6 +108,9 @@ public class BaseMetadataUtils implements IMetadataUtils { @Autowired(required = false) protected XmlSerializer xmlSerializer; + @Autowired + private DefaultLanguage defaultLanguage; + private Path stylePath; protected IMetadataManager metadataManager; @@ -249,15 +265,15 @@ public String extractUUID(String schema, Element md) throws Exception { @Override public String extractDefaultLanguage(String schema, Element md) throws Exception { Path styleSheet = metadataSchemaUtils.getSchemaDir(schema).resolve(Geonet.File.EXTRACT_DEFAULT_LANGUAGE); - String defaultLanguage = Xml.transform(md, styleSheet).getText().trim(); + String defaultLanguageValue = Xml.transform(md, styleSheet).getText().trim(); if (Log.isDebugEnabled(Geonet.DATA_MANAGER)) - Log.debug(Geonet.DATA_MANAGER, "Extracted default language '" + defaultLanguage + "' for schema '" + schema + "'"); + Log.debug(Geonet.DATA_MANAGER, "Extracted default language '" + defaultLanguageValue + "' for schema '" + schema + "'"); // --- needed to detach md from the document md.detach(); - return defaultLanguage; + return defaultLanguageValue; } /** @@ -308,6 +324,79 @@ public LinkedHashMap extractTitles(@Nonnull String id) throws Ex return null; } + @Override + public String getPermalink(String uuid, String language) { + Boolean doiIsFirst = settingManager.getValueAsBool(METADATA_URL_SITEMAPDOIFIRST, false); + + if (Boolean.TRUE.equals(doiIsFirst)) { + String doi = null; + try { + doi = getDoi(uuid); + } catch (Exception e) { + // DOI not supported for schema + } + if (StringUtils.isNotEmpty(doi)) { + return doi; + } + } + + + String sitemapLinkUrl = settingManager.getValue(METADATA_URL_SITEMAPLINKURL); + String defaultLink = settingManager.getNodeURL() + "api/records/" + uuid + "?language=all"; + String permalink = buildUrl(uuid, language, sitemapLinkUrl); + return StringUtils.isNotEmpty(permalink) ? permalink : defaultLink; + } + + @Override + public String getDefaultUrl(String uuid, String language) { + String dynamicAppLinkUrl = settingManager.getValue(METADATA_URL_DYNAMICAPPLINKURL); + if ("all".equals(language)) { + language = defaultLanguage.getLanguage(); + } + String defaultLink = settingManager.getNodeURL() + language + "/catalog.search#/metadata/" + uuid; + String url = buildUrl(uuid, language, dynamicAppLinkUrl); + return StringUtils.isNotEmpty(url) ? url : defaultLink; + } + + private String buildUrl(String uuid, String language, String url) { + if (StringUtils.isNotEmpty(url)) { + Map substitutions = new HashMap<>(); + substitutions.put("{{UUID}}", uuid); + substitutions.put("{{LANG}}", StringUtils.isEmpty(language) ? "" : language); + try { + String resourceId = getResourceIdentifier(uuid); + substitutions.put("{{RESOURCEID}}", StringUtils.isEmpty(resourceId) ? "" : resourceId); + } catch (Exception e) { + // No resource identifier xpath defined in schema + } + for (Map.Entry s : substitutions.entrySet()) { + if (url.toUpperCase().contains(s.getKey())) { + url = url.replaceAll("(?i)" + Pattern.quote(s.getKey()), s.getValue()); + } + } + } + return url; + } + + + @Override + public String getDoi(String uuid) throws ResourceNotFoundException, IOException, JDOMException { + AbstractMetadata metadata = findOneByUuid(uuid); + final MetadataSchema schema = metadataSchemaUtils + .getSchema(metadata.getDataInfo().getSchemaId()); + Element xml = metadata.getXmlData(false); + return schema.queryString(SavedQuery.DOI_GET, xml); + } + + @Override + public String getResourceIdentifier(String uuid) throws ResourceNotFoundException, JDOMException, IOException { + AbstractMetadata metadata = findOneByUuid(uuid); + final MetadataSchema schema = metadataSchemaUtils + .getSchema(metadata.getDataInfo().getSchemaId()); + Element xml = metadata.getXmlData(false); + return schema.queryString(SavedQuery.RESOURCEID_GET, xml); + } + /** * @param schema * @param md @@ -425,12 +514,9 @@ public void setTemplate(final int id, final MetadataType type, final String titl @Override public void setTemplateExt(final int id, final MetadataType metadataType) throws Exception { - metadataRepository.update(id, new Updater() { - @Override - public void apply(@Nonnull Metadata metadata) { - final MetadataDataInfo dataInfo = metadata.getDataInfo(); - dataInfo.setType(metadataType); - } + metadataRepository.update(id, metadata -> { + final MetadataDataInfo dataInfo = metadata.getDataInfo(); + dataInfo.setType(metadataType); }); } @@ -450,14 +536,11 @@ public void setHarvested(int id, String harvestUuid) throws Exception { */ @Override public void setSubtemplateTypeAndTitleExt(final int id, String title) throws Exception { - metadataRepository.update(id, new Updater() { - @Override - public void apply(@Nonnull Metadata metadata) { - final MetadataDataInfo dataInfo = metadata.getDataInfo(); - dataInfo.setType(MetadataType.SUB_TEMPLATE); - if (title != null) { - dataInfo.setTitle(title); - } + metadataRepository.update(id, metadata -> { + final MetadataDataInfo dataInfo = metadata.getDataInfo(); + dataInfo.setType(MetadataType.SUB_TEMPLATE); + if (title != null) { + dataInfo.setTitle(title); } }); } @@ -470,14 +553,11 @@ public void setHarvestedExt(int id, String harvestUuid) throws Exception { @Override public void setHarvestedExt(final int id, final String harvestUuid, final Optional harvestUri) throws Exception { - metadataRepository.update(id, new Updater() { - @Override - public void apply(Metadata metadata) { - MetadataHarvestInfo harvestInfo = metadata.getHarvestInfo(); - harvestInfo.setUuid(harvestUuid); - harvestInfo.setHarvested(harvestUuid != null); - harvestInfo.setUri(harvestUri.orNull()); - } + metadataRepository.update(id, metadata -> { + MetadataHarvestInfo harvestInfo = metadata.getHarvestInfo(); + harvestInfo.setUuid(harvestUuid); + harvestInfo.setHarvested(harvestUuid != null); + harvestInfo.setUri(harvestUri.orNull()); }); } @@ -488,12 +568,7 @@ public void apply(Metadata metadata) { */ @Override public void updateDisplayOrder(final String id, final String displayOrder) throws Exception { - metadataRepository.update(Integer.valueOf(id), new Updater() { - @Override - public void apply(Metadata entity) { - entity.getDataInfo().setDisplayOrder(Integer.parseInt(displayOrder)); - } - }); + metadataRepository.update(Integer.valueOf(id), entity -> entity.getDataInfo().setDisplayOrder(Integer.parseInt(displayOrder))); } /** @@ -504,14 +579,9 @@ public void increasePopularity(ServiceContext srvContext, String id) throws Exce // READONLYMODE if (!srvContext.getBean(NodeInfo.class).isReadOnly()) { int iId = Integer.parseInt(id); - metadataRepository.update(iId, new Updater() { - @Override - public void apply(Metadata entity) { - entity.getDataInfo().setPopularity( - entity.getDataInfo().getPopularity() + 1 - ); - } - }); + metadataRepository.update(iId, entity -> entity.getDataInfo().setPopularity( + entity.getDataInfo().getPopularity() + 1 + )); final java.util.Optional metadata = metadataRepository.findById(iId); if (metadata.isPresent()) { @@ -551,12 +621,7 @@ public int rateMetadata(final int metadataId, final String ipAddress, final int if (Log.isDebugEnabled(Geonet.DATA_MANAGER)) Log.debug(Geonet.DATA_MANAGER, "Setting rating for id:" + metadataId + " --> rating is:" + newRating); - metadataRepository.update(metadataId, new Updater() { - @Override - public void apply(Metadata entity) { - entity.getDataInfo().setRating(newRating); - } - }); + metadataRepository.update(metadataId, entity -> entity.getDataInfo().setRating(newRating)); // And register the metadata to be indexed in the near future indexingList.add(metadataId); @@ -583,7 +648,7 @@ public Element removeMetadataInfo(Element md) throws Exception { // Drop Geonet namespace declaration. It may be contained // multiple times, so loop on all. - final List additionalNamespaces = new ArrayList(md.getAdditionalNamespaces()); + final List additionalNamespaces = new ArrayList<>(md.getAdditionalNamespaces()); for (Namespace n : additionalNamespaces) { if (Edit.NAMESPACE.getURI().equals(n.getURI())) { md.removeNamespaceDeclaration(Edit.NAMESPACE); diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataValidator.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataValidator.java index 6f80c38156..96a3015cad 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataValidator.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataValidator.java @@ -65,6 +65,11 @@ import org.springframework.context.annotation.Lazy; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import jeeves.server.UserSession; import jeeves.server.context.ServiceContext; @@ -359,14 +364,17 @@ private Element getSchemaTronXmlReport(String schema, Element md, String lang, M * @param lang Language from context */ @Override - public boolean doValidate(AbstractMetadata metadata, String lang) { + public Pair doValidate(AbstractMetadata metadata, String lang) { String schema = metadata.getDataInfo().getSchemaId(); int metadataId = metadata.getId(); + Element errorReport = new Element("report", Edit.NAMESPACE); + errorReport.setAttribute("id", String.valueOf(metadataId), Edit.NAMESPACE); + Element md; try { md = metadata.getXmlData(false); } catch (IOException | JDOMException e) { - return false; + return Pair.read(errorReport, false); } List validations = new ArrayList<>(); @@ -381,15 +389,19 @@ public boolean doValidate(AbstractMetadata metadata, String lang) { xsdErrorCount = xsdErrors.getContent().size(); } if (xsdErrorCount > 0) { + errorReport.addContent(xsdErrors); validations.add(new MetadataValidation().setId(new MetadataValidationId(metadataId, "xsd")) .setStatus(MetadataValidationStatus.INVALID).setRequired(true).setNumTests(xsdErrorCount) .setNumFailures(xsdErrorCount)); - LOGGER.debug("Invalid."); + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(" - XSD error: {}", Xml.getString(xsdErrors)); + } valid = false; } else { validations.add(new MetadataValidation().setId(new MetadataValidationId(metadataId, "xsd")) .setStatus(MetadataValidationStatus.VALID).setRequired(true).setNumTests(1).setNumFailures(0)); - LOGGER.debug("Valid."); + LOGGER.debug(" - XSD Valid."); } try { metadataManager.getEditLib().enumerateTree(md); @@ -411,6 +423,10 @@ public boolean doValidate(AbstractMetadata metadata, String lang) { if (failedAssert.size() > 0 || failedSchematronVerification.size() > 0) { valid = false; + errorReport.addContent(schemaTronReport); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug(" - Schematron error: {}", Xml.getString(schemaTronReport)); + } } } } catch (Exception e) { @@ -423,7 +439,7 @@ public boolean doValidate(AbstractMetadata metadata, String lang) { saveValidationStatus(metadataId, validations); - return valid; + return Pair.read(errorReport, valid); } /** diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataIndexer.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataIndexer.java index d3982a7583..65d3a794f1 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataIndexer.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataIndexer.java @@ -86,17 +86,17 @@ protected Multimap addExtraFields(AbstractMetadata fullMd) { List statuses = statusRepository.findAllByMetadataIdAndByType(fullMd.getId(), StatusValueType.workflow, statusSort); if (!statuses.isEmpty()) { MetadataStatus stat = statuses.get(0); - status = String.valueOf(stat.getStatusValue().getId()); + status = String.valueOf(stat.getStatusValue().getName()); } // get status of draft statuses = statusRepository.findAllByMetadataIdAndByType(metadataDraft.getId(), StatusValueType.workflow, statusSort); if (!statuses.isEmpty()) { MetadataStatus stat = statuses.get(0); - statusDraft = String.valueOf(stat.getStatusValue().getId()); + statusDraft = String.valueOf(stat.getStatusValue().getName()); } - extraFields.put(Geonet.IndexFieldNames.STATUS_WORKFLOW, status + statusDraft); + extraFields.put(Geonet.IndexFieldNames.STATUS_WORKFLOW, status + "-" + statusDraft); } else { Log.trace(Geonet.DATA_MANAGER, @@ -109,8 +109,8 @@ protected Multimap addExtraFields(AbstractMetadata fullMd) { List statuses = statusRepository.findAllByMetadataIdAndByType(fullMd.getId(), StatusValueType.workflow, statusSort); if (!statuses.isEmpty()) { MetadataStatus stat = statuses.get(0); - String status = String.valueOf(stat.getStatusValue().getId()); - extraFields.put(Geonet.IndexFieldNames.STATUS_WORKFLOW, status); + String status = String.valueOf(stat.getStatusValue().getName()); + extraFields.put(Geonet.IndexFieldNames.STATUS_WORKFLOW, status); } } } diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataManager.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataManager.java index 9872a5476b..07db4799fe 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataManager.java @@ -93,6 +93,7 @@ public void deleteMetadata(ServiceContext context, String metadataId) throws Exc // _entityManager.flush(); // _entityManager.clear(); } + /** * For update of owner info. */ diff --git a/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataUtils.java b/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataUtils.java index a71d64f731..040acbf4ac 100644 --- a/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataUtils.java +++ b/core/src/main/java/org/fao/geonet/kernel/datamanager/draft/DraftMetadataUtils.java @@ -24,6 +24,7 @@ package org.fao.geonet.kernel.datamanager.draft; import com.google.common.base.Optional; +import com.google.common.collect.Sets; import jeeves.server.context.ServiceContext; import org.eclipse.jetty.io.RuntimeIOException; import org.fao.geonet.api.records.attachments.StoreUtils; @@ -88,6 +89,7 @@ public class DraftMetadataUtils extends BaseMetadataUtils { IMetadataUtils metadataUtils; private ServiceContext context; + private Set listOfStatusToTriggerDraftCreation = Sets.newHashSet(StatusValue.Status.APPROVED); public void init(ServiceContext context, Boolean force) throws Exception { this.context = context; @@ -235,7 +237,7 @@ public AbstractMetadata findOne(int id) { java.util.Optional md = metadataDraftRepository.findById(id); - return md.isPresent()?md.get():null; + return md.isPresent() ? md.get() : null; } @Override @@ -407,7 +409,7 @@ public List findAllIdsBy(Specification spec /** * Start an editing session. This will record the original metadata record in * the session under the - * {@link org.fao.geonet.constants.Geonet.Session#METADATA_BEFORE_ANY_CHANGES} + + * {@link Geonet.Session#METADATA_BEFORE_ANY_CHANGES} + * id session property. *

* The record contains geonet:info element. @@ -433,7 +435,9 @@ public Integer startEditingSession(ServiceContext context, String id) throws Exc Log.trace(Geonet.DATA_MANAGER, "Editing draft with id " + id); } else if (isMdWorkflowEnable && (context.getBean(IMetadataManager.class) instanceof DraftMetadataManager) - && metadataStatus.getCurrentStatus(Integer.valueOf(id)).equals(StatusValue.Status.APPROVED)) { + && listOfStatusToTriggerDraftCreation.contains( + metadataStatus.getCurrentStatus(Integer.parseInt(id))) + ) { id = createDraft(context, id, md); Log.trace(Geonet.DATA_MANAGER, "Creating draft with id " + id + " to edit."); @@ -568,6 +572,10 @@ protected String createDraft(ServiceContext context, String templateId, String g Integer status = Integer.valueOf(StatusValue.Status.DRAFT); java.util.Optional statusValue = statusValueRepository.findById(status); + String lang = context.getLanguage(); + ResourceBundle messages = ResourceBundle.getBundle("org.fao.geonet.api.Messages", + new Locale(lang)); + if (statusValue.isPresent()) { for (Integer mdId : metadataIds) { MetadataStatus metadataStatus = new MetadataStatus(); @@ -576,7 +584,7 @@ protected String createDraft(ServiceContext context, String templateId, String g metadataStatus.setChangeDate(new ISODate()); metadataStatus.setUserId(author); metadataStatus.setStatusValue(statusValue.get()); - metadataStatus.setChangeMessage("Editing instance created"); + metadataStatus.setChangeMessage(messages.getString("metadata_status_editing_instance_created_text")); metadataStatus.setTitles(metadataUtils.extractTitles(newMetadata.getDataInfo().getSchemaId(), xml)); List listOfStatusChange = new ArrayList<>(1); @@ -607,13 +615,13 @@ public void cloneFiles(AbstractMetadata original, AbstractMetadata dest) { @Override public void replaceFiles(AbstractMetadata original, AbstractMetadata dest) { try { - boolean oldApproved=true; - boolean newApproved=false; + boolean oldApproved = true; + boolean newApproved = false; // If destination is approved then this is a working copy so the original will not be approved. if (metadataUtils.isMetadataApproved(dest.getId())) { - oldApproved=false; - newApproved=true; + oldApproved = false; + newApproved = true; } StoreUtils.replaceDataDir(context, original.getUuid(), dest.getUuid(), oldApproved, newApproved); cloneStoreFileUploadRequests(original, dest); @@ -643,7 +651,7 @@ public void cancelEditingSession(ServiceContext context, String id) throws Excep // --- remove metadata xmlSerializer.delete(id, ServiceContext.get()); - searchManager.delete(id); + searchManager.delete(String.format("+id:%s", id)); // Unset METADATA_EDITING_CREATED_DRAFT flag context.getUserSession().removeProperty(Geonet.Session.METADATA_EDITING_CREATED_DRAFT); @@ -674,4 +682,11 @@ private void cloneStoreFileUploadRequests(AbstractMetadata original, AbstractMet } } + public void setListOfStatusCreatingDraft(Set listOfStatusCreatingDraft) { + this.listOfStatusToTriggerDraftCreation = listOfStatusCreatingDraft; + } + + public Set getListOfStatusCreatingDraft() { + return listOfStatusToTriggerDraftCreation; + } } diff --git a/core/src/main/java/org/fao/geonet/kernel/mef/Importer.java b/core/src/main/java/org/fao/geonet/kernel/mef/Importer.java index f2caa9191c..77f7d18f00 100644 --- a/core/src/main/java/org/fao/geonet/kernel/mef/Importer.java +++ b/core/src/main/java/org/fao/geonet/kernel/mef/Importer.java @@ -45,6 +45,7 @@ import org.fao.geonet.kernel.datamanager.IMetadataValidator; import org.fao.geonet.kernel.search.IndexingMode; import org.fao.geonet.kernel.setting.SettingManager; +import org.fao.geonet.kernel.setting.Settings; import org.fao.geonet.repository.*; import org.fao.geonet.utils.FilePathChecker; import org.fao.geonet.utils.Log; @@ -65,7 +66,7 @@ public class Importer { @Deprecated public static List doImport(final Element params, final ServiceContext context, final Path mefFile, - final Path stylePath) throws Exception { + final Path stylePath) throws Exception { String fileType = Util.getParam(params, "file_type", "mef"); String style = Util.getParam(params, Params.STYLESHEET, "_none_"); String uuidAction = Util.getParam(params, Params.UUID_ACTION, Params.NOTHING); @@ -81,8 +82,8 @@ public static List doImport(final Element params, final ServiceContext c } public static List doImport(String fileType, final MEFLib.UuidAction uuidAction, final String style, final String source, - final MetadataType isTemplate, final String[] category, final String groupId, final boolean validate, final boolean assign, - final ServiceContext context, final Path mefFile) throws Exception { + final MetadataType isTemplate, final String[] category, final String groupId, final boolean validate, final boolean assign, + final ServiceContext context, final Path mefFile) throws Exception { ApplicationContext applicationContext = ApplicationContextHolder.get(); final DataManager dm = applicationContext.getBean(DataManager.class); final SettingManager sm = applicationContext.getBean(SettingManager.class); @@ -252,8 +253,7 @@ public void handleInfo(Element info, int index) throws Exception { FilePathChecker.verify(style); final GeonetworkDataDirectory dataDirectory = applicationContext.getBean(GeonetworkDataDirectory.class); - Path stylePath = dataDirectory.getWebappDir().resolve(Geonet.Path.IMPORT_STYLESHEETS); - Path xsltPath = stylePath.resolve(style + ".xsl"); + Path xsltPath = dataDirectory.getXsltConversion(style); if (Files.exists(xsltPath)) { md.add(index, Xml.transform(md.get(index), xsltPath)); } else { @@ -480,8 +480,8 @@ public static void addCategoriesToMetadata(AbstractMetadata metadata, Element fi } public static void importRecord(String uuid, MEFLib.UuidAction uuidAction, List md, String schema, int index, String source, - String sourceName, Map sourceTranslations, ServiceContext context, List id, String createDate, - String changeDate, String groupId, MetadataType isTemplate) throws Exception { + String sourceName, Map sourceTranslations, ServiceContext context, List id, String createDate, + String changeDate, String groupId, MetadataType isTemplate) throws Exception { GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME); DataManager dm = gc.getBean(DataManager.class); @@ -513,31 +513,68 @@ public static void importRecord(String uuid, MEFLib.UuidAction uuidAction, List< } } - try { - if (dm.existsMetadataUuid(uuid) && uuidAction != MEFLib.UuidAction.NOTHING) { - // user has privileges to replace the existing metadata + boolean metadataExist = dm.existsMetadataUuid(uuid); + + SettingManager settingManager = gc.getBean(SettingManager.class); + boolean isMdWorkflowEnable = settingManager.getValueAsBool(Settings.METADATA_WORKFLOW_ENABLE); + + String metadataId = ""; + if (metadataExist && uuidAction == MEFLib.UuidAction.NOTHING) { + throw new UnAuthorizedException("Record already exists. Change the import mode to overwrite or generating a new UUID.", null); + } else if (metadataExist && uuidAction == MEFLib.UuidAction.OVERWRITE){ + if (isMdWorkflowEnable) { + throw new UnAuthorizedException("Overwrite mode is not allowed when workflow is enabled. Use the metadata editor.", null); + } + + String recordToUpdateId = dm.getMetadataId(uuid); + if (dm.getAccessManager().canEdit(context, recordToUpdateId)) { + MetadataValidationRepository metadataValidationRepository = + context.getBean(MetadataValidationRepository.class); + List validationStatus = metadataValidationRepository + .findAllById_MetadataId(Integer.parseInt(recordToUpdateId)); + + // Refresh validation status if set + boolean validate = !validationStatus.isEmpty(); + metadataManager.updateMetadata( + context, recordToUpdateId, md.get(index), + validate, true, + context.getLanguage(), + null, true, IndexingMode.full); + metadataId = recordToUpdateId; + } else { + throw new UnAuthorizedException("User has no privilege to overwrite existing metadata", null); + } + } else if (metadataExist && uuidAction == MEFLib.UuidAction.REMOVE_AND_REPLACE){ + if (isMdWorkflowEnable) { + throw new UnAuthorizedException("Overwrite mode is not allowed when workflow is enabled. Use the metadata editor.", null); + } + + try { if (dm.getAccessManager().canEdit(context, dm.getMetadataId(uuid))) { if (Log.isDebugEnabled(Geonet.MEF)) { Log.debug(Geonet.MEF, "Deleting existing metadata with UUID : " + uuid); } metadataManager.deleteMetadata(context, dm.getMetadataId(uuid)); metadataManager.flush(); - } - // user does not hav privileges to replace the existing metadata - else { + } else { throw new UnAuthorizedException("User has no privilege to replace existing metadata", null); } + } catch (Exception e) { + throw new Exception(" Existing metadata with UUID " + uuid + " could not be deleted. Error is: " + e.getMessage()); } - } catch (Exception e) { - throw new Exception(" Existing metadata with UUID " + uuid + " could not be deleted. Error is: " + e.getMessage()); + metadataId = insertMetadata(uuid, md, schema, index, source, context, createDate, changeDate, groupId, isTemplate, dm, metadataManager); + } else { + metadataId = insertMetadata(uuid, md, schema, index, source, context, createDate, changeDate, groupId, isTemplate, dm, metadataManager); } + id.add(index, metadataId); + + } + + private static String insertMetadata(String uuid, List md, String schema, int index, String source, ServiceContext context, String createDate, String changeDate, String groupId, MetadataType isTemplate, DataManager dm, IMetadataManager metadataManager) throws Exception { if (Log.isDebugEnabled(Geonet.MEF)) Log.debug(Geonet.MEF, "Adding metadata with uuid:" + uuid); - // - // insert metadata - // int userid = context.getUserSession().getUserIdAsInt(); String docType = null, category = null; boolean ufo = false; @@ -547,15 +584,11 @@ public static void importRecord(String uuid, MEFLib.UuidAction uuidAction, List< createDate, changeDate, ufo, IndexingMode.none); dm.activateWorkflowIfConfigured(context, metadataId, groupId); - - id.add(index, metadataId); - + return metadataId; } - // -------------------------------------------------------------------------- - private static void saveFile(ServiceContext context, String id, MetadataResourceVisibility access, String file, String changeDate, - InputStream is) throws Exception { + InputStream is) throws Exception { final Store store = context.getBean("resourceStore", Store.class); final IMetadataUtils metadataUtils = context.getBean(IMetadataUtils.class); final String metadataUuid = metadataUtils.getMetadataUuid(id); @@ -610,7 +643,7 @@ private static Group addPrivileges(final ServiceContext context, final DataManag * Add operations according to information file. */ private static Set addOperations(final ServiceContext context, final DataManager dm, final Element group, - final int metadataId, final int grpId) { + final int metadataId, final int grpId) { @SuppressWarnings("unchecked") List operations = group.getChildren("operation"); Set toAdd = new HashSet(); diff --git a/core/src/main/java/org/fao/geonet/kernel/mef/MEF2Exporter.java b/core/src/main/java/org/fao/geonet/kernel/mef/MEF2Exporter.java index c8fb568977..04d8e9cff3 100644 --- a/core/src/main/java/org/fao/geonet/kernel/mef/MEF2Exporter.java +++ b/core/src/main/java/org/fao/geonet/kernel/mef/MEF2Exporter.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2022 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -24,6 +24,7 @@ package org.fao.geonet.kernel.mef; import jeeves.server.context.ServiceContext; +import org.apache.commons.io.FileUtils; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; import org.fao.geonet.Constants; @@ -32,13 +33,7 @@ import org.fao.geonet.api.records.attachments.Store; import org.fao.geonet.api.records.attachments.StoreUtils; import org.fao.geonet.constants.Geonet; -import org.fao.geonet.domain.AbstractMetadata; -import org.fao.geonet.domain.MetadataRelation; -import org.fao.geonet.domain.MetadataResource; -import org.fao.geonet.domain.MetadataResourceVisibility; -import org.fao.geonet.domain.MetadataType; -import org.fao.geonet.domain.Pair; -import org.fao.geonet.domain.ReservedOperation; +import org.fao.geonet.domain.*; import org.fao.geonet.kernel.DataManager; import org.fao.geonet.kernel.datamanager.IMetadataUtils; import org.fao.geonet.kernel.mef.MEFLib.Format; @@ -74,7 +69,7 @@ class MEF2Exporter { public static Path doExport(ServiceContext context, Set uuids, Format format, boolean skipUUID, Path stylePath, boolean resolveXlink, boolean removeXlinkAttribute, boolean skipError, boolean addSchemaLocation) throws Exception { - return doExport(context, uuids, format, skipUUID, stylePath, resolveXlink, removeXlinkAttribute, skipError, addSchemaLocation, false); + return doExport(context, uuids, format, skipUUID, stylePath, resolveXlink, removeXlinkAttribute, skipError, addSchemaLocation, false); } /** @@ -93,7 +88,7 @@ public static Path doExport(ServiceContext context, Set uuids, EsSearchManager searchManager = context.getBean(EsSearchManager.class); String contextLang = context.getLanguage() == null ? Geonet.DEFAULT_LANGUAGE : context.getLanguage(); try ( - FileSystem zipFs = ZipUtil.createZipFs(file); + FileSystem zipFs = ZipUtil.createZipFs(file) ) { StringBuilder csvBuilder = new StringBuilder("\"schema\";\"uuid\";\"id\";\"type\";\"isHarvested\";\"title\";\"abstract\"\n"); Element html = new Element("html").addContent(new Element("head").addContent(Arrays.asList( @@ -120,8 +115,7 @@ public static Path doExport(ServiceContext context, Set uuids, ))); Element body = new Element("body"); html.addContent(body); - for (Object uuid1 : uuids) { - String uuid = (String) uuid1; + for (String uuid : uuids) { final String cleanUUID = cleanForCsv(uuid); AbstractMetadata md = context.getBean(IMetadataUtils.class).findOneByUuid(uuid); @@ -129,7 +123,7 @@ public static Path doExport(ServiceContext context, Set uuids, //Here we just care if we need the approved version explicitly. //IMetadataUtils already filtered draft for non editors. - if(approved) { + if (approved) { md = context.getBean(MetadataRepository.class).findOneByUuid(uuid); } String id = String.valueOf(md.getId()); @@ -188,6 +182,9 @@ public static Path doExport(ServiceContext context, Set uuids, } Files.write(zipFs.getPath("/index.csv"), csvBuilder.toString().getBytes(Constants.CHARSET)); Files.write(zipFs.getPath("/index.html"), Xml.getString(html).getBytes(Constants.CHARSET)); + } catch (Exception e) { + FileUtils.deleteQuietly(file.toFile()); + throw e; } return file; } @@ -252,7 +249,7 @@ private static void createMetadataFolder(ServiceContext context, final Store store = context.getBean("resourceStore", Store.class); final List publicResources = store.getResources(context, metadata.getUuid(), - MetadataResourceVisibility.PUBLIC, null, true); + MetadataResourceVisibility.PUBLIC, null, true); // --- save thumbnails and maps diff --git a/core/src/main/java/org/fao/geonet/kernel/mef/MEFExporter.java b/core/src/main/java/org/fao/geonet/kernel/mef/MEFExporter.java index 9009a56773..aac7c9323b 100644 --- a/core/src/main/java/org/fao/geonet/kernel/mef/MEFExporter.java +++ b/core/src/main/java/org/fao/geonet/kernel/mef/MEFExporter.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -24,31 +24,27 @@ package org.fao.geonet.kernel.mef; import jeeves.server.context.ServiceContext; -import static org.fao.geonet.kernel.mef.MEFConstants.FILE_INFO; -import static org.fao.geonet.kernel.mef.MEFConstants.FILE_METADATA; - -import java.nio.file.FileSystem; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; - +import org.apache.commons.io.FileUtils; import org.fao.geonet.Constants; import org.fao.geonet.ZipUtil; import org.fao.geonet.api.records.attachments.Store; import org.fao.geonet.api.records.attachments.StoreUtils; import org.fao.geonet.constants.Geonet; -import org.fao.geonet.domain.AbstractMetadata; -import org.fao.geonet.domain.MetadataResource; -import org.fao.geonet.domain.MetadataResourceVisibility; -import org.fao.geonet.domain.MetadataType; -import org.fao.geonet.domain.Pair; -import org.fao.geonet.domain.ReservedOperation; +import org.fao.geonet.domain.*; import org.fao.geonet.kernel.datamanager.IMetadataUtils; import org.fao.geonet.kernel.mef.MEFLib.Format; import org.fao.geonet.kernel.mef.MEFLib.Version; import org.fao.geonet.lib.Lib; import org.fao.geonet.utils.Log; +import java.nio.file.FileSystem; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import static org.fao.geonet.kernel.mef.MEFConstants.FILE_INFO; +import static org.fao.geonet.kernel.mef.MEFConstants.FILE_METADATA; + /** * Export MEF file @@ -146,9 +142,10 @@ private static Path export(ServiceContext context, boolean approved, Format form } } + } catch (Exception e) { + FileUtils.deleteQuietly(file.toFile()); + throw e; } return file; } } - -// ============================================================================= diff --git a/core/src/main/java/org/fao/geonet/kernel/mef/MEFLib.java b/core/src/main/java/org/fao/geonet/kernel/mef/MEFLib.java index 2f3ef31284..ab78e4bc31 100644 --- a/core/src/main/java/org/fao/geonet/kernel/mef/MEFLib.java +++ b/core/src/main/java/org/fao/geonet/kernel/mef/MEFLib.java @@ -28,13 +28,9 @@ import static org.fao.geonet.kernel.mef.MEFConstants.FS; import static org.fao.geonet.kernel.mef.MEFConstants.VERSION; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileFilter; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.net.URISyntaxException; +import java.net.URLEncoder; import java.nio.file.DirectoryStream; import java.nio.file.FileSystem; import java.nio.file.Files; @@ -47,6 +43,7 @@ import javax.annotation.Nonnull; import org.apache.commons.io.IOUtils; +import org.fao.geonet.Constants; import org.fao.geonet.GeonetContext; import org.fao.geonet.ZipUtil; import org.fao.geonet.constants.Edit; @@ -68,10 +65,13 @@ import org.fao.geonet.kernel.datamanager.IMetadataUtils; import org.fao.geonet.kernel.SchemaManager; import org.fao.geonet.kernel.setting.SettingManager; +import org.fao.geonet.lib.Lib; import org.fao.geonet.repository.GroupRepository; import org.fao.geonet.repository.OperationAllowedRepository; import org.fao.geonet.repository.OperationRepository; import org.fao.geonet.utils.BinaryFile; +import org.fao.geonet.utils.IO; +import org.fao.geonet.utils.Log; import org.fao.geonet.utils.Xml; import org.jdom.Attribute; import org.jdom.Document; @@ -529,10 +529,51 @@ static String getChangeDate(List files, String fileName) throw new Exception("File not found in info.xml : " + fileName); } + public static void backupRecord(AbstractMetadata metadata, ServiceContext context) { + Log.trace(Geonet.DATA_MANAGER, "Backing up record " + metadata.getId()); + Path outDir = Lib.resource.getRemovedDir(metadata.getId()); + Path outFile; + try { + // When metadata records contains character not supported by filesystem + // it may be an issue. eg. acri-st.fr/96443 + outFile = outDir.resolve(URLEncoder.encode(metadata.getUuid(), Constants.ENCODING) + ".zip"); + } catch (UnsupportedEncodingException e1) { + outFile = outDir.resolve(String.format( + "backup-%s-%s.mef", + new Date(), metadata.getUuid())); + } + + Path file = null; + try { + file = doExport(context, metadata.getUuid(), "full", false, true, false, false, true); + Files.createDirectories(outDir); + try (InputStream is = IO.newInputStream(file); + OutputStream os = Files.newOutputStream(outFile)) { + BinaryFile.copy(is, os); + } + } catch (Exception e) { + throw new RuntimeException("Error performing backup on record '" + metadata.getUuid() + "'. Contact the system administrator if the problem persists: " + e.getMessage(), e); + } finally { + if (file != null) { + IO.deleteFile(file, false, Geonet.MEF); + } + } + } + public enum UuidAction { GENERATEUUID("generateUUID"), NOTHING("nothing"), - OVERWRITE("overwrite"); + + /** + * Update the XML of the metadata record. + */ + OVERWRITE("overwrite"), + + /** + * Remove the metadata (and privileges, status, ...) + * and insert the new one with the same UUID. + */ + REMOVE_AND_REPLACE("removeAndReplace"); String name; UuidAction(String name) { @@ -552,7 +593,7 @@ public static UuidAction parse(String value) { public enum Format { /** - * Only metadata record and infomation + * Only metadata record and information */ SIMPLE, /** diff --git a/core/src/main/java/org/fao/geonet/kernel/metadata/DefaultStatusActions.java b/core/src/main/java/org/fao/geonet/kernel/metadata/DefaultStatusActions.java index 8d3c93708e..e8678d483a 100644 --- a/core/src/main/java/org/fao/geonet/kernel/metadata/DefaultStatusActions.java +++ b/core/src/main/java/org/fao/geonet/kernel/metadata/DefaultStatusActions.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2011 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -23,6 +23,7 @@ package org.fao.geonet.kernel.metadata; +import com.google.common.base.Joiner; import jeeves.server.UserSession; import jeeves.server.context.ServiceContext; import org.apache.commons.lang.StringUtils; @@ -30,9 +31,7 @@ import org.fao.geonet.constants.Geonet; import org.fao.geonet.domain.*; import org.fao.geonet.events.md.MetadataStatusChanged; -import org.fao.geonet.kernel.AccessManager; import org.fao.geonet.kernel.DataManager; -import org.fao.geonet.kernel.datamanager.IMetadataManager; import org.fao.geonet.kernel.datamanager.IMetadataStatus; import org.fao.geonet.kernel.datamanager.IMetadataUtils; import org.fao.geonet.kernel.setting.SettingManager; @@ -40,20 +39,15 @@ import org.fao.geonet.repository.*; import org.fao.geonet.repository.specification.GroupSpecs; import org.fao.geonet.util.MailUtil; -import org.fao.geonet.util.XslUtil; import org.fao.geonet.utils.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import java.text.MessageFormat; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import static org.fao.geonet.kernel.setting.Settings.SYSTEM_FEEDBACK_EMAIL; -import com.google.common.base.Joiner; - public class DefaultStatusActions implements StatusActions { protected ServiceContext context; @@ -66,9 +60,11 @@ public class DefaultStatusActions implements StatusActions { protected String siteName; protected UserSession session; protected boolean emailNotes = true; - private String from, replyTo, replyToDescr; - private StatusValueRepository _statusValueRepository; + private String replyTo; + private String replyToDescr; + private StatusValueRepository statusValueRepository; protected IMetadataStatus metadataStatusManager; + private IMetadataUtils metadataRepository; /** * Constructor. @@ -83,14 +79,14 @@ public void init(ServiceContext context) throws Exception { this.context = context; ApplicationContext applicationContext = ApplicationContextHolder.get(); - this._statusValueRepository = applicationContext.getBean(StatusValueRepository.class); + this.statusValueRepository = applicationContext.getBean(StatusValueRepository.class); this.metadataUtils = applicationContext.getBean(IMetadataUtils.class); this.language = context.getLanguage(); SettingManager sm = applicationContext.getBean(SettingManager.class); siteName = sm.getSiteName(); - from = sm.getValue(SYSTEM_FEEDBACK_EMAIL); + String from = sm.getValue(SYSTEM_FEEDBACK_EMAIL); if (from == null || from.length() == 0) { context.error("Mail feedback address not configured, email notifications won't be sent."); @@ -109,6 +105,8 @@ public void init(ServiceContext context) throws Exception { dm = applicationContext.getBean(DataManager.class); metadataStatusManager = applicationContext.getBean(IMetadataStatus.class); siteUrl = sm.getSiteURL(context); + + metadataRepository = context.getBean(IMetadataUtils.class); } /** @@ -120,13 +118,11 @@ public void init(ServiceContext context) throws Exception { public void onEdit(int id, boolean minorEdit) throws Exception { if (Log.isTraceEnabled(Geonet.DATA_MANAGER)) { Log.trace(Geonet.DATA_MANAGER, "DefaultStatusActions.onEdit(" + id + ", " + minorEdit + ") with status " - + dm.getCurrentStatus(id)); + + dm.getCurrentStatus(id)); } if (!minorEdit && dm.getCurrentStatus(id).equals(StatusValue.Status.APPROVED)) { - //if (!minorEdit && dm.getCurrentStatus(id).equals(StatusValue.Status.APPROVED) - // && (context.getBean(IMetadataManager.class) instanceof DraftMetadataManager)) { ResourceBundle messages = ResourceBundle.getBundle("org.fao.geonet.api.Messages", - new Locale(this.language)); + new Locale(this.language)); String changeMessage = String.format(messages.getString("status_email_text"), replyToDescr, replyTo, id); Log.trace(Geonet.DATA_MANAGER, "Set DRAFT to current record with id " + id); dm.setStatus(context, id, Integer.valueOf(StatusValue.Status.DRAFT), new ISODate(), changeMessage); @@ -140,15 +136,19 @@ public void onEdit(int id, boolean minorEdit) throws Exception { * @return * @throws Exception */ - public Set onStatusChange(List listOfStatus) throws Exception { + public Map onStatusChange(List listOfStatus) throws Exception { + + if (listOfStatus.stream().map(MetadataStatus::getMetadataId).distinct().count() != listOfStatus.size()) { + throw new IllegalArgumentException("Multiple status update received on the same metadata"); + } - Set unchanged = new HashSet(); + Map results = new HashMap<>(); - // -- process the metadata records to set status + // process the metadata records to set status for (MetadataStatus status : listOfStatus) { MetadataStatus currentStatus = dm.getStatus(status.getMetadataId()); - String currentStatusId = (currentStatus != null)? - String.valueOf(currentStatus.getStatusValue().getId()):""; + String currentStatusId = (currentStatus != null) ? + String.valueOf(currentStatus.getStatusValue().getId()) : ""; String statusId = status.getStatusValue().getId() + ""; @@ -156,21 +156,32 @@ public Set onStatusChange(List listOfStatus) throws Exc listOfId.add(status.getMetadataId()); - // --- For the workflow, if the status is already set to value + // For the workflow, if the status is already set to value // of status then do nothing. This does not apply to task and event. if (status.getStatusValue().getType().equals(StatusValueType.workflow) && - (statusId).equals(currentStatusId)) { + (statusId).equals(currentStatusId)) { if (context.isDebugEnabled()) context.debug(String.format("Metadata %s already has status %s ", status.getMetadataId(), status.getStatusValue().getId())); - unchanged.add(status.getMetadataId()); + results.put(status.getMetadataId(), StatusChangeType.UNCHANGED); continue; } - // --- set status, indexing is assumed to take place later - metadataStatusManager.setStatusExt(status); + // if not possible to go from one status to the other, don't continue + AbstractMetadata metadata = metadataRepository.findOne(status.getMetadataId()); + if (!isStatusChangePossible(session.getProfile(), metadata, currentStatusId, statusId)) { + results.put(status.getMetadataId(), StatusChangeType.UNCHANGED); + continue; + } + + // debug output if necessary + if (context.isDebugEnabled()) + context.debug("Change status of metadata with id " + status.getMetadataId() + " from " + currentStatusId + " to " + statusId); - // --- inform content reviewers if the status is submitted + // we know we are allowed to do the change, apply any side effects + boolean deleted = applyStatusChange(status.getMetadataId(), status, statusId); + + // inform content reviewers if the status is submitted try { notify(getUserToNotify(status), status); } catch (Exception e) { @@ -179,21 +190,40 @@ public Set onStatusChange(List listOfStatus) throws Exc status.getMetadataId(), status.getStatusValue().getId(), e.getMessage())); } - //Throw events + if (deleted) { + results.put(status.getMetadataId(), StatusChangeType.DELETED); + } else { + results.put(status.getMetadataId(), StatusChangeType.UPDATED); + } + // throw events Log.trace(Geonet.DATA_MANAGER, "Throw workflow events."); for (Integer mid : listOfId) { - if (!unchanged.contains(mid)) { + if (results.get(mid) != StatusChangeType.DELETED) { Log.debug(Geonet.DATA_MANAGER, " > Status changed for record (" + mid + ") to status " + status); context.getApplicationContext().publishEvent(new MetadataStatusChanged( - metadataUtils.findOne(Integer.valueOf(mid)), + metadataUtils.findOne(mid), status.getStatusValue(), status.getChangeMessage(), - status.getUserId())); + status.getUserId() + )); } } } - return unchanged; + return results; + } + + /** + * Placeholder to apply any side effects. + * eg. if APPROVED, publish a record, + * if RETIRED, unpublish or delete the record. + */ + private boolean applyStatusChange(int metadataId, MetadataStatus status, String toStatusId) throws Exception { + boolean deleted = false; + if (!deleted) { + metadataStatusManager.setStatusExt(status); + } + return deleted; } @@ -206,6 +236,10 @@ public Set onStatusChange(List listOfStatus) throws Exc * @throws Exception */ protected void notify(List userToNotify, MetadataStatus status) throws Exception { + if ((userToNotify == null) || userToNotify.isEmpty()) { + return; + } + ResourceBundle messages = ResourceBundle.getBundle("org.fao.geonet.api.Messages", new Locale(this.language)); String translatedStatusName = getTranslatedStatusName(status.getStatusValue().getId()); @@ -213,13 +247,11 @@ protected void notify(List userToNotify, MetadataStatus status) throws Exc String subjectTemplate = ""; try { subjectTemplate = messages - .getString("status_change_" + status.getStatusValue().getName() + "_email_subject"); + .getString("status_change_" + status.getStatusValue().getName() + "_email_subject"); } catch (MissingResourceException e) { subjectTemplate = messages.getString("status_change_default_email_subject"); } - String subject = MessageFormat.format(subjectTemplate, siteName, translatedStatusName, replyToDescr // Author of - // the - // change + String subject = MessageFormat.format(subjectTemplate, siteName, translatedStatusName, replyToDescr // Author of the change ); Set listOfId = new HashSet<>(1); @@ -232,22 +264,30 @@ protected void notify(List userToNotify, MetadataStatus status) throws Exc textTemplate = messages.getString("status_change_default_email_text"); } + // Replace link in message + ApplicationContext applicationContext = ApplicationContextHolder.get(); + SettingManager sm = applicationContext.getBean(SettingManager.class); + textTemplate = textTemplate.replace("{{link}}", sm.getNodeURL()+ "api/records/'{{'index:uuid'}}'"); + UserRepository userRepository = context.getBean(UserRepository.class); User owner = userRepository.findById(status.getOwner()).orElse(null); - String message = MessageFormat.format(textTemplate, replyToDescr, // Author of the change - status.getChangeMessage(), translatedStatusName, status.getChangeDate(), status.getDueDate(), - status.getCloseDate(), - owner == null ? "" : Joiner.on(" ").skipNulls().join( owner.getName(), owner.getSurname()), - siteUrl); - IMetadataUtils metadataRepository = ApplicationContextHolder.get().getBean(IMetadataUtils.class); AbstractMetadata metadata = metadataRepository.findOne(status.getMetadataId()); + String metadataUrl = metadataUtils.getDefaultUrl(metadata.getUuid(), this.language); + + String message = MessageFormat.format(textTemplate, replyToDescr, // Author of the change + status.getChangeMessage(), translatedStatusName, status.getChangeDate(), status.getDueDate(), + status.getCloseDate(), + owner == null ? "" : Joiner.on(" ").skipNulls().join(owner.getName(), owner.getSurname()), + metadataUrl); + + subject = MailUtil.compileMessageWithIndexFields(subject, metadata.getUuid(), this.language); message = MailUtil.compileMessageWithIndexFields(message, metadata.getUuid(), this.language); for (User user : userToNotify) { - String salutation = Joiner.on(" ").skipNulls().join( user.getName(), user.getSurname()); + String salutation = Joiner.on(" ").skipNulls().join(user.getName(), user.getSurname()); //If we have a salutation then end it with a "," if (StringUtils.isEmpty(salutation)) { salutation = ""; @@ -267,6 +307,16 @@ protected void notify(List userToNotify, MetadataStatus status) throws Exc */ protected List getUserToNotify(MetadataStatus status) { StatusValueNotificationLevel notificationLevel = status.getStatusValue().getNotificationLevel(); + + // If new status is DRAFT and previous status is not SUBMITTED (which means a rejection), + // ignore notifications as the DRAFT status is used also when creating the working copy. + // We don't want to notify when creating a working copy. + if (status.getStatusValue().getId() == Integer.parseInt(StatusValue.Status.DRAFT) && + ((StringUtils.isEmpty(status.getPreviousState())) || + (Integer.parseInt(status.getPreviousState()) != Integer.parseInt(StatusValue.Status.SUBMITTED)))) { + return new ArrayList<>(); + } + // TODO: Status does not provide batch update // So taking care of one record at a time. // Currently the code could notify a mix of reviewers @@ -276,7 +326,7 @@ protected List getUserToNotify(MetadataStatus status) { return getUserToNotify(notificationLevel, listOfId, status.getOwner()); } - static public List getUserToNotify(StatusValueNotificationLevel notificationLevel, Set recordIds, Integer ownerId) { + public static List getUserToNotify(StatusValueNotificationLevel notificationLevel, Set recordIds, Integer ownerId) { UserRepository userRepository = ApplicationContextHolder.get().getBean(UserRepository.class); List users = new ArrayList<>(); @@ -331,7 +381,7 @@ static public List getUserToNotify(StatusValueNotificationLevel notificati return users; } - static public List getGroupToNotify(StatusValueNotificationLevel notificationLevel, List groupNames) { + public static List getGroupToNotify(StatusValueNotificationLevel notificationLevel, List groupNames) { GroupRepository groupRepository = ApplicationContextHolder.get().getBean(GroupRepository.class); List groups = new ArrayList<>(); @@ -360,10 +410,10 @@ protected void unsetAllOperations(int mdId) throws Exception { private String getTranslatedStatusName(int statusValueId) { String translatedStatusName = ""; - StatusValue s = _statusValueRepository.findOneById(statusValueId); + StatusValue s = statusValueRepository.findOneById(statusValueId); if (s == null) { translatedStatusName = statusValueId - + " (Status not found in database translation table. Check the content of the StatusValueDes table.)"; + + " (Status not found in database translation table. Check the content of the StatusValueDes table.)"; } else { translatedStatusName = s.getLabel(this.language); } @@ -377,7 +427,7 @@ private String getTranslatedStatusName(int statusValueId) { * @param subject Subject to be used for email notices * @param message Text of the mail */ - protected void sendEmail(String sendTo, String subject, String message) throws Exception { + protected void sendEmail(String sendTo, String subject, String message) { if (!emailNotes) { context.info("Would send email \nTo: " + sendTo + "\nSubject: " + subject + "\n Message:\n" + message); @@ -385,11 +435,41 @@ protected void sendEmail(String sendTo, String subject, String message) throws E ApplicationContext applicationContext = ApplicationContextHolder.get(); SettingManager sm = applicationContext.getBean(SettingManager.class); // Doesn't make sense go further without any mailserver set... - if(StringUtils.isNotBlank(sm.getValue(Settings.SYSTEM_FEEDBACK_MAILSERVER_HOST))) { + if (StringUtils.isNotBlank(sm.getValue(Settings.SYSTEM_FEEDBACK_MAILSERVER_HOST))) { List to = new ArrayList<>(); to.add(sendTo); MailUtil.sendMail(to, subject, message, null, sm, replyTo, replyToDescr); } } } + + /** + * Placeholder to test whether a given status change for a given role is allowed or not. + *

+ * + * @param profile the role that tries to execute the status change + * @param fromStatus the status from which we start + * @param toStatus the status to which we'd like to change + * @return whether the change is allowed + */ + private boolean isStatusChangePossible(Profile profile, AbstractMetadata metadata, String fromStatus, String toStatus) throws Exception { + return true; + // Example: + // if (StringUtils.isEmpty(fromStatus) && toStatus.equals(StatusValue.Status.DRAFT)) + // return true; + // // figure out whether we can switch from status to status, depending on the profile + // Set toProfiles = new HashSet<>(); + // switch (profile) { + // case Editor: + // toProfiles = getEditorFlow().get(fromStatus); + // break; + // case Administrator: + // toProfiles = getAdminFlow().get(fromStatus); + // break; + // case Reviewer: + // toProfiles = getReviewerFlow().get(fromStatus); + // break; + // } + // return toProfiles != null && toProfiles.contains(toStatus); + } } diff --git a/core/src/main/java/org/fao/geonet/kernel/metadata/StatusActions.java b/core/src/main/java/org/fao/geonet/kernel/metadata/StatusActions.java index 2165558573..9a4aecff58 100644 --- a/core/src/main/java/org/fao/geonet/kernel/metadata/StatusActions.java +++ b/core/src/main/java/org/fao/geonet/kernel/metadata/StatusActions.java @@ -26,6 +26,7 @@ import jeeves.server.context.ServiceContext; import java.util.List; +import java.util.Map; import java.util.Set; import org.fao.geonet.domain.ISODate; @@ -37,6 +38,6 @@ public interface StatusActions { public void onEdit(int id, boolean minorEdit) throws Exception; - public Set onStatusChange(List status) throws Exception; + public Map onStatusChange(List status) throws Exception; } diff --git a/core/src/main/java/org/fao/geonet/kernel/search/SearchParameter.java b/core/src/main/java/org/fao/geonet/kernel/metadata/StatusChangeType.java similarity index 57% rename from core/src/main/java/org/fao/geonet/kernel/search/SearchParameter.java rename to core/src/main/java/org/fao/geonet/kernel/metadata/StatusChangeType.java index 74114e8868..81d3983ffa 100644 --- a/core/src/main/java/org/fao/geonet/kernel/search/SearchParameter.java +++ b/core/src/main/java/org/fao/geonet/kernel/metadata/StatusChangeType.java @@ -1,5 +1,5 @@ -//============================================================================== -//=== Copyright (C) 2001-2010 Food and Agriculture Organization of the +//============================================================================= +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -20,25 +20,10 @@ //=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, //=== Rome - Italy. email: geonetwork@osgeo.org //============================================================================== -package org.fao.geonet.kernel.search; +package org.fao.geonet.kernel.metadata; -/** - * Parameter names used in search. - * - * @author heikki doeleman - */ -public class SearchParameter { - public static final String GROUP = "group"; - public static final String UUID = "uuid"; - public static final String ANY = "any"; - public static final String ALL = "all"; - public static final String OR = "or"; - public static final String WITHOUT = "without"; - public static final String DOWNLOAD = "download"; - public static final String TEMPLATE = "template"; - public static final String TYPE = "type"; - public static final String INSPIRE = "inspire"; - public static final String TITLE = "title"; - public static final String VALID = "valid"; - public static final String ROOT = "_root"; +public enum StatusChangeType { + UPDATED, + UNCHANGED, + DELETED } diff --git a/core/src/main/java/org/fao/geonet/kernel/schema/MetadataSchema.java b/core/src/main/java/org/fao/geonet/kernel/schema/MetadataSchema.java index 6248c99223..d07dccc595 100644 --- a/core/src/main/java/org/fao/geonet/kernel/schema/MetadataSchema.java +++ b/core/src/main/java/org/fao/geonet/kernel/schema/MetadataSchema.java @@ -668,6 +668,3 @@ savedQuery, getName(), getNamespaces()); } } - -//============================================================================== - diff --git a/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java b/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java index 8b3d829175..e07c3dfb48 100644 --- a/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/search/EsSearchManager.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -68,7 +68,6 @@ import org.fao.geonet.repository.specification.MetadataSpecs; import org.fao.geonet.utils.Xml; import org.jdom.Element; -import org.jdom.JDOMException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -101,16 +100,17 @@ public class EsSearchManager implements ISearchManager { public static final String FIELDNAME = "name"; public static final String FIELDSTRING = "string"; - public static Map relatedIndexFields; - public static Set FIELDLIST_CORE; - public static Set FIELDLIST_RELATED; - public static Set FIELDLIST_UUID; + public static final Map RELATED_INDEX_FIELDS; + public static final Set FIELDLIST_CORE; + public static final Set FIELDLIST_RELATED; + public static final Map FIELDLIST_RELATED_SCRIPTED; + public static final Set FIELDLIST_UUID; static { FIELDLIST_UUID = ImmutableSet.builder() .add(Geonet.IndexFieldNames.UUID).build(); - relatedIndexFields = ImmutableMap.builder() + RELATED_INDEX_FIELDS = ImmutableMap.builder() .put("children", "parentUuid") .put("brothersAndSisters", "parentUuid") .put("services", "recordOperateOn") @@ -140,7 +140,7 @@ public class EsSearchManager implements ISearchManager { .add(Geonet.IndexFieldNames.UUID) .add(Geonet.IndexFieldNames.RESOURCETITLE) .add(Geonet.IndexFieldNames.RESOURCETITLE + "Object") - .add("overview.*") + //.add("overview.*") .add("link") .add("format") .add("resourceType") @@ -151,6 +151,11 @@ public class EsSearchManager implements ISearchManager { .add(Geonet.IndexFieldNames.RESOURCEABSTRACT + "Object") .add("operatesOn") .build(); + + FIELDLIST_RELATED_SCRIPTED = ImmutableMap.builder() + // Elasticsearch scripted field to get the first overview url. Scripted fields must return single values. + .put("overview", "return params['_source'].overview == null ? [] : params['_source'].overview.stream().map(f -> f.url).findFirst().orElse('');") + .build(); } @Value("${es.index.records:gn-records}") @@ -207,7 +212,7 @@ private void addMDFields(Element doc, Path schemaDir, IndexingMode indexingMode) { final Path styleSheet = getXSLTForIndexing(schemaDir, metadataType); try { - Map indexParams = new HashMap(); + Map indexParams = new HashMap<>(); indexParams.put("fastIndexMode", indexingMode.equals(IndexingMode.core)); Element fields = Xml.transform(metadata, styleSheet, indexParams); @@ -227,10 +232,8 @@ private void addMDFields(Element doc, Path schemaDir, } private void addMoreFields(Element doc, Multimap fields) { - fields.entries().forEach(e -> { - doc.addContent(new Element(e.getKey()) - .setText(String.valueOf(e.getValue()))); - }); + fields.entries().forEach(e -> doc.addContent(new Element(e.getKey()) + .setText(String.valueOf(e.getValue())))); } public Element makeField(String name, String value) { @@ -326,21 +329,21 @@ private void createIndex(String indexId, String indexName, boolean dropIndexFirs public void end() { } - public UpdateResponse updateFields(String id, Map fields) throws Exception { - fields.put("indexingDate", new Date()); + public UpdateResponse updateFields(String id, Map fields) throws IOException { + fields.put(Geonet.IndexFieldNames.INDEXING_DATE, new Date()); UpdateRequest updateRequest = new UpdateRequest(defaultIndex, id).doc(fields); return client.getClient().update(updateRequest, RequestOptions.DEFAULT); } - public BulkResponse updateFields(String id, Multimap fields, Set fieldsToRemove) throws Exception { + public BulkResponse updateFields(String id, Multimap fields, Set fieldsToRemove) throws IOException { Map fieldMap = new HashMap<>(); fields.asMap().forEach((e, v) -> fieldMap.put(e, v.toArray())); return updateFields(id, fieldMap, fieldsToRemove); } - public BulkResponse updateFields(String id, Map fieldMap, Set fieldsToRemove) throws Exception { - fieldMap.put("indexingDate", new Date()); + public BulkResponse updateFields(String id, Map fieldMap, Set fieldsToRemove) throws IOException { + fieldMap.put(Geonet.IndexFieldNames.INDEXING_DATE, new Date()); BulkRequest bulkrequest = new BulkRequest(); - StringBuffer script = new StringBuffer(); + StringBuilder script = new StringBuilder(); fieldsToRemove.forEach(f -> script.append(String.format("ctx._source.remove('%s');", f))); @@ -356,10 +359,10 @@ public BulkResponse updateFields(String id, Map fieldMap, Set fields) throws Exception { - fields.put("indexingDate", new Date()); + public void updateFieldsAsynch(String id, Map fields) { + fields.put(Geonet.IndexFieldNames.INDEXING_DATE, new Date()); UpdateRequest request = new UpdateRequest(defaultIndex, id).doc(fields); - ActionListener listener = new ActionListener() { + ActionListener listener = new ActionListener() { @Override public void onResponse(UpdateResponse updateResponse) { } @@ -377,7 +380,7 @@ public UpdateResponse updateField(String id, String field, Object value) throws return updateFields(id, updates); } - public void updateFieldAsynch(String id, String field, Object value) throws Exception { + public void updateFieldAsynch(String id, String field, Object value) { Map updates = new HashMap<>(2); updates.put(getPropertyName(field), value); updateFieldsAsynch(id, updates); @@ -421,6 +424,7 @@ public void index(Path schemaDir, Element metadata, String id, document.put(id, jsonDocument); final BulkResponse bulkItemResponses = client.bulkRequest(defaultIndex, document); checkIndexResponse(bulkItemResponses, document); + overviewFieldUpdater.process(id); } else { listOfDocumentsToIndex.put(id, jsonDocument); if (listOfDocumentsToIndex.size() == commitInterval) { @@ -443,9 +447,7 @@ private void sendDocumentsToIndex() { new Object[]{listOfDocumentsToIndex.size(), e.getMessage()}); } finally { // TODO: Trigger this async ? - documents.keySet().forEach(uuid -> { - overviewFieldUpdater.process(uuid); - }); + documents.keySet().forEach(uuid -> overviewFieldUpdater.process(uuid)); } } } @@ -501,9 +503,9 @@ private void checkIndexResponse(BulkResponse bulkItemResponses, if (listErrorOfDocumentsToIndex.size() > 0) { BulkResponse response = client.bulkRequest(defaultIndex, listErrorOfDocumentsToIndex); - if (!(response.status().getStatus() != 201)) { + if (response.status().getStatus() != 201) { LOGGER.error("Failed to save error documents {}.", - new Object[]{errorDocumentIds.toArray().toString()}); + new Object[]{Arrays.toString(errorDocumentIds.toArray())}); } } } @@ -520,6 +522,8 @@ private void checkIndexResponse(BulkResponse bulkItemResponses, .add("cat") .add("keyword") .add("extentDescriptionObject") + .add("extentIdentifierObject") + .add("resourceAltTitleObject") .add("resourceCredit") .add("resourceCreditObject") .add("resolutionScaleDenominator") @@ -553,6 +557,7 @@ private void checkIndexResponse(BulkResponse bulkItemResponses, .add("type") .add("resourceDate") .add("link") + .add("linkProtocol") .add("crsDetails") .add("format") .add("orderingInstructionsObject") @@ -567,6 +572,7 @@ private void checkIndexResponse(BulkResponse bulkItemResponses, .add("resourceTemporalDateRange") .add("resourceTemporalExtentDateRange") .add("resourceTemporalExtentDetails") + .add("licenseObject") .build(); booleanFields = ImmutableSet.builder() .add("hasxlinks") @@ -576,6 +582,8 @@ private void checkIndexResponse(BulkResponse bulkItemResponses, .add(INDEXING_ERROR_FIELD) .add("isHarvested") .add("isPublishedToAll") + .add("isPublishedToIntranet") + .add("isPublishedToGuest") .add("isSchemaValid") .add("isAboveThreshold") .add("isOpenData") @@ -594,7 +602,7 @@ public ObjectNode documentToJson(Element xml) { ObjectNode doc = new ObjectMapper().createObjectNode(); ObjectMapper mapper = new ObjectMapper(); - List elementNames = new ArrayList(); + List elementNames = new ArrayList<>(); List fields = xml.getChildren(); // Loop on doc fields @@ -644,7 +652,7 @@ public ObjectNode documentToJson(Element xml) { if (name.equals("geom")) { try { - doc.put("geom", mapper.readTree(nodeElements.get(0).getTextNormalize())); + doc.set("geom", mapper.readTree(nodeElements.get(0).getTextNormalize())); } catch (IOException e) { LOGGER.error("Parsing invalid geometry for JSON node {}. Error is: {}", new Object[]{nodeElements.get(0).getTextNormalize(), e.getMessage()}); @@ -703,14 +711,14 @@ public boolean rebuildIndex(ServiceContext context, boolean xlinks, } if (StringUtils.isNotBlank(bucket)) { - ArrayList listOfIdsToIndex = new ArrayList(); + ArrayList listOfIdsToIndex = new ArrayList<>(); UserSession session = context.getUserSession(); SelectionManager sm = SelectionManager.getManager(session); synchronized (sm.getSelection(bucket)) { for (Iterator iter = sm.getSelection(bucket).iterator(); iter.hasNext(); ) { - String uuid = (String) iter.next(); + String uuid = iter.next(); for (AbstractMetadata metadata : metadataRepository.findAllByUuid(uuid)) { String indexKey = uuid; if (metadata instanceof MetadataDraft) { @@ -748,11 +756,11 @@ public Map getDocument(String uuid) throws Exception { } public SearchResponse query(String luceneQuery, String filterQuery, int startPosition, int maxRecords) throws Exception { - return client.query(defaultIndex, luceneQuery, filterQuery, new HashSet(), startPosition, maxRecords); + return client.query(defaultIndex, luceneQuery, filterQuery, new HashSet<>(), new HashMap<>(), startPosition, maxRecords); } public SearchResponse query(String luceneQuery, String filterQuery, int startPosition, int maxRecords, List> sort) throws Exception { - return client.query(defaultIndex, luceneQuery, filterQuery, new HashSet(), startPosition, maxRecords, sort); + return client.query(defaultIndex, luceneQuery, filterQuery, new HashSet<>(), new HashMap<>(), startPosition, maxRecords, sort); } public SearchResponse query(String luceneQuery, String filterQuery, Set includedFields, @@ -760,10 +768,16 @@ public SearchResponse query(String luceneQuery, String filterQuery, Set return client.query(defaultIndex, luceneQuery, filterQuery, includedFields, from, size); } + public SearchResponse query(String luceneQuery, String filterQuery, Set includedFields, + Map scriptedFields, + int from, int size) throws Exception { + return client.query(defaultIndex, luceneQuery, filterQuery, includedFields, scriptedFields, from, size); + } + public SearchResponse query(JsonNode jsonRequest, Set includedFields, int from, int size, List> sort) throws Exception { // TODO: Review postFilterBuilder - return client.query(defaultIndex, jsonRequest, null, includedFields, from, size, sort); + return client.query(defaultIndex, jsonRequest, null, includedFields, new HashMap<>(), from, size, sort); } public SearchResponse query(JsonNode jsonRequest, Set includedFields, @@ -772,7 +786,7 @@ public SearchResponse query(JsonNode jsonRequest, Set includedFields, return client.query(defaultIndex, jsonRequest, null, includedFields, from, size); } - public Map getFieldsValues(String id, Set fields) throws Exception { + public Map getFieldsValues(String id, Set fields) throws IOException { return client.getFieldsValues(defaultIndex, id, fields); } @@ -821,9 +835,7 @@ public Map getDocsChangeDate() throws Exception { final SearchResponse response = client.query(defaultIndex, "*", null, docsChangeIncludedFields, from, size); - response.getHits().forEach(r -> { - docs.put(r.getId(), (String) r.getSourceAsMap().get(Geonet.IndexFieldNames.DATABASE_CHANGE_DATE)); - }); + response.getHits().forEach(r -> docs.put(r.getId(), (String) r.getSourceAsMap().get(Geonet.IndexFieldNames.DATABASE_CHANGE_DATE))); } catch (Exception e) { LOGGER.error("Error while collecting all documents: {}", e.getMessage()); e.printStackTrace(); @@ -892,7 +904,7 @@ public Set getDocsWithXLinks() throws Exception { // Set result = new HashSet<>(); // iterateQuery(params, // doc -> result.add(convertInteger(doc.getFieldValue(ID)))); - return null; + return Collections.emptySet(); } @Override diff --git a/core/src/main/java/org/fao/geonet/kernel/search/index/OverviewIndexFieldUpdater.java b/core/src/main/java/org/fao/geonet/kernel/search/index/OverviewIndexFieldUpdater.java index 95f9668389..19944c779e 100644 --- a/core/src/main/java/org/fao/geonet/kernel/search/index/OverviewIndexFieldUpdater.java +++ b/core/src/main/java/org/fao/geonet/kernel/search/index/OverviewIndexFieldUpdater.java @@ -1,3 +1,26 @@ +//============================================================================= +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== 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. +//=== +//=== This program is distributed in the hope that it will be useful, but +//=== WITHOUT ANY WARRANTY; without even the implied warranty of +//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geonetwork@osgeo.org +//============================================================================== + package org.fao.geonet.kernel.search.index; import org.apache.commons.lang.StringUtils; @@ -20,13 +43,26 @@ public class OverviewIndexFieldUpdater { EsSearchManager searchManager; public void process(String uuid) { + processOverview(uuid); + processOverview(uuid + "-draft"); + } + + private ArrayList> getHitOverviews(Map fields) { + Object overviews = fields.get("overview"); + if (overviews != null) { + return ((ArrayList) overviews); + } + return new ArrayList<>(); + } + + private void processOverview(String id) { Set source = new HashSet<>(); source.add("overview"); SearchResponse response = null; try { response = searchManager.query(String.format( - "+uuid:\"%s\" _exists_:overview.url -_exists_:overview.data", - uuid), null, source, 0, 1); + "+id:\"%s\" _exists_:overview.url -_exists_:overview.data", + id), null, source, 0, 1); response.getHits().forEach(hit -> { AtomicBoolean updates = new AtomicBoolean(false); Map fields = hit.getSourceAsMap(); @@ -42,7 +78,7 @@ public void process(String uuid) { }); if (updates.get()) { try { - searchManager.updateFields(uuid, fields, source); + searchManager.updateFields(id, fields, source); } catch (Exception e) { e.printStackTrace(); } @@ -52,12 +88,4 @@ public void process(String uuid) { e.printStackTrace(); } } - - private ArrayList> getHitOverviews(Map fields) { - Object overviews = fields.get("overview"); - if (overviews != null) { - return ((ArrayList) overviews); - } - return new ArrayList<>(); - } } diff --git a/core/src/main/java/org/fao/geonet/kernel/security/GeonetworkAuthenticationProvider.java b/core/src/main/java/org/fao/geonet/kernel/security/GeonetworkAuthenticationProvider.java index de30e89f07..33d9090f59 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/GeonetworkAuthenticationProvider.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/GeonetworkAuthenticationProvider.java @@ -22,6 +22,7 @@ //============================================================================== package org.fao.geonet.kernel.security; +import org.apache.commons.lang3.StringUtils; import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.domain.User; import org.fao.geonet.repository.UserRepository; @@ -66,6 +67,7 @@ protected void additionalAuthenticationChecks(UserDetails userDetails, } if (authentication.getCredentials().toString().isEmpty() || + StringUtils.isEmpty(gnDetails.getPassword()) || !encoder.matches(authentication.getCredentials().toString(), gnDetails.getPassword())) { Log.warning(Log.JEEVES, "Authentication failed: wrong password provided"); throw new BadCredentialsException("Authentication failed: wrong password provided"); diff --git a/core/src/main/java/org/fao/geonet/kernel/security/keycloak/keycloakPreAuthActionsLoginFilter.java b/core/src/main/java/org/fao/geonet/kernel/security/keycloak/KeycloakPreAuthActionsLoginFilter.java similarity index 84% rename from core/src/main/java/org/fao/geonet/kernel/security/keycloak/keycloakPreAuthActionsLoginFilter.java rename to core/src/main/java/org/fao/geonet/kernel/security/keycloak/KeycloakPreAuthActionsLoginFilter.java index 5d6195f337..a8a10cf3fa 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/keycloak/keycloakPreAuthActionsLoginFilter.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/keycloak/KeycloakPreAuthActionsLoginFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2017 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -24,6 +24,7 @@ package org.fao.geonet.kernel.security.keycloak; import org.fao.geonet.Constants; +import org.fao.geonet.security.web.csrf.GeonetworkCsrfSecurityRequestMatcher; import org.keycloak.adapters.spi.UserSessionManagement; import org.keycloak.adapters.springsecurity.filter.KeycloakCsrfRequestMatcher; import org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter; @@ -41,29 +42,30 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.net.URLEncoder; import java.io.IOException; +import java.net.URLEncoder; -public class keycloakPreAuthActionsLoginFilter extends KeycloakPreAuthActionsFilter { - public static String signinPath = null; +public class KeycloakPreAuthActionsLoginFilter extends KeycloakPreAuthActionsFilter { @Autowired LoginUrlAuthenticationEntryPoint loginUrlAuthenticationEntryPoint; - public keycloakPreAuthActionsLoginFilter(UserSessionManagement userSessionManagement) { + public KeycloakPreAuthActionsLoginFilter(UserSessionManagement userSessionManagement) { super(userSessionManagement); } - public keycloakPreAuthActionsLoginFilter(UserSessionManagement userSessionManagement, CsrfFilter csrfFilter) { + public KeycloakPreAuthActionsLoginFilter(UserSessionManagement userSessionManagement, CsrfFilter csrfFilter, + GeonetworkCsrfSecurityRequestMatcher csrfRequestMatcher) { super(userSessionManagement); // Set the csrf filter request matcher for Keycloak so that it allows k_* endpoints to be reached without CSRF. - // Without this fix, the backchannel logout was not working due to CSRF failures. - csrfFilter.setRequireCsrfProtectionMatcher(new KeycloakCsrfRequestMatcher()); + // Without this fix, the back-channel logout was not working due to CSRF failures. + csrfRequestMatcher.addRequestMatcher(new KeycloakCsrfRequestMatcher()); + csrfFilter.setRequireCsrfProtectionMatcher(csrfRequestMatcher); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { + throws IOException, ServletException { HttpServletRequest servletRequest = (HttpServletRequest) request; HttpServletResponse servletResponse = (HttpServletResponse) response; @@ -76,7 +78,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha if (servletRequest.getPathInfo() != null && !KeycloakAuthenticationProcessingFilter.DEFAULT_REQUEST_MATCHER.matches(servletRequest) && !isAuthenticated() && - !(servletRequest.getContextPath() + KeycloakUtil.getSigninPath()).equals(servletRequest.getRequestURI()) && + !(servletRequest.getContextPath() + KeycloakUtil.getSigninPath()).equals(servletRequest.getRequestURI()) && !servletRequest.getRequestURI().endsWith(AdapterConstants.K_LOGOUT) && !servletRequest.getRequestURI().endsWith(AdapterConstants.K_PUSH_NOT_BEFORE) && !servletRequest.getRequestURI().endsWith(AdapterConstants.K_QUERY_BEARER_TOKEN) && @@ -102,7 +104,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha private boolean isAuthenticated() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null || AnonymousAuthenticationToken.class. - isAssignableFrom(authentication.getClass())) { + isAssignableFrom(authentication.getClass())) { return false; } return authentication.isAuthenticated(); diff --git a/core/src/main/java/org/fao/geonet/kernel/security/keycloak/KeycloakUserUtils.java b/core/src/main/java/org/fao/geonet/kernel/security/keycloak/KeycloakUserUtils.java index c663604b78..acb5f796b0 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/keycloak/KeycloakUserUtils.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/keycloak/KeycloakUserUtils.java @@ -165,7 +165,9 @@ protected UserDetails getUserDetailsNoCache(AccessToken accessToken, boolean wit // Assign the highest profile available Map> profileGroups = getProfileGroups(accessToken); - user.setProfile(getMaxProfile(baselUser.getProfile(), profileGroups)); + if (newUserFlag || keycloakConfiguration.isUpdateProfile()) { + user.setProfile(getMaxProfile(baselUser.getProfile(), profileGroups)); + } //Apply changes to database is required. if (withDbUpdate) { @@ -249,8 +251,7 @@ private Map> getProfileGroups(AccessToken accessToken) { * @param user to apply the changes to. */ private void updateGroups(Map> profileGroups, User user) { - // First we remove all previous groups - userGroupRepository.deleteAll(UserGroupSpecs.hasUserId(user.getId())); + Set userGroups = new HashSet<>(); // Now we add the groups for (Profile p : profileGroups.keySet()) { @@ -291,12 +292,14 @@ private void updateGroups(Map> profileGroups, User user) { ug.setGroup(group); ug.setUser(user); ug.setProfile(Profile.Editor); - userGroupRepository.save(ug); + userGroups.add(ug); } - userGroupRepository.save(usergroup); + userGroups.add(usergroup); } } + + userGroupRepository.updateUserGroups(user.getId(), userGroups); } /** diff --git a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java index 6e1a478b91..3c0cf6f3d7 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/OidcUser2GeonetworkUser.java @@ -41,8 +41,10 @@ import org.springframework.security.oauth2.core.oidc.OidcIdToken; import org.springframework.util.StringUtils; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * Class for handling Oidc User and the Geonetwork User. @@ -52,21 +54,21 @@ public class OidcUser2GeonetworkUser { @Autowired - OIDCConfiguration oidcConfiguration; + protected OIDCConfiguration oidcConfiguration; @Autowired - OIDCRoleProcessor oidcRoleProcessor; + protected OIDCRoleProcessor oidcRoleProcessor; @Autowired - SimpleOidcUserFactory simpleOidcUserFactory; + protected SimpleOidcUserFactory simpleOidcUserFactory; @Autowired - private UserRepository userRepository; + protected UserRepository userRepository; @Autowired - private GroupRepository groupRepository; + protected GroupRepository groupRepository; @Autowired - private LanguageRepository langRepository; + protected LanguageRepository langRepository; @Autowired - private UserGroupRepository userGroupRepository; + protected UserGroupRepository userGroupRepository; @Autowired - private GeonetworkAuthenticationProvider geonetworkAuthenticationProvider; + protected GeonetworkAuthenticationProvider geonetworkAuthenticationProvider; public UserDetails getUserDetails(Map attributes, boolean withDbUpdate) throws Exception { @@ -158,9 +160,8 @@ public UserDetails getUserDetails(OidcIdToken idToken, Map attributes, boolean w * @param user to apply the changes to. */ //from keycloak - private void updateGroups(Map> profileGroups, User user) { - // First we remove all previous groups - userGroupRepository.deleteAll(UserGroupSpecs.hasUserId(user.getId())); + protected void updateGroups(Map> profileGroups, User user) { + Set userGroups = new HashSet<>(); // Now we add the groups for (Profile p : profileGroups.keySet()) { @@ -201,13 +202,13 @@ private void updateGroups(Map> profileGroups, User user) { ug.setGroup(group); ug.setUser(user); ug.setProfile(Profile.Editor); - userGroupRepository.save(ug); + userGroups.add(ug); } - userGroupRepository.save(usergroup); + userGroups.add(usergroup); } } - } - + userGroupRepository.updateUserGroups(user.getId(), userGroups); + } } diff --git a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/SimpleOidcUser.java b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/SimpleOidcUser.java index a89266bc9d..11eb0b3a11 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/SimpleOidcUser.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/SimpleOidcUser.java @@ -42,7 +42,7 @@ *

* parts taken from BaselUser (GN keycloak plugin) */ -class SimpleOidcUser { +public class SimpleOidcUser { private String username; @@ -61,7 +61,7 @@ class SimpleOidcUser { * @param idToken The User's ID token * @param attributes All the user's claims (ID Token claims + USERINFO claims) */ - SimpleOidcUser(OIDCConfiguration oidcConfiguration, OIDCRoleProcessor oidcRoleProcessor, OidcIdToken idToken, Map userAttributes) throws Exception { + public SimpleOidcUser(OIDCConfiguration oidcConfiguration, OIDCRoleProcessor oidcRoleProcessor, OidcIdToken idToken, Map userAttributes) throws Exception { Map attributes = (userAttributes == null) ? new HashMap() : userAttributes; username = (String) idToken.getClaims().get(oidcConfiguration.getUserNameAttribute()); @@ -132,7 +132,7 @@ class SimpleOidcUser { } } - SimpleOidcUser(OIDCConfiguration oidcConfiguration, OIDCRoleProcessor oidcRoleProcessor, Map attributes) throws Exception { + public SimpleOidcUser(OIDCConfiguration oidcConfiguration, OIDCRoleProcessor oidcRoleProcessor, Map attributes) throws Exception { username = (String) attributes.get(oidcConfiguration.getUserNameAttribute()); if (username == null) { username = (String) attributes.get(StandardClaimNames.PREFERRED_USERNAME); diff --git a/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/bearer/GeonetworkJwtAuthenticationProvider.java b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/bearer/GeonetworkJwtAuthenticationProvider.java new file mode 100644 index 0000000000..680a540ff9 --- /dev/null +++ b/core/src/main/java/org/fao/geonet/kernel/security/openidconnect/bearer/GeonetworkJwtAuthenticationProvider.java @@ -0,0 +1,258 @@ +/* + * Copyright (C) 2022 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ +package org.fao.geonet.kernel.security.openidconnect.bearer; + + +import org.fao.geonet.kernel.security.openidconnect.OIDCConfiguration; +import org.fao.geonet.kernel.security.openidconnect.OIDCRoleProcessor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.core.convert.converter.Converter; +import org.springframework.http.HttpStatus; +import org.springframework.security.access.hierarchicalroles.RoleHierarchy; +import org.springframework.security.authentication.AbstractAuthenticationToken; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.InternalAuthenticationServiceException; +import org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken; +import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserRequest; +import org.springframework.security.oauth2.client.registration.ClientRegistration; +import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; +import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; +import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; +import org.springframework.security.oauth2.core.OAuth2AccessToken; +import org.springframework.security.oauth2.core.OAuth2AuthenticationException; +import org.springframework.security.oauth2.core.OAuth2Error; +import org.springframework.security.oauth2.core.oidc.OidcUserInfo; +import org.springframework.security.oauth2.core.oidc.user.OidcUser; +import org.springframework.security.oauth2.core.user.DefaultOAuth2User; +import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.security.oauth2.jwt.Jwt; +import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken; +import org.springframework.security.oauth2.server.resource.BearerTokenError; +import org.springframework.security.oauth2.server.resource.BearerTokenErrorCodes; +import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; +import org.springframework.util.Assert; + +import java.time.Instant; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static org.fao.geonet.kernel.security.openidconnect.GeonetworkClientRegistrationProvider.CLIENTREGISTRATION_NAME; +import static org.fao.geonet.kernel.security.openidconnect.bearer.RoleInserter.insertRoles; + +/** + * This is the main class that does all the work. + * + * Note - if this throws, then a 401 will be issued with a header like this; + * + * WWW-Authenticate: Bearer error="invalid_token", error_description="access token has expired!", error_uri="https://tools.ietf.org/html/rfc6750#section-3.1" + * + */ +public class GeonetworkJwtAuthenticationProvider implements AuthenticationProvider { + static UserInfoCache userInfoCache = new UserInfoCache(); + private final OAuth2UserService userService; + AccessTokenParser accessTokenParser; + UserRolesResolver userRolesResolver; + List accessTokenValidators; + @Autowired + ApplicationEventPublisher applicationEventPublisher; + @Autowired + OIDCRoleProcessor oidcRoleProcessor; + @Autowired + RoleHierarchy roleHierarchy; + @Autowired + OIDCConfiguration oidcConfiguration; + @Autowired + ClientRegistrationRepository clientRegistrationRepository; + private OAuth2UserService oauth2UserService = new DefaultOAuth2UserService(); + private Converter jwtAuthenticationConverter = new JwtAuthenticationConverter(); + + public GeonetworkJwtAuthenticationProvider(AccessTokenParser accessTokenParser, + OAuth2UserService userService, + UserRolesResolver userRolesResolver, + List accessTokenValidators + ) { + Assert.notNull(accessTokenParser, "accessTokenParser cannot be null"); + Assert.notNull(userService, "userService cannot be null"); + Assert.notNull(accessTokenValidators, "accessTokenValidators cannot be null"); + + this.userRolesResolver = userRolesResolver; + this.accessTokenParser = accessTokenParser; + this.userService = userService; + this.accessTokenValidators = accessTokenValidators; + } + + private static final OAuth2Error DEFAULT_INVALID_TOKEN = + invalidToken("An error occurred while attempting to decode the Jwt: Invalid token"); + + /** + * from spring - creates an error return + */ + private static OAuth2Error invalidToken(String message) { + try { + return new BearerTokenError( + BearerTokenErrorCodes.INVALID_TOKEN, + HttpStatus.UNAUTHORIZED, + message, + "https://tools.ietf.org/html/rfc6750#section-3.1"); + } catch (IllegalArgumentException malformed) { + // some third-party library error messages are not suitable for RFC 6750's error message charset + return DEFAULT_INVALID_TOKEN; + } + } + + /** + * runs all the AccessTokenValidator on the token. + * + * @param claims + * @param userInfoClaims + * @throws Exception + */ + public void verifyToken(Map claims, Map userInfoClaims) throws Exception { + for (AccessTokenValidator validator : accessTokenValidators) { + validator.verifyToken(claims, userInfoClaims); + } + } + + + /** + * First time using the token, we have to do quite a bit of work. + * i.e. call the userinfo endpoint (and for azure the graph api). + * We cache the results since they shouldn't change over the lifetime of the token. + * + * @param authentication + * @return + */ + public UserInfoCacheItem createCacheItem(Authentication authentication) { + //this is the actual access token + BearerTokenAuthenticationToken bearer = (BearerTokenAuthenticationToken) authentication; + + Map jwt; + try { + //parse it (using either the signature checking or non-signature checking version). + //NOTE: we will use this token with the userinfo endpoint, so the server will signature-validate it + // (meaning its not a big deal if we don't). + jwt = accessTokenParser.parseToken(bearer.getToken()); + } catch (Exception failed) { + OAuth2Error invalidToken = invalidToken(failed.getMessage()); + throw new OAuth2AuthenticationException(invalidToken, invalidToken.getDescription(), failed); + } + + //when is this token valid until + Instant expireTime = Instant.ofEpochMilli((Long) jwt.get("exp") * 1000); + + //if expired, throw + if (expireTime.compareTo(Instant.now()) < 0) { + throw new OAuth2AuthenticationException(invalidToken("access token has expired")); + } + + //execute the userinfo endpoint + ClientRegistration clientRegistration = clientRegistrationRepository.findByRegistrationId(CLIENTREGISTRATION_NAME); + OAuth2AccessToken accessToken = new OAuth2AccessToken( + OAuth2AccessToken.TokenType.BEARER, + bearer.getToken(), + Instant.ofEpochMilli((Long) jwt.get("iat") * 1000)//issuedAt + , Instant.ofEpochMilli((Long) jwt.get("exp") * 1000)//ExpiresAt + ); + OAuth2UserRequest oAuth2UserRequest = new OAuth2UserRequest(clientRegistration, accessToken); + OAuth2User oAuth2User = oauth2UserService.loadUser(oAuth2UserRequest); //executes userinfo endpoint + + + OidcUserInfo userInfo = new OidcUserInfo(oAuth2User.getAttributes()); + + try { + verifyToken(jwt, userInfo.getClaims()); //verify token with all the configured validators + } catch (Exception failed) { + OAuth2Error invalidToken = invalidToken(failed.getMessage()); + throw new OAuth2AuthenticationException(invalidToken, invalidToken.getDescription(), failed); + } + + + List userRoles = null; + try { + //get the list of roles (either from the jwt or the userInfo). Or, you can contact an external API (i.e. MS Graph) + userRoles = userRolesResolver.resolveRoles(bearer.getToken(), jwt, userInfo); + // inject the roles inside the userInfo + userInfo = insertRoles(oidcConfiguration.getIdTokenRoleLocation(), userInfo, userRoles); + } catch (Exception e) { + throw new InternalAuthenticationServiceException("userRolesResolver.resolveRoles exception", e); + } + //user's GrantedAuthorities (i.e. "Administrator" -> ["Administrator","Reviewer","Editor", "RegisteredUser", "Guest"] + Collection authorities = oidcRoleProcessor.createAuthorities(roleHierarchy, userRoles); + + //final user + OAuth2User user = new DefaultOAuth2User(authorities, userInfo.getClaims(), oidcConfiguration.getUserNameAttribute()); + + // create a cachable item for storing all this information + return new UserInfoCacheItem(bearer.getToken(), expireTime, user, authorities); + } + + /** + * Decode and validate the + * Bearer Token. + * + * @param authentication the authentication request object. + * @return A successful authentication + * @throws AuthenticationException if authentication failed for some reason + */ + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + BearerTokenAuthenticationToken bearer = (BearerTokenAuthenticationToken) authentication; + + // has this access token been evaluated before? + UserInfoCacheItem item = userInfoCache.getItem(bearer.getToken()); + if (item == null) { + // never used - re-create + item = createCacheItem(authentication); + userInfoCache.putItem(item); //store in cache + } + + // final result + OAuth2User user = item.getUser(); + Collection authorities = item.getAuthorities(); + OAuth2AuthenticationToken authenticationResult = new OAuth2AuthenticationToken(user, authorities, CLIENTREGISTRATION_NAME); + authenticationResult.setDetails(authentication.getDetails()); + + // user logs in event + if (this.applicationEventPublisher != null) { + applicationEventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authenticationResult, this.getClass())); + } + + return authenticationResult; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean supports(Class authentication) { + return BearerTokenAuthenticationToken.class.isAssignableFrom(authentication); + } + +} diff --git a/core/src/main/java/org/fao/geonet/kernel/security/shibboleth/ShibbolethUserUtils.java b/core/src/main/java/org/fao/geonet/kernel/security/shibboleth/ShibbolethUserUtils.java index b99c0cb9bf..c17e9e0078 100644 --- a/core/src/main/java/org/fao/geonet/kernel/security/shibboleth/ShibbolethUserUtils.java +++ b/core/src/main/java/org/fao/geonet/kernel/security/shibboleth/ShibbolethUserUtils.java @@ -48,7 +48,9 @@ import jeeves.component.ProfileManager; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author ETj (etj at geo-solutions.it) @@ -153,9 +155,6 @@ protected UserDetails setupUser(ServletRequest request, ShibbolethUserConfigurat user = (User) authProvider.loadUserByUsername(username); if (config.isUpdateGroup()) { - // First we remove all previous groups - userGroupRepository.deleteAll(UserGroupSpecs.hasUserId(user.getId())); - // Now we add the groups assignGroups(groupRepository, userGroupRepository, roleGroups, roleGroupSeparator, user); @@ -222,6 +221,9 @@ protected UserDetails setupUser(ServletRequest request, ShibbolethUserConfigurat private void assignGroups(GroupRepository groupRepository, UserGroupRepository userGroupRepository, String[] role_groups, String separator, User user) { + + Set userGroups = new HashSet<>(); + // Assign groups int i = 0; @@ -258,14 +260,16 @@ private void assignGroups(GroupRepository groupRepository, UserGroupRepository u ug.setGroup(g); ug.setUser(user); ug.setProfile(Profile.Editor); - userGroupRepository.save(ug); + userGroups.add(ug); } } else { // Failback if no profile usergroup.setProfile(Profile.Guest); } - userGroupRepository.save(usergroup); + userGroups.add(usergroup); } + + userGroupRepository.updateUserGroups(user.getId(), userGroups); } private void assignProfile(String[] role_groups, String roleGroupSeparator, User user) { diff --git a/core/src/main/java/org/fao/geonet/kernel/setting/SettingInfo.java b/core/src/main/java/org/fao/geonet/kernel/setting/SettingInfo.java index cb72fac0a9..7a2f97b062 100644 --- a/core/src/main/java/org/fao/geonet/kernel/setting/SettingInfo.java +++ b/core/src/main/java/org/fao/geonet/kernel/setting/SettingInfo.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2021 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -24,9 +24,6 @@ package org.fao.geonet.kernel.setting; import org.fao.geonet.ApplicationContextHolder; -import org.fao.geonet.constants.Geonet; - -import static org.fao.geonet.kernel.setting.SettingManager.isPortRequired; public class SettingInfo { @@ -39,46 +36,29 @@ public String getSiteName() { //--------------------------------------------------------------------------- /** - * Return a string like 'http://HOST[:PORT]' + * Despite the method name, returns the server URL. That's why it calls settingManager.getServerURL() instead + * of settingManager.getSiteURL(). + * + * @return a string like 'http://HOST[:PORT]' */ public String getSiteUrl() { SettingManager settingManager = ApplicationContextHolder.get().getBean(SettingManager.class); + return settingManager.getServerURL(); + } - String protocol = settingManager.getValue(Settings.SYSTEM_SERVER_PROTOCOL); - Integer port; - String host = settingManager.getValue(Settings.SYSTEM_SERVER_HOST); - Integer configuredPort = toIntOrNull(Settings.SYSTEM_SERVER_PORT); - if (configuredPort != null) { - port = configuredPort; - } else if (protocol.equalsIgnoreCase(Geonet.HttpProtocol.HTTPS)) { - port = Geonet.DefaultHttpPort.HTTPS; - } else { - port = Geonet.DefaultHttpPort.HTTP; - } - - StringBuffer sb = new StringBuffer(protocol + "://"); - - sb.append(host); - - if (isPortRequired(protocol, port + "")) { - sb.append(":"); - sb.append(port); - } - return sb.toString(); + /** + * Retrieves the server port. + * + * @return the server port. + */ + public Integer getSitePort() { + SettingManager settingManager = ApplicationContextHolder.get().getBean(SettingManager.class); + return settingManager.getServerPort(); } //--------------------------------------------------------------------------- - private Integer toIntOrNull(String key) { - try { - SettingManager settingManager = ApplicationContextHolder.get().getBean(SettingManager.class); - return Integer.parseInt(settingManager.getValue(key)); - } catch (NumberFormatException e) { - return null; - } - } - public String getSelectionMaxRecords() { SettingManager settingManager = ApplicationContextHolder.get().getBean(SettingManager.class); String value = settingManager.getValue(Settings.SYSTEM_SELECTIONMANAGER_MAXRECORDS); @@ -102,6 +82,6 @@ public boolean isSearchStatsEnabled() { public String getFeedbackEmail() { SettingManager settingManager = ApplicationContextHolder.get().getBean(SettingManager.class); - return settingManager.getValue("system/feedback/email"); + return settingManager.getValue(Settings.SYSTEM_FEEDBACK_EMAIL); } } diff --git a/core/src/main/java/org/fao/geonet/kernel/setting/SettingManager.java b/core/src/main/java/org/fao/geonet/kernel/setting/SettingManager.java index 7e175b7c4e..a3cd94bcb3 100644 --- a/core/src/main/java/org/fao/geonet/kernel/setting/SettingManager.java +++ b/core/src/main/java/org/fao/geonet/kernel/setting/SettingManager.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2021 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -33,11 +33,11 @@ import org.fao.geonet.domain.Setting; import org.fao.geonet.domain.SettingDataType; import org.fao.geonet.domain.Setting_; -import org.fao.geonet.repository.LanguageRepository; import org.fao.geonet.repository.SettingRepository; import org.fao.geonet.repository.SortUtils; import org.fao.geonet.repository.SourceRepository; import org.fao.geonet.utils.Log; +import org.fao.geonet.web.DefaultLanguage; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jdom.Element; import org.springframework.beans.factory.annotation.Autowired; @@ -75,7 +75,7 @@ public class SettingManager { public static final ZoneId DEFAULT_SERVER_TIMEZONE = ZoneId.systemDefault(); @PersistenceContext - private EntityManager _entityManager; + private EntityManager entityManager; @Autowired private ServletContext servletContext; @@ -91,6 +91,9 @@ public class SettingManager { @Autowired StandardPBEStringEncryptor encryptor; + @Autowired + DefaultLanguage defaultLanguage; + @PostConstruct private void init() { this.pathFinder = new ServletPathFinder(servletContext); @@ -115,7 +118,7 @@ public Element getAllAsXML(boolean asTree) { Element env = new Element("settings"); List settings = repo.findAll(SortUtils.createSort(Setting_.name)); - Map pathElements = new HashMap(); + Map pathElements = new HashMap<>(); for (Setting setting : settings) { if (asTree) { @@ -384,7 +387,7 @@ public final boolean setValues(final Map values) { * without using this class. For example when using an SQL script. */ public final boolean refresh() throws SQLException { - _entityManager.getEntityManagerFactory().getCache().evict(HarvesterSetting.class); + entityManager.getEntityManagerFactory().getCache().evict(HarvesterSetting.class); return true; } @@ -415,9 +418,8 @@ String getSiteURL(@Nonnull ServiceContext context) { public @Nonnull String getSiteURL(String language) { - LanguageRepository languageRepository = ApplicationContextHolder.get().getBean(LanguageRepository.class); if (language == null) { - language = languageRepository.findOneByDefaultLanguage().getId(); + language = defaultLanguage.getLanguage(); } return getNodeURL() + language + "/"; @@ -429,6 +431,15 @@ String getSiteURL(String language) { public @Nonnull String getNodeURL() { + return getBaseURL() + getNodeId() + "/"; + } + + /** + * Return node id - i.e. srv + */ + public + @Nonnull + String getNodeId() { String nodeId = NodeInfo.DEFAULT_NODE; try { NodeInfo node = ApplicationContextHolder.get().getBean(NodeInfo.class); @@ -436,8 +447,7 @@ String getNodeURL() { nodeId = node.getId(); } } catch (Exception e) {} - String locServ = getBaseURL() + nodeId + "/"; - return locServ; + return nodeId; } /** * Return complete node URL eg. http://localhost:8080/geonetwork/ @@ -454,21 +464,55 @@ String getBaseURL() { public @Nonnull String getServerURL() { - String baseURL = pathFinder.getBaseUrl(); String protocol = getValue(Settings.SYSTEM_SERVER_PROTOCOL); String host = getValue(Settings.SYSTEM_SERVER_HOST); - String port = getValue(Settings.SYSTEM_SERVER_PORT); + Integer port = getServerPort(); + + StringBuffer sb = new StringBuffer(protocol + "://"); + + sb.append(host); + + if (isPortRequired(protocol, port + "")) { + sb.append(":"); + sb.append(port); + } - return protocol + "://" + host + (isPortRequired(protocol, port) ? ":" + port : ""); + return sb.toString(); } - static public boolean isPortRequired(String protocol, String port) { - if(Geonet.HttpProtocol.HTTP.equals(protocol) && String.valueOf(Geonet.DefaultHttpPort.HTTP).equals(port)) { + public Integer getServerPort() { + String protocol = getValue(Settings.SYSTEM_SERVER_PROTOCOL); + + // some conditional logic to handle the case where there's no port in the settings + Integer sitePort; + + Integer configuredPort = getValueAsInt(Settings.SYSTEM_SERVER_PORT, -1); + if (configuredPort != -1) { + sitePort = configuredPort; + } else if (protocol != null && protocol.equalsIgnoreCase(Geonet.HttpProtocol.HTTPS)) { + sitePort = Geonet.DefaultHttpPort.HTTPS; + } else { + sitePort = Geonet.DefaultHttpPort.HTTP; + } + + return sitePort; + } + + public static boolean isPortRequired(String protocol, String port) { + if (Geonet.HttpProtocol.HTTP.equals(protocol) && String.valueOf(Geonet.DefaultHttpPort.HTTP).equals(port)) { return false; - } else if(Geonet.HttpProtocol.HTTPS.equals(protocol) && String.valueOf(Geonet.DefaultHttpPort.HTTPS).equals(port)) { + } else if (Geonet.HttpProtocol.HTTPS.equals(protocol) && String.valueOf(Geonet.DefaultHttpPort.HTTPS).equals(port)) { return false; } else { return true; } } + + private Integer toIntOrNull(String key) { + try { + return Integer.parseInt(getValue(key)); + } catch (NumberFormatException e) { + return null; + } + } } diff --git a/core/src/main/java/org/fao/geonet/kernel/setting/Settings.java b/core/src/main/java/org/fao/geonet/kernel/setting/Settings.java index e8c299520c..01a878903f 100644 --- a/core/src/main/java/org/fao/geonet/kernel/setting/Settings.java +++ b/core/src/main/java/org/fao/geonet/kernel/setting/Settings.java @@ -48,6 +48,11 @@ public class Settings { public static final String SYSTEM_XLINK_ALLOW_REFERENCED_DELETION = "system/xlinkResolver/referencedDeletionAllowed"; public static final String SYSTEM_SERVER_LOG = "system/server/log"; public static final String SYSTEM_SERVER_TIMEZONE = "system/server/timeZone"; + + public static final String METADATA_URL_SITEMAPLINKURL = "metadata/url/sitemapLinkUrl"; + public static final String METADATA_URL_SITEMAPDOIFIRST = "metadata/url/sitemapDoiFirst"; + public static final String METADATA_URL_DYNAMICAPPLINKURL = "metadata/url/dynamicAppLinkUrl"; + public static final String SYSTEM_INSPIRE_ENABLE = "system/inspire/enable"; public static final String SYSTEM_INSPIRE_ATOM = "system/inspire/atom"; public static final String SYSTEM_INSPIRE_ATOM_SCHEDULE = "system/inspire/atomSchedule"; @@ -70,6 +75,7 @@ public class Settings { public static final GNSetting SYSTEM_SITE_SVNUUID = new GNSetting("system/site/svnUuid", true); public static final String SYSTEM_INTRANET_NETWORK = "system/intranet/network"; public static final String SYSTEM_INTRANET_NETMASK = "system/intranet/netmask"; + public static final String SYSTEM_INTRANET_IP_SEPARATOR = ","; public static final String SYSTEM_Z3950_ENABLE = "system/z3950/enable"; public static final String SYSTEM_Z3950_PORT = "system/z3950/port"; public static final String SYSTEM_SELECTIONMANAGER_MAXRECORDS = "system/selectionmanager/maxrecords"; @@ -124,13 +130,18 @@ public class Settings { public static final String REGION_GETMAP_SUMMARY_WIDTH = "region/getmap/summaryWidth"; public static final String METADATA_WORKFLOW_ENABLE = "metadata/workflow/enable"; public static final String METADATA_WORKFLOW_DRAFT_WHEN_IN_GROUP = "metadata/workflow/draftWhenInGroup"; - public static final String METADATA_WORKFLOW_ALLOW_SUBMIT_APPROVE_INVALID_MD = "metadata/workflow/allowSumitApproveInvalidMd"; + public static final String METADATA_WORKFLOW_ALLOW_SUBMIT_APPROVE_INVALID_MD = "metadata/workflow/allowSubmitApproveInvalidMd"; public static final String METADATA_WORKFLOW_ALLOW_PUBLISH_INVALID_MD = "metadata/workflow/allowPublishInvalidMd"; public static final String METADATA_WORKFLOW_ALLOW_PUBLISH_NON_APPROVED_MD = "metadata/workflow/allowPublishNonApprovedMd"; + public static final String METADATA_WORKFLOW_AUTOMATIC_UNPUBLISH_INVALID_MD = "metadata/workflow/automaticUnpublishInvalidMd"; + public static final String METADATA_WORKFLOW_FORCE_VALIDATION_ON_MD_SAVE = "metadata/workflow/forceValidationOnMdSave"; public static final String METADATA_LINK_EXCLUDEPATTERN = "metadata/link/excludedUrlPattern"; public static final String METADATA_IMPORT_RESTRICT = "metadata/import/restrict"; public static final String METADATA_IMPORT_USERPROFILE = "metadata/import/userprofile"; + public static final String METADATA_BATCH_EDITING_ACCESS_LEVEL = "metadata/batchediting/accesslevel"; public static final String METADATA_PUBLISHED_DELETE_USERPROFILE = "metadata/delete/profilePublishedMetadata"; + public static final String METADATA_PUBLISH_USERPROFILE = "metadata/publication/profilePublishMetadata"; + public static final String METADATA_UNPUBLISH_USERPROFILE = "metadata/publication/profileUnpublishMetadata"; public static final String METADATA_BACKUPARCHIVE_ENABLE = "metadata/backuparchive/enable"; public static final String METADATA_VCS = "metadata/vcs/enable"; public static final String VIRTUAL_SETTINGS_SUFFIX_ISDEFINED = "IsDefined"; @@ -144,6 +155,7 @@ public class Settings { public static final String SYSTEM_SECURITY_PASSWORDENFORCEMENT_PATTERN = "system/security/passwordEnforcement/pattern"; public static final String SYSTEM_SECURITY_PASSWORD_ALLOWADMINRESET = "system/security/password/allowAdminReset"; + public static final String MICROSERVICES_ENABLED = "microservices/enabled"; public static class GNSetting { private String name; diff --git a/core/src/main/java/org/fao/geonet/kernel/url/UrlChecker.java b/core/src/main/java/org/fao/geonet/kernel/url/UrlChecker.java index 71b0e12d6a..a9b65a6180 100644 --- a/core/src/main/java/org/fao/geonet/kernel/url/UrlChecker.java +++ b/core/src/main/java/org/fao/geonet/kernel/url/UrlChecker.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2019 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -31,6 +31,7 @@ import org.fao.geonet.constants.Geonet; import org.fao.geonet.domain.LinkStatus; import org.fao.geonet.kernel.setting.SettingManager; +import org.fao.geonet.lib.Lib; import org.fao.geonet.lib.NetLib; import org.fao.geonet.utils.GeonetHttpRequestFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -149,8 +150,7 @@ public Void apply(@Nullable HttpClientBuilder originalConfig) { Log.info(Geonet.GEONETWORK,"UrlChecker: cannot determine hostname from url: "+url); } //now we have hostname, we can configure proxy - NetLib netLib = new NetLib(); - netLib.setupProxy(settingManager, originalConfig, hostname); + Lib.net.setupProxy(settingManager, originalConfig, hostname); return null; } }; diff --git a/core/src/main/java/org/fao/geonet/languages/IsoLanguagesMapper.java b/core/src/main/java/org/fao/geonet/languages/IsoLanguagesMapper.java index 3332fbb87a..ef187c96f6 100644 --- a/core/src/main/java/org/fao/geonet/languages/IsoLanguagesMapper.java +++ b/core/src/main/java/org/fao/geonet/languages/IsoLanguagesMapper.java @@ -45,6 +45,12 @@ public class IsoLanguagesMapper { */ protected BiMap _isoLanguagesMap639 = HashBiMap.create(); + /** + * Flag used to check if the init is valid. + * It may not be valid during initial database creation. + */ + private boolean validInit = false; + @Autowired private IsoLanguageRepository _langRepo; @@ -69,9 +75,13 @@ public Object clone() throws CloneNotSupportedException { /** * Creates mapping to of ISO 639-1 to ISO 639-2 for all languages defined in IsoLanguages table + * + * Note @PostConstruct may not work on initial setup because the database is may not be loaded when the @PostConstruct is called so it may creates an empty array. + * So we will use a verifiedLoaded flag to check if it successfully loaded. */ @PostConstruct public void init() { + validInit = false; for (IsoLanguage record : _langRepo.findAll()) { final String shortCode = toLowerCase(record.getShortCode()); final String code = toLowerCase(record.getCode()); @@ -89,6 +99,29 @@ public void reinit() { } + /** + * Verify that the init loaded some data, if so then set verifiedLoaded to true so that we don't need to check again. + * Otherwise re-run the init() to try loading the object again. + */ + public void checkInit() { + if (!validInit) { + // _langRepo will be null if this is not a bean - in which case the @PostConstruct is not expected to be executed so just mark validInit as true and return. + // This currenly only occurs in the unit tests. + if (_langRepo == null) { + validInit=true; + return; + } + // Re-init if the array size is 0 + if (_isoLanguagesMap639.size() == 0) { + init(); + } + // If there is data then mark it as valid. + if (_isoLanguagesMap639.size() > 0) { + validInit = true; + } + } + } + private String toLowerCase(String code) { if (code == null) { return null; @@ -101,6 +134,7 @@ private String toLowerCase(String code) { * Retrieves 639-2 code from a 639-1 code */ public String iso639_1_to_iso639_2(String iso639_1) { + checkInit(); if (_isoLanguagesMap639.containsValue(iso639_1.toLowerCase())) { return iso639_1.toLowerCase(); } else { @@ -112,6 +146,7 @@ public String iso639_1_to_iso639_2(String iso639_1) { * Retrieves 639-1 code from a 639-2 code */ public String iso639_2_to_iso639_1(String iso639_2) { + checkInit(); if (_isoLanguagesMap639.containsKey(iso639_2.toLowerCase())) { return iso639_2.toLowerCase(); } else { diff --git a/core/src/main/java/org/fao/geonet/lib/NetLib.java b/core/src/main/java/org/fao/geonet/lib/NetLib.java index c47e52e34d..6f1939a9ca 100644 --- a/core/src/main/java/org/fao/geonet/lib/NetLib.java +++ b/core/src/main/java/org/fao/geonet/lib/NetLib.java @@ -1,5 +1,5 @@ //============================================================================= -//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the //=== United Nations (FAO-UN), United Nations World Food Programme (WFP) //=== and United Nations Environment Programme (UNEP) //=== @@ -34,7 +34,6 @@ import org.fao.geonet.GeonetContext; import org.fao.geonet.constants.Geonet; import org.fao.geonet.kernel.setting.SettingManager; -import org.fao.geonet.kernel.setting.Settings; import org.fao.geonet.utils.Log; import org.fao.geonet.utils.XmlRequest; @@ -51,6 +50,18 @@ import jeeves.server.context.ServiceContext; public class NetLib { + private ProxyConfiguration proxyConfiguration; + + public ProxyConfiguration getProxyConfiguration() { + return proxyConfiguration; + } + + public NetLib() { + boolean isProxyConfiguredInSystemProperties = StringUtils.isNotBlank(System.getProperty(ProxyConfiguration.HTTP_PROXY_HOST)) || + StringUtils.isNotBlank(System.getProperty(ProxyConfiguration.HTTPS_PROXY_HOST)); + + proxyConfiguration = new ProxyConfiguration(isProxyConfiguredInSystemProperties); + } public void setupProxy(ServiceContext context, XmlRequest req) { GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME); @@ -66,12 +77,14 @@ public void setupProxy(ServiceContext context, XmlRequest req) { */ public void setupProxy(SettingManager sm, XmlRequest req) { - boolean enabled = sm.getValueAsBool(Settings.SYSTEM_PROXY_USE, false); - String host = sm.getValue(Settings.SYSTEM_PROXY_HOST); - String port = sm.getValue(Settings.SYSTEM_PROXY_PORT); - String username = sm.getValue(Settings.SYSTEM_PROXY_USERNAME); - String password = sm.getValue(Settings.SYSTEM_PROXY_PASSWORD); - String ignoreHostList = sm.getValue(Settings.SYSTEM_PROXY_IGNOREHOSTLIST); + proxyConfiguration.refresh(sm); + + boolean enabled = proxyConfiguration.isEnabled(); + String host = proxyConfiguration.getHost(); + String port = proxyConfiguration.getPort(); + String username = proxyConfiguration.getUsername(); + String password = proxyConfiguration.getPassword(); + String ignoreHostList = proxyConfiguration.getIgnoreHostList(); if (!enabled) { req.setUseProxy(false); @@ -108,12 +121,14 @@ public CredentialsProvider setupProxy(ServiceContext context, HttpClientBuilder * Setup proxy for http client */ public CredentialsProvider setupProxy(SettingManager sm, HttpClientBuilder client, String requestHost) { - boolean enabled = sm.getValueAsBool(Settings.SYSTEM_PROXY_USE, false); - String host = sm.getValue(Settings.SYSTEM_PROXY_HOST); - String port = sm.getValue(Settings.SYSTEM_PROXY_PORT); - String username = sm.getValue(Settings.SYSTEM_PROXY_USERNAME); - String password = sm.getValue(Settings.SYSTEM_PROXY_PASSWORD); - String ignoreHostList = sm.getValue(Settings.SYSTEM_PROXY_IGNOREHOSTLIST); + proxyConfiguration.refresh(sm); + + boolean enabled = proxyConfiguration.isEnabled(); + String host = proxyConfiguration.getHost(); + String port = proxyConfiguration.getPort(); + String username = proxyConfiguration.getUsername(); + String password = proxyConfiguration.getPassword(); + String ignoreHostList = proxyConfiguration.getIgnoreHostList(); CredentialsProvider provider = new BasicCredentialsProvider(); if (enabled) { @@ -153,26 +168,34 @@ public void setupProxy(ServiceContext context) { * Setup proxy for http client */ public void setupProxy(SettingManager sm) { - boolean useProxy = sm.getValueAsBool(Settings.SYSTEM_PROXY_USE, false); + proxyConfiguration.refresh(sm); - if (useProxy) { - String host = sm.getValue(Settings.SYSTEM_PROXY_HOST); - String port = sm.getValue(Settings.SYSTEM_PROXY_PORT); - String username = sm.getValue(Settings.SYSTEM_PROXY_USERNAME); - String ignoreHostList = sm.getValue(Settings.SYSTEM_PROXY_IGNOREHOSTLIST); + // If the proxy is configured in the system properties, + // ignore the proxy configuration in the system settings. + if (proxyConfiguration.isProxyConfiguredInSystemProperties()) return; + + if (proxyConfiguration.isEnabled()) { + String host = proxyConfiguration.getHost(); + String port = proxyConfiguration.getPort(); + String username = proxyConfiguration.getUsername(); + String ignoreHostList = proxyConfiguration.getIgnoreHostList(); Properties props = System.getProperties(); - props.put("http.proxyHost", host); - props.put("http.proxyPort", port); - props.put("http.nonProxyHosts", ignoreHostList); + props.put(ProxyConfiguration.HTTP_PROXY_HOST, host); + props.put(ProxyConfiguration.HTTP_PROXY_PORT, port); + props.put(ProxyConfiguration.HTTPS_PROXY_HOST, host); + props.put(ProxyConfiguration.HTTPS_PROXY_PORT, port); + props.put(ProxyConfiguration.HTTP_NON_PROXY_HOSTS, ignoreHostList); if (username.trim().length() > 0) { Log.error(Geonet.GEONETWORK, "Proxy credentials cannot be used"); } } else { - System.clearProperty("http.proxyHost"); - System.clearProperty("http.proxyHost"); - System.clearProperty("http.nonProxyHosts"); + System.clearProperty(ProxyConfiguration.HTTP_PROXY_HOST); + System.clearProperty(ProxyConfiguration.HTTP_PROXY_PORT); + System.clearProperty(ProxyConfiguration.HTTPS_PROXY_HOST); + System.clearProperty(ProxyConfiguration.HTTPS_PROXY_PORT); + System.clearProperty(ProxyConfiguration.HTTP_NON_PROXY_HOSTS); } } @@ -185,12 +208,14 @@ public URLConnection setupProxy(ServiceContext context, URL url) throws IOExcept GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME); SettingManager sm = gc.getBean(SettingManager.class); - boolean enabled = sm.getValueAsBool(Settings.SYSTEM_PROXY_USE, false); - String host = sm.getValue(Settings.SYSTEM_PROXY_HOST); - String port = sm.getValue(Settings.SYSTEM_PROXY_PORT); - String username = sm.getValue(Settings.SYSTEM_PROXY_USERNAME); - String password = sm.getValue(Settings.SYSTEM_PROXY_PASSWORD); - String ignoreHostList = sm.getValue(Settings.SYSTEM_PROXY_IGNOREHOSTLIST); + proxyConfiguration.refresh(sm); + + boolean enabled = proxyConfiguration.isEnabled(); + String host = proxyConfiguration.getHost(); + String port = proxyConfiguration.getPort(); + String username = proxyConfiguration.getUsername(); + String password = proxyConfiguration.getPassword(); + String ignoreHostList = proxyConfiguration.getIgnoreHostList(); URLConnection conn = null; if (enabled) { diff --git a/core/src/main/java/org/fao/geonet/lib/ProxyConfiguration.java b/core/src/main/java/org/fao/geonet/lib/ProxyConfiguration.java new file mode 100644 index 0000000000..8454a8caab --- /dev/null +++ b/core/src/main/java/org/fao/geonet/lib/ProxyConfiguration.java @@ -0,0 +1,138 @@ +//============================================================================= +//=== Copyright (C) 2001-2023 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== 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. +//=== +//=== This program is distributed in the hope that it will be useful, but +//=== WITHOUT ANY WARRANTY; without even the implied warranty of +//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geonetwork@osgeo.org +//============================================================================== + +package org.fao.geonet.lib; + +import org.apache.commons.lang.StringUtils; +import org.fao.geonet.kernel.setting.SettingManager; +import org.fao.geonet.kernel.setting.Settings; + +/** + * Class to abstract the http proxy configuration from Java system properties or GeoNetwork configuration. + */ +public class ProxyConfiguration { + // HTTP Proxy host + public static final String HTTP_PROXY_HOST = "http.proxyHost"; + + // HTTP Proxy port + public static final String HTTP_PROXY_PORT = "http.proxyPort"; + + // HTTP Proxy username + public static final String HTTP_PROXY_USERNAME = "http.proxyUser"; + + // HTTP Proxy password + public static final String HTTP_PROXY_PASSWORD = "http.proxyPassword"; + + // HTTPS Proxy host + public static final String HTTPS_PROXY_HOST = "https.proxyHost"; + + // HTTPS Proxy port + public static final String HTTPS_PROXY_PORT = "https.proxyPort"; + + // HTTPS Proxy username + public static final String HTTPS_PROXY_USERNAME = "https.proxyUser"; + + // HTTPS Proxy password + public static final String HTTPS_PROXY_PASSWORD = "https.proxyPassword"; + + // HTTP Non-Proxy Hosts + public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts"; + + private boolean enabled = false; + + private boolean isProxyConfiguredInSystemProperties = false; + private String host; + private String port; + private String username; + private String password; + private String ignoreHostList; + + public boolean isEnabled() { + return enabled; + } + + public boolean isProxyConfiguredInSystemProperties() { + return isProxyConfiguredInSystemProperties; + } + + public String getHost() { + return host; + } + + public String getPort() { + return port; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + public String getIgnoreHostList() { + return ignoreHostList; + } + + public ProxyConfiguration(boolean isProxyConfiguredInSystemProperties) { + this.isProxyConfiguredInSystemProperties = isProxyConfiguredInSystemProperties; + if (this.isProxyConfiguredInSystemProperties) { + this.enabled = true; + } + } + + public void refresh(SettingManager settingManager) { + this.enabled = this.isProxyConfiguredInSystemProperties || + settingManager.getValueAsBool(Settings.SYSTEM_PROXY_USE, false); + + if (this.enabled) { + if (this.isProxyConfiguredInSystemProperties) { + if (StringUtils.isNotBlank(System.getProperty(ProxyConfiguration.HTTPS_PROXY_HOST))) { + this.host = System.getProperty(ProxyConfiguration.HTTPS_PROXY_HOST); + this.port = System.getProperty(ProxyConfiguration.HTTPS_PROXY_PORT); + this.username = System.getProperty(ProxyConfiguration.HTTPS_PROXY_USERNAME, ""); + this.password = System.getProperty(ProxyConfiguration.HTTPS_PROXY_PASSWORD, ""); + } else { + this.host = System.getProperty(ProxyConfiguration.HTTP_PROXY_HOST); + this.port = System.getProperty(ProxyConfiguration.HTTP_PROXY_PORT); + this.username = System.getProperty(ProxyConfiguration.HTTP_PROXY_USERNAME, ""); + this.password = System.getProperty(ProxyConfiguration.HTTP_PROXY_PASSWORD, ""); + } + + // Escape characters for regular expression matching + this.ignoreHostList = System.getProperty(ProxyConfiguration.HTTP_NON_PROXY_HOSTS, "") + .replace("\\.", "\\\\.") + .replace("\\*", "\\.\\*"); + + } else { + this.host = settingManager.getValue(Settings.SYSTEM_PROXY_HOST); + this.port = settingManager.getValue(Settings.SYSTEM_PROXY_PORT); + this.username = settingManager.getValue(Settings.SYSTEM_PROXY_USERNAME); + this.password = settingManager.getValue(Settings.SYSTEM_PROXY_PASSWORD); + this.ignoreHostList = settingManager.getValue(Settings.SYSTEM_PROXY_IGNOREHOSTLIST); + + } + } + } +} diff --git a/core/src/main/java/org/fao/geonet/resources/CMISConfiguration.java b/core/src/main/java/org/fao/geonet/resources/CMISConfiguration.java index 22417975ec..257ef3246d 100644 --- a/core/src/main/java/org/fao/geonet/resources/CMISConfiguration.java +++ b/core/src/main/java/org/fao/geonet/resources/CMISConfiguration.java @@ -40,6 +40,7 @@ import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.fao.geonet.constants.Geonet; +import org.fao.geonet.domain.MetadataResourceExternalManagementProperties; import org.fao.geonet.utils.Log; import javax.annotation.Nonnull; @@ -58,6 +59,7 @@ public class CMISConfiguration { private Session client = null; + public final static Integer CMIS_MAX_ITEMS_PER_PAGE = 1000; public final static String CMIS_FOLDER_DELIMITER = "/"; // Specs indicate that "/" is the folder delimiter/separator - not sure if other delimiter can be used?. public final static String CMIS_SECONDARY_PROPERTY_SEPARATOR = "->"; private final String CMIS_DEFAULT_WEBSERVICES_ACL_SERVICE = "/services/ACLService?wsdl"; @@ -121,6 +123,7 @@ public class CMISConfiguration { */ private String externalResourceManagementValidationStatusDefaultValue; private boolean externalResourceManagementValidationStatusSecondaryProperty = false; + private MetadataResourceExternalManagementProperties.ValidationStatus defaultStatus = null; /* * Enable option to add versioning in the link to the resource. @@ -509,6 +512,21 @@ public void setExternalResourceManagementValidationStatusPropertyName(String ext } } + public MetadataResourceExternalManagementProperties.ValidationStatus getValidationStatusDefaultValue() { + // We only need to set the default if there is a status property supplied, and it is not already set + if (this.defaultStatus == null && !org.springframework.util.StringUtils.isEmpty(getExternalResourceManagementValidationStatusPropertyName())) { + if (getExternalResourceManagementValidationStatusDefaultValue() != null) { + // If a default property name does exist then use it + this.defaultStatus = MetadataResourceExternalManagementProperties.ValidationStatus.valueOf(getExternalResourceManagementValidationStatusDefaultValue()); + } else { + // Otherwise let's default to incomplete. + // Reason - as the administrator decided to use the status, it most likely means that there are extra properties that need to be set after a file is uploaded so defaulting it to + // incomplete seems reasonable. + this.defaultStatus = MetadataResourceExternalManagementProperties.ValidationStatus.INCOMPLETE; + } + } + return this.defaultStatus; + } @PostConstruct public void init() { @@ -646,11 +664,16 @@ public void init() { client.getDefaultContext().setIncludePolicies(false); } // IncludeRelationships should be NONE - if (client.getDefaultContext().getIncludeRelationships().equals(IncludeRelationships.NONE)) { + if (!client.getDefaultContext().getIncludeRelationships().equals(IncludeRelationships.NONE)) { Log.debug(Geonet.RESOURCES, "Changing default CMIS operational context to not include relationships."); client.getDefaultContext().setIncludeRelationships(IncludeRelationships.NONE); } + if (client.getDefaultContext().getMaxItemsPerPage() != CMIS_MAX_ITEMS_PER_PAGE) { + Log.debug(Geonet.RESOURCES, "Changing default CMIS max items per page to " + CMIS_MAX_ITEMS_PER_PAGE + "."); + client.getDefaultContext().setMaxItemsPerPage(CMIS_MAX_ITEMS_PER_PAGE); + } + // Setup default filter. Only include properties that are used by the application. // Having too many may cause performance issues on some systems. // The default is generally an empty string meaning all properties are used. diff --git a/core/src/main/java/org/fao/geonet/resources/CMISUtils.java b/core/src/main/java/org/fao/geonet/resources/CMISUtils.java index 22882b59ad..1f8aacaf57 100644 --- a/core/src/main/java/org/fao/geonet/resources/CMISUtils.java +++ b/core/src/main/java/org/fao/geonet/resources/CMISUtils.java @@ -35,6 +35,7 @@ import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; import org.apache.chemistry.opencmis.client.api.CmisObject; import org.apache.chemistry.opencmis.client.api.Document; @@ -231,14 +232,6 @@ public Document saveDocument(String key, CmisObject cmisObject, Map secondaryProperties = new HashMap<>(); + Map primaryProperties = properties.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + for (Object objectPropertyName : ((ArrayList) properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS))) { + String aspectPropertyName = (String)objectPropertyName; + secondaryProperties.putAll(properties.entrySet().stream() + .filter(c -> c.getKey().startsWith(aspectPropertyName)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)) + ); + primaryProperties.keySet().removeAll(properties.keySet().stream() + .filter(c -> c.startsWith(aspectPropertyName)) + .collect(Collectors.toSet()) + ); + } + secondaryProperties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)); + primaryProperties.remove(PropertyIds.SECONDARY_OBJECT_TYPE_IDS); + doc = (Document) doc.updateProperties(primaryProperties); + doc = (Document) doc.updateProperties(secondaryProperties); + } else { + doc = (Document) doc.updateProperties(properties); + } } - if (cmisConfiguration.existSecondaryProperty()) { - //need to reload document to avoid "Document is not the latest version" when updating secondary types. - doc.refresh(); - } // Avoid CMIS API call is info is not enabled. if (LogManager.getLogger(Geonet.RESOURCES).isInfoEnabled()) { Log.info(Geonet.RESOURCES, diff --git a/core/src/main/java/org/fao/geonet/resources/ResourceFilter.java b/core/src/main/java/org/fao/geonet/resources/ResourceFilter.java index 238fbd2a81..e00b9e0c2b 100644 --- a/core/src/main/java/org/fao/geonet/resources/ResourceFilter.java +++ b/core/src/main/java/org/fao/geonet/resources/ResourceFilter.java @@ -102,7 +102,7 @@ public Instance(ServletRequest request, ServletResponse response) throws IOExcep this.nodeId = applicationContext.getBean(NodeInfo.class).getId(); if (!faviconMap.containsKey(nodeId)) { final byte[] defaultImageBytes = defaultImage.one(); - AddFavIcon(nodeId, resources.loadResource(resourcesDir, servletContext, appPath, "images/logos/" + siteId + ".ico", + addFavIcon(nodeId, resources.loadResource(resourcesDir, servletContext, appPath, "images/logos/" + siteId + ".ico", defaultImageBytes, -1)); } @@ -143,7 +143,7 @@ public void execute() throws IOException { if (filename.equals("images/logos/" + siteId + ".ico")) { favicon = resources.loadResource(resourcesDir, servletContext, appPath, "images/logos/" + siteId + ".ico", favicon.one(), favicon.two()); - AddFavIcon(nodeId, favicon); + addFavIcon(nodeId, favicon); httpServletResponse.setContentLength(favicon.one().length); httpServletResponse.addHeader("Cache-Control", "max-age=" + FIVE_DAYS + ", public"); @@ -167,7 +167,7 @@ public void execute() throws IOException { } } - private synchronized void AddFavIcon(String nodeId, Pair favicon) { + private synchronized void addFavIcon(String nodeId, Pair favicon) { if (faviconMap.containsKey(nodeId)) { faviconMap.replace(nodeId, favicon); } else { diff --git a/core/src/main/java/org/fao/geonet/resources/S3Resources.java b/core/src/main/java/org/fao/geonet/resources/S3Resources.java index b37820bf14..418ee17003 100644 --- a/core/src/main/java/org/fao/geonet/resources/S3Resources.java +++ b/core/src/main/java/org/fao/geonet/resources/S3Resources.java @@ -1,15 +1,35 @@ +/* + * ============================================================================= + * === Copyright (C) 2001-2023 Food and Agriculture Organization of the + * === United Nations (FAO-UN), United Nations World Food Programme (WFP) + * === and United Nations Environment Programme (UNEP) + * === + * === 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. + * === + * === This program is distributed in the hope that it will be useful, but + * === WITHOUT ANY WARRANTY; without even the implied warranty of + * === MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * === General Public License for more details. + * === + * === You should have received a copy of the GNU General Public License + * === along with this program; if not, write to the Free Software + * === Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * === + * === Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * === Rome - Italy. email: geonetwork@osgeo.org + * ============================================================================== + */ package org.fao.geonet.resources; import com.amazonaws.AmazonServiceException; -import com.amazonaws.services.s3.model.AmazonS3Exception; -import com.amazonaws.services.s3.model.ListObjectsV2Result; -import com.amazonaws.services.s3.model.ObjectMetadata; -import com.amazonaws.services.s3.model.S3Object; -import com.amazonaws.services.s3.model.S3ObjectInputStream; -import com.amazonaws.services.s3.model.S3ObjectSummary; +import com.amazonaws.services.s3.model.*; import jeeves.config.springutil.JeevesDelegatingFilterProxy; import jeeves.server.context.ServiceContext; import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.fao.geonet.domain.Pair; import org.fao.geonet.utils.IO; @@ -18,22 +38,18 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import javax.servlet.ServletContext; import java.awt.image.BufferedImage; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; +import java.nio.file.*; import java.nio.file.attribute.FileTime; import java.util.HashSet; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.imageio.ImageIO; -import javax.servlet.ServletContext; public class S3Resources extends Resources { @Autowired @@ -282,11 +298,11 @@ public Path getPath() { } final String[] splittedKey = key.split("/"); try { - path = java.nio.file.Files.createTempFile("", splittedKey[splittedKey.length - 1]); + path = Files.createTempFile("", splittedKey[splittedKey.length - 1]); try { final S3Object object = s3.getClient().getObject(s3.getBucket(), key); try (S3ObjectInputStream in = object.getObjectContent()) { - java.nio.file.Files.copy(in, path, + Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING); } } catch (AmazonServiceException e) { @@ -327,7 +343,16 @@ public void close() throws IOException { if (writeOnClose && Files.isReadable(path)) { s3.getClient().putObject(s3.getBucket(), key, path.toFile()); } - java.nio.file.Files.delete(path); + FileUtils.deleteQuietly(path.toFile()); + } + + /** Cleanup temporary file. */ + @Override + protected void finalize() throws Throwable { + super.finalize(); + if (path != null) { + FileUtils.deleteQuietly(path.toFile()); + } } } } diff --git a/core/src/main/java/org/fao/geonet/security/web/csrf/GeonetworkCsrfSecurityRequestMatcher.java b/core/src/main/java/org/fao/geonet/security/web/csrf/GeonetworkCsrfSecurityRequestMatcher.java index dfb7981373..9d00330882 100644 --- a/core/src/main/java/org/fao/geonet/security/web/csrf/GeonetworkCsrfSecurityRequestMatcher.java +++ b/core/src/main/java/org/fao/geonet/security/web/csrf/GeonetworkCsrfSecurityRequestMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -25,32 +25,61 @@ import org.springframework.security.web.util.matcher.RegexRequestMatcher; import org.springframework.security.web.util.matcher.RequestMatcher; +import org.springframework.util.Assert; import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.Set; import java.util.regex.Pattern; /** * RequestMatcher to exclude the CSRF token from requests. - * + *

* Useful to exclude CSW POST requests for GetRecords. * - * @author Jose García + * @author Jose García. */ public class GeonetworkCsrfSecurityRequestMatcher implements RequestMatcher { private Pattern allowedMethods = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$"); private RegexRequestMatcher unprotectedMatcher; + private Set otherMatchers = new LinkedHashSet<>(); public GeonetworkCsrfSecurityRequestMatcher(Set unprotectedUrlPatterns) { unprotectedMatcher = new RegexRequestMatcher(String.join("|", unprotectedUrlPatterns), null); } + /** + * Adds additional RequestMatchers used if the list of unprotectedUrlPatters don't match. The check is done in the + * order in what the matchers have been added. + * The matcher must be negative, that's it, it will return false for the patterns that match the patterns. + * + * @param matcher + */ + public void addRequestMatcher(RequestMatcher... matcher) { + Assert.notNull(matcher, "To add additional matchers the parameter matcher cannot be null"); + otherMatchers.addAll(Arrays.asList(matcher)); + } + + /** + * Return {@code}true{@code} if the request doesn't match the methods and patterns defined. + * + * @param request the request to check for a match + * @return + */ @Override public boolean matches(HttpServletRequest request) { - if(allowedMethods.matcher(request.getMethod()).matches()){ - return false; + boolean result = true; + if (allowedMethods.matcher(request.getMethod()).matches()) { + result = false; + } + if (result) { + result = !unprotectedMatcher.matches(request); } - return !unprotectedMatcher.matches(request); + if (result && !otherMatchers.isEmpty()) { + result = otherMatchers.stream().anyMatch(matcher -> matcher.matches(request)); + } + return result; } } diff --git a/core/src/main/java/org/fao/geonet/util/LogUtil.java b/core/src/main/java/org/fao/geonet/util/LogUtil.java new file mode 100644 index 0000000000..aa1d0d437f --- /dev/null +++ b/core/src/main/java/org/fao/geonet/util/LogUtil.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ + +package org.fao.geonet.util; + +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.ThreadContext; +import org.fao.geonet.ApplicationContextHolder; +import org.fao.geonet.kernel.setting.SettingManager; +import org.fao.geonet.kernel.setting.Settings; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +public class LogUtil { + + private LogUtil() { + } + + /** + * Used to configure Log4J to route harvester messages to an individual file. + *

+ * This method has the side effect of setting Log4J ThreadContext values: + *

    + *
  • harvester
  • + *
  • logfile
  • + *
  • timeZone
  • + *
+ *

+ * Log4J checks for {@code ThreadContext.put("logfile", name)} to route messages + * the logfile location. + * + * @return the location of the logfile + */ + public static String initializeHarvesterLog(String type, String name) { + // Filename safe representation of harvester name (using '_' as needed). + final String harvesterName = name.replaceAll("\\W+", "_"); + final String harvesterType = type.replaceAll("\\W+", "_"); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm"); + + String logfile = "harvester_" + + harvesterType + + "_" + harvesterName + + "_" + dateFormat.format(new Date(System.currentTimeMillis())) + + ".log"; + + String timeZoneSetting = ApplicationContextHolder.get().getBean(SettingManager.class).getValue(Settings.SYSTEM_SERVER_TIMEZONE); + if (StringUtils.isBlank(timeZoneSetting)) { + timeZoneSetting = TimeZone.getDefault().getID(); + } + + ThreadContext.put("harvest", harvesterName); + ThreadContext.putIfNull("logfile", logfile); + ThreadContext.put("timeZone", timeZoneSetting); + + return logfile; + } +} diff --git a/core/src/main/java/org/fao/geonet/util/MailUtil.java b/core/src/main/java/org/fao/geonet/util/MailUtil.java index f9fbf53aeb..fc0c743c6f 100644 --- a/core/src/main/java/org/fao/geonet/util/MailUtil.java +++ b/core/src/main/java/org/fao/geonet/util/MailUtil.java @@ -68,6 +68,7 @@ public static Boolean sendHtmlMail(List toAddress, String subject, email.setSubject(subject); try { + email.setCharset(EmailConstants.UTF_8); email.setHtmlMsg(htmlMessage); } catch (EmailException e1) { Log.error("Error setting email HTML content. Subject:" + subject, e1); diff --git a/core/src/main/java/org/fao/geonet/util/UserUtil.java b/core/src/main/java/org/fao/geonet/util/UserUtil.java new file mode 100644 index 0000000000..a0c790c08b --- /dev/null +++ b/core/src/main/java/org/fao/geonet/util/UserUtil.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ +package org.fao.geonet.util; + +import jeeves.server.UserSession; +import org.apache.commons.lang.StringUtils; +import org.fao.geonet.api.exception.NotAllowedException; +import org.fao.geonet.domain.Profile; +import org.fao.geonet.kernel.setting.SettingManager; +import org.springframework.security.access.hierarchicalroles.RoleHierarchy; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; + +import java.util.Collection; + +public class UserUtil { + + private UserUtil() { + + } + + /** + * Checks if the current user has a role using the role hierarchy. + * + * @param role Role to check. + * @param roleHierarchy Role hierarchy. + * @return true if the current user has a role using the role hierarchy, otherwise false. + */ + public static boolean hasHierarchyRole(String role, RoleHierarchy roleHierarchy) { + Collection authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities(); + + Collection hierarchyAuthorities = roleHierarchy.getReachableGrantedAuthorities(authorities); + + for (GrantedAuthority authority : hierarchyAuthorities) { + if (authority.getAuthority().equals(role)) { + return true; + } + } + + return false; + } + + /** + * Checks if the user session's profile is allowed to do the transaction + * + * @param userSession current user session + * @param settingManager setting manager bean + * @param roleHierarchy role hierarchy bean + * @param settingConfigPath setting config path check org.fao.geonet.kernel.setting.Settings + * @param defaultProfile default configuration profile is no configuration found + * @param errorText error text to the exception + */ + public static void checkUserProfileLevel(UserSession userSession, SettingManager settingManager, RoleHierarchy roleHierarchy, String settingConfigPath, Profile defaultProfile, String errorText) { + if (userSession.getProfile() != Profile.Administrator) { + String allowedUserProfileFromConfiguration = + StringUtils.defaultIfBlank(settingManager.getValue(settingConfigPath), defaultProfile.toString()); + + // Is the user profile higher than the configuration profile allowed to do the transaction? + if (!UserUtil.hasHierarchyRole(allowedUserProfileFromConfiguration, roleHierarchy)) { + throw new NotAllowedException("The user has no permissions to " + errorText); + } + } + + } + +} diff --git a/core/src/main/java/org/fao/geonet/util/XslUtil.java b/core/src/main/java/org/fao/geonet/util/XslUtil.java index f375b3079b..fa5e448f35 100644 --- a/core/src/main/java/org/fao/geonet/util/XslUtil.java +++ b/core/src/main/java/org/fao/geonet/util/XslUtil.java @@ -62,6 +62,7 @@ import org.fao.geonet.domain.*; import org.fao.geonet.index.es.EsRestClient; import org.fao.geonet.kernel.*; +import org.fao.geonet.kernel.datamanager.base.BaseMetadataUtils; import org.fao.geonet.kernel.search.CodeListTranslator; import org.fao.geonet.kernel.search.EsSearchManager; import org.fao.geonet.kernel.search.Translator; @@ -83,6 +84,7 @@ import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.referencing.CRS; import org.geotools.referencing.crs.DefaultGeographicCRS; +import org.geotools.referencing.crs.DefaultProjectedCRS; import org.geotools.xsd.Parser; import org.jdom.Document; import org.jdom.Element; @@ -104,6 +106,9 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.http.HttpStatus; +import org.springframework.security.authentication.AnonymousAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.w3c.dom.Node; import org.xml.sax.SAXException; @@ -124,7 +129,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.fao.geonet.kernel.setting.Settings.SYSTEM_SITE_ORGANIZATION; +import static org.fao.geonet.kernel.setting.Settings.*; import static org.fao.geonet.utils.Xml.getXmlFromJSON; @@ -183,6 +188,22 @@ public static String gmlToGeoJson(String gml, return "Warning: GML geometry is null."; } + Object userData = geom.getUserData(); + if (userData instanceof DefaultProjectedCRS) { + geom = JTS.transform( + geom, + CRS.findMathTransform((DefaultProjectedCRS) userData, + CRS.decode("EPSG:4326", true), true) + ); + } + else if (userData instanceof DefaultGeographicCRS) { + geom = JTS.transform( + geom, + CRS.findMathTransform((DefaultGeographicCRS) userData, + CRS.decode("EPSG:4326", true), true) + ); + } + if (!geom.isValid()) { IsValidOp isValidOp = new IsValidOp(geom); return String.format( @@ -574,11 +595,35 @@ public static String getNodeName(String key, String lang, boolean withOrganizati + (withOrganization ? " - " + settingsMan.getValue(SYSTEM_SITE_ORGANIZATION) : ""); } + + /** + * Return the ID of the current node (catalog or subportal). + * If the main one, then srv. + * If a sub portal, use the sub portal key. + * + * @return + */ + public static String getNodeId() { + return ApplicationContextHolder.get().getBean(org.fao.geonet.NodeInfo.class).getId(); + } + + public static String getNodeLogo(String key) { Optional source = getSource(key); return source.isPresent() ? source.get().getLogo() : ""; } + public static String getDiscoveryServiceUuid(String key) { + Optional source = getSource(key); + if (source.isPresent() && source.get().getType() == SourceType.subportal) { + return source.get().getServiceRecord(); + } else { + SettingManager settingsMan = ApplicationContextHolder.get().getBean(SettingManager.class); + String uuid = settingsMan.getValue(SYSTEM_CSW_CAPABILITY_RECORD_UUID); + return "-1".equals(uuid) ? "" : uuid; + } + } + private static Optional getSource(String idOrUuid) { SettingManager settingsMan = ApplicationContextHolder.get().getBean(SettingManager.class); if (StringUtils.isEmpty(idOrUuid)) { @@ -645,7 +690,19 @@ public static Node downloadJsonAsXML(String url) { return null; } - /** + /** + * Check if user is authenticated. + */ + public static boolean isAuthenticated() throws Exception { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication == null || AnonymousAuthenticationToken.class.isAssignableFrom(authentication.getClass())) { + return false; + } + return authentication.isAuthenticated(); + } + + + /** * Check if security provider require login form */ public static boolean isDisableLoginForm() { @@ -886,8 +943,9 @@ public static String wktGeomToBbox(Object WKT) throws Exception { Geometry geometry = reader.read(wktString); if (geometry != null) { final Envelope envelope = geometry.getEnvelopeInternal(); + // Use Locale.US to make Java use dot "." as decimal separator return - String.format("%f|%f|%f|%f", + String.format(Locale.US, "%f|%f|%f|%f", envelope.getMinX(), envelope.getMinY(), envelope.getMaxX(), envelope.getMaxY()); } @@ -897,6 +955,22 @@ public static String wktGeomToBbox(Object WKT) throws Exception { return ret; } + public static String geoJsonGeomToBbox(Object WKT) throws Exception { + String ret = ""; + try { + Geometry geometry = new GeometryJSON().read(WKT); + if (geometry != null) { + final Envelope envelope = geometry.getEnvelopeInternal(); + return + String.format("%f|%f|%f|%f", + envelope.getMinX(), envelope.getMinY(), + envelope.getMaxX(), envelope.getMaxY()); + } + } catch (Throwable e) { + } + return ret; + } + /** * Get field value for metadata identified by uuid. * @@ -1268,6 +1342,16 @@ public static String getSiteUrl() { return si.getSiteUrl() + (!baseUrl.startsWith("/") ? "/" : "") + baseUrl; } + public static String getPermalink(String uuid, String language) { + BaseMetadataUtils metadataUtils = ApplicationContextHolder.get().getBean(BaseMetadataUtils.class); + return metadataUtils.getPermalink(uuid, language); + } + + public static String getDefaultUrl(String uuid, String language) { + BaseMetadataUtils metadataUtils = ApplicationContextHolder.get().getBean(BaseMetadataUtils.class); + return metadataUtils.getDefaultUrl(uuid, language); + } + /** * Return default iso lang code. * @@ -1298,6 +1382,7 @@ public static String buildDataUrl(String url, Integer size) { String extension = Files.getFileExtension(url).toLowerCase(); if (extension.matches(supportedExtension)) { + InputStream in = null; try { SettingManager settingManager = ApplicationContextHolder.get().getBean(SettingManager.class); Matcher m = Pattern.compile(settingManager.getNodeURL() + "api/records/(.*)/attachments/(.*)$").matcher(url); @@ -1311,7 +1396,12 @@ public static String buildDataUrl(String url, Integer size) { image = ImageIO.read(file.getPath().toFile()); } } else { - image = ImageIO.read(new URL(url)); + URL imageUrl = new URL(url); + URLConnection con = imageUrl.openConnection(); + con.setConnectTimeout(1000); + con.setReadTimeout(10000); + in = con.getInputStream(); + image = ImageIO.read(in); } if (image != null) { @@ -1334,6 +1424,8 @@ public static String buildDataUrl(String url, Integer size) { Log.info(Geonet.GEONETWORK, String.format( "Image '%s' is not accessible or can't be converted to Data URL. Error is: %s", url, e.getMessage())); + } finally { + IOUtils.closeQuietly(in); } } else { Log.info(Geonet.GEONETWORK, String.format( diff --git a/core/src/main/java/org/fao/geonet/web/CORSResponseFilter.java b/core/src/main/java/org/fao/geonet/web/CORSResponseFilter.java index 9e590d8e0a..bff34f751c 100644 --- a/core/src/main/java/org/fao/geonet/web/CORSResponseFilter.java +++ b/core/src/main/java/org/fao/geonet/web/CORSResponseFilter.java @@ -22,6 +22,7 @@ */ package org.fao.geonet.web; +import org.apache.commons.lang.StringUtils; import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.constants.Geonet; import org.fao.geonet.kernel.setting.SettingManager; @@ -65,7 +66,7 @@ public class CORSResponseFilter public void init(FilterConfig config) { String allowedHosts = config.getInitParameter(ALLOWED_HOSTS); - if (allowedHosts != null) { + if (StringUtils.isNotEmpty(allowedHosts)) { if (allowedHosts.equals("db")) { isUsingDb = true; } else if (allowedHosts.equals("*")) { @@ -92,7 +93,10 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha if (isUsingDb) { String allowedHosts = settingManager.getValue(SYSTEM_CORS_ALLOWEDHOSTS); - if (allowedHosts != null) { + if (StringUtils.isEmpty(allowedHosts)) { + addHeaderForAllHosts = false; + allowedRemoteHosts = new ArrayList<>(); + } else { if (allowedHosts.equals("*")) { addHeaderForAllHosts = true; } else if (!allowedHosts.equals("")) { @@ -102,7 +106,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha } } - if (addHeaderForAllHosts || allowedRemoteHosts.size() > 0) { + if (addHeaderForAllHosts || !allowedRemoteHosts.isEmpty()) { String clientOriginUrl = httpRequest.getHeader("origin"); if (clientOriginUrl != null) { try { diff --git a/core/src/main/java/org/fao/geonet/web/GeoNetworkPortalFilter.java b/core/src/main/java/org/fao/geonet/web/GeoNetworkPortalFilter.java new file mode 100644 index 0000000000..9330b12195 --- /dev/null +++ b/core/src/main/java/org/fao/geonet/web/GeoNetworkPortalFilter.java @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ + +package org.fao.geonet.web; + +import org.apache.commons.lang3.StringUtils; +import org.fao.geonet.ApplicationContextHolder; +import org.fao.geonet.NodeInfo; +import org.fao.geonet.domain.SourceType; +import org.fao.geonet.repository.SourceRepository; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Filter to check that the portal requested is a valid one, otherwise redirects to the default portal: + *

+ * - Default srv portal. + * - Valid portal defined in the sources table + */ +public class GeoNetworkPortalFilter implements javax.servlet.Filter { + private static final String EXCLUDED_URL_PATHS = "excludedPaths"; + + private static final String URL_PATH_SEPARATOR = "/"; + + /** + * Ignored application paths. + **/ + private List excludedPathsMatchers = new ArrayList<>(); + + + @Override + public void init(FilterConfig config) { + String excludedPathsValue = config.getInitParameter(EXCLUDED_URL_PATHS); + if (StringUtils.isNotEmpty(excludedPathsValue)) { + excludedPathsMatchers = Arrays.stream(excludedPathsValue.split(",")) + .map(StringUtils::trimToEmpty) + .filter(StringUtils::isNotEmpty) + .map(AntPathRequestMatcher::new) + .collect(Collectors.toList()); + } + } + + public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException { + HttpServletResponse httpResp = (HttpServletResponse) resp; + HttpServletRequest httpReq = (HttpServletRequest) req; + + if (!ignoreUrl(httpReq)) { + String portal = ""; + + // Check the url format: /portal/lang/service/..., /portal/api/service/... + if (httpReq.getPathInfo().split(URL_PATH_SEPARATOR).length > 3) { + portal = httpReq.getPathInfo().split(URL_PATH_SEPARATOR)[1]; + } else { + portal = NodeInfo.DEFAULT_NODE; + } + + if (!NodeInfo.DEFAULT_NODE.equals(portal)) { + SourceRepository sourceRepository = ApplicationContextHolder.get().getBean(SourceRepository.class); + // Check the portal exists and it's of type subportal, otherwise redirect to the default portal + boolean redirectToDefaultPortal = !sourceRepository.existsByUuidAndType(portal, SourceType.subportal); + + if (redirectToDefaultPortal) { + String newPath = httpReq.getPathInfo().replace(URL_PATH_SEPARATOR + portal + URL_PATH_SEPARATOR, + URL_PATH_SEPARATOR + NodeInfo.DEFAULT_NODE + URL_PATH_SEPARATOR); + if (httpReq.getQueryString() != null) { + newPath = newPath + "?" + httpReq.getQueryString(); + } + + httpResp.sendRedirect(httpReq.getContextPath() + newPath); + return; + } + } + } + + filterChain.doFilter(req, resp); + } + + @Override + public void destroy() { + // No cleanup required + } + + private boolean ignoreUrl(HttpServletRequest request) { + if (StringUtils.isEmpty(request.getPathInfo())) { + return true; + } else { + return excludedPathsMatchers.stream() + .anyMatch(matcher -> matcher.matches(request)); + } + } +} diff --git a/core/src/main/java/org/geonetwork/http/SessionTimeoutCookieFilter.java b/core/src/main/java/org/geonetwork/http/SessionTimeoutCookieFilter.java index 21a2227667..09cba97a0a 100644 --- a/core/src/main/java/org/geonetwork/http/SessionTimeoutCookieFilter.java +++ b/core/src/main/java/org/geonetwork/http/SessionTimeoutCookieFilter.java @@ -24,8 +24,6 @@ package org.geonetwork.http; import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -40,7 +38,6 @@ import org.apache.commons.lang.StringUtils; import jeeves.server.UserSession; -import jeeves.server.dispatchers.ServiceManager; import jeeves.server.sources.http.JeevesServlet; /** @@ -64,18 +61,20 @@ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filte if (session != null) { long currTime = System.currentTimeMillis(); + String cookiePath = StringUtils.isBlank(httpReq.getContextPath()) ? "/" : httpReq.getContextPath(); + Cookie cookie = new Cookie("serverTime", "" + currTime); - cookie.setPath(httpReq.getContextPath()); + cookie.setPath(cookiePath); cookie.setSecure(req.getServletContext().getSessionCookieConfig().isSecure()); httpResp.addCookie(cookie); UserSession userSession = null; - if (session != null) { - Object tmp = session.getAttribute(JeevesServlet.USER_SESSION_ATTRIBUTE_KEY); - if (tmp instanceof UserSession) { - userSession = (UserSession) tmp; - } + + Object tmp = session.getAttribute(JeevesServlet.USER_SESSION_ATTRIBUTE_KEY); + if (tmp instanceof UserSession) { + userSession = (UserSession) tmp; } + // If user is authenticated, then set expiration time if (userSession != null && StringUtils.isNotEmpty(userSession.getName())) { long expiryTime = currTime + session.getMaxInactiveInterval() * 1000; @@ -83,7 +82,7 @@ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filte } else { cookie = new Cookie("sessionExpiry", "" + currTime); } - cookie.setPath(httpReq.getContextPath()); + cookie.setPath(cookiePath); cookie.setSecure(req.getServletContext().getSessionCookieConfig().isSecure()); httpResp.addCookie(cookie); } diff --git a/core/src/main/java/org/geonetwork/map/wms/SLDUtil.java b/core/src/main/java/org/geonetwork/map/wms/SLDUtil.java index 35bd975245..188a1fb096 100644 --- a/core/src/main/java/org/geonetwork/map/wms/SLDUtil.java +++ b/core/src/main/java/org/geonetwork/map/wms/SLDUtil.java @@ -240,6 +240,12 @@ private static Filter generateFilter2(String fieldName, JSONObject jsonObject) t } else if(filterType.equals("PropertyIsBetween")) { if (parameters.size() != 2) throw new JSONException("Invalid parameter count"); return ff2.between(ff2.property(fieldName), ff2.literal(parameters.get(0)), ff2.literal(parameters.get(1))); + } else if(filterType.equals("PropertyIsBetweenExclusive")) { + if (parameters.size() != 2) throw new JSONException("Invalid parameter count"); + return ff2.and( + ff2.greater(ff2.property(fieldName), ff2.literal(parameters.get(0))), + ff2.less(ff2.property(fieldName), ff2.literal(parameters.get(1))) + ); } else { // Currently, no implementation of topological or distance operators throw new JSONException("No implementation for filter type : " + filterType); diff --git a/core/src/main/resources/config-spring-geonetwork.xml b/core/src/main/resources/config-spring-geonetwork.xml index 7911a9c5f2..7dc187acf6 100644 --- a/core/src/main/resources/config-spring-geonetwork.xml +++ b/core/src/main/resources/config-spring-geonetwork.xml @@ -38,10 +38,11 @@ ignore-resource-not-found="true" ignore-unresolvable="true" order="1"/> - + file-encoding="UTF-8"/> diff --git a/core/src/test/java/org/fao/geonet/GeonetTestFixture.java b/core/src/test/java/org/fao/geonet/GeonetTestFixture.java index bcb9c42dfd..093a8065b1 100644 --- a/core/src/test/java/org/fao/geonet/GeonetTestFixture.java +++ b/core/src/test/java/org/fao/geonet/GeonetTestFixture.java @@ -40,7 +40,6 @@ import org.fao.geonet.utils.IO; import org.fao.geonet.utils.TransformerFactoryFactory; import org.fao.geonet.utils.Xml; -import org.geotools.data.DataStore; import org.jdom.Element; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; @@ -68,14 +67,21 @@ public class GeonetTestFixture { private volatile static FileSystemPool.CreatedFs templateFs; private volatile static SchemaManager templateSchemaManager; @Autowired - private EsSearchManager templateSearchManager; - @Autowired - protected DataStore dataStore; + private EsSearchManager esSearchManager; @Autowired private ConfigurableApplicationContext _applicationContext; @Autowired private IsoLanguagesMapper isoLanguagesMapper; - + @Autowired + private GeonetworkDataDirectory geonetworkDataDirectory; + @Autowired + private ThesaurusManager thesaurusManager; + @Autowired + private DataManager dataManager; + @Autowired + private DataSource dataSource; + @Autowired + private SettingManager settingManager; private FileSystemPool.CreatedFs currentFs; @@ -93,46 +99,42 @@ public void setup(AbstractCoreIntegrationTest test) throws Exception { synchronized (GeonetTestFixture.class) { if (templateFs == null) { - if (templateFs == null) { - templateFs = FILE_SYSTEM_POOL.getTemplate(); - - Path templateDataDirectory = templateFs.dataDir; - IO.copyDirectoryOrFile(webappDir.resolve("WEB-INF/data"), templateDataDirectory, true, new DirectoryStream - .Filter() { - @Override - public boolean accept(Path entry) throws IOException { - return !entry.toString().contains("schema_plugins") && - !entry.getFileName().toString().startsWith(".") && - !entry.getFileName().toString().endsWith(".iml") && - !entry.toString().contains("metadata_data") && - !entry.toString().contains("removed") && - !entry.toString().contains("metadata_subversion") && - !entry.toString().contains("upload") && - !entry.toString().contains("resources"); - } - }); - - - Path schemaPluginsDir = templateDataDirectory.resolve("config/schema_plugins"); - deploySchema(webappDir, schemaPluginsDir); - - final GeonetworkDataDirectory geonetworkDataDirectory = _applicationContext.getBean(GeonetworkDataDirectory.class); - final ServiceConfig serviceConfig = new ServiceConfig(Lists.newArrayList()); - geonetworkDataDirectory.init("geonetwork", webappDir, templateDataDirectory, serviceConfig, null); - test.addTestSpecificData(geonetworkDataDirectory); - - // Create ES index - _applicationContext.getBean(EsSearchManager.class).init(false, Optional.empty()); - - templateSchemaManager = initSchemaManager(webappDir, geonetworkDataDirectory); - - Files.createDirectories(templateDataDirectory.resolve("data/resources/htmlcache")); - } + templateFs = FILE_SYSTEM_POOL.getTemplate(); + + Path templateDataDirectory = templateFs.dataDir; + IO.copyDirectoryOrFile(webappDir.resolve("WEB-INF/data"), templateDataDirectory, true, new DirectoryStream + .Filter() { + @Override + public boolean accept(Path entry) throws IOException { + return !entry.toString().contains("schema_plugins") && + !entry.getFileName().toString().startsWith(".") && + !entry.getFileName().toString().endsWith(".iml") && + !entry.toString().contains("metadata_data") && + !entry.toString().contains("removed") && + !entry.toString().contains("metadata_subversion") && + !entry.toString().contains("upload") && + !entry.toString().contains("resources"); + } + }); + + Path schemaPluginsDir = templateDataDirectory.resolve("config/schema_plugins"); + deploySchema(webappDir, schemaPluginsDir); + + final ServiceConfig serviceConfig = new ServiceConfig(Lists.newArrayList()); + geonetworkDataDirectory.init("geonetwork", webappDir, templateDataDirectory, serviceConfig, null); + test.addTestSpecificData(geonetworkDataDirectory); + + // Create ES index + esSearchManager.init(true, Optional.empty()); + + templateSchemaManager = initSchemaManager(webappDir, geonetworkDataDirectory); + + Files.createDirectories(templateDataDirectory.resolve("data/resources/htmlcache")); } isoLanguagesMapper.reinit(); } - final String fsName = test.getClass().getSimpleName().replaceAll("[^a-z0-9A-Z]", "") + UUID.randomUUID().toString(); + final String fsName = test.getClass().getSimpleName().replaceAll("[^a-z0-9A-Z]", "") + UUID.randomUUID(); currentFs = FILE_SYSTEM_POOL.get(fsName); assertTrue(Files.isDirectory(currentFs.dataDir.resolve("config"))); @@ -144,35 +146,21 @@ public boolean accept(Path entry) throws IOException { final GeonetworkDataDirectory dataDir = configureDataDir(test, webappDir, currentFs.dataDir); configureNewSchemaManager(dataDir, webappDir); - // TODO: I don't know why but this corrupts other tests that will fail depending on the run order: - // assertCorrectDataDir(); - // for example, running GeonetworkDataDirectoryMultiNodeServiceConfigOnlySystemDataDirSetTest, then - // GeonetworkDataDirectoryMultiNodeSystemPropertyOnlySystemDataDirSetTest with that line enabled, the second fails. - -// if (test.resetLuceneIndex()) { -// _directoryFactory.resetIndex(); -// } - ServiceContext serviceContext = test.createServiceContext(); ApplicationContextHolder.set(_applicationContext); serviceContext.setAsThreadLocal(); -// TODOES -// _applicationContext.getBean(EsSearchManager.class).initNonStaticData(100); - _applicationContext.getBean(DataManager.class).init(serviceContext, false); - _applicationContext.getBean(ThesaurusManager.class).init(true, serviceContext, "WEB-INF/data/config/codelist"); + dataManager.init(serviceContext, false); + thesaurusManager.init(true, serviceContext, "WEB-INF/data/config/codelist"); addSourceUUID(dataDir); - final DataSource dataSource = _applicationContext.getBean(DataSource.class); try (Connection conn = dataSource.getConnection()) { - ThreadUtils.init(conn.getMetaData().getURL(), _applicationContext.getBean(SettingManager.class)); + ThreadUtils.init(conn.getMetaData().getURL(), settingManager); } - } - protected void configureNewSchemaManager(GeonetworkDataDirectory dataDir, Path webappDir) throws Exception { final SchemaManager schemaManager = _applicationContext.getBean(SchemaManager.class); schemaManager.configureFrom(templateSchemaManager, webappDir, dataDir); @@ -181,7 +169,7 @@ protected void configureNewSchemaManager(GeonetworkDataDirectory dataDir, Path w protected void addSourceUUID(GeonetworkDataDirectory dataDirectory) { String siteUuid = dataDirectory.getSystemDataDir().getFileName().toString(); - _applicationContext.getBean(SettingManager.class).setSiteUuid(siteUuid); + settingManager.setSiteUuid(siteUuid); final SourceRepository sourceRepository = _applicationContext.getBean(SourceRepository.class); List sources = sourceRepository.findAll(); if (sources.isEmpty()) { diff --git a/core/src/test/java/org/fao/geonet/kernel/AbstractIntegrationTestWithMockedSingletons.java b/core/src/test/java/org/fao/geonet/kernel/AbstractIntegrationTestWithMockedSingletons.java index 8c07a7fa92..2238444e73 100644 --- a/core/src/test/java/org/fao/geonet/kernel/AbstractIntegrationTestWithMockedSingletons.java +++ b/core/src/test/java/org/fao/geonet/kernel/AbstractIntegrationTestWithMockedSingletons.java @@ -1,20 +1,70 @@ package org.fao.geonet.kernel; +import jeeves.server.context.ServiceContext; import org.fao.geonet.AbstractCoreIntegrationTest; +import org.fao.geonet.domain.AbstractMetadata; +import org.fao.geonet.domain.Metadata; +import org.fao.geonet.domain.MetadataType; +import org.fao.geonet.kernel.datamanager.IMetadataManager; +import org.fao.geonet.kernel.search.IndexingMode; +import org.fao.geonet.repository.SourceRepository; +import org.jdom.Element; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.reset; +import java.util.UUID; +import static org.fao.geonet.domain.MetadataType.METADATA; +import static org.fao.geonet.kernel.UpdateDatestamp.NO; + +@ContextConfiguration( + locations = {"classpath:mocked-core-repository-test-context.xml"} +) public abstract class AbstractIntegrationTestWithMockedSingletons extends AbstractCoreIntegrationTest { - private static SpringLocalServiceInvoker mockInvoker; + private static final int TEST_OWNER_ID = 42; + + @Autowired + private IMetadataManager metadataManager; + + @Autowired + private SchemaManager schemaManager; + + @Autowired + private SourceRepository sourceRepository; + + @Autowired + protected SpringLocalServiceInvoker springLocalServiceInvoker; + + protected AbstractMetadata insertTemplateResourceInDb(ServiceContext serviceContext, Element element) throws Exception { + return insertTemplateResourceInDb(serviceContext, element, METADATA); + } + + protected AbstractMetadata insertTemplateResourceInDb(ServiceContext serviceContext, Element element, MetadataType type) throws Exception { + loginAsAdmin(serviceContext); + + Metadata metadata = new Metadata(); + metadata.setDataAndFixCR(element) + .setUuid(UUID.randomUUID().toString()); + metadata.getDataInfo() + .setRoot(element.getQualifiedName()) + .setSchemaId(schemaManager.autodetectSchema(element)) + .setType(type) + .setPopularity(1000); + metadata.getSourceInfo() + .setOwner(TEST_OWNER_ID) + .setSourceId(sourceRepository.findAll().get(0).getUuid()); + metadata.getHarvestInfo() + .setHarvested(false); - public SpringLocalServiceInvoker resetAndGetMockInvoker() { - if (mockInvoker == null) { - mockInvoker = mock(SpringLocalServiceInvoker.class); - _applicationContext.getBeanFactory().registerSingleton(SpringLocalServiceInvoker.class.getCanonicalName(), mockInvoker); - } - reset(mockInvoker); - return mockInvoker; + return metadataManager.insertMetadata( + serviceContext, + metadata, + element, + IndexingMode.full, + false, + NO, + false, + true); } } diff --git a/core/src/test/java/org/fao/geonet/kernel/AccessManagerTest.java b/core/src/test/java/org/fao/geonet/kernel/AccessManagerTest.java index f81f8796b3..98c744f967 100644 --- a/core/src/test/java/org/fao/geonet/kernel/AccessManagerTest.java +++ b/core/src/test/java/org/fao/geonet/kernel/AccessManagerTest.java @@ -92,5 +92,14 @@ public void testIsIntranet() { assertTrue("IP " + ipToTest +" is in the intranet", accessManager.isIntranet(ipToTest)); } assertFalse("IP " + "192.168.2.1" +" is not in the intranet", accessManager.isIntranet("192.168.2.1")); + + settingManager.setValue(Settings.SYSTEM_INTRANET_NETMASK, "255.255.255.255,255.255.255.255"); + settingManager.setValue(Settings.SYSTEM_INTRANET_NETWORK, "192.168.1.1,194.168.1.1"); + assertTrue(accessManager.isIntranet("192.168.1.1")); + assertTrue(accessManager.isIntranet("194.168.1.1")); + assertFalse(accessManager.isIntranet("192.168.1.2")); + assertFalse(accessManager.isIntranet("194.168.1.2")); + assertFalse(accessManager.isIntranet("192.168.1.0")); + assertFalse(accessManager.isIntranet("194.168.1.0")); } } diff --git a/core/src/test/java/org/fao/geonet/kernel/AllThesaurusTest.java b/core/src/test/java/org/fao/geonet/kernel/AllThesaurusTest.java index 00853de31b..2a172dae27 100644 --- a/core/src/test/java/org/fao/geonet/kernel/AllThesaurusTest.java +++ b/core/src/test/java/org/fao/geonet/kernel/AllThesaurusTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -154,7 +154,7 @@ public void testGetKeywordUrl() throws Exception { @Test public void testRetrieveThesaurusTitle() throws Exception { - this.allThesaurus.retrieveThesaurusTitle(); // does nothing, assure there is no error + this.allThesaurus.retrieveThesaurusInformation(); // does nothing, assure there is no error } @Test(expected = UnsupportedOperationException.class) @@ -332,33 +332,6 @@ public void testGetKeywordWithLabelCantFind() throws Exception { this.allThesaurus.getKeywordWithLabel("jkdjfdklsdj", "eng"); } - @SuppressWarnings("deprecation") - @Test(expected = UnsupportedOperationException.class) - public void testAddElement1() throws Exception { - this.allThesaurus.addElement("code", "prefLab", "note", "lang"); - } - - @SuppressWarnings("deprecation") - @Test(expected = UnsupportedOperationException.class) - public void testAddElement2() throws Exception { - this.allThesaurus.addElement("code", "prefLab", "note", "east", "west", "south", "north", "lang"); - - } - - @SuppressWarnings("deprecation") - @Test(expected = UnsupportedOperationException.class) - public void testUpdateElement1() throws Exception { - this.allThesaurus.updateElement("namespace", "id", "prefLab", "note", "lang"); - } - - @SuppressWarnings("deprecation") - @Test(expected = UnsupportedOperationException.class) - public void testUpdateElement2() throws Exception { - this.allThesaurus.updateElement("namespace", "id", "prefLab", "note", "east", "west", - "south", "north", "lang"); - - } - @Test(expected = UnsupportedOperationException.class) public void testClear() throws Exception { this.allThesaurus.clear(); diff --git a/core/src/test/java/org/fao/geonet/kernel/ElasticsearchIndexingTest.java b/core/src/test/java/org/fao/geonet/kernel/ElasticsearchIndexingTest.java new file mode 100644 index 0000000000..6170271f79 --- /dev/null +++ b/core/src/test/java/org/fao/geonet/kernel/ElasticsearchIndexingTest.java @@ -0,0 +1,66 @@ +package org.fao.geonet.kernel; + +import jeeves.server.context.ServiceContext; +import org.elasticsearch.action.search.SearchResponse; +import org.fao.geonet.AbstractCoreIntegrationTest; +import org.fao.geonet.domain.AbstractMetadata; +import org.fao.geonet.kernel.search.EsSearchManager; +import org.fao.geonet.kernel.setting.SettingManager; +import org.fao.geonet.kernel.setting.Settings; +import org.fao.geonet.utils.Xml; +import org.jdom.Element; +import org.junit.Before; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.net.URL; +import java.util.Objects; +import static org.junit.Assert.*; + +public class ElasticsearchIndexingTest extends AbstractIntegrationTestWithMockedSingletons { + + @Autowired + private EsSearchManager searchManager; + + @Autowired + private SettingManager settingManager; + + private ServiceContext serviceContext; + + @Before + public void setUp() throws Exception { + serviceContext = createServiceContext(); + settingManager.setValue(Settings.SYSTEM_XLINKRESOLVER_ENABLE, true); + } + + @Test + public void complexDatesAreIndexedCheck() throws Exception { + // GIVEN + AbstractMetadata dbInsertedSimpleDataMetadata = loadMetadataWithTemporalExtentUsingSimpleDates(); + validateIndexedExpectedData(dbInsertedSimpleDataMetadata, "forest", 1); + validateIndexedExpectedData(dbInsertedSimpleDataMetadata, "holocene", 0); + URL dateResource = AbstractCoreIntegrationTest.class.getResource("kernel/holocene.xml"); + Element dateElement = Xml.loadStream(Objects.requireNonNull(dateResource).openStream()); + + // WHEN + AbstractMetadata dbInsertedMetadata = insertTemplateResourceInDb(serviceContext, dateElement); + + //THEN + SearchResponse response = this.searchManager.query("_id:" + dbInsertedMetadata.getUuid() + " AND resourceTitleObject.default:holocene", null, 0, 10); + long actualHitNbr = response.getHits().getTotalHits().value; + assertEquals(String.format("Incorrect indexation of Holocene data with complex date due to: %s and %s", response, dbInsertedMetadata), 1, actualHitNbr); + } + + private AbstractMetadata loadMetadataWithTemporalExtentUsingSimpleDates() throws Exception { + URL dateResource = AbstractCoreIntegrationTest.class.getResource("kernel/forest.xml"); + Element dateElement = Xml.loadStream(Objects.requireNonNull(dateResource).openStream()); + return insertTemplateResourceInDb(serviceContext, dateElement); + } + + private void validateIndexedExpectedData(AbstractMetadata dbInsertedSimpleDataMetadata, String resourceTitle, long expectedHitNbr) throws Exception { + SearchResponse searchResponse = this.searchManager.query("resourceTitleObject.default:" + resourceTitle, null, 0, 10); + long actualHitNbr = searchResponse.getHits().getTotalHits().value; + String assertionErrorMessage = "The %s data was not indexed the expected number of times due to: %s and %s"; + assertEquals(String.format(assertionErrorMessage, resourceTitle, searchResponse, dbInsertedSimpleDataMetadata), expectedHitNbr, actualHitNbr); + } +} diff --git a/core/src/test/java/org/fao/geonet/kernel/LocalXLinksInMetadataIntegrationTest.java b/core/src/test/java/org/fao/geonet/kernel/LocalXLinksInMetadataIntegrationTest.java index cd6923d4d1..5b141a82cb 100644 --- a/core/src/test/java/org/fao/geonet/kernel/LocalXLinksInMetadataIntegrationTest.java +++ b/core/src/test/java/org/fao/geonet/kernel/LocalXLinksInMetadataIntegrationTest.java @@ -110,40 +110,38 @@ public void testResolveLocalXLink() throws Exception { String id = _dataManager.insertMetadata(context, schema, metadata, uuid, owner, groupOwner, source, metadataType, null, null, createDate, changeDate, false, IndexingMode.none); - SpringLocalServiceInvoker mockInvoker = resetAndGetMockInvoker(); - String keyword1 = "World"; Element element1 = new SAXBuilder().build(new StringReader(String.format(responseTemplate, keyword1))).getRootElement(); - when(mockInvoker.invoke(any(String.class))).thenReturn(element1); + when(springLocalServiceInvoker.invoke(any(String.class))).thenReturn(element1); final String xpath = "*//gmd:descriptiveKeywords//gmd:keyword/gco:CharacterString"; assertNull(Xml.selectElement(metadata, xpath)); - verify(mockInvoker, never()).invoke(any(String.class)); + verify(springLocalServiceInvoker, never()).invoke(any(String.class)); final Element loadedMetadataNoXLinkAttributesNotEdit = _dataManager.getMetadata(context, id, false, false, false); assertEqualsText(keyword1, loadedMetadataNoXLinkAttributesNotEdit, xpath, GCO, GMD); - verify(mockInvoker, times(1)).invoke(any(String.class)); + verify(springLocalServiceInvoker, times(1)).invoke(any(String.class)); final Element loadedMetadataKeepXLinkAttributesNotEdit = _dataManager.getMetadata(context, id, false, false, true); assertEqualsText(keyword1, loadedMetadataKeepXLinkAttributesNotEdit, xpath, GCO, GMD); - verify(mockInvoker, times(2)).invoke(any(String.class)); + verify(springLocalServiceInvoker, times(2)).invoke(any(String.class)); final Element loadedMetadataNoXLinkAttributesEdit = _dataManager.getMetadata(context, id, false, true, false); assertEqualsText(keyword1, loadedMetadataNoXLinkAttributesEdit, xpath, GCO, GMD); - verify(mockInvoker, times(3)).invoke(any(String.class)); + verify(springLocalServiceInvoker, times(3)).invoke(any(String.class)); final Element loadedMetadataKeepXLinkAttributesEdit = _dataManager.getMetadata(context, id, false, true, true); assertEqualsText(keyword1, loadedMetadataKeepXLinkAttributesEdit, xpath, GCO, GMD); - verify(mockInvoker, times(4)).invoke(any(String.class)); + verify(springLocalServiceInvoker, times(4)).invoke(any(String.class)); Processor.clearCache(); String keyword2 = "Other Word"; Element element2 = new SAXBuilder().build(new StringReader(String.format(responseTemplate, keyword2))).getRootElement(); - when(mockInvoker.invoke(any(String.class))).thenReturn(element2); + when(springLocalServiceInvoker.invoke(any(String.class))).thenReturn(element2); final Element newLoad = _dataManager.getMetadata(context, id, false, true, true); assertEqualsText(keyword2, newLoad, xpath, GCO, GMD); - verify(mockInvoker, times(5)).invoke(any(String.class)); + verify(springLocalServiceInvoker, times(5)).invoke(any(String.class)); } } diff --git a/core/src/test/java/org/fao/geonet/kernel/LocalXLinksUpdateDeleteTest.java b/core/src/test/java/org/fao/geonet/kernel/LocalXLinksUpdateDeleteTest.java index 456d048e31..e67834f85e 100644 --- a/core/src/test/java/org/fao/geonet/kernel/LocalXLinksUpdateDeleteTest.java +++ b/core/src/test/java/org/fao/geonet/kernel/LocalXLinksUpdateDeleteTest.java @@ -3,29 +3,22 @@ import jeeves.server.context.ServiceContext; import org.fao.geonet.AbstractCoreIntegrationTest; import org.fao.geonet.domain.AbstractMetadata; -import org.fao.geonet.domain.Metadata; -import org.fao.geonet.domain.MetadataType; import org.fao.geonet.kernel.datamanager.IMetadataManager; -import org.fao.geonet.kernel.search.EsSearchManager; import org.fao.geonet.kernel.search.IndexingMode; import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.setting.Settings; -import org.fao.geonet.repository.SourceRepository; import org.fao.geonet.utils.Xml; import org.jdom.Attribute; import org.jdom.Element; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import java.net.URL; import java.util.Arrays; -import java.util.UUID; import static org.fao.geonet.domain.MetadataType.SUB_TEMPLATE; import static org.fao.geonet.domain.MetadataType.TEMPLATE; -import static org.fao.geonet.kernel.UpdateDatestamp.NO; import static org.fao.geonet.schema.iso19139.ISO19139Namespaces.GCO; import static org.fao.geonet.schema.iso19139.ISO19139Namespaces.GMD; import static org.junit.Assert.assertNotNull; @@ -34,31 +27,18 @@ import static org.mockito.Mockito.when; -@Ignore public class LocalXLinksUpdateDeleteTest extends AbstractIntegrationTestWithMockedSingletons { - - private static final int TEST_OWNER = 42; - @Autowired private IMetadataManager metadataManager; - @Autowired - private SchemaManager schemaManager; - - @Autowired - private SourceRepository sourceRepository; - - @Autowired - private EsSearchManager searchManager; - @Autowired private SettingManager settingManager; - private ServiceContext context; + private ServiceContext serviceContext; @Before public void setUp() throws Exception { - this.context = createServiceContext(); + serviceContext = createServiceContext(); settingManager.setValue(Settings.SYSTEM_XLINKRESOLVER_ENABLE, true); } @@ -74,7 +54,7 @@ public void updateHasToRegisterReferrersForIndexation() throws Exception { // assertFalse(context.getBean(IndexingList.class).getIdentifiers().contains(vicinityMapMetadata.getId())); Xml.selectElement(contactElement, "gmd:individualName/gco:CharacterString", Arrays.asList(GMD, GCO)).setText("momo"); - metadataManager.updateMetadata(context, + metadataManager.updateMetadata(serviceContext, Integer.toString(contactMetadata.getId()), contactElement, false, @@ -94,8 +74,8 @@ public void deleteAllowedWhenRefNotExists() throws Exception { AbstractMetadata contactMetadata = insertContact(); AbstractMetadata vicinityMapMetadata = insertVicinityMap(contactMetadata); - metadataManager.deleteMetadata(context, Integer.toString(vicinityMapMetadata.getId())); - metadataManager.deleteMetadata(context, Integer.toString(contactMetadata.getId())); + metadataManager.deleteMetadata(serviceContext, Integer.toString(vicinityMapMetadata.getId())); + metadataManager.deleteMetadata(serviceContext, Integer.toString(contactMetadata.getId())); assertNull(metadataManager.getMetadata(Integer.toString(contactMetadata.getId()))); } @@ -106,7 +86,7 @@ public void deleteHasToBeForbiddenWhenRefExistsAndSettingsSaySo() throws Excepti insertVicinityMap(contactMetadata); try { - metadataManager.deleteMetadata(context, + metadataManager.deleteMetadata(serviceContext, Integer.toString(contactMetadata.getId())); } catch (Exception e) { @@ -120,46 +100,16 @@ public void deleteHasToBeAllowedWhenRefExistsAndSettingsSaySo() throws Exception AbstractMetadata contactMetadata = insertContact(); insertVicinityMap(contactMetadata); - metadataManager.deleteMetadata(context, Integer.toString(contactMetadata.getId())); + metadataManager.deleteMetadata(serviceContext, Integer.toString(contactMetadata.getId())); assertNull(metadataManager.getMetadata(Integer.toString(contactMetadata.getId()))); } - private AbstractMetadata insertTemplateResourceInDb(Element element, MetadataType type) throws Exception { - loginAsAdmin(context); - - Metadata metadata = new Metadata(); - metadata.setDataAndFixCR(element) - .setUuid(UUID.randomUUID().toString()); - metadata.getDataInfo() - .setRoot(element.getQualifiedName()) - .setSchemaId(schemaManager.autodetectSchema(element)) - .setType(type) - .setPopularity(1000); - metadata.getSourceInfo() - .setOwner(TEST_OWNER) - .setSourceId(sourceRepository.findAll().get(0).getUuid()); - metadata.getHarvestInfo() - .setHarvested(false); - - AbstractMetadata dbInsertedMetadata = metadataManager.insertMetadata( - context, - metadata, - element, - IndexingMode.full, - false, - NO, - false, - false); - - return dbInsertedMetadata; - } - private AbstractMetadata insertVicinityMap(AbstractMetadata contactMetadata) throws Exception { URL vicinityMapResource = AbstractCoreIntegrationTest.class.getResource("kernel/vicinityMap.xml"); Element vicinityMapElement = Xml.loadStream(vicinityMapResource.openStream()); Attribute href = (Attribute) Xml.selectElement(vicinityMapElement, "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact").getAttributes().get(0); href.setValue(href.getValue().replace("@contact_uuid@", contactMetadata.getUuid())); - return insertTemplateResourceInDb(vicinityMapElement, TEMPLATE); + return insertTemplateResourceInDb(serviceContext, vicinityMapElement, TEMPLATE); } private AbstractMetadata insertContact() throws Exception { @@ -169,10 +119,9 @@ private AbstractMetadata insertContact() throws Exception { } private AbstractMetadata insertContact(Element contactElement) throws Exception { - AbstractMetadata contactMetadata = insertTemplateResourceInDb(contactElement, SUB_TEMPLATE); + AbstractMetadata contactMetadata = insertTemplateResourceInDb(serviceContext, contactElement, SUB_TEMPLATE); - SpringLocalServiceInvoker mockInvoker = resetAndGetMockInvoker(); - when(mockInvoker.invoke(any(String.class))).thenReturn(contactElement); + when(springLocalServiceInvoker.invoke(any(String.class))).thenReturn(contactElement); return contactMetadata; } } diff --git a/core/src/test/java/org/fao/geonet/kernel/ThesaurusTest.java b/core/src/test/java/org/fao/geonet/kernel/ThesaurusTest.java index 55fd2fc082..461c729d0f 100644 --- a/core/src/test/java/org/fao/geonet/kernel/ThesaurusTest.java +++ b/core/src/test/java/org/fao/geonet/kernel/ThesaurusTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2016 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -72,22 +72,6 @@ public void deleteEmptyThesaurus() throws IOException { writableThesaurus.getRepository().shutDown(); } - @SuppressWarnings("deprecation") - @Test - public void testAddElementStringStringStringString() throws Exception { - String label = "Hello"; - String note = "note"; - String code = "http://thesaurus.test#0"; - writableThesaurus.addElement(code, label, note, "eng"); - assertElement(1, code, label, note, "", "", "", ""); - - label = "Hello2"; - note = "note2"; - code = "http://thesaurus.test#1"; - writableThesaurus.addElement(code, label, note, "en"); - assertElement(2, code, label, note, "", "", "", ""); - } - private KeywordBean assertElement(int words, String code, String label, String note, String coordEast, String coordWest, String coordSouth, String coordNorth) throws GraphException, IOException, AccessDeniedException, MalformedQueryException, QueryEvaluationException { List keywords = QueryBuilder.keywordQueryBuilder(isoLangMapper, "eng", "fre").build().execute(writableThesaurus); @@ -104,25 +88,6 @@ private KeywordBean assertElement(int words, String code, String label, String n return keywordBean; } - @SuppressWarnings("deprecation") - @Test - public void testAddElementStringStringStringStringString() throws Exception { - String label = "Hello"; - String note = "note"; - String code = "http://thesaurus.test#0"; - String coordEast = "12"; - String coordWest = "5"; - String coordNorth = "30"; - String coordSouth = "20"; - writableThesaurus.addElement(code, label, note, coordEast, coordWest, coordSouth, coordNorth, "eng"); - assertElement(1, code, label, note, coordEast, coordWest, coordSouth, coordNorth); - label = "Hello2"; - note = "note2"; - code = "http://thesaurus.test#1"; - writableThesaurus.addElement(code, label, note, coordEast, coordWest, coordSouth, coordNorth, "eng"); - assertElement(2, code, label, note, coordEast, coordWest, coordSouth, coordNorth); - } - @Test @Ignore(value = "Randomly fails every once in a while") public void testAddElementKeywordBean() throws Exception { @@ -197,66 +162,6 @@ public void testRemoveElementStringString() throws Exception { assertEquals(0, query.execute(thesaurus).size()); } - @SuppressWarnings("deprecation") - @Test - public void testUpdateElementStringStringStringStringString() throws Exception { - String label = "Hello"; - String note = "note"; - String code = "http://thesaurus.test#0"; - String coordEast = "12"; - String coordWest = "5"; - String coordNorth = "30"; - String coordSouth = "20"; - String lang = "eng"; - KeywordBean keyword = new KeywordBean(isoLangMapper) - .setUriCode(code) - .setCoordEast(coordEast) - .setCoordNorth(coordNorth) - .setCoordSouth(coordSouth) - .setCoordWest(coordWest) - .setDefinition(note, lang) - .setValue(label, lang); - - writableThesaurus.addElement(keyword); - assertElement(1, code, label, note, coordEast, coordWest, coordSouth, coordNorth); - label = "Hello2"; - note = "note2"; - writableThesaurus.updateElement(keyword.getNameSpaceCode(), keyword.getRelativeCode(), label, note, "eng"); - assertElement(1, code, label, note, coordEast, coordWest, coordSouth, coordNorth); - } - - @SuppressWarnings("deprecation") - @Test - public void testUpdateElementStringStringStringStringStringStringStringStringString() throws Exception { - String label = "Hello"; - String note = "note"; - String code = "http://thesaurus.test#0"; - String coordEast = "12"; - String coordWest = "5"; - String coordNorth = "30"; - String coordSouth = "20"; - String lang = "eng"; - KeywordBean keyword = new KeywordBean(isoLangMapper) - .setUriCode(code) - .setCoordEast(coordEast) - .setCoordNorth(coordNorth) - .setCoordSouth(coordSouth) - .setCoordWest(coordWest) - .setDefinition(note, lang) - .setValue(label, lang); - - writableThesaurus.addElement(keyword); - assertElement(1, code, label, note, coordEast, coordWest, coordSouth, coordNorth); - label = "Hello2"; - note = "note2"; - coordEast = "0"; - coordWest = "-10"; - coordNorth = "20"; - coordSouth = "10"; - writableThesaurus.updateElement(keyword.getNameSpaceCode(), keyword.getRelativeCode(), label, note, coordEast, coordWest, coordSouth, coordNorth, "eng"); - assertElement(1, code, label, note, coordEast, coordWest, coordSouth, coordNorth); - } - @Test public void testUpdateElementKeywordBean() throws Exception { String label = "Hello"; diff --git a/core/src/test/java/org/fao/geonet/security/web/csrf/GeonetworkCsrfSecurityRequestMatcherTest.java b/core/src/test/java/org/fao/geonet/security/web/csrf/GeonetworkCsrfSecurityRequestMatcherTest.java new file mode 100644 index 0000000000..4c06809aef --- /dev/null +++ b/core/src/test/java/org/fao/geonet/security/web/csrf/GeonetworkCsrfSecurityRequestMatcherTest.java @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2001-2023 Food and Agriculture Organization of the + * United Nations (FAO-UN), United Nations World Food Programme (WFP) + * and United Nations Environment Programme (UNEP) + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + * Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, + * Rome - Italy. email: geonetwork@osgeo.org + */ +package org.fao.geonet.security.web.csrf; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.junit.Before; +import org.junit.Test; +import org.keycloak.adapters.springsecurity.filter.KeycloakCsrfRequestMatcher; +import org.keycloak.constants.AdapterConstants; +import org.springframework.http.HttpMethod; +import org.springframework.mock.web.MockHttpServletRequest; + +import java.util.Set; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class GeonetworkCsrfSecurityRequestMatcherTest { + + private static final String ROOT_CONTEXT_PATH = ""; + private static final String SUB_CONTEXT_PATH = "/foo"; + + private GeonetworkCsrfSecurityRequestMatcher matcher; + private MockHttpServletRequest request; + + @Before + public void setUp() { + request = new MockHttpServletRequest(); + Set notCorsPaths = Sets.newLinkedHashSet(Lists.newArrayList( + "/[a-zA-Z0-9_\\-]+/[a-z]{2,3}/csw-publication!?.*", + "/[a-zA-Z0-9_\\-]+/[a-z]{2,3}/csw-.*", + "/[a-zA-Z0-9_\\-]+/[a-z]{2,3}/csw!?.*", + "/[a-zA-Z0-9_\\-]+/api/search/.*", + "/[a-zA-Z0-9_\\-]+/api/site") + ); + matcher = new GeonetworkCsrfSecurityRequestMatcher(notCorsPaths); + } + + @Test + public void testDefaultConfigHttpMethods() { + + request.setMethod(HttpMethod.GET.name()); + assertFalse((matcher.matches(request))); + + request.setMethod(HttpMethod.HEAD.name()); + assertFalse((matcher.matches(request))); + request.setMethod(HttpMethod.TRACE.name()); + assertFalse((matcher.matches(request))); + request.setMethod(HttpMethod.OPTIONS.name()); + assertFalse((matcher.matches(request))); + + request.setMethod(HttpMethod.PATCH.name()); + assertTrue(matcher.matches(request)); + request.setMethod(HttpMethod.POST.name()); + assertTrue(matcher.matches(request)); + request.setMethod(HttpMethod.PUT.name()); + assertTrue(matcher.matches(request)); + request.setMethod(HttpMethod.DELETE.name()); + assertTrue(matcher.matches(request)); + } + + @Test + public void testDefaultMatchesMethodPost() throws Exception { + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "some/random/uri"); + assertTrue(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "some/random/uri"); + assertTrue(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "some/random/uri"); + assertTrue(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "some/random/uri"); + assertTrue(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/eng/csw-publication"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/eng/csw-publication"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/eng/csw-foo"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/eng/csw-foo"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/eng/csw"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/eng/csw"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/api/search/foo"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/api/search/foo"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/api/site"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/api/site"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "k_logout"); + assertTrue(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "k_logout"); + assertTrue(matcher.matches(request)); + } + + @Test + public void testKeycloakCorsFilter() { + matcher.addRequestMatcher(new KeycloakCsrfRequestMatcher()); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "some/random/uri"); + assertTrue(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "some/random/uri"); + assertTrue(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/eng/csw-publication"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/eng/csw-publication"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/eng/csw-foo"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/eng/csw-foo"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/eng/csw"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/eng/csw"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/api/search/foo"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/api/search/foo"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, "srv/api/site"); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, "srv/api/site"); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, AdapterConstants.K_LOGOUT); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, AdapterConstants.K_LOGOUT); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, AdapterConstants.K_PUSH_NOT_BEFORE); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, AdapterConstants.K_PUSH_NOT_BEFORE); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, AdapterConstants.K_QUERY_BEARER_TOKEN); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, AdapterConstants.K_QUERY_BEARER_TOKEN); + assertFalse(matcher.matches(request)); + + prepareRequest(HttpMethod.POST, ROOT_CONTEXT_PATH, AdapterConstants.K_TEST_AVAILABLE); + assertFalse(matcher.matches(request)); + prepareRequest(HttpMethod.POST, SUB_CONTEXT_PATH, AdapterConstants.K_TEST_AVAILABLE); + assertFalse(matcher.matches(request)); + + } + + private void prepareRequest(HttpMethod method, String contextPath, String uri) { + request.setMethod(method.name()); + request.setContextPath(contextPath); + request.setRequestURI(contextPath + "/" + uri); + request.setServletPath("/" + uri); + } +} diff --git a/core/src/test/java/org/fao/geonet/util/XslUtilTest.java b/core/src/test/java/org/fao/geonet/util/XslUtilTest.java index 0d03d34c5f..4be752e7ac 100644 --- a/core/src/test/java/org/fao/geonet/util/XslUtilTest.java +++ b/core/src/test/java/org/fao/geonet/util/XslUtilTest.java @@ -32,7 +32,7 @@ public class XslUtilTest { @Test public void testHtml2text() { String html = "

Sample text
Sample text 2
Sample text 3
"; - String expectedText = "Sample textSample text 2Sample text 3"; + String expectedText = "Sample text\nSample text 2\nSample text 3"; String text = XslUtil.html2text(html); assertEquals(expectedText, text); diff --git a/core/src/test/resources/WEB-INF/config.properties b/core/src/test/resources/WEB-INF/config.properties index b5eb3e138b..4bb53114f9 100644 --- a/core/src/test/resources/WEB-INF/config.properties +++ b/core/src/test/resources/WEB-INF/config.properties @@ -19,3 +19,6 @@ es.index.searchlogs=searchlogs es.index.checker.interval=0/5 * * * * ? thesaurus.cache.maxsize=400000 + +language.default=eng +language.forceDefault=false diff --git a/core/src/test/resources/cleanoutdatabase.sql b/core/src/test/resources/cleanoutdatabase.sql index d62ade0896..999ea49800 100644 --- a/core/src/test/resources/cleanoutdatabase.sql +++ b/core/src/test/resources/cleanoutdatabase.sql @@ -2,6 +2,8 @@ DELETE FROM TRANSLATIONS; DELETE FROM CUSTOMELEMENTSET; DELETE FROM HARVESTHISTORY; DELETE FROM LANGUAGES; +DELETE FROM spg_page; +DELETE FROM spg_sections; DELETE FROM guf_userfeedback_keyword; DELETE FROM guf_keywords; DELETE FROM guf_userfeedbacks_guf_rating; diff --git a/core/src/test/resources/config-spring-geonetwork.xml b/core/src/test/resources/config-spring-geonetwork.xml index 156b2b3d77..85933b1641 100644 --- a/core/src/test/resources/config-spring-geonetwork.xml +++ b/core/src/test/resources/config-spring-geonetwork.xml @@ -36,5 +36,8 @@ - + + + + diff --git a/core/src/test/resources/mocked-core-repository-test-context.xml b/core/src/test/resources/mocked-core-repository-test-context.xml new file mode 100644 index 0000000000..b3d835c52a --- /dev/null +++ b/core/src/test/resources/mocked-core-repository-test-context.xml @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/core/src/test/resources/org/fao/geonet/api/Messages.properties b/core/src/test/resources/org/fao/geonet/api/Messages.properties index 15585d4b55..7146a6b8f9 100644 --- a/core/src/test/resources/org/fao/geonet/api/Messages.properties +++ b/core/src/test/resources/org/fao/geonet/api/Messages.properties @@ -78,7 +78,7 @@ register_email_message=Dear User,\n\ Yours sincerely,\n\ The %s team. new_user_rating=%s / New user rating on %s -new_user_rating_text=See record %sapi/records/%s +new_user_rating_text=See record %s user_feedback_title=%s / User feedback on %s / %s user_feedback_text=User %s (%s - %s)\n\ - Email: %s\n\ @@ -90,8 +90,11 @@ user_feedback_text=User %s (%s - %s)\n\ \n\ %s \n\ \n\ - See record %sapi/records/%s + See record %s status_email_text=GeoNetwork user %s (%s) edited metadata record #%s +metadata_save_submit_text=Save and submit metadata +metadata_save_approve_text=Save and approve metadata +metadata_status_editing_instance_created_text=Editing instance created # SiteName / Workflow / recordTitle statusName by userName status_change_default_email_subject={0} / Workflow / '{{'index:resourceTitleObject'}}' {1} by {2} status_change_default_email_text={0} modified the status of the record '{{'index:resourceTitleObject'}}'.\n\ @@ -101,7 +104,7 @@ Message: \n\ {1} \n\ \n\ View record: \n\ -{7}catalog.search#/metadata/'{{'index:uuid'}}' +{{link}} # SiteName / Task / recordTitle statusName by userName status_change_doiCreationTask_email_subject={0} / Task / {1} for '{{'index:resourceTitleObject'}}' @@ -113,7 +116,7 @@ Message: \n\ {1} \n\ \n\ View record: \n\ -{7}catalog.search#/metadata/'{{'index:uuid'}}' +{{link}} # TODO: Link to DOI creation panel api.groups.group_not_found=Group with ID ''{0}'' not found in this catalog. @@ -138,7 +141,7 @@ username.field.required=Username is required password.field.length=Password size should be between {min} and {max} characters password.field.invalid=Password must contain at least 1 uppercase, 1 lowercase, 1 number and 1 symbol. Symbols include: `~!@#$%^&*()-_=+[]{}\\|;:'",.<>/?'); api.exception.forbidden=Access denied -api.exception.forbidden.description=Access is denied. To access, try again with a user containing more priviledges. +api.exception.forbidden.description=Access is denied. To access, try again with a user containing more privileges. api.exception.resourceNotFound=Resource not found api.exception.resourceNotFound.description=Resource could not be located. api.exception.resourceAlreadyExists=Resource already exists diff --git a/core/src/test/resources/org/fao/geonet/api/Messages_fre.properties b/core/src/test/resources/org/fao/geonet/api/Messages_fre.properties index 5d04c05940..d4dfb7add4 100644 --- a/core/src/test/resources/org/fao/geonet/api/Messages_fre.properties +++ b/core/src/test/resources/org/fao/geonet/api/Messages_fre.properties @@ -66,7 +66,7 @@ register_email_message=Cher utilisateur,\n\ Salutations,\n\ L'\u00E9quipe %s. new_user_rating=%s / Nouvelle \u00E9valuation faite pour %s -new_user_rating_text=Consulter la fiche %sapi/records/%s +new_user_rating_text=Consulter la fiche %s user_feedback_title=%s / Nouveau commentaire sur %s / %s user_feedback_text=Utilisateur %s (%s - %s)\n\ - Email: %s\n\ @@ -78,8 +78,11 @@ user_feedback_text=Utilisateur %s (%s - %s)\n\ \n\ %s \n\ \n\ - Consulter la fiche %sapi/records/%s + Consulter la fiche %s status_email_text=L''utilisateur %s (%s) a \u00E9dit\u00E9 une fiche #%s +metadata_save_submit_text=Enregistrer et soumettre les m\u00E9tadonn\u00E9es +metadata_save_approve_text=Enregistrer et approuver les m\u00E9tadonn\u00E9es +metadata_status_editing_instance_created_text=L'instance de modification a \u00E9t\u00E9 cr\u00E9\u00E9e # SiteName / Workflow / recordTitle statusName by userName status_change_default_email_subject={0} / Cycle de vie / '{{'index:resourceTitleObject'}}' {1} par {2} status_change_default_email_text={0} a modifi\u00E9 l''\u00E9tat de la fiche '{{'index:resourceTitleObject'}}'.\n\ @@ -89,7 +92,7 @@ Message: \n\ {1} \n\ \n\ Consulter la fiche : \n\ -{7}catalog.search#/metadata/'{{'index:uuid'}}' +{{link}} # SiteName / Task / recordTitle statusName by userName status_change_doiCreationTask_email_subject={0} / Action / {1} pour '{{'index:resourceTitleObject'}}' @@ -102,7 +105,7 @@ Message: \n\ {1} \n\ \n\ Consulter la fiche : \n\ -{7}catalog.search#/metadata/'{{'index:uuid'}}' +{{link}} # TODO: Link to DOI creation panel metadata_published_subject=%s / Publication de m\u00E9tadonn\u00E9es metadata_published_text=Les fiches suivantes ont \u00E9t\u00E9 trait\u00E9es:\n\ diff --git a/core/src/test/resources/org/fao/geonet/kernel/forest.xml b/core/src/test/resources/org/fao/geonet/kernel/forest.xml new file mode 100644 index 0000000000..cde5dc3825 --- /dev/null +++ b/core/src/test/resources/org/fao/geonet/kernel/forest.xml @@ -0,0 +1,837 @@ + + + 837750fd-5790-4263-ad6d-cd94c43cfe5b + + + + + + + + + + + + + + Atlas of Switzerland + + + Atlas der Schweiz + + + Atlas de la Suisse + + + Atlante della Svizzera + + + Atlas of Switzerland + + + + + + + + + +41 44 633 11 53 + + + + + + + Zurich + + + Zürich + + + Zurich + + + Zurigo + + + Zurich + + + + + 8093 + + + CH + + + atlasinfo@ethz.ch + + + + + + + https://www.atlasderschweiz.ch + + + text/html + + + + + 09h00 - 10h30 / 11h00 - 12h30 / 14h00 - 18h00 GMT+1 + + + + + + + + + + 2023-01-19 + + + ISO 19115/19119 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/4326 + + + INSPIRE RS registry + + + + + + + + + + + Forest + + + Wald + + + Forêt + + + Bosco + + + Forest + + + + + Forest + + + Wald + + + Forêt + + + Bosco + + + Forest + + + + + + + 2014-11-17 + + + + + + + + + + 2016-06-03 + + + + + + + + + + 2020-09-25 + + + + + + + + + + 34 + + + ads:online:maps + + + + + + + + + + Forest. Map type: Choropleths. Spatial extent: Switzerland. Time: 2010 + + + Wald. Kartentyp: Choroplethen. Räumliche Ausdehnung: Schweiz. Zeit: 2010 + + + Forêt. Type de carte: Choroplètes. Étendue spatiale: Suisse. Unité temporelle: 2010 + + + Bosco. Tipo di carta: Coropletiche. Estensione spaziale: Svizzera. Unità temporale: 2010 + + + Forest. Map type: Choropleths. Spatial extent: Switzerland. Time: 2010 + + + + + + + + + + Atlas of Switzerland + + + Atlas der Schweiz + + + Atlas de la Suisse + + + Atlante della Svizzera + + + Atlas of Switzerland + + + + + + + + + +41 44 633 11 53 + + + + + + + Zurich + + + Zürich + + + Zurich + + + Zurigo + + + Zurich + + + + + 8093 + + + CH + + + atlasinfo@ethz.ch + + + + + + + https://www.atlasderschweiz.ch + + + text/html + + + + + 09h00 - 10h30 / 11h00 - 12h30 / 14h00 - 18h00 GMT+1 + + + + + + + + + + + + Swiss Federal Office of Topography + + + Bundesamt für Landestopografie + + + Office fédéral de topographie + + + Ufficio federale di topografia + + + Swiss Federal Office of Topography + + + + + + + + + Wabern + + + Wabern + + + Wabern + + + Wabern + + + Wabern + + + + + CH + + + info@swisstopo.ch + + + + + + + http://www.swisstopo.admin.ch/ + + + text/html + + + + + + + + + + + + + + + + + + + + + Basemaps + + + Basiskarten + + + Fonds de carte + + + Carte di base + + + Basemaps + + + + + Elements + + + Elemente + + + Éléments + + + Elementi + + + Elements + + + + + + + + + + Atlas of Switzerland - Categories + + + Atlas der Schweiz - Kategorien + + + Atlas de la Suisse - Catégories + + + Atlante della Svizzera - Categorie + + + Atlas of Switzerland - Categories + + + + + + + 2016-04-01 + + + + + + + + + + + + + + Land cover + + + Bodenbedeckung + + + Couverture du sol + + + Copertura del suolo + + + Land cover + + + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + + + + + 2008-06-01 + + + + + + + + + + + + + + See end-user license agreement + + + Siehe Endbenutzer-Lizenzvertrag + + + Voir conditions générales d'utilisation + + + Vedi accordo di licenza con l'utente finale + + + See end-user license agreement + + + + + + + + + + + + There are no limitations on public access to spatial data sets and services. + + + + + + + + + + The conditions applying to access and use are unknown. + + + + + + + + + f6243e5a-3816-49ab-9eeb-14f0c16d8847 + + + + + + + + + + + + + + + + + 200000 + + + + + + + + + + + + + + + + + + + + + + imageryBaseMapsEarthCover + + + imageryBaseMapsEarthCover_EarthCover + + + + + Switzerland + + + Schweiz + + + Suisse + + + Svizzera + + + Switzerland + + + + + + + 5.606041613827549 + + + 10.988229452947234 + + + 45.53396348515653 + + + 47.97997376576611 + + + + + + + + 2010-01-01T00:00:00 + 2010-12-31T23:59:59 + + + + + + + + + + + + + + Digital map in a web atlas + + + Digitale Karte in einem Web-Atlas + + + Carte digitale dans un atlas web + + + Mappa digitale in un web atlante + + + Digital map in a web atlas + + + + + - + + + + + + + + + https://www.atlasofswitzerland.ch/forest/ + + + WWW:LINK-1.0-http--link + + + + + + + + + + + + + + + + + + + + + + Conformity_001 + + + INSPIRE + + + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 + implementing Directive 2007/2/EC of the European Parliament and of the + Council as regards interoperability of spatial data sets and services + + + VERORDNUNG (EG) Nr. 1089/2010 + DER KOMMISSION vom 23. November 2010 zur Durchführung der Richtlinie + 2007/2/EG des Europäischen Parlaments und des Rates hinsichtlich der + Interoperabilität von Geodatensätzen und -diensten + + + RÈGLEMENT (UE) No 1089/2010 + DE LA COMMISSION du 23 novembre 2010 portant modalités d'application + de la directive 2007/2/CE du Parlement européen et du Conseil en ce + qui concerne l'interopérabilité des séries et des services de + données géographiques + + + REGOLAMENTO (UE) N. 1089/2010 + DELLA COMMISSIONE del 23 novembre 2010 recante attuazione della + direttiva 2007/2/CE del Parlamento europeo e del Consiglio per + quanto riguarda l'interoperabilità dei set di dati territoriali e + dei servizi di dati territoriali + + + COMMISSION REGULATION (EU) No + 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of + the European Parliament and of the Council as regards + interoperability of spatial data sets and services + + + + + + + 2010-12-08 + + + + + + + + + + See the referenced specification + + + Siehe referenzierte Spezifikation + + + Voir la spécification référencée + + + Vedi la specifica riferimento + + + See the referenced specification + + + + + true + + + + + + + + + Source data: Swiss Federal Office of Topography. Data processing: Atlas of Switzerland + + + Ursprungsdaten: Bundesamt für Landestopografie. + Datenverarbeitung: Atlas der Schweiz + + + Données originales: Office fédéral de topographie. + Traitement de données: Atlas de la Suisse + + + Dati di origine: Ufficio federale di topografia. + Trattamento dei dati: Atlante della Svizzera + + + Source data: Swiss Federal Office of Topography. Data + processing: Atlas of Switzerland + + + + + + + + \ No newline at end of file diff --git a/core/src/test/resources/org/fao/geonet/kernel/holocene.xml b/core/src/test/resources/org/fao/geonet/kernel/holocene.xml new file mode 100644 index 0000000000..1d80e1256d --- /dev/null +++ b/core/src/test/resources/org/fao/geonet/kernel/holocene.xml @@ -0,0 +1,919 @@ + + + 4d2794d4-447e-4bbe-89ba-ab11cfdfc7b8 + + + + + + + + + + + + + + Atlas of Switzerland + + + Atlas der Schweiz + + + Atlas de la Suisse + + + Atlante della Svizzera + + + Atlas of Switzerland + + + + + + + + + +41 44 633 11 53 + + + + + + + Zurich + + + Zürich + + + Zurich + + + Zurigo + + + Zurich + + + + + 8093 + + + CH + + + atlasinfo@ethz.ch + + + + + + + https://www.atlasderschweiz.ch + + + text/html + + + + + 09h00 - 10h30 / 11h00 - 12h30 / 14h00 - 18h00 GMT+1 + + + + + + + + + + 2023-02-28 + + + ISO 19115/19119 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/4326 + + + INSPIRE RS registry + + + + + + + + + + + Volcanic eruptions in the holocene + + + Vulkane und Eruptionen weltweit + + + Eruptions volcaniques durant l'Holocène + + + Eruzioni vulcaniche nell’olocene + + + Volcanic eruptions in the holocene + + + + + Volcanoes: eruptions + + + Vulkane: Eruptionen + + + Volcans: éruptions + + + Vulcani: eruzioni + + + Volcanoes: eruptions + + + + + + + 2014-08-28 + + + + + + + + + + 2019-02-04 + + + + + + + + + + 2023-02-27 + + + + + + + + + + 163 + + + ads:online:maps + + + + + + + + + + Volcanic eruptions in the holocene. Map type: Symbols. Spatial extent: World. Times: 10,000–0 BC, 0–1699, 1700–1799, 1800–1899, 1900–1999, 2000–2021, Total + + + Vulkane und Eruptionen weltweit. Kartentyp: Symbole. Räumliche Ausdehnung: Welt. Zeiten: 10 000–0 v. Chr., 0–1699, 1700–1799, 1800–1899, 1900–1999, 2000–2021, Total + + + Eruptions volcaniques durant l'Holocène. Type de carte: Symboles. Étendue spatiale: Monde. Unités temporelles: 10 000–0 avant J-C, 0–1699, 1700–1799, 1800–1899, 1900–1999, 2000–2021, Total + + + Eruzioni vulcaniche nell’olocene. Tipo di carta: Simboli. Estensione spaziale: Mondo. Unità temporali: 10.000–0 a.C., 0–1699, 1700–1799, 1800–1899, 1900–1999, 2000–2021, Totale + + + Volcanic eruptions in the holocene. Map type: Symbols. Spatial extent: World. Times: 10,000–0 BC, 0–1699, 1700–1799, 1800–1899, 1900–1999, 2000–2021, Total + + + + + + + + + + Atlas of Switzerland + + + Atlas der Schweiz + + + Atlas de la Suisse + + + Atlante della Svizzera + + + Atlas of Switzerland + + + + + + + + + +41 44 633 11 53 + + + + + + + Zurich + + + Zürich + + + Zurich + + + Zurigo + + + Zurich + + + + + 8093 + + + CH + + + atlasinfo@ethz.ch + + + + + + + https://www.atlasderschweiz.ch + + + text/html + + + + + 09h00 - 10h30 / 11h00 - 12h30 / 14h00 - 18h00 GMT+1 + + + + + + + + + + + + Smithsonian Institution's Global Volcanism Program + + + Smithsonian Institution's Global Volcanism Program + + + Smithsonian Institution's Global Volcanism Program + + + Smithsonian Institution's Global Volcanism Program + + + Smithsonian Institution's Global Volcanism Program + + + + + + + + + Washington D.C. + + + Washington D.C. + + + Washington D.C. + + + Washington D.C. + + + Washington D.C. + + + + + US + + + gvp@si.edu + + + + + + + https://volcano.si.edu/ + + + text/html + + + + + + + + + + + + + + National Oceanic and Atmospheric Administration + + + National Oceanic and Atmospheric Administration + + + National Oceanic and Atmospheric Administration + + + National Oceanic and Atmospheric Administration + + + National Oceanic and Atmospheric Administration + + + + + + + + + Washington D.C. + + + Washington D.C. + + + Washington D.C. + + + Washington D.C. + + + Washington D.C. + + + + + US + + + haz.info@noaa.gov + + + + + + + http://www.noaa.gov/ + + + text/html + + + + + + + + + + + + + + + + + + + + + Global Switzerland + + + Globale Schweiz + + + La Suisse à l’international + + + Svizzera internazionale + + + Global Switzerland + + + + + Nature and Environment + + + Natur und Umwelt + + + Nature et Environnement + + + Natura e Ambiente + + + Nature and Environment + + + + + Geology and raw materials + + + Geologie und Rohstoffe + + + Géologie et matières premières + + + Geologia e materie prime + + + Geology and raw materials + + + + + + + + + + Atlas of Switzerland - Categories + + + Atlas der Schweiz - Kategorien + + + Atlas de la Suisse - Catégories + + + Atlante della Svizzera - Categorie + + + Atlas of Switzerland - Categories + + + + + + + 2016-04-01 + + + + + + + + + + + + + + Geology + + + Geologie + + + Géologie + + + Geologia + + + Geology + + + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + GEMET - INSPIRE themes, version 1.0 + + + + + + + 2008-06-01 + + + + + + + + + + + + + + See end-user license agreement + + + Siehe Endbenutzer-Lizenzvertrag + + + Voir conditions générales d'utilisation + + + Vedi accordo di licenza con l'utente finale + + + See end-user license agreement + + + + + + + + + + + + There are no limitations on public access to spatial data sets and services. + + + + + + + + + + The conditions applying to access and use are unknown. + + + + + + + + + f6243e5a-3816-49ab-9eeb-14f0c16d8847 + + + + + + + + + + + + + + + + + 1000000 + + + + + + + + + + + + + + + + + + + + + + geoscientificInformation + + + geoscientificInformation_Geology + + + + + World + + + Welt + + + Monde + + + Mondo + + + World + + + + + + + -179.97 + + + 179.58 + + + -78.5 + + + 88.27 + + + + + + + + -10000-01-01T00:00:00 + 2021-12-31T23:59:59 + + + + + + + + + + + + + + Digital map in a web atlas + + + Digitale Karte in einem Web-Atlas + + + Carte digitale dans un atlas web + + + Mappa digitale in un web atlante + + + Digital map in a web atlas + + + + + - + + + + + + + + + https://www.atlasofswitzerland.ch/volcanic-eruptions-in-the-holocene/ + + + WWW:LINK-1.0-http--link + + + + + + + + + + + + + + + + + + + + + + Conformity_001 + + + INSPIRE + + + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 + implementing Directive 2007/2/EC of the European Parliament and of the + Council as regards interoperability of spatial data sets and services + + + VERORDNUNG (EG) Nr. 1089/2010 + DER KOMMISSION vom 23. November 2010 zur Durchführung der Richtlinie + 2007/2/EG des Europäischen Parlaments und des Rates hinsichtlich der + Interoperabilität von Geodatensätzen und -diensten + + + RÈGLEMENT (UE) No 1089/2010 + DE LA COMMISSION du 23 novembre 2010 portant modalités d'application + de la directive 2007/2/CE du Parlement européen et du Conseil en ce + qui concerne l'interopérabilité des séries et des services de + données géographiques + + + REGOLAMENTO (UE) N. 1089/2010 + DELLA COMMISSIONE del 23 novembre 2010 recante attuazione della + direttiva 2007/2/CE del Parlamento europeo e del Consiglio per + quanto riguarda l'interoperabilità dei set di dati territoriali e + dei servizi di dati territoriali + + + COMMISSION REGULATION (EU) No + 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of + the European Parliament and of the Council as regards + interoperability of spatial data sets and services + + + + + + + 2010-12-08 + + + + + + + + + + See the referenced specification + + + Siehe referenzierte Spezifikation + + + Voir la spécification référencée + + + Vedi la specifica riferimento + + + See the referenced specification + + + + + true + + + + + + + + + Source data: Smithsonian Institution's Global Volcanism Program, National Oceanic and Atmospheric Administration. Data processing: Atlas of Switzerland + + + Ursprungsdaten: Smithsonian Institution's Global Volcanism Program, National Oceanic and Atmospheric Administration. + Datenverarbeitung: Atlas der Schweiz + + + Données originales: Smithsonian Institution's Global Volcanism Program, National Oceanic and Atmospheric Administration. + Traitement de données: Atlas de la Suisse + + + Dati di origine: Smithsonian Institution's Global Volcanism Program, National Oceanic and Atmospheric Administration. + Trattamento dei dati: Atlante della Svizzera + + + Source data: Smithsonian Institution's Global Volcanism Program, National Oceanic and Atmospheric Administration. Data + processing: Atlas of Switzerland + + + + + + + + \ No newline at end of file diff --git a/csw-server/pom.xml b/csw-server/pom.xml index 65696d9234..da85389728 100644 --- a/csw-server/pom.xml +++ b/csw-server/pom.xml @@ -27,7 +27,7 @@ geonetwork org.geonetwork-opensource - 4.2.2-georchestra + 4.2.7-georchestra 4.0.0 diff --git a/csw-server/src/main/java/org/fao/geonet/component/csw/Transaction.java b/csw-server/src/main/java/org/fao/geonet/component/csw/Transaction.java index d3d413510a..f571bb968b 100644 --- a/csw-server/src/main/java/org/fao/geonet/component/csw/Transaction.java +++ b/csw-server/src/main/java/org/fao/geonet/component/csw/Transaction.java @@ -23,10 +23,9 @@ package org.fao.geonet.component.csw; -import org.fao.geonet.kernel.search.IndexingMode; -import org.locationtech.jts.util.Assert; import jeeves.server.UserSession; import jeeves.server.context.ServiceContext; +import org.fao.geonet.ApplicationContextHolder; import org.fao.geonet.GeonetContext; import org.fao.geonet.Util; import org.fao.geonet.constants.Edit; @@ -37,38 +36,31 @@ import org.fao.geonet.csw.common.ResultType; import org.fao.geonet.csw.common.exceptions.CatalogException; import org.fao.geonet.csw.common.exceptions.NoApplicableCodeEx; -import org.fao.geonet.domain.ISODate; -import org.fao.geonet.domain.Pair; -import org.fao.geonet.domain.Profile; -import org.fao.geonet.domain.ReservedGroup; -import org.fao.geonet.domain.ReservedOperation; -import org.fao.geonet.kernel.AccessManager; -import org.fao.geonet.kernel.AddElemValue; -import org.fao.geonet.kernel.DataManager; -import org.fao.geonet.kernel.EditLib; -import org.fao.geonet.kernel.SchemaManager; +import org.fao.geonet.domain.*; +import org.fao.geonet.domain.utils.ObjectJSONUtils; +import org.fao.geonet.events.history.RecordDeletedEvent; +import org.fao.geonet.events.history.RecordImportedEvent; +import org.fao.geonet.events.history.RecordUpdatedEvent; +import org.fao.geonet.kernel.*; import org.fao.geonet.kernel.csw.CatalogService; import org.fao.geonet.kernel.csw.services.AbstractOperation; import org.fao.geonet.kernel.csw.services.getrecords.FieldMapper; import org.fao.geonet.kernel.csw.services.getrecords.SearchController; -import org.fao.geonet.kernel.datamanager.IMetadataUtils; import org.fao.geonet.kernel.datamanager.IMetadataManager; +import org.fao.geonet.kernel.datamanager.IMetadataUtils; import org.fao.geonet.kernel.schema.MetadataSchema; +import org.fao.geonet.kernel.search.IndexingMode; import org.fao.geonet.kernel.setting.SettingManager; import org.fao.geonet.kernel.setting.Settings; import org.fao.geonet.utils.Log; import org.jdom.Element; +import org.jdom.output.XMLOutputter; +import org.locationtech.jts.util.Assert; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; +import java.util.*; //============================================================================= /** @@ -76,6 +68,9 @@ */ @Component(CatalogService.BEAN_PREFIX + Transaction.NAME) public class Transaction extends AbstractOperation implements CatalogService { + private static final boolean applyUpdateFixedInfo = true; + private static final boolean applyValidation = false; + static final String NAME = "Transaction"; @Autowired SchemaManager _schemaManager; @@ -218,7 +213,7 @@ public Element retrieveValues(String parameterName) throws CatalogException { * @throws Exception */ private boolean insertTransaction(Element xml, List documents, ServiceContext context, Set toIndex) - throws Exception { + throws Exception { GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME); DataManager dataMan = gc.getBean(DataManager.class); @@ -263,9 +258,8 @@ private boolean insertTransaction(Element xml, List documents, // insert metadata // String docType = null, isTemplate = null; - boolean ufo = true; String id = dataMan.insertMetadata(context, schema, xml, uuid, userId, group, source, - isTemplate, docType, category, createDate, changeDate, ufo, IndexingMode.none); + isTemplate, docType, category, createDate, changeDate, applyUpdateFixedInfo, IndexingMode.none); // Privileges for the first group of the user that inserts the metadata // (same permissions as when inserting xml file from UI) @@ -287,6 +281,13 @@ private boolean insertTransaction(Element xml, List documents, dataMan.indexMetadata(id, true); + AbstractMetadata metadata = metadataUtils.findOne(id); + ApplicationContext applicationContext = ApplicationContextHolder.get(); + new RecordImportedEvent(metadata.getId(), us.getUserIdAsInt(), + ObjectJSONUtils.convertObjectInJsonObject(us.getPrincipal(), + RecordImportedEvent.FIELD), + metadata.getData()).publish(applicationContext); + documents.add(new InsertedMetadata(schema, id, xml)); toIndex.add(id); @@ -316,6 +317,9 @@ private int updateTransaction(Element request, Element xml, ServiceContext conte int totalUpdated = 0; + Element beforeMetadata; + Element afterMetadata; + // Update full metadata if (xml != null) { @@ -353,10 +357,22 @@ private int updateTransaction(Element request, Element xml, ServiceContext conte changeDate = new ISODate().toString(); } - boolean validate = false; - boolean ufo = false; + beforeMetadata = metadataUtils.findOneByUuid(uuid).getXmlData(false); + String language = context.getLanguage(); - dataMan.updateMetadata(context, id, xml, validate, ufo, language, changeDate, true, IndexingMode.none); + dataMan.updateMetadata(context, id, xml, + applyValidation, applyUpdateFixedInfo, + language, changeDate, true, IndexingMode.none); + + afterMetadata = metadataUtils.findOneByUuid(uuid).getXmlData(false); + + XMLOutputter outp = new XMLOutputter(); + String xmlBefore = outp.outputString(beforeMetadata); + String xmlAfter = outp.outputString(afterMetadata); + new RecordUpdatedEvent(Long.parseLong(id), + context.getUserSession().getUserIdAsInt(), + xmlBefore, xmlAfter) + .publish(ApplicationContextHolder.get()); toIndex.add(id); @@ -397,6 +413,8 @@ private int updateTransaction(Element request, Element xml, ServiceContext conte Element metadata = dataMan.getMetadata(context, id, false, false, true); + beforeMetadata = metadata; + metadata.removeChild("info", Edit.NAMESPACE); // Retrieve the schema and Namespaces of metadata to update @@ -449,22 +467,31 @@ private int updateTransaction(Element request, Element xml, ServiceContext conte // Update the metadata with changes if (metadataChanged) { - boolean validate = false; - boolean ufo = false; try { changeDate = metadataUtils.extractDateModified(schemaId, metadata); } catch (Exception ex) { changeDate = new ISODate().toString(); } String language = context.getLanguage(); - dataMan.updateMetadata(context, id, metadata, validate, ufo, language, changeDate, true, IndexingMode.none); + dataMan.updateMetadata(context, id, metadata, + applyValidation, applyUpdateFixedInfo, + language, changeDate, true, IndexingMode.none); updatedMd.add(id); totalUpdated++; } - + afterMetadata = metadataUtils.findOneByUuid(uuid).getXmlData(false); + + XMLOutputter outp = new XMLOutputter(); + String xmlBefore = outp.outputString(beforeMetadata); + String xmlAfter = outp.outputString(afterMetadata); + new RecordUpdatedEvent(Long.parseLong(id), + context.getUserSession().getUserIdAsInt(), + xmlBefore, xmlAfter) + .publish(ApplicationContextHolder.get()); } + toIndex.addAll(updatedMd); return totalUpdated; @@ -510,8 +537,25 @@ private int deleteTransaction(Element request, ServiceContext context) throws Ex if (!dataMan.getAccessManager().canEdit(context, id)) { throw new NoApplicableCodeEx("User not allowed to delete metadata : " + id); } + AbstractMetadata metadata = metadataUtils.findOneByUuid(uuid); + LinkedHashMap titles = new LinkedHashMap<>(); + try { + titles = metadataUtils.extractTitles(Integer.toString(metadata.getId())); + } catch (Exception e) { + Log.warning(Geonet.DATA_MANAGER, + String.format( + "Error while extracting title for the metadata %d " + + "while creating delete event. Error is %s.", + metadata.getId(), e.getMessage())); + } + RecordDeletedEvent recordDeletedEvent = new RecordDeletedEvent( + metadata.getId(), metadata.getUuid(), titles, + context.getUserSession().getUserIdAsInt(), + metadata.getData()); metadataManager.deleteMetadata(context, id); + recordDeletedEvent.publish(ApplicationContextHolder.get()); + deleted++; } @@ -586,13 +630,13 @@ private void getResponseResult(ServiceContext context, Element request, Element } private static Element applyCswBrief(ServiceContext context, SchemaManager schemaManager, String schema, - Element md, - String id, String displayLanguage) throws Exception + Element md, + String id, String displayLanguage) throws Exception { return org.fao.geonet.csw.common.util.Xml.applyElementSetName( - context, schemaManager, schema, md, - "csw", ElementSetName.BRIEF, ResultType.RESULTS, - id, displayLanguage); + context, schemaManager, schema, md, + "csw", ElementSetName.BRIEF, ResultType.RESULTS, + id, displayLanguage); } /** diff --git a/csw-server/src/main/java/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java b/csw-server/src/main/java/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java index be4a62fb5f..4cb6fe7dd2 100644 --- a/csw-server/src/main/java/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java +++ b/csw-server/src/main/java/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java @@ -571,10 +571,10 @@ private String convertCswFilterToEsQuery(Element xml, String filterVersion) { * 1) gmd-csw-postprocessing.xsl : Postprocessing xsl applied for CSW service when requesting iso (gmd) output * 2) csw-csw-postprocessing.xsl : Postprocessing xsl applied for CSW service when requesting ogc (csw) output * - * For a custom CSW service named csw-inspire + * For a custom sub-portal named inspire * - * 1) gmd-csw-inspire-postprocessing.xsl : Postprocessing xsl applied for custom CSW csw-inspire service when requesting iso output - * 2) csw-csw-inspire-postprocessing.xsl : Postprocessing xsl applied for custom CSW csw-inspire service when requesting ogc (csw) output + * 1) gmd-inspire-postprocessing.xsl : Postprocessing xsl applied for custom inspire sub-portal when requesting iso output + * 2) csw-inspire-postprocessing.xsl : Postprocessing xsl applied for custom inspire sub-portal when requesting ogc (csw) output * * @param context Service context * @param schemaManager schemamanager diff --git a/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswFilter2EsTest.java b/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswFilter2EsTest.java index b89996e6cc..524c064ab7 100644 --- a/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswFilter2EsTest.java +++ b/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswFilter2EsTest.java @@ -280,8 +280,8 @@ void testSpatialBBox() throws IOException { // EXPECTED: final ObjectNode expected = boolbdr(). // must(array(geoShape("geom", // - envelope(-180d, 90d, 180d, -90d), // - "intersects"))) // + envelope(-180d, 90d, 180d, -90d), // + "intersects"))) // . // filter(queryStringPart()). // bld(); @@ -343,7 +343,7 @@ void testFilterWithAndOrAndSpatialBBox() throws IOException { // EXPECTED: final ObjectNode expected = boolbdr(). // must(array(geoShapePart, // - propertiesPart)) // + propertiesPart)) // . // filter(queryStringPart()). // bld(); diff --git a/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswSortBy2EsTest.java b/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswSortBy2EsTest.java index 7036125f75..e233ed945a 100644 --- a/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswSortBy2EsTest.java +++ b/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/CswSortBy2EsTest.java @@ -43,7 +43,7 @@ import java.util.List; /** - * CswFilter2Es converts (XML-based) CSW queries into ElasticSearch queries. + * CswFilter2Es converts (XML-based) CSW queries into Elasticsearch queries. * These ES-queries are in JSON-notation. We do not want to test the resulting * JSON-String char-by-char as this is error-prone.
*

diff --git a/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/EsJsonHelper.java b/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/EsJsonHelper.java index 1566053f1b..629247c882 100644 --- a/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/EsJsonHelper.java +++ b/csw-server/src/test/java/org/fao/geonet/kernel/csw/services/getrecords/es/EsJsonHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2021 Food and Agriculture Organization of the + * Copyright (C) 2001-2023 Food and Agriculture Organization of the * United Nations (FAO-UN), United Nations World Food Programme (WFP) * and United Nations Environment Programme (UNEP) * @@ -23,17 +23,15 @@ package org.fao.geonet.kernel.csw.services.getrecords.es; -import java.util.List; - -import org.geotools.geometry.jts.ReferencedEnvelope; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import java.util.List; + /** - * Tools to build up ElasticSearch JSON structures via Jackson. + * Tools to build up Elasticsearch JSON structures via Jackson. * * @author bhoefling * @@ -43,14 +41,14 @@ public class EsJsonHelper { /** * Returns a structure like - * + * *

-     *  { "match": 
+     *  { "match":
      *    {
      *      "property": "matchString"
      *    }
      * 
- * + * * @param property * @param matchString * @return @@ -73,7 +71,7 @@ private static ArrayNode bound(double x, double y) { /** * An Envelope. - * + * * @param x0 * @param y0 * @param x1 @@ -90,7 +88,7 @@ public static ObjectNode envelope(double x0, double y0, double x1, double y1) { /** * Creates a "geo_shape" node. - * + * * @param property The name of the index' property where the geometry search * should take place. * @param geometry A geometry. @@ -113,10 +111,10 @@ public static ObjectNode geoShape(String property, ObjectNode geometry, String r /** * Crate a "shape" object.
- * + * * It is the responsibility of the caller that type and coordinates fit * together. - * + * * @param shapeType For example "envelope" or "point". * @param coordinates * @return @@ -145,9 +143,19 @@ public static ObjectNode bool(JsonNode must) { return outerNode; } - /* + /** * Creates a "bool" node with "must", "filter", "should", "must_not" clauses. - * Only non-null parameters will trigger the corresponding clause. + * Only non-null parameters will trigger the corresponding clause: + *
+     *     {
+     *         "bool": {
+     *             "must": "...",
+     *             "filter": "...",
+     *             "should": "...",
+     *             "must_no": "..."
+     *         }
+     *     }
+     * 
*/ public static ObjectNode bool(JsonNode must, JsonNode filter, JsonNode should, JsonNode mustNot) { final ObjectNode boolNode = MAPPER.createObjectNode(); @@ -173,7 +181,7 @@ public static ObjectNode bool(JsonNode must, JsonNode filter, JsonNode should, J } /** - * + * * @return a new BoolBdr */ public static BoolBdr boolbdr() { @@ -201,6 +209,11 @@ public BoolBdr must(JsonNode must) { return this; } + /** Set the filter. + * + * @param filter the filter. + * @return this instance of BoolBdr. + */ public BoolBdr filter(JsonNode filter) { this.filter = filter; return this; @@ -218,13 +231,18 @@ public BoolBdr mustNot(JsonNode mustNot) { } + /** Creates an {@link com.fasterxml.jackson.databind.node.ArrayNode} with the list of itemp passed. + * + * @param items elements of the new array. + * @return an ArrayNode with the items passed. + */ public static ArrayNode array(ObjectNode... items) { - final ArrayNode boolNode = MAPPER.createArrayNode(); + final ArrayNode arrayNode = MAPPER.createArrayNode(); for (final ObjectNode node : items) { - boolNode.add(node); + arrayNode.add(node); } - return boolNode; + return arrayNode; } public static ArrayNode array(List items) { diff --git a/docker/config/geonetwork/log4j/log4j.dtd b/docker/config/geonetwork/log4j/log4j.dtd deleted file mode 100644 index 1aabd96c3b..0000000000 --- a/docker/config/geonetwork/log4j/log4j.dtd +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/README.md b/docs/README.md index 5eb45d9295..d97e063a28 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,9 +1,11 @@ -Documentation -============= +# Documentation + This module contains: -* Documentation in RST format -* Change logs -* Copyright template -* Licenses for library -* Utility folder with scripts to generate extra docs \ No newline at end of file +* `manual` in Markdown format for mkdocs +* `manuals` in RST format for sphinx-build (vai https://github.com/geonetwork/doc) +* Change logs txt files +* [copyright.txt](copyright.txt) Copyright template +* `licenses` for library +* Utility folder with scripts to generate extra docs +* `translate` python module for help with sphinx-build to mkdocs diff --git a/docs/changes2.1.x.txt b/docs/changes2.1.x.txt index 84a0c41255..803c1ec16d 100644 --- a/docs/changes2.1.x.txt +++ b/docs/changes2.1.x.txt @@ -769,7 +769,7 @@ === Changes ================================================================================ -- Search for templates is hidden to simple registerd users (only allow from editors up) +- Search for templates is hidden to simple registered users (only allow from editors up) - Moved login info to the righ diff --git a/docs/changes2.2.x.txt b/docs/changes2.2.x.txt index c37ec5f926..a8b2cd9c72 100644 --- a/docs/changes2.2.x.txt +++ b/docs/changes2.2.x.txt @@ -1098,7 +1098,7 @@ InterMap: === Changes ================================================================================ -- Search for templates is hidden to simple registerd users (only allow from +- Search for templates is hidden to simple registered users (only allow from editors up) - Moved login info to the righ diff --git a/docs/changes3.8.0-0.txt b/docs/changes3.8.0-0.txt index 832c2d6789..f367694b79 100644 --- a/docs/changes3.8.0-0.txt +++ b/docs/changes3.8.0-0.txt @@ -292,7 +292,7 @@ - Support gmx:Anchor in extract relations xslt process - refactor - Support gmx:Anchor in extract relations xslt process - fix pdf generation from full view, flying saucer trouble with float: left -- in manage record priviledges help groups sorter to sort +- in manage record privileges help groups sorter to sort - Metadata editor - associated panel doesn't remove error red highlight when filling the url in thumbnail mode #3756 - Fix JS build. - Fixes empty owner select in admin's batch process @@ -439,4 +439,4 @@ - fixes #3207, add warning when layer not in capabilities (for wmts and wfs), with option to open service panel to select alternative layer (adding type to warning translation, so it can be used for multiple types). Also fixes bug with url having &. - Updated slf4j dependencies - Updated avalon-framework dependencies -- Updated json-path dependencies \ No newline at end of file +- Updated json-path dependencies diff --git a/docs/changes4.2.3-0.txt b/docs/changes4.2.3-0.txt new file mode 100644 index 0000000000..32ce6b1152 --- /dev/null +++ b/docs/changes4.2.3-0.txt @@ -0,0 +1,193 @@ +================================================================================ +=== +=== GeoNetwork 4.2.3: List of changes +=== +================================================================================ +- Update version to 4.2.3-0 +- Harvester / SimpleURL / RDF / Avoid to create a CatalogRecord with the same uuid as the Dataset. +- Harvester / DCAT / Improve RDF doc detection. +- Workflow / Restrict search by status to record that user can edit (#6889) +- Record view / Related records / Status badge. (#6853) +- Simplify regular expression for valid formatter identifiers +- Indexing / Avoid malformed JSON on empty overview description. +- Collection updater +- Formatter id may contains . eg. iso19115-3.2018. It will not contains /. +- Editor / Online links / Display full URL. (#6784) +- Index / Feature catalogue / Add type and column names in full text search. +- i18n / Updates from transifex +- API / Record / Popularity / GET (#6824) +- [gn]: fix related template if resource has no name +- Record view / Align thumbnail with the optional label (#6863) +- Return license elements as an array in ElasticSearch queries +- KeyCloak / set the user profile retrieved from KeyCloak only for new users or if the configuration option KEYCLOACK_UPDATEPROFILE is enabled (#6871) +- Merge pull request #6882 from cmangeat/need_records_json_for_core_it_test +- need records.json for test fixture to build index when it tests in core for example +- Merge pull request #6880 from cmangeat/remove_dead_indirection +- Merge pull request #6796 from cmangeat/geocat_v4.2.3_forbid_used_template_deletion +- remove dead/duplicate indirection +- [gn]: entries, add a danger alert if the subtemplate removal fails +- [gn]: subtemplates, check for reference while removing +- Revert "Merge pull request #6652 from geonetwork/fix-subtemplate" +- Metadata full view - fix display of related metadata titles +- Fix display of user groups in users maintenance (#6875) +- Merge pull request #6652 from geonetwork/fix-subtemplate +- Merge pull request #6718 from geonetwork/od-orgforresource +- Merge branch 'main' into od-orgforresource +- Record view / Display alternate title if any. +- Fix language in the directive to display facet cards +- Automatic formatting +- Fix compilation error +- Don't use nested ternary operators +- Workflow / Avoid NPE on null current validation state +- Update INSPIRE Atom harvester log configuration to use log4j2 (#6827) +- Advanced search form: reset date filter fields (#6858) +- Schema plugins / iso19139 / Fix alt title indexing +- Fix Pages API in migrated databases - add migration configuration. Related to #6683 (#6811) +- Update metadata schemas xpath filters to avoid skipping the elements at the first level +- ISO19115-3 / Metadata editor / Support gex:EX_BoundingPolygon with multiple gex:polygon elements +- [gn]: ignore malformed geoshape +- CSW harvester - migrate to ElasticSearch the found duplicated resource feature (#6832) +- [FP] Add logout option for a logged-in user +- [gn]: avoid md main language to be indexed twice +- [gn]: need ascii folding for en +- Bump actions/setup-java from 3.8.0 to 3.10.0 +- Update GH Actions base image to Ubuntu 22.04 +- Update OnlineSrcDirective.js (#6833) +- [gn]: refactor, remove unused SearchParameter file +- [gn]: rely on jdom xml outputter to interpret jdom default namespace and attributes behaviour +- CSW Harvester / Add metadata - fix code to assign the metadata uuid, if changed in the xslt filter process +- Admin / Thesaurus / Fix navigation between keywords (#6829) +- CORS / Set headers before rewriting URL +- CORS Filter / Unset list of host when db settings is empty +- Transfer ownership / Fix JS error. (#6813) +- Proxy / Add a custom proxy for secured Elasticsearch instances / Fallback to web.xml config. (#6783) +- Harvester / WFS features / Debug, Instant NPE, cleanup. (#6786) +- Indexing / Build overview data also when commiting one document (#6758) +- Standard / ISO19115-3 / Indexing multiple quality reports (#6782) +- Batch editing / Add condition API parameter. (#6805) +- Standard / ISO19115-3 / Index main resource type first (#6807) +- Record view / Remove create child option (#6769) +- Indexing / Add option to configure ignore_above. (#6773) +- API / XSL process / Apply update fixed info on preview (#6780) +- Subtemplate / Indexing / Do not add () on title if no name and no mail. (#6787) +- Standard / ISO19139 / Indexing / Add ordering instruction (#6804) +- Conversion / Don't set extension in conversion id. (#6810) +- Map / Feature table / When identifying on a layer from a metadata with a linked feature catalog record, use case insensitive comparison between the feature catalog column definitions and the WMS FeatureInfo response. (#6801) +- Export / CSV / Add resource identifier. +- Fix spg_sections table column names (#6683) +- Permalink improvement (#6792) +- Standard / ISO19139 / Indexing distribution format encoded using Anchor +- Utils / XML / Improve detection. +- Harvester / Simple URL / Updates based on 0763d14761a370b418fe3160e023d376fc2ae070. +- Harvester / Simple URL / Add batch edit support. +- Harvester / Simple URL / Add sample configuration. Reset to main tab on harvester selection. +- Harvester / Simple URL / isXMLLike is super slow on large document. Add a quicker check for XML header. Reset properly harvester params. +- Harvester / URL / Add RDF DCAT harvester. +- Merge pull request #6785 from cmangeat/geocat_v4.2.3_running_itest_locally +- Add `href` to the `` element to make the link accessible by keyboard (#6793) +- Integration test / API / Associated / Fix test and error on Elasticsearch 7.15 index creation. +- it tests: give a try with ci +- [gn]: mock esSearchManager when harvester tests +- skip tests, iso19115-3.2018 +- fix test, extra formatter has been added +- need to be authenticated to ask for a delete +- fix tests +- wonder why signatures have changed, however pictures look good +- fix test: +- need this properties to be defined +- fix tests: +- [gn]: fix one integration test +- there is not thesaurus table to clean +- Sharing / Fix check all options. (#6791) +- Skip indexing empty topic categories values +- API / User feedback only allowed on record user can view (#6781) +- Metadata status change: don't execute mail notification logic if there are no users to notify +- JS & CSS / Cache / Add a profile to prebuilt the wro4j-cache (#6774) +- Admin / Indexing errors / Add copy uuids to clipboard. +- Editor / Bounding polygon / More consistent layout +- Search map - if the metadata results extent is bigger than the map view extent, zoom to the view extent +- Fix status workflow facet labels +- Thesarus manager: don't create non-multilingual title/description if multilingual elements are defined +- Map / PDF / Extent not always correct (#6775) +- Fix sonarcloud analysis +- Thesaurus manager / Add support for multilingual titles and descriptions +- XSLT / Conversions are dispatched in each schemas (#6772) +- Harvester / Simple URL / Improvements (#6677) +- simple URL harvester: set default encoding=utf8 and scope=dataset +- Proxy / Add a custom proxy for secured Elasticsearch instances. (#6765) +- Use dot as decimal separators when the system is not in English +- CSW / Test / Updates for multilingual search support +- Standard / ISO / Collection updater / Sort by merging key. +- Standard / ISO / Collection updater / Sort by merging key. +- Standard / ISO / Collection updater / Better grouping of various type of extent. +- AngularJs upgrade to version 1.8.2 (#6693) +- Merge pull request #6588 from geonetwork/422-multilingualcontact +- Update userapi so that it will allow administrators to pre-create/update user profile information when using service provider (#6712) +- Fix keyword badges filters with multilingual metadata +- create resource folder if missing during metadata loading. (#6750) +- changes for WMTS /extents.png and /geom.png (#6650) +- WRO4J / Do not chain filters on exception (#6726) +- CSW / Improve search on multilingual content. +- Aggregation / Add what value is set for aggLanguage depending on config. +- Standard / ISO19115-3 / Add some doc about specific use case in XSL templates. +- Formatter / Multilingual / Organisation name not translated. (#6700) +- Fix retrieve of metadata bbox to display in the search map when the metadata doesn't have a bounding box +- Editor / Configuration / Override label is optional. +- Standard / ISO19115-3 / Indexing / Index also link which can be in a distributor. +- Standard / ISO19115-3 / Formatter / Fix citation. +- fix: index contact organisation as keyword +- [FP] Update user - verify user groups when updating a user by a UserAdmin. Fixes #5537 (#6003) +- Improve temporary file management (#6686) +- Report file download - check if related file upload is available (#6722) +- Harvesting / Features / Check if index exist (#6492) +- Record view / Series member statistics improvement (#6743) +- Permalink / Set link URL as in sitemap. (#6738) +- Indexing / Multilingual records / Ensure default field contains a value (#6733) +- Index / Force linkProtocol to be an array (#6727) +- Map / Profile directive / remove goog calls (#6752) +- Module / web-ui / Cleaning (#6739) +- Aggregation / Improve display of number range in filter list. +- Aggregation / Improve display of number range in filter list. +- Cleaning / Remove unused function. +- Admin / Cleanup old stats not displayed anymore. +- Aggregation / Tab / Add decorator. +- Aggregation / Move format to a dedicated field as it was somehow misleading for most user. Only the 10 first were displayed with no option to see more as it was a nested facet. +- Aggregations improvement / Update label based on inverted or not status. +- Aggregations improvement / No need to compute aggs for home page latest. +- CSW / GetCapabilities created from service metadata record had incorrect Transaction endpoint (#6748) +- Add support to geopublish geopackage and zipped geopackage (#6490) +- Directory / Select preferredGroup or the first one +- Admin / Metadata identifier / Add link to doc. +- [FP] INSPIRE Atom fixes (#6723) +- Allow for null passwords when creating user via api. (#6711) +- Aggregation / Translate bucket value based on search field +- Home page / Add support for filter aggregation +- Record view / Display bounding polygon if set +- ISO19139 / ISO19115-3.2018 datacite export - support organisation name anchor for datacite:publisher +- Record view / PDF export based on browser capability (#6734) +- Make the record link button accessible by adding a `href` (#6719) +- esri harvester: fix resource contact +- Bump jsoup from 1.14.3 to 1.15.3 (#6528) +- simple harvester: add implicit formats for ODS resources +- url harvester: add org for resource if none +- Bump actions/setup-java from 3.5.1 to 3.8.0 +- Bump aws-java-sdk-s3 from 1.11.618 to 1.12.261 in /core +- Bump svnkit from 1.7.8 to 1.10.9 +- Bump commons-net from 3.0.1 to 3.9.0 +- Update IndexationTest.java +- Bump metrics.version from 2.1.1 to 2.2.0 +- Bump xbean-spring from 3.18 to 4.22 +- Bump springboot.version from 2.2.2.RELEASE to 2.7.0 +- Update version to 4.2.3-SNAPSHOT +- Merge remote-tracking branch 'origin/main' into 422-multilingualcontact +- Standard / ISO19115-3 / Fix update of multilingual documents (not in distribution). +- feat(entries): add a danger alert if the subtemplate removal fails +- feat(subtemplates): check for reference while removing +- refactor: remove unused SearchParameter file +- Indexing / ISO19115-3 / Also index multilingual document (not in distribution). +- Index / Fix creation. copy_to can't be used on object. +- Indexing / Fix overview multilingual description and display it when provided. +- Index / Add support for multilingual links +- Search / Multilingual aggregation support +- gn: allow multilingual facet search +- gn: catalogService: translate MD fields recursively \ No newline at end of file diff --git a/docs/changes4.2.4-0.txt b/docs/changes4.2.4-0.txt new file mode 100644 index 0000000000..cc24922349 --- /dev/null +++ b/docs/changes4.2.4-0.txt @@ -0,0 +1,151 @@ +================================================================================ +=== +=== GeoNetwork 4.2.4: List of changes +=== +================================================================================ +- Merge pull request #7059 from tkohr/xsl-fixes +- Add migration for static pages (#7005) +- Map / WPS / Fixes and improvements +- Translations / Updates from transifex. +- Admin / Link analysis / Use POST / Fix test +- Standard / Associated resources / Add check for duplicated references. +- Standard / ISO19115-3 / Add link fails if record has no language. +- Editor / Display attributes when an element only have attributes eg. metadataReference. +- Standard / ISO19115-3 / Remove parentIdentifier linking which is not used. Users use associated resources for this type of links. +- Maps library / Fix home page link to display the map. +- Record view / Break keywords with long values +- Fix display of user selections panel for logged users (#7001) +- disable link to parent button to use ng-disabled (#7045) +- gn - fix(ods): copy ods themes to topicCategory instead of keywords +- gn - fix(dkan): accept optional - separator and seconds +- gn - fix(dkan): make regExLoc for date conversion more permissive +- Admin / Link analysis / Use POST. (#7022) +- gn - fix(ods): fix mapping of ods metadata and ressource dates +- i18n / Fix loading of languages for ICE, KOR and CZE (#7055) +- Indexing / More robust on invalid thesaurus type (#7052) +- Indexing / More robust on vertical range. (#7054) +- Indexing / Add timeout when retrieving overview. (#6905) +- Editing / dateStamp = changeDate on update (#7012) +- Standard / ISO19115-3 / Add same mechanism as ISO19139 for parentIdentifier (#6976) +- Editor / Suggestions / Suggest to add a date depending on the status. (#6967) +- i18n / Add Danish language (#6933) +- Import metadata / If workflow is enable hide publish option (#7008) +- Sharing / Batch mode / Fix +/- icon on Firefox. +- Download xml in new tab (#6975) +- PDF / Report image URL in case of error (#7032) +- Library update / WRO4J / Remove unused extensions with CVE reported. +- Library update. +- Quick fix for missing comma in #7034 +- Automatic formatting +- Prevent breaking of topic titles in middle of title (#7036) +- Add pagination to the footer of the search page (#7035) +- Verify the portal requested exists - configure servlet names to exclude (#7034) +- CSW / Transactions are not in history. (#7016) +- Portal redirection / Search portal by uuid not by name. (#7030) +- Test / API / Page label null trigger error (#6989) +- Dependency / Rever camel update triggerring issue on Tomcat +- ISO19139 / Editor / Fieldset on processor +- CSW / Transaction / Consistently apply update-fixed-info (#7004) +- fix: upgrade com.google.code.findbugs:jsr305 from 2.0.1 to 2.0.3 +- Bump camel.version from 2.25.1 to 2.25.4 +- Update publish link so that it is disabled if the metadata has not been approved. (#7009) +- Pass created, modified, issued date from thesaurus to the schemas (#6972) +- Revert empty properties format +- fix: pom.xml to reduce vulnerabilities +- Harvester / Simple URL / Total harvested records when using pagination is incorrect +- Fix admin setting error with duplicate id="metadata/workflow/draftWhenInGroup" (#6980) +- Metadata publication mail - support additional fields: (#6906) +- Map viewer / make configurable to display the metadata bboxes using geodesic extents for local projections (#6982) +- Fix related to #6946, scope.config is not ready when the metadata editor is being loaded +- Metadata editor / normalize the values provided to AngularJs directives +- Editor / Thesaurus / Add option to display or not the SKOS browser. +- Editor / Tooltip / Add onhover mode. +- Editor / Improve default tab configuration. +- Test / Fixes (#6932) +- Admin / Page / Styling. +- UI configuration for static pages, to allow customise the order of the pages in the sections +- Add page label property to use for the links text instead of using the page identifier +- Respond with JSON +- Return 201 when creating pages +- Remove unreacheable if statement +- Remove code smells +- Add help text for page sections +- Additional formatting updates +- Use translations page statuses +- Updates: - Use format translations. - Don't show page link when creating a new page. - Fix layout of the HTML editor +- Admin / Page / Avoid :baddata] Data must be a valid JSON. +- Admin / Page manager / Add translations. +- API / Pages / Clear queue after upload. +- API / Pages / Fix warning on POST. +- API / Pages / Fix update content. +- API / Pages / Fix test. +- Page API improvement +- API / Pages / Set HTML content type if page is an upload HTML. +- API / Pages - Initial support to upload page files +- API / Pages - Update check file type check and when uploading a file, store the file name in the link field +- API / Pages - add message translations and fix delete request +- API / Pages - unify sections parameter name, support multiple sections per page and show in the list the page id and the language +- API / Pages - update gnStaticPagesListViewer directive to use the new API +- API / Pages - add a service to return the static pages and update UI to use the new API services +- API / Pages / Keep it simple and test. +- Prettier and AngularJS update. +- Static pages UI configuration +- ISO19139 / Editor / Fieldset on resource usage and userContactInfo +- Metadata file downloads report - fix check to retrieve user related information (#6971) +- Configure the users profile allowed to publish / un-publish metadata (#6956) +- ISO19139 / ISO19115-3.2008 / use also xlink:href element to identify related datasets (#6973) +- Map / Feature table improvement. (#6969) +- Filter to verify the portal requested exists, otherwise redirects to the default portal +- Map / Context / Style may or may not declare namespace. +- Standard / ISO19115-3 / Do not alter creation date and allow editing of metadata identifier descriptors (#6968) +- Standard / ISO19115-3 / Editor / Reference system from EPSG database +- Editor / Configuration / Add for each support. (#6907) +- Map / Layer / Styling tab for better legend readability. +- Map / Layer / Use caret icon instead of radio. +- Map / Layer / Improve layout and add server URL and layer name to easily copy value (eg. to add layer in GIS). +- Map / Layer / Better alignment. +- Map / WMS Time / Add slider control. +- Map / Group layer tools and avoid to have too many buttons in layer row. +- Map / WMS Time and elevation / Animation interval. +- Map / WMS Time and elevation. +- Prettier formatting +- Users management - disable save button if password check doesn't match the password (#6890) +- Search results / List / Associated resource group by title / Styling. +- Search results / List / Associated resource group by title. +- Release / Cleanup folder. +- Doc / Fix warning. +- Add online resources from WMS layers with the 'resourcename' mode: +- Implement a more extendable openid connect security +- Network / Intranet configuration / Add support for multiple ip ranges (#6894) +- Merge branch 'Informatievlaanderen-dv/pr/root-context' +- Make local jetty run plugin context path configurable / doc. +- Make local jetty run plugin context path configurable thought JVM options +- Remove duplicate and run Prettier +- Add a setting to make the map accessible. The setting is off by default. +- Fix issue with initial db creation not having language list when @PostConstruct was called. (#6870) +- Search / Use scripted field for more like this and isSuperseded directive. +- Use scripted field to retrieve associated resources first overview url. Sonarlint code improvements. +- Update EsFacet.js +- Search / Review _source to contains only necessary fields. Fixed some field names for category and topic. +- Search / Use scripted field to only load the first overview. +- Changed the messages about existing users or emails to be identical, to make it harder to enumerate through users +- Remove requirement for gmd:fileDescription so that thumbnail urls are transformed when migrating records. +- change the method for the password's minLength to be max, so if a bigger value than 6 is retrieved from "system.security.passwordEnforcement.minLength" this is taken into account (#6953) +- UI / Add a read more directive +- Avoid retrieve metadata associated records aggregations when the metadata have no associated records +- Doc / Editor configuration / Spelling improvements (#6944) +- Extend date range filter directive to configure the date field to use. +- Feature catalogue / Index producer +- Record view / don't call records history when not authorised +- Update validation report to include more information in the report. (#6900) +- Update CSW GetRecords samples. Fixes #6935 +- Bump httpclient from 4.5.9 to 4.5.14 (#6928) +- OutOfMemory exception on tomcat / Change logging bridge dependency. (#6904) +- Update Geotools to v28.2 (#6925) +- Create mvn-dep-tree.yml (#6923) +- Update CSW queryable mappings for contacts +- Build / git.properties file not created (#6915) +- Avoid index empty values of online resources protocols. If the ES field is used for facet filter, it displays the empty value +- Search / allow to configure additional fields to exclude from searches (#6911) +- Cmis performance enhancements (#6893) +- Update version to 4.2.4-SNAPSHOT \ No newline at end of file diff --git a/docs/changes4.2.5-0.txt b/docs/changes4.2.5-0.txt new file mode 100644 index 0000000000..5c0e1a2dd7 --- /dev/null +++ b/docs/changes4.2.5-0.txt @@ -0,0 +1,112 @@ +================================================================================ +=== +=== GeoNetwork 4.2.5: List of changes +=== +================================================================================ +- Thesaurus / Region / Use ISO format for date (#7208) +- Transifex updates. +- Static pages / Fix links to load html pages content (#7203) +- Sort custom translations by translation key to display them in the UI grouped by translation +- API / Import record / Overwrite mode improvement. (#7178) +- Additional code refactor related to pull request 7124 to avoid code duplication (#7200) +- Editor / Thesaurus widget initialization improvement. +- Thesaurus / Multilingual title / Set title according to record language. +- Merge pull request #7124 from AstunTechnology/jeevesnodeawarelogout-port-fix +- Bulk publish / Publish privileges should be assigned to the approved version, not to the working copy version. +- [FP] Metadata workflow - publish an approved record with a draft copy, publishes the draft copy. Fixes #5556 (#5557) +- Fix load of static pages html content +- Remote INSPIRE ATOM Feed / code cleanup and optimisations for ATOM describe service (#7189) +- Exclude ATOM opensearch URLs from the portal filter checker. Related to #6970 (#7196) +- Add a Dutch translation for the datepicker (#7193) +- Merge pull request #7181 from pi-geosolutions/external-viewer-add-wfs-to-map +- Pages / Top toolbar / Add support for submenu (#7138) +- XslUtil / Add a function to get current node id (srv or subportal id) +- [WFS / external viewer] Remove trailing semi-colon +- [WFS / External viewer] Support localized title but fallback on link name +- Change line-height for username so that it is not truncated. (#7185) +- Update core/src/main/java/jeeves/config/springutil/JeevesNodeAwareLogoutSuccessHandler.java +- Update core/src/main/java/org/fao/geonet/kernel/datamanager/base/BaseMetadataManager.java +- Update core/src/main/java/org/fao/geonet/kernel/setting/SettingInfo.java +- Created new instances of SettingInfo.getSitePort in JeevesNodeAwareLogoutSuccessHandler and BaseMetadataManager to get around compilation error about not referring to a non-static method from a static context +- External map viewer / Fix add WFS to map empty variable +- Site information - return ES index information +- Updated Java 8 download link (#7177) +- Standard / Translations / Load contact role codelist from the schema (#7153) +- Configuration / Externalize Kibana configuration (#7098) +- Test / Fix for default language. (#7175) +- Record view / Keyword popup / Improve label. (#7152) +- Fixed broken link for Maven Reference +- CSW / DCAT output / Fix for multilingual records (#7161) +- Record view / Citation / Improve layout +- Remove Language table isdefault column and use DefaultLanguage bean instead +- Fixing SONAR warnings about SQL Injections. (#7146) +- Search / Full text / Add individual name and email. (#7167) +- Standard / ISO19115-3 / Preserve revision date type. (#7168) +- Standard / ISO19115-3 / Editor / Do not add default lang id (#7174) +- Standard / ISO19115-3 / Better label for metadata language. (#7173) +- Standard / ISO19115-3 / From 19139 conversion / Fix MD_VectorSpatialRepresentation namespace (#7172) +- Editor / Template field label fix (#7171) +- Standard / ISO19115-3 / Editor / Expand abstract for multilingual records (#7170) +- Move tooltip from reccusive input field to a single label (#7039) +- Minor formatting changes. (#7164) +- Do not make Danish language a default language. +- Support code elements with anchors in ATOM predefined feeds +- Support customising the metadata publication options (#7148) +- Update TESTING.md to include a hint to the it maven profile (#7149) +- missed file in pull/6494 (#7150) +- Map / Background layer / Fix active layer on load. (#7126) +- Map / Layer manager / Add support for multilingual layer title. (#7121) +- UI / Language picker / Display all entries on focus. Search by code and labels (#7076) +- Standard / ISO19115-3 / Formatter / JSONLD / Avoid error on multilingual URL +- Fixed typos in es README (#7151) +- FeatureInfo - lower case columns names - related to #6801 +- Fixed another broken link for Installing from source code (#7141) +- Send metadata mail notifications for public metadata when is re-approved (#7074) +- Update transifex translations +- Update metadata status values translations +- Workflow / Facets / Generic translations (#7135) +- Remove sort by translations, duplicated in en-core.json file +- Related resources - fix the check to display association information +- Indexing / Update objects definition to index a sort field that is case insensitive and ignore accents +- ISO19139 / Metadata editor / Fix display of contact individual name label in German (#7122) +- Workflow / Remove magic numbers in label and avoid issue when using custom status (#7104) +- Fixed broken link for Installing from source code +- Add Spring Security mappings for local INSPIRE ATOM feed services +- Allow multiple request matchers to decide if require CSRF (#7123) +- Changed logic to check actual value of port setting +- Using correct setting for default port, and better handling of null values +- Include the parent exception in the MetadataProcessingReport error so that we can see the real error in the logs. (#7119) +- Fix check of harvester log file path +- ISO19139 / Fix indexing of CRS codespace when contains a multilingual value +- Added some logic into JeevesNodeAwareLogoutSuccessHandler to deal with the case where no port is set in the settings manager +- Fix selection / filter Only my records (#7111) +- Return contact information in the search results, used in the results templates +- Index configuration / define dynamic template for conformTo_* fields pattern +- Update sortby-combo directive to use the field name and the sort order information. +- Metadata editor / include the metadata file store in the default configuration of the online resources. Fixes #7103 +- Copying the resources/config folder to the data dir +- Workflow / On Cancel / Properly remove draft from index (#7101) +- Remove code smells +- Fix javascript error when creating / editing online resources +- Fix microservices proxy detection +- Metadata workflow / send mail notifications for metadata status change to DRAFT when doing a rejection, not when creating a working copy +- Workflow improvements (#7011) +- DB / Only update schema on startup (#7100) +- Display footer rss endpoint(s) when OGC API Records service is enabled (#7094) +- SEO / Set HTML head title and description +- Build / Fix missing font awesome files in WAR +- Map / Define location of search map. (#7071) +- fixed links to debugging tomcat in eclipse and remote debugging (#7075) +- Add criteria-type.xml for iso19115-3.2018 +- Fix for broken icons in the editor, admin pages, file uploader and multiselect (#7093) +- Config / Add property file overlay. (#6954) +- Test / Fixes (#7091) +- Workflow / Fix typo in setting key. (#7070) +- UI / Dependency / CatController depends on facets also on signin. (#7084) +- i18n / NL / INSPIRE Themes / Fix language code +- Home page / Aggregations / Fix label for facet based on multilingual thesaurus. +- Standard / ISO19139 / Schematron / NL translation (#7063) +- DOI / Add European Union Publication Office format for DOI. (#6979) +- Update to Font Awesome 6.x (6.4) (#7007) +- Fix multiple default tab in a single view +- Update version to 4.2.5-SNAPSHOT \ No newline at end of file diff --git a/docs/changes4.2.6-0.txt b/docs/changes4.2.6-0.txt new file mode 100644 index 0000000000..cd18593910 --- /dev/null +++ b/docs/changes4.2.6-0.txt @@ -0,0 +1,107 @@ +================================================================================ +=== +=== GeoNetwork 4.2.6: List of changes +=== +================================================================================ +- Doc / Changelog / 4.2.6. (#7393) +- [BP] Changed GENERATEUUID to NOTHING based on discussion on issue #7274 +- Documentation 4.2: Update link to the 4.2 manual and release scripts (#7380) +- [BP] Fixed typos for SOURCE.md (#7384) +- [BP] Update MkDocs configuration to publish to gh-pages branch (#7375) +- [BP] Workflow / Related records of the draft (#7377) +- [BP] User Manual refresh using Markdown and MkDocs (#7329) +- [BP] batch edit user profile check in APIs (#7243) +- [BP] Record view / Support multiple status. +- [BP] Groups maintenance / fix the display of the metadata owned by a group (#7371) +- [BP] Map viewer / Option to configure WMS tiling (#7312) +- [BP] Fix working copy display so that links go to working copy (#7248) +- [BP] Send metadata mail notifications for public metadata when is re-approved - fill missing information for submitter, reviewer and publisher user (#7292) +- [BP] Map viewer / context map / only WMS layers have dimensions information +- [BP] Standard / ISO19110 improvements +- [BP] fix for untranslated userRecord and userRecords labels in user admin page (#7354) +- [BP] Add support for emails with subdomains (#7314) +- [BP] Improved handling of empty titles (#7362) +- [BP] Indexing / Bounding Polygon / Coordinate order (#7364) +- [BP] Indexing / Bounding Polygon / Reproject if needed #7340 +- [BP] Editor / Online source / Fix button icon +- [BP] Fix CORSInterceptor, usage of a variable before is defined. Related to #5941 (#7361) +- [BP] Display the login menu for authenticated users when the setting 'gnCfg.mods.authentication.enabled' is disabled +- [BP] Map / WMS dimension saved in map (#7339) +- [BP] Add icons for related types (association and initiative) (#7264) +- [BP] WFS layer improvements (#7317) +- [BP] Create metadata category - check doesn't exist a category with the same name (#7296) +- Fix HTML/Javascript prettier formatting / 4.2.x branch (#7356) +- [BP] Portal / RSS feeds point to current portal (#7343) +- [BP] Prevent invalid date written into xml (#7321) +- [BP] Fix write after response commit on proxy response (#7353) +- [BP] Map / Localisation / Empty results if no query (#7338) +- [BP] Indexing / Do not create empty object if no text (#7349) +- [BP] Indexing / Do not create empty object if no text (#7294) +- [BP] Batch Editing access level in general system settings (#7238) +- [BP] User feedback API fixes: - Update mail message, related to #6792. - Don't fail the user feedback creation if the mail server is not configured +- [BP] Remove configuration for the UI setting 'isMenubarAccessible', removed in #7138 +- [BP] Batch editing / Update xpath spec link +- [BP] Fix robots.txt and sitemap 500 errors if no right content type is provided (#7327) +- [BP] INSPIRE ATOM - retrieve the metadata ATOM feed using only the resource identifier (#7305) +- fix(ods): add CI_OnlineResource linkages for ods v1 +- [BP] Hide thumbnail image in metadata page when the image can't be loaded due to an error. (#7319) +- feat(ods): use ods explore api for CI_OnlineResource linkages +- [BP] Bump actions/checkout from 3 to 4 (#7318) +- [BP] Updated embedded documentation on naming convention for postprocessing files for sub-portals (#7310) +- [BP] Fix permalink option in the application footer +- [BP] Fix the check to display the Transfer ownership option in the metadata detail page +- [BP] Minor cleanup (#7301) +- [BP] Fix metadata editor tooltips close button when using the icon mode +- [BP] Notifications / Errors / Fix message on group creation (#7295) +- [BP] Metadata editor / recommended values for fields show an empty value. (#7232) +- [BP] Standard / ISO / Mimefiletype encoding. +- [BP] WMS tile images - if HEAD request fails, default to OL image src set +- [BP] Search / Aggregation on organisation in Dutch (#7290) +- [BP] Do not break link in the middle of a word. +- [BP] Set html emails as utf-8 +- [BP] ISO19139 / ISO19115-3.2018 / Don't index resource identifiers with empty code +- [BP] Update GeonetHttpRequestFactory to use system proxy defined in JAVA_OPTS +- [BP] Update AbstractHttpRequest to use system proxy defined in JAVA_OPTS +- [BP] fix ui issue (#7256) +- [BP] Use resource files for messages (#7281) +- [BP] API / Attachements / Stream files to servlet response (#7287) +- [BP] Metadata index set of records - index the approved and working copies when the workflow is enabled (#7269) +- [BP] Bump actions/setup-java from 3.10.0 to 3.12.0 (#7239) +- [BP] Metadata editor / display metadata uuid for remote resources if the metadata title is not available +- [BP] Handle empty allGroupOpsAfter instead of throwing error. If we cannot find publishedAfter then default to publishedBefore so that no emails are sent. +- [BP] Full view on working copy fails. Fixes #7270 +- [BP] WMS time dimension - basic support for time intervals (#7280) +- [BP] Fix error that would occur when there were duplicate languages. (#7275) +- [BP] Fix deletion sequence in editor: wait for DOM update before saving +- [BP] Standard / ISO19115-3 / Processing / Metadata contact lost. (#7278) +- [BP] Add XmlTransient annotation to ISODate.getDateAndTimeUtc +- [BP] Fix directive to display the most popular records, to display the most popular first +- [BP] Fix DOI logging +- [BP] Use http proxy in DOI client +- [BP] Fix record history parameter name. Related to #7074 (#7249) +- [BP] Fix German typo of the label for 'otherRestrictions' (#7245) +- [BP] Fix wmsQueue clear method logic +- Update Github actions for 4.2.x branch (#7225) +- [BP] Escape {{ to avoid error parsing argument. (#7237) +- [BP] Update skin.xsl so that it works better in nojs mode. (#7015) +- [BP]When authenticating user, only update the usergroups in the database if they have changed (#7165) +- [BP] Map viewer / 'Default map' javascript error. Fixes #7228 +- [BP] Add support for OL Attributions (#7062) +- Update status emails to contain link to metadata which does not contain anchor. (#7130) +- [BP] Use Apache Commons StringUtils to join keywords in atom service description +- Record view / Contact / Move website to popup (#7220) +- ISO19139 - Improve metadata full view for contacts when fields information is missing (#7214) +- Prettier formatting updates (#7222) +- Record view / Decorate map with geographic identifier or description. (#7221) +- Standard / ISO19139 / Indexing / Temporal range in GML 3.2.0 (#7218) +- ArcSDE harvester / If the metadata stored in ArcSDE is matched against a known metadata schema, harvest the record as it is. +- Increase the limit to retrieve the related metadata in the search results +- Standard / ISO19115-3 / Do not declare main language in other languages (#7188) +- changed english display text for batch editor xpath gn_add and gn_update modes +- Standard / ISO19115-3 / Formatter / Layout improvements (#7187) +- avoid race condition, resize map once target size ok (#6931) +- camel tests, avoid side effects (#6836) +- [gn] Support negative dates for temporal extents (#6843) +- Metadata workflow / Don't increase popularity when viewing a metadata working copy +- Map / WFS Features / Improvements (#7000) +- Standard / ISO19110 / Add cardinality. (#7182) diff --git a/docs/changes4.2.7-0.txt b/docs/changes4.2.7-0.txt new file mode 100644 index 0000000000..2dc3e58b37 --- /dev/null +++ b/docs/changes4.2.7-0.txt @@ -0,0 +1,44 @@ +================================================================================ +=== +=== GeoNetwork 4.2.7: List of changes +=== +================================================================================ +- [BP] i18n / Transifex update. (#7505) +- [BP] Security / Jolokia update. (#7501) +- [BP] Don't override proxy configuration when saving the settings, if the http proxy is configured in Java system properties (#7325) +- [BP] Check http links in documentation (#7496) +- [BP] Add more db information to the site information page. (#7403) +- [BP] Update manual links to use https://docs.geonetwork-opensource.org/ (#7487) +- [BP] Change the structure of the MkDocs assets. Stylesheets and logos are moved to the `overrides` directory (#7429) +- [BP] Fix url link in full view. bracket ") " could be included in link (#7483) +- [BP] Batch edit access level for editor role (#7464) +- [BP] Fixed broken links and formatting in BUILDING.md (#7471) +- [BP] Editor / Remove extra space on mandatory add action (#7438) +- [BP] change label to "Access to the catalogue" (#7467) +- [BP] Remove exception class name from the error message (#6977) +- [BP] List styling for related records (#7442) +- [BP] Fix cookies path when deployed on root "/" context (#7446) +- [BP] Standard / Feature catalogues / Do not index empty codelist value (#7440) +- Update the links to documentation in the sofware development pages (4.2.x) (#7409) +- [BP] Fixed typos, formatting and numbering (#7430) +- [BP]Fix issue with canViewRecord when calling related api (#7373) +- [BP] Transifex updates (#7432) +- [BP] Fix exception handling from schematron validation so that it flags the metadata as invalid if there is an exception (#6978) +- [BP] Rename ElasticSearch to Elasticsearch (#7404) +- [BP] Sort the portals by label, not by name (identifier) (#7424) +- [BP] Metadata editor / ISO19115-3.2008 / Filter out metadata templates in the online resources dialog +- [BP] Fix system info when ES throw errors (#7413) +- [BP] Remove old password field for admins (#7417) +- [backport 4.2.x] Add documentation to GitHub workflows (#7415) +- [BP] Change the url the icon in the homepage is linking to (#7422) +- [BP] Fixed typos and updated SearchManager to EsSearchManager in core readme (#7418) +- [BP] Update the CONTRIBUTING guide to detail the steps, before merging the pull requests (#7419) +- [BP] Transifex updates +- [BP] Record view / fix double approved parameter in the metadata working copy page, for the buttons in the online resources panel. Related to #7248 (#7402) +- [BP] Doc / Fix list (#7401) +- [BP] Fixed typos in code_quality readme (#7407) +- Remove changelog for latest +- Use default mike settings to fix interaction between language chooser and versions +- Correct canical_version to stable +- Add 3.12.11 changelog and fix the display of the changelogs in the navigation bar (#7397) +- Doc / 4.4.0 / Add note about datastore changes (#7398) diff --git a/docs/manual/README.md b/docs/manual/README.md new file mode 100644 index 0000000000..67b9ce2ffc --- /dev/null +++ b/docs/manual/README.md @@ -0,0 +1,146 @@ +# Geonetwork Manual and Help + +Documentation for GeoNetwork opensource is available via https://geonetwork-opensource.org. + +This documentation is written under the creative commons license [Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)](LICENSE.md). + +Reference: + +* [Documentation Writing Guide](docs/devel/docs/docs.md) + +## Communication + +The [project issue tracker](https://github.com/geonetwork/core-geonetwork/issues) is used for communication, with ongoing topics tagged [documentation](https://github.com/geonetwork/core-geonetwork/issues?q=is%3Aissue+label%3Adocumenation). + +## Material for MkDocs + +Documentation is [mkdocs-material](https://squidfunk.github.io/mkdocs-material/) which is a Markdown documentation framework written on top of [MkDocs](https://www.mkdocs.org/). + +If you are using python3: + +1. Install using ``pip3`` and build: + + ```bash + pip3 install -r requirements.txt + ``` + +2. Use ***mkdocs** to preview locally: + + ```bash + mkdocs serve + ``` + +3. Preview: http://localhost:8000 + + Preview uses a single version, so expect some warnings from version chooser: + ``` + "GET /versions.json HTTP/1.1" code 404 + ``` + +4. Optional: Preview online help: + + ```bash + mkdocs serve --config-file help.yml + ``` + +### VirtualEnv + +If you use a python virtual environment: + +1. Activate virtual environment: + + ```bash + virtualenv venv + source venv/bin/activate + pip install -r requirements.txt + ``` + +2. Use ***mkdocs*** to preview from virtual environment: + + ```bash + mkdocs serve + ``` + +3. Preview: http://localhost:8000 + +### Docker + +If you are not familiar with python the mkdocs-material website has instructions for docker: + +1. Run mkdocs in Docker environment: + + ``` + docker pull squidfunk/mkdocs-material + docker run --rm -it -p 8000:8000 -v ${PWD}:/docs squidfunk/mkdocs-material + ``` + +2. Preview: http://localhost:8000 + +## Maven Integration + +1. Build documentation with ``compile`` phase: + ``` + mvn compile + ``` + +2. Assemble ``zip`` with ``package`` phase: + ```bash + mvn package + ``` + +3. Both ``install`` and ``deploy`` are skipped (so ``mvn clean install`` is fine). + +4. Use default profile to only build the default english docs: + + ``` + mvn install -Pdefault + ``` + +## Deploy + +We use ``mike`` for publishing to https://geonetwork.github.io using `.` version: + +1. To deploy docs from the `main` branch to website `gh-pages` branch: + + ```bash + mike deploy --push --no-redirect --update-aliases 4.4 latest + ``` + +2. To deploy documentation for a new release: + + ```bash + mike deploy --push --no-redirect --update-aliases 4.2 stable + ``` + +3. When starting a new branch you can make it the default: + + ```bash + mike set-default --push 4.2 + ``` + + Hint: When starting a new branch update `overview/changelog/` navigation tree also. + +4. To publish documentation for a maintenance release: + + ```bash + mike deploy --push --no-redirect --update-aliases 3.12 maintenance + ``` + +5. To show published versions: + + ```bash + + mike list + ``` + +6. To preview things locally (uses your local ``gh-pages`` branch): + + ```bash + mike serve + ``` + +Reference: + +* https://squidfunk.github.io/mkdocs-material/setup/setting-up-versioning/ +* https://github.com/squidfunk/mkdocs-material-example-versioning +* https://github.com/jimporter/mike diff --git a/docs/manual/docs/_static/GN3.png b/docs/manual/docs/_static/GN3.png new file mode 100644 index 0000000000..caee39b62d Binary files /dev/null and b/docs/manual/docs/_static/GN3.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/css-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/css-configuration.md new file mode 100644 index 0000000000..d1c2c10f5e --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/css-configuration.md @@ -0,0 +1,13 @@ +# Configuring CSS & Style {#css-configuration} + +To get to the CSS & Style configuration, you must be logged on as administrator. Open 'Settings' from the Administration page and select ``CCS & Style`` configuration. + +![](img/css-screen.png) + +This page allows you to change various colors of page elements. Note that 'background' refers to the background color of elements, and 'color' to the font color used in the element. The above configuration will result in the visualization below: + +![](img/css-result.png) + +There is also an option to link to a background image. When linking to an image, make sure to use (the full web address to) an image from a https source if you're running GeoNetwork in https. Placing the image (upload as logo) on the same server is the best option to prevent potential browser blocks. + +Note that you can save a configuration locally for reuse later or on alternative servers. Saving a configuration will take a long time, because all scripts and styles will be rebuilt from sources. Temporary files are stored on the server in an application folder, you may need to revisit this page after an upgrade the system (or redeploy of a docker container). diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/csw-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/csw-configuration.md new file mode 100644 index 0000000000..902c451848 --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/csw-configuration.md @@ -0,0 +1,108 @@ +# Configuring CSW {#csw-configuration} + +To get to the CSW server configuration, you must be logged on as administrator first. Open 'Settings' from the Administration page and select CSW Server configuration. + +![](img/csw.png) + +The CSW service provides a description of itself, the human who administers it, and other information through a `es` request (eg. ). This form allows you to configure the CSW server and fill out some of the properties returned in response to a GetCapabilities request. + +Configuration options: + +- *CSW Enabled*: By default CSW endpoint is enabled, but it can be disabled. + + ![](img/csw-off.png) + + The Open Geospatial Catalogue Service for the Web (OGC-CSW) service, is a self-describing service that allows query, update and insertion of metadata records. + +- *Record to use for GetCapabilities*: The capabilities document is created using the record selected here. + +- *Inserted metadata is public*: By default, metadata inserted with the CSW Harvest and CSW Transaction operations is not publicly viewable. A user with the appropriate access rights could do this after the CSW Harvest and CSW Transaction operations, but this is not always convenient. If this option is checked all metadata inserted using the CSW Harvest and CSW Transaction operations will be publicly viewable. + +- *Create element if it does not exist when using XPath in CSW transaction.*: If not checked, only existing elements can be updated. + +## Service Metadata Record {#csw-configuration_service_record} + +In order to create a custom capabilities, it is recommended to create a dedicated service metadata record (using ISO19115-3 or ISO19139 standards). This record is used to build the capabilities document using the template `web/src/main/webapp/xml/csw/capabilities.xml`. + +When creating such record, the following information will be used to create the capabilities: + +- title +- abstract +- keywords +- fees (from Distribution --> ordering instructions field) +- Access constraints (from Access constraints --> Other constraints field) +- Contact (from Identification --> First point of contact) + +The service record MUST be public. + +If an error occurred while building the capabilities document from the service record, a WARNING is reported using a comment and the default capabilities is used: + +![](img/csw-error.png) + +## CSW Configuration for INSPIRE {#csw-configuration_inspire} + +If your catalogue also focus on INSPIRE (see [Configuring for the INSPIRE Directive](inspire-configuration.md)), it may be relevant to also populate the following to properly configure your discovery service: + +- metadata language (+ additional languages if any) (use for SupportedLanguages, DefaultLanguage) +- INSPIRE themes +- temporal coverage +- metadata contact +- metadata conformity regarding Commission regulation 1089/2010 + +With this information the CSW can be validated using the INSPIRE validator. + +## CSW post processing + +In some situation, user may want to modify XML encoding of records when retrieved using CSW. For example: + +- to make record more consistent +- to adapt encoding in order to validate records with INSPIRE rules (eg. as a workaround for workaround for ) + +For this, user can add extra conversion step during output of GetRecords and GetRecordById operation: + +- Adding post process to srv/eng/csw by creating for each output schema a file eg. for gmd, present/csw/gmd-csw-postprocessing.xsl +- Adding post process to a portal inspire/eng/csw by creating for each output schema a file eg. for gmd, present/csw/gmd-inspire-postprocessing.xsl + +For a portal INSPIRE, create an "inspire" portal in the admin --> settings --> sources. User can then setup a post processing phase for the INSPIRE CSW of the portal. Create a post processing file gmd-inspire-postprocessing.xsl in yourschema/present/csw folder. The following example, remove contact with no email and link not starting with HTTP to conform to INSPIRE validator rules. + +``` xml + + + + + + + + + + + + + + + + + + + + +``` + +The service can be tested with: + +``` shell +curl 'http://localhost:8080/geonetwork/inspire/eng/csw' \ + -H 'Content-type: application/xml' \ + --data-binary $'full3de9790e-529f-431f-ac4f-e86d827bde8e\n' +``` diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/css-result.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/css-result.png new file mode 100644 index 0000000000..2f077a63be Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/css-result.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/css-screen.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/css-screen.png new file mode 100644 index 0000000000..678fe7513d Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/css-screen.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw-error.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw-error.png new file mode 100644 index 0000000000..96fdbb238a Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw-error.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw-off.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw-off.png new file mode 100644 index 0000000000..bae5454dd3 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw-off.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw.png new file mode 100644 index 0000000000..9314c97407 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/csw.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/geopublication-add-mapserver.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/geopublication-add-mapserver.png new file mode 100644 index 0000000000..a38da19aea Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/geopublication-add-mapserver.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-configuration.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-configuration.png new file mode 100644 index 0000000000..4b32f20ede Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-configuration.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-etf-test-configuration.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-etf-test-configuration.png new file mode 100644 index 0000000000..995b380c54 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-etf-test-configuration.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-from-registry-config.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-from-registry-config.png new file mode 100644 index 0000000000..6ffa5161b7 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-from-registry-config.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-from-registry.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-from-registry.png new file mode 100644 index 0000000000..2ffce1bdc7 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-from-registry.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-keyword-editing.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-keyword-editing.png new file mode 100644 index 0000000000..c2dd7b92a0 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-keyword-editing.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-keyword-encoding-type.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-keyword-encoding-type.png new file mode 100644 index 0000000000..87d0e963d0 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-keyword-encoding-type.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-portal.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-portal.png new file mode 100644 index 0000000000..a3cfae9d34 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-portal.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-validation-menu.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-validation-menu.png new file mode 100644 index 0000000000..3b75f591d6 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-validation-menu.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-validation-report.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-validation-report.png new file mode 100644 index 0000000000..5488a2eb4a Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/inspire-validation-report.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/log-view.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/log-view.png new file mode 100644 index 0000000000..45ef299820 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/log-view.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/logos.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/logos.png new file mode 100644 index 0000000000..012c6d16ce Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/logos.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-delete.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-delete.png new file mode 100644 index 0000000000..ae2be2dd2a Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-delete.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-import.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-import.png new file mode 100644 index 0000000000..00d88f52b9 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-import.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-publication.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-publication.png new file mode 100644 index 0000000000..f057dec198 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/metadata-publication.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-access.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-access.png new file mode 100644 index 0000000000..47c8781dc0 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-access.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-geocatch.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-geocatch.png new file mode 100644 index 0000000000..5c18e4b4a6 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-geocatch.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-header.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-header.png new file mode 100644 index 0000000000..0b3d5c0c8d Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-header.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-list.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-list.png new file mode 100644 index 0000000000..82def6b62d Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-list.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-oca-newrecord.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-oca-newrecord.png new file mode 100644 index 0000000000..22a5ea8516 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-oca-newrecord.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-oca-privileges.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-oca-privileges.png new file mode 100644 index 0000000000..3df2e9b26d Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-oca-privileges.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-subportal.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-subportal.png new file mode 100644 index 0000000000..1fdbebb7e8 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-subportal.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-types.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-types.png new file mode 100644 index 0000000000..bbd7f36d3d Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/portal-types.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/settings.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/settings.png new file mode 100644 index 0000000000..58f98a690f Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/settings.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/standards.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/standards.png new file mode 100644 index 0000000000..ed742be8ab Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/standards.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-filter.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-filter.png new file mode 100644 index 0000000000..d7b8699f15 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-filter.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-footer.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-footer.png new file mode 100644 index 0000000000..16fb041e95 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-footer.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-gazzetteer.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-gazzetteer.png new file mode 100644 index 0000000000..1af0231564 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-gazzetteer.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-homepage.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-homepage.png new file mode 100644 index 0000000000..661ea58f12 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-homepage.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-humanizedate.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-humanizedate.png new file mode 100644 index 0000000000..99078c8e83 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-humanizedate.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-indent.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-indent.png new file mode 100644 index 0000000000..cba6512f19 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-indent.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-json.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-json.png new file mode 100644 index 0000000000..8de039334a Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-json.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mappage.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mappage.png new file mode 100644 index 0000000000..626ce0fad8 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mappage.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mappage2.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mappage2.png new file mode 100644 index 0000000000..e63e4ad3e4 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mappage2.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection.png new file mode 100644 index 0000000000..5b878fe2bf Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection2.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection2.png new file mode 100644 index 0000000000..b779dcbca9 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection2.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection3.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection3.png new file mode 100644 index 0000000000..300cffd40e Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojection3.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojectionslist.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojectionslist.png new file mode 100644 index 0000000000..3a07919120 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapprojectionslist.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapviewer.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapviewer.png new file mode 100644 index 0000000000..8c2a64f000 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapviewer.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapviewerlayers.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapviewerlayers.png new file mode 100644 index 0000000000..eea99e9838 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-mapviewerlayers.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-optionaltools.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-optionaltools.png new file mode 100644 index 0000000000..114e520593 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-optionaltools.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage.png new file mode 100644 index 0000000000..06bc3bff31 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage2.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage2.png new file mode 100644 index 0000000000..4fb9e53d57 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage2.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage3.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage3.png new file mode 100644 index 0000000000..55b0cf2d50 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage3.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage4.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage4.png new file mode 100644 index 0000000000..71b7f3a8b9 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchpage4.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults.png new file mode 100644 index 0000000000..39613d720c Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults2.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults2.png new file mode 100644 index 0000000000..08b01fecdc Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults2.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults3.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults3.png new file mode 100644 index 0000000000..668f6679ce Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-searchresults3.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-toptoolbar.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-toptoolbar.png new file mode 100644 index 0000000000..2db6994d94 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-toptoolbar.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-toptoolbarlogo.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-toptoolbarlogo.png new file mode 100644 index 0000000000..b5e2704fd5 Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings-toptoolbarlogo.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings.png new file mode 100644 index 0000000000..4a5732100b Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/ui-settings.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/img/xlink-cache-clear.png b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/xlink-cache-clear.png new file mode 100644 index 0000000000..5966279b4b Binary files /dev/null and b/docs/manual/docs/administrator-guide/configuring-the-catalog/img/xlink-cache-clear.png differ diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/index.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/index.md new file mode 100644 index 0000000000..0e84f5ea03 --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/index.md @@ -0,0 +1,9 @@ +# Configuring the catalog + +- [System configuration](system-configuration.md) +- [User Interface Configuration](user-interface-configuration.md) +- [Configuring CSS & Style](css-configuration.md) +- [Configuring CSW](csw-configuration.md) +- [Portal configuration](portal-configuration.md) +- [Configuring for the INSPIRE Directive](inspire-configuration.md) +- [Map servers configuration for geopublication](map-server-configuration.md) diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/inspire-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/inspire-configuration.md new file mode 100644 index 0000000000..0dea7a3ce9 --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/inspire-configuration.md @@ -0,0 +1,166 @@ +# Configuring for the INSPIRE Directive {#inspire-configuration} + +## Enabling INSPIRE + +From the **Admin console --> Settings** user can configure INSPIRE directive support. + +When enabled, the INSPIRE support activate the following: + +- Enable indexing of INSPIRE themes and annexes (INSPIRE themes thesaurus MUST be added to the list of thesaurus from the INSPIRE Registry - see [Managing thesaurus](../managing-classification-systems/managing-thesaurus.md)). + + ![image](img/inspire-configuration.png) + +To configure the discovery service, a dedicated service metadata record MUST be created in order to provide a complete GetCapabilities document ([CSW Configuration for INSPIRE](csw-configuration.md#csw-configuration_inspire)). + +## Loading INSPIRE codelists + +To describe INSPIRE datasets and series, it is recommended to load relevant codelists from the [INSPIRE Registry](https://inspire.ec.europa.eu/registry/), the following codelists are relevant in the scope of metadata guidelines v2.0: + +- [INSPIRE Theme](https://inspire.ec.europa.eu/theme) +- [Application schema](https://inspire.ec.europa.eu/applicationschema) +- [Media types](https://inspire.ec.europa.eu/media-types) +- Metadata codelist register --> [Protocols](https://inspire.ec.europa.eu/metadata-codelist/ProtocolValue) +- Metadata codelist register --> [Spatial scope](https://inspire.ec.europa.eu/metadata-codelist/SpatialScope) +- Metadata codelist register --> [INSPIRE priority data set](https://inspire.ec.europa.eu/metadata-codelist/PriorityDataset) +- Metadata codelist register --> [Spatial Data Service Category](https://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory) +- Metadata codelist register --> [Conditions applying to Access and Use](https://inspire.ec.europa.eu/metadata-codelist/ConditionsApplyingToAccessAndUse) +- Metadata codelist register --> [Limitations on Public Access](https://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess) +- Metadata codelist register --> [OnLine Description Code](https://inspire.ec.europa.eu/metadata-codelist/OnLineDescriptionCode) +- Metadata codelist register --> [Quality of Service Criteria](https://inspire.ec.europa.eu/metadata-codelist/QualityOfServiceCriteria) + +From `Admin console` --> `Classification systems` --> `Thesaurus`, administrators can manage thesauri. One of the options is to load a thesaurus straight from the registry. + +![image](img/inspire-from-registry.png) + +Click `Use INSPIRE registry` to use the default INSPIRE registry but any instance of the [Registry software](https://joinup.ec.europa.eu/solution/re3gistry) can be used. + +![image](img/inspire-from-registry-config.png) + +Select one or more languages depending on your needs. Choose a category or directly a thesaurus, depending on the thesaurus. By default the type of thesaurus will be `Theme` but you can adapt it if needed. + +By clicking the `Upload` button the catalogue will contact the registry, download the files for each languages and combined them in a thesaurus in SKOS format supported by the catalogue. + +User can also use the well known [GEMET thesaurus](https://www.eionet.europa.eu/gemet/en/themes/). Some SKOS format version of the thesaurus are available [here](https://github.com/geonetwork/util-gemet/tree/master/thesauri). + +Once loaded, a thesaurus can be used in metadata records to select keywords from: + +![image](img/inspire-keyword-editing.png) + +The type of encoding of keywords can be defined using the gear icon (See validation section for more information): + +![image](img/inspire-keyword-encoding-type.png) + +Via the schema plugin form configuration it is an option to configure a thesaurus to be used for a specific `or` element. The thesaures concepts are used to populate an auto complete text field for that element. + +## INSPIRE validation + +INSPIRE validation of metadata records is available at [the INSPIRE Validator](https://inspire.ec.europa.eu/validator/about/). It is using [ETF which is an open source testing framework for spatial data and services](https://github.com/etf-validator/etf-webapp). GeoNetwork is able to `te` any record using a service provided by an instance of ETF. To configure remote validation, go to `Admin console` --> `Settings` and set the URL of the validator. The url of the main INSPIRE validator is `https://inspire.ec.europa.eu/validator/`. + +![image](img/inspire-configuration.png) + +Once enabled, the editor will show the remote validation option in the menu: + +![image](img/inspire-validation-menu.png) + +The standard validate option will use the internal validation system (ie. XSD, Schematron rules for ISO, INSPIRE, \... depending on the configuration). In the internal system the INSPIRE validation is based on INSPIRE Technical guidance version 1.3 and results will be different from ETF reports. + +The remote INSPIRE validation will open the validator in a popup. Choose one of the options depending on the level of validation and type of resource to validate. The list of options can be customized in [this configuration file](https://github.com/geonetwork/core-geonetwork/blob/master/services/src/main/resources/config-spring-geonetwork.xml#L61-L94). The configuration is made by selecting one or more test suite from the ETF options: + +![image](img/inspire-etf-test-configuration.png) + +During the validation, the record is sent to the ETF service and processed. Once ETF completes the validation, the catalogue will display a link to the validation report. + +![image](img/inspire-validation-report.png) + +Note, that if you are validating a private record, that record will be pushed to the validator. To secure this process we recommend to set up a local (private) installation of the validator. + +### Configure validation test suites + +The set of test that runs for each schema can be configured using the file [WEB-INF/config-etf-validator.xml](https://github.com/geonetwork/core-geonetwork/blob/5156bae32d549e6d09cd6a86065791265eb09027/web/src/main/webapp/WEB-INF/config-etf-validator.xml). + +The list of available test suites are defined in the `inspireEtfValidatorTestsuites` bean. It is a map with an entry for each test suite. The `key` attribute is the name of the test suite. Each map entry is an `array` with the tests to execute in the test suite. The value of each array item (``)is the test's title written exactly as defined in the remote INSPIRE validator service. For example: + +``` xml + + + + Conformance class: INSPIRE Profile based on EN ISO 19115 and EN ISO 19119 + Conformance class: XML encoding of ISO 19115/19119 metadata + Conformance class: Conformance class: Metadata for interoperability + + + + + Common Requirements for ISO/TC 19139:2007 based INSPIRE metadata records. + Conformance Class 1: INSPIRE data sets and data set series baseline metadata. + Conformance Class 2: INSPIRE data sets and data set series interoperability metadata. + + + + + Common Requirements for ISO/TC 19139:2007 based INSPIRE metadata records. + + Conformance Class 3: INSPIRE Spatial Data Service baseline metadata. + Conformance Class 4: INSPIRE Network Services metadata. + + + + +``` + +Array's `value-type` attribute must be defined as Java strings: ``. + +To define which test suites will be executed when using the editor dashboard's INSPIRE validation option you can modify the `inspireEtfValidatorTestsuitesConditions` bean. It's a map with an entry for each schema and test suite to execute. The map entry key attribute must be in the format `SCHEMA_ID::TEST_SUITE_NAME`, where `TEST_SUITE_NAME` is one of the `inspireEtfValidatorTestsuites` map entry key. For each entry you can define a XPath condition that the metadata must pass to be sent to the validator. + +!!! note + + If a metadata schema doesn't match, the schema dependency hierarchy is checked to verify if any parent schema matches any rules. + + +!!! warning + + The Xpath must return a node-set or a node to work. XPaths returning a boolean `true` or `false` value will be interpreted as always matching by GeoNetwork. + + +``` xml + + + + + + + +``` + +## INSPIRE access point + +In many cases only a part of the metadata records in a catalog are related to the INSPIRE Directive. In that case, it may be relevant to filter the set of records falling in the scope of the Directive and promote them through a sub portal. In this way a European portal can easily harvest the records related to INSPIRE. + +First define a filtering mechanism to identify the records in the scope of the directive. Frequently used method are: + +- Create a group `INSPIRE` and publish those record in that group (or a category). +- Add a specific keyword in the metadata record. +- Filter based on the conformance quality report having a reference to the EU directive. + +From the `Admin console` --> `Settings` --> `Sources`, an administrator can create a sub portal. Create a portal `inspire` and set the filter to select only records related to INSPIRE (eg. `+_groupPublished:INSPIRE` to select all records published in group INSPIRE). + +![image](img/inspire-portal.png) + +Once saved, the portal is accessible at and the CSW service at . + +## INSPIRE reference documents + +- [INSPIRE IR](https://inspire.ec.europa.eu/) +- [INSPIRE Technical Guidelines Metadata v2.0.1](https://inspire.ec.europa.eu/sites/default/files/documents/metadata/inspire-tg-metadata-iso19139-2.0.1.pdf) +- [INSPIRE validator](https://inspire.ec.europa.eu/validator/) +- [GeoNetwork at the INSPIRE forum](https://inspire.ec.europa.eu/forum/search?q=geonetwork) diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/map-server-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/map-server-configuration.md new file mode 100644 index 0000000000..07924ce61f --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/map-server-configuration.md @@ -0,0 +1,21 @@ +# Map servers configuration for geopublication {#map-server-configuration} + +To publish information from the catalog as OGC services (WMS, WFS, WCS), catalog administrator need to register one or more map servers to publish on. Map servers MUST support the GeoServer REST API in order to work with the catalog. The 2 following implementations have been tested: + +- [GeoServer](https://geoserver.org) +- [Mapserver](https://mapserver.org) and [Mapserver REST API](https://github.com/neogeo-technologies/mra) + +Setup you map server and then register it from the administration interface: + +![](img/geopublication-add-mapserver.png) + +The following parameters are required: + +- Name: The map server label which will be displayed when geopublishing information. +- Description: The map server description. +- REST API configuration: The URL of the service providing access to the remote configuration using the REST API. +- Username and password to be used to connect to the REST API. +- Workspace prefix and URL: The workspace information in which data will be pushed into. +- WMS/WFS/WCS service URL: URLs of services which will be used when adding references to the services in the metadata record after publication. + +See [Publishing GIS data in a map server](../../user-guide/workflow/geopublication.md). diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/portal-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/portal-configuration.md new file mode 100644 index 0000000000..6ef0fc230a --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/portal-configuration.md @@ -0,0 +1,87 @@ +# Portal configuration + +Portals can be configured under the `sources` section in `admin console` --> `settings`. + +![](img/portal-access.png) + +There are 3 types of sources: + +- the main catalogue, +- sub-portal, which can be a subset of the main catalogue +- harvesters. + +![](img/portal-types.png) + +The main catalogue corresponds to the current installation. + +When harvesting, at least one source is created to represent the harvester. When harvesting from another GeoNetwork node, sources from the target catalogue are also harvested to keep track of the true origin of records. This only applies to the GeoNetwork protocols which use MEF ([Metadata Exchange Format (MEF)](../../annexes/mef-format.md)) which contain the source catalogue information. + +The last type is sub-portal, which is described in details below. + +## Configuring a sub-portal + +Sub-portals can be used to create a space in the main catalogue only focusing on a subset of records. + +A sub-portal is defined by: + +![](img/portal-subportal.png) + +When creating a sub-portal with an identifier `ìnspire` for example, a new entry point on your catalogue will be available: . Accessing the catalogue through it will only provide access to records matching the filter defined for this sub-portal. The `search filter` parameter value uses the Lucene query parser syntax (see ) and is applied to all searches. + +User privileges apply as in the main instance. + +The logo and name of the sub-portal will be displayed instead of the main instance information in case the option `Display in the portal switcher` is selected: + +![](img/portal-header.png) + +A CSW service is also available for this sub-portal (and replacing the virtual CSW feature). + +A sub-portal can also use a specific user interface configuration. + +The list of sub-portal available is at + +![](img/portal-list.png) + +## Example of usage + +### Creating an INSPIRE directive sub-portal + +For the INSPIRE directive, a catalogue administrator needs to publish an entry point providing access only to INSPIRE related records. An INSPIRE sub-portal can be created with a filter on keywords `+thesaurusName:"GEMET - INSPIRE themes, version 1.0"`. + +### Creating a sub-portal for partners + +Some organizations need to open the catalogue to a set of partners. In such cases, each partner generally accesses the catalogue and creates their records in dedicated groups. A good example is providing a main search filter `catalogue`. + +![](img/portal-geocatch.png) + +The concept of a sub-portal allows the possibility of creating a dedicated URL for each partner. The header can contain the partner identification with name and logo. Optionally the user interface can also be customized (see [User Interface Configuration](user-interface-configuration.md)). + +To setup this kind of configuration, the basic principle is to have: + +- One group for each partner with one or more users +- One sub-portal for each partner with a filter matching records in that group + +To configure this, apply the following steps: + +- Create a group for the partner eg. `oca` (see [Creating group](../managing-users-and-groups/creating-group.md)). +- Create at least one user for the partner (see [Creating user](../managing-users-and-groups/creating-user.md)). The user must be member of the group `oca`. If you want the user to be able to configure the sub-portal (eg. change the name, choose a logo), the user must have at least the `UserAdmin` profile for the group `oca`. +- Create a sub-portal. This can have the same name as the group, eg. `oca` but this is not essential. The filter can be created using the fact that a record published in the group `oca` should be in this sub-portal, using the syntax `+_groupPublished:oca`. Once created the sub-portal is accessible at . +- (Optional) Link the sub-portal to a user admin group to allow `UserAdmin` to configure their sub-portal. + +With this type configuration, ie. one partner = one group = one sub-portal and users are only member of one group, then when connecting to a partner sub-portal: + +- user will only see records published in that group in the entire application +- when creating new records, no group selection is provided because user is member of one group only + +![](img/portal-oca-newrecord.png) + +Remember that a record is visible in the `oca` sub-portal because it is published in the group `oca`: + +![](img/portal-oca-privileges.png) + +If the `publish` operation is removed from `oca` group, then records will not longer be visible in that sub-portal. + +In some situations, you also want to share templates among partners. There are 2 options for this: + +- Publish the template in all partner's groups. The main drawback in this case is that if a new group is added, the templates need to be published to that new group. +- Create a dedicated group for shared records eg. `sharedGroup`. Publish templates in that shared space. Alter the sub-portal filter to match either the partner group or the shared one. `+_groupPublished:(oca OR sharedGroup)`. diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/system-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/system-configuration.md new file mode 100644 index 0000000000..37a665a169 --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/system-configuration.md @@ -0,0 +1,235 @@ +# System configuration + +Most of the system configuration parameters can be changed by administrator users using the web interface in `Admin console` --> `Settings`. + +!!! info "Important" + + Configuration of these parameters is critically important for the catalog in an operational context. Misunderstanding some settings may result in a system that does not function as expected. For example, downloads may fail to be correctly processed, or metadata harvesting from other servers may not work. + + +![](img/settings.png) + +Since the settings form is a long form, the `save` button is repeated between the sections and will save all settings. + +## Catalog description + +- **Catalog name** The name of the node. Information that helps identify the catalogue to a human user. The name is displayed on the banner, in the CSW GetCapabilities. +- **Catalog identifier** A universally unique identifier (uuid) that distinguishes your catalog from any other catalog. This a unique identifier for your catalogue and its best to leave it as a uuid. It will be used by harvester using GeoNetwork protocol to identify the source catalog. +- **Organization** The organization the node belongs to. Again, this is information that helps identify the catalogue to a human user. +- **SVN UUID** Subversion repository attached to the node. This identifier is created and/or checked on startup to verify that the database match the SVN repository. The repository is used for metadata versioning. + +## Catalog + +- **Version** The version of the catalog (readonly, version of the database) +- **Minor version** The minor version of the catalog (readonly, version of the database) + +## Catalog Server {#system-config-server} + +- **Host** The node's name or IP number (without ). For example, they are used during metadata editing to create resource links and when returning the server's capabilities during a CSW request. + - If your node is publicly accessible from the Internet, you have to use the domain name. + - If your node is hidden inside your private network and you have a firewall or web server that redirects incoming requests to the node, you have to enter the public address of the firewall or web server. A typical configuration is to have an Apache web server on address A that is publicly accessible and redirects the requests to a Tomcat server on a private address B. In this case you have to enter A in the host parameter. +- **Port** The server's port number (usually 80 or 8080). If using HTTP, set it to 80. +- **Preferred Protocol** Defined the protocol to access the catalog. The HTTP protocol used to access the server. Choosing http means that all communication with the catalog will be visible to anyone listening to the protocol. Since this includes usernames and passwords this is not secure. Choosing https means that all communication with the catalog will be encrypted and thus much harder for a listener to decode. +- **Log level** Define the logging level of the application. After modification, log can be checked in the `Statistics & status` section under `Activity`. + +![](img/log-view.png) + +## Intranet parameters + +A common need for an organisation is to automatically discriminate between anonymous internal users that access the node from within an organisation (Intranet) and anonymous external users from the Internet. The catalog defines anonymous users from inside the organisation as belonging to the group *Intranet*, while anonymous users from outside the organisation are defined by the group *All*. To automatically distinguish users that belong to the Intranet group you need to tell the catalog the intranet IP address and netmask. + +- **Network** The intranet address in IP form (eg. 147.109.100.0). It can be a comma separated list of IP addresses. +- **Netmask** The intranet netmask (eg. 255.255.255.0). Define as many netmask and IP addresses. + +If intranet parameters are empty, the group *Intranet* will not be displayed in the sharing panel. + +## Proxy server + +The settings page offers to set the configuration of a proxy server. This configuration is used by the application to access the internet to get online resources, for example as part of a harvest process. + +- **Use proxy** Enable the proxy in case the catalog is behind a proxy and need to use it to access remote resources. +- **Proxy Host** The proxy IP address or name +- **Port** The proxy port +- **Proxy username** The username +- **Proxy user password** The username password +- **Ignore host list** To bypass specific hosts enter a specific IP address or host name such as www.mydomain.com or an address range using wildcards, such as 192.168.2.*. Use | to separate the different host values. + +JVM proxy parameters may also be required to properly set the proxy for all remote access. + +## Feedback {#system-config-feedback} + +Email may be sent by the catalog. + +- you are using the User Self-registration system +- you are using the metadata status workflow (See [Life cycle](../../user-guide/workflow/life-cycle.md)) +- a file uploaded with a metadata record is downloaded and notify privilege is selected + +This section configure the mail server to use. + +- **Email** This is the administrator's email address used to send feedback. +- **SMTP host** The mail server name or IP address to use for sending emails. +- **SMTP port** The SMTP port. +- **Use SSL** Enable SSL mode +- **User name** Username if connection is required on the SMTP server +- **Password** Username password if connection is required on the SMTP server + +## Metadata search results + +Configuration settings in this group determine what the limits are on user interaction with the search results. + +- **Maximum Selected Records** The maximum number of search results that a user can select and process with the batch operations eg. Set Privileges, Categories etc. This parameter avoid to trigger long action which could generate out of memory error. + +## Catalog Service for the Web (CSW) + +See [Configuring CSW](csw-configuration.md). + +## Shibboleth + +See [Configuring Shibboleth](../managing-users-and-groups/authentication-mode.md#authentication-shibboleth). + +## User self-registration + +Enable the self registration form. See [User Self-Registration](../managing-users-and-groups/user-self-registration.md). + +## system/userFeedback + +!!! warning "Deprecated" + + 3.0.0 + + +## Link in metadata records + +!!! warning "Deprecated" + + 3.0.0 Defined by the formatter. + + +## Metadata rating + +If enabled, the catalog will calculate user ratings for metadata from this node only (not distributed among other GeoNetwork nodes). This only applies to records harvested using the GeoNetwork protocol. + +## Metadata XLink {#xlink_config} + +The XLink resolver replaces the content of elements with an attribute @xlink:href (except for some elements like srv:operatesOn) with the content obtained from the URL content of @xlink:href. The XLink resolver should be enabled if you want to harvest metadata fragments or reuse fragments of metadata in your metadata records (eg. when using a contact directory). + +- **Enable XLink resolution**: Enables/disables the XLink resolver. +- **Enable local XLink** Local XLinks are using local:/// URL to make references to related sections instead of HTTP URL. Local XLinks are usually faster than HTTP XLinks. + +!!! info "See Also" + + To improve performance the catalog will cache content that is not in the local catalog. Clear the cache of XLink from the `Admin console` --> `Tools` if the fragments were updated. + + +![](img/xlink-cache-clear.png) + +## Metadata update + +For each metadata schema, the catalog has an XSL transformation (`update-fixed-info.xsl`) that it can apply to a metadata record belonging to that schema. The aim of this transformation is to allow fixed schema, site and catalog information to be applied to a metadata record every time the metadata record is saved in the editor. As an example, this transformation is used to build and store the URL of any files uploaded and stored with the metadata record in the editor. + +- **Automatic Fixes**: Enabled by default. It is recommended you do not use the metadata editor when auto-fixing is disabled. See for more details. + +## Search Statistics {#search_stats_config} + +Enables/disables search statistics capture. Search statistics are stored in the database and can be queried using the `Search Statistics` page. + +There is very little compute overhead involved in storing search statistics as they are written to the database in a background thread. However database storage for a very busy site must be carefully planned. + +## Open Archive Initiative (OAI-PMH) Provider + +Options in this group control the way in which the OAI Server responds to OAIPMH harvest requests from remote sites. + +- **Datesearch**: OAI Harvesters may request records from GeoNetwork in a date range. GeoNetwork can use one of two date fields from the metadata to check for a match with this date range. The default choice is *Temporal extent*, which is the temporal extent from the metadata record. The other option, *Modification date*, uses the modification date of the metadata record in the GeoNetwork database. The modification date is the last time the metadata record was updated in or harvested by GeoNetwork. +- **Resumption Token Timeout**: Metadata records that match an OAI harvest search request are usually returned to the harvester in groups with a fixed size (eg. in groups of 10 records). With each group a resumption token is included so that the harvester can request the next group of records. The resumption token timeout is the time (in seconds) that GeoNetwork OAI server will wait for a resumption token to be used. If the timeout is exceeded GeoNetwork OAI server will drop the search results and refuse to recognize the resumption token. The aim of this feature is to ensure that resources in the GeoNetwork OAI server are released. +- **Cache size**: The maximum number of concurrent OAI harvests that the GeoNetwork OAI server can support. + +Restart the catalog to take all OAI settings into account. + +## INSPIRE Directive configuration + +See [Configuring for the INSPIRE Directive](inspire-configuration.md). + +## INSPIRE Atom Feed + +Allows to define the configuration of Atom Feeds referenced by the metadata to provide services related to the [INSPIRE technical guidance for download services](https://inspire.ec.europa.eu/documents/Network_Services/Technical_Guidance_Download_Services_3.0.pdf): + +- Select the type of atom feed: + + - Remote: retrieve the atom feeds referenced by the metadata in the online resources. + - Local (to implement in future versions): create the atom feed using the metadata content. + +- Schedule for feed retrieval: the retrieval of the atom feeds can be scheduled to be done periodically. + +- Atom protocol value: value of the protocol in the metadata online resources to identify the atom feed resources (the default value is INSPIRE Atom). GeoNetwork identifies an Atom file from other resources by looking at the protocol value of the onlineresource. Since there is no general accepted value for this protocol, GeoNetwork allows an administrator to set the value to be used as protocol identifying Atom resources: + + + + + + + http://geodata.nationaalgeoregister.nl/atom/index.xml + + + INSPIRE Atom + + + + + + +The following services are available: + +- +- +- +- +- + +In above URLs {UUID} is the fileidentifier of the download service metadata. + +In the service feed of your download service make sure to add the GeoNetwork OpenSearch endpoint as the OpenSearchDescription for the service: + + + +The INSPIRE Atom/OpenSearch implementation can be verified with the Atom tests in Esdin Test Framework () or INSPIRE metadata validator (). + +## Multi-Threaded Indexing + +Configuration settings in this group determine how many processor threads are allocated to indexing tasks in GeoNetwork. If your machine has many processor cores, you can now determine how many to allocate to GeoNetwork indexing tasks. This can bring dramatic speed improvements on large indexing tasks (eg. changing the privileges on 20,000 records) because GeoNetwork can split the indexing task into a number of pieces and assign them to different processor cores. + +*Number of processing threads* The maximum number of processing threads that can be allocated to an indexing task. + +Note: this option is only available for databases that have been tested. Those databases are PostGIS and Oracle. You should also carefully consider how many connections to the database you allocate in the database configuration as each thread could tie up one database connection for the duration of a long indexing session (for example). See the advanced configuration for more details of how to configure the number of connections in the database connection pool. + +## Metadata Privileges + +*Only set privileges to user's groups*: If enabled then only the groups that the user belongs to will be displayed in the metadata privileges page (unless the user is an Administrator). At the moment this option cannot be disabled and is likely to be deprecated in the next version of GeoNetwork. + +## Metadata import {#editing_harvested_records} + +- **Restrict import to schemas** List of all allowed schemas for metadata to be imported. If the metadata schema is not allowed, then the import is not done. Use an empty value to allow all schemas. +- **Minimum user profile allowed to import metadata** Minimum user profile allowed to import metadata (`Editor`, `Reviewer` or `Administrator`). The default value is `Editor`. + +![](img/metadata-import.png) + +## Metadata delete + +Allows to configure the user profile allowed to delete published metadata. + +- **Minimum user profile allowed to delete published metadata** Minimum user profile allowed to delete metadata (`Editor`, `Reviewer` or `Administrator`). The default value is `Editor`. + +![](img/metadata-delete.png) + +## Metadata publication + +Allows to configure the user profile allowed to publish and un-publish metadata. + +- **Minimum user profile allowed to publish metadata** Minimum user profile allowed to publish metadata (`Reviewer` or `Administrator`). The default value is `Reviewer`. +- **Minimum user profile allowed to un-publish metadata** Minimum user profile allowed to un-publish metadata (`Reviewer` or `Administrator`). The default value is `Reviewer`. + +![](img/metadata-publication.png) + +## Harvesting + +*Allow editing on harvested records*: Enables/Disables editing of harvested records in the catalogue. By default, harvested records cannot be edited. diff --git a/docs/manual/docs/administrator-guide/configuring-the-catalog/user-interface-configuration.md b/docs/manual/docs/administrator-guide/configuring-the-catalog/user-interface-configuration.md new file mode 100644 index 0000000000..cc87db286e --- /dev/null +++ b/docs/manual/docs/administrator-guide/configuring-the-catalog/user-interface-configuration.md @@ -0,0 +1,264 @@ +# User Interface Configuration + +Most of the configuration parameters for the user interface can be changed by an administrator using the web interface in `Admin console` --> `Settings` --> `User Interface`. + +!!! info "Important" + + Configuration of these parameters is critically important for the catalog in an operational context. Misunderstanding some settings may result in a system that does not function as expected. For example, the map can become unusable. + + +![](img/ui-settings.png) + +By default the catalog will use the default UI configuration, named `srv`. To view and edit the settings for this configuration, choose `Create a default UI configuration`. + +To add a new configuration, such as for a sub-portal (see [Portal configuration](portal-configuration.md)) choose `Add new UI configuration` and choose one or more portal identifiers from the dropdown list `UI Configuration identifier`. Additional configurations can also be used for building an external JS application, which is able to load a specific configuration. + +!!! note + + Since the settings form is a long form, the `save` button is repeated at the base of the page. In either case, all settings are saved. + + +- **Filter settings**: This search box can be used to filter settings in the form, for example searching for "social" will show only the settings related to the Social Bar. + +![](img/ui-settings-filter.png) + +## General options + +- **Humanize dates**: check this box to show dates in a human-friendly format. If not set, the full date will be shown. + +![](img/ui-settings-humanizedate.png) + +## Footer {#user-interface-config-footer} + +- **Footer**: Select this checkbox to determine whether the GeoNetwork footer is shown. If not set, no footer will be visible. +- **Social bar**: Select this check box to show the social bar (links to twitter, facebook, linkedin etc) in the footer. + +![](img/ui-settings-footer.png) + +## Top Toolbar {#user-interface-config-toptoolbar} + +- **Top toolbar**: Select this check box to determine whether the GeoNetwork top toolbar will be shown. If not set, no toolbar will be visible. +- **List of languages**: Choose the languages from the list that should be available for translating the interface strings (available from the dropdown list in the top toolbar). If only one language remains, then no dropdown will be shown. Note that additional languages can be added, if translations are available, by selecting the `+` button below the list and adding the appropriate ISO codes. + +![](img/ui-settings-toptoolbar.png) + +- **Show the logo in the header**: This determines where the catalog logo should be positioned. If selected, the logo will be positioned in the header, above the top toolbar and the toolbar logo (default) removed. If unset, the logo will appear in the top toolbar. +- **Position of logo**: These options determine where on the header the logo will be positioned. + +![](img/ui-settings-toptoolbarlogo.png) + +## Home Page {#user-interface-config-homepage} + +- **Home page**: Select this check box to determine whether the Logo and Link to the Home Page are visible in the top toolbar. If not set, no logo and link is shown. +- **Application URL**: Define the URL for the home page. In the majority of cases this can be left as the default. +- **Fluid container for Home and Search**: Select this check box to determine whether the search box is full width in the browser page or if it is fixed width and centred. + +![](img/ui-settings-homepage.png) + +## Search application {#user-interface-config-searchpage} + +- **Search application**: Select this check box to determine whether the search application is visible in the top toolbar. If not set, no link is shown. +- **Application URL**: Define the URL for the search application. In the majority of cases this can be left as the default. +- **Number of records per page**: Define the options to determine the number of records shown per page of results, and the default. +- **Type of facet**: Define the set of search facets should be visible in the search page. The default is `details` but `manager` can be used to show the facets more normally used on the editor page. +- **Default search**: Define a default filter for the search. + +![](img/ui-settings-searchpage.png) + +- **Facet field to display using tabs**: This option creates a tab for each configured facet above the search results. This can be used to further narrow down the search results. The list of facet names can be found at . For example, to include the Topic Category filter above the search results, the administrator would add `topicCat` as the facet field to display. +- **List of facets**: This can be used to restrict the facets available for searching. For example, adding `topicCat` to this list would restrict the search options to `Topic Category` only. This can be useful for restricting the search options in a sub-portal or external web application. To add additional facets to the list, select the blue `+` button. +- **Filters**: Define additional search criteria added to all searches and again are used primarily for external applications and sub-portals. + +![](img/ui-settings-searchpage2.png) + +- **Type of sort options**: Define the different ways by which a user can sort a set of search results. The **default sort by option** is shown below. Note that to search for example on `title` in alphabetical order it is necessary to set the order to `reverse`. +- **List of templates for search results**: This section allows the administrator to configure templates for the layout of the search results. The default is `grid` whereas `list` is the default for the editor board. + +![](img/ui-settings-searchpage3.png) + +- **Default template used for search results**: Define the template page for the search. Generally this can be left as the default. +- **List of formatter for record view**: Determine the formatter used to display the search results. See [Customizing metadata views](../../customizing-application/creating-custom-view.md) for information on creating a new formatter. To add an additional view, click the blue `+` button below the list and provide a name and a URL. + +![](img/ui-settings-searchpage3.png) + +### Search results configuration {#user-interface-config-searchresults} + +- **Related metadata types to query**: Use this section to define the metadata types displayed when showing search results in the grid. format To add additional types, click the blue `+` button. The possible types are shown below the form. + +![](img/ui-settings-searchresults.png) + +### List of link types {#user-interface-config-linktypes} + +- **Links**: This section determines the types of links displayed when showing search results in the grid format. They are separated into `links`, `downloads`, `layers` and `maps` and for each type, a new entry can be added by clicking the blue `+` button below the list. + +![](img/ui-settings-searchresults2.png) + +- **Display filter tags in the search results**: When checked, the filter tags are visible above the search results. The default is to not show them. + +### User custom searches {#user-interface-customsearches} + +- **Enabled**: If checked the user will have the ability to create and save custom searches in the search tab. This functionality will be visible above the facets list on the left. +- **Display featured user searches panel in home page**: If this is also enabled, an additional tab will be shown on the home page alongside `Latest news` and `Most popular`. + +### Saved Selections + +- **Enabled**: If checked the user will have the ability to save a selection of records in the search tab. + +![](img/ui-settings-searchresults3.png) + +## Map Application {#user-interface-config-mappage} + +This section describes how an administrator can configure the different maps in the user interface (the main map, the mini map displayed on the search result page, and the map used in the editor to draw an extent). + +- **Map Application**: The initial checkbox allows the main map tab to be disabled. In this case there will be no map tab shown in the top toolbar but the mini map and extent map described above will still be visible. +- **Application URL**: This defines the URL for the map tab. In the majority of cases this can be left as the default. + +### External viewer + +- **Use an external viewer**: This option allows a third party mapping application to be used in place of the default GeoNetwork map. In this case, most of the settings below will no longer be used. +- **Allow 3D mode**: If enabled, the user has the option to switch to 3D mode in the main map (see [Quick start](../../user-guide/quick-start/index.md)). +- **Allow users to save maps as metadata record**: This option enables users to save layers and base maps configuration as a record in the catalog. Optionally users can add a title and an abstract. +- **Export map as image**: If enabled, users can export the map as an image but requires CORS to be enabled on any external WMS services displayed on the map. This option is disabled by default to avoid issues with WMS layers. + +![](img/ui-settings-mappage.png) + +- **User preference persistence**: This option determines the behaviour of cookies related to the map. The various options are listed below. +- **Bing Map Key**: If this option is filled in, then it is possible to use Bing Maps as base layers within the map application. You must get your own key for this to work. + +![](img/ui-settings-mappage2.png) + +### List of preferred OGC services + +Default **wms** and **wmts** services can be defined here that will be available by default to the end user. New services can be added using the blue `+` button below the protocol lists. + +You can configure each map with different layers and projections. + +- **Map Projection** This is the default projection of the map. Make sure the projection is defined in **Projections to display maps into** below. + +![](img/ui-settings-mapprojection.png) + +- **List of map projections to display bounding box coordinates in** This is used in the map when editing a record and defining the bounding box extent. Note that the coordinates will be stored in WGS84 regardless of the projection used to draw them. + +![](img/ui-settings-mapprojectionslist.png) + +- **Projections to display maps into** This is where the different projections available to the map are defined. All projections will be shown in the `Projection Switcher` tool of the map. + +![](img/ui-settings-mapprojection2.png) + +In order to enable a new projection it must be defined here using the **proj4js** syntax, which can be found at . Additionally the default bounding box extent, maximum bounding box extent, and allowed resolutions (if required) can be defined. + +Ensure that the coordinates inserted are in the correct units for and are local to the projection. A list of resolutions is only relevant if the main map layer has a XYZ source, which does not follow the common tiling pattern. + +Check that this configuration is valid by opening the map. + +![](img/ui-settings-mapprojection3.png) + +!!! info "Important" + + If the configuration of a projection is incomplete or invalid, the map may fail to load. + + +If a projection is defined which is not supported by the source of the map layer, the map application will reproject map images at the client side. This may cause unexpected behaviour, such as rotated or distorted labels. + +- **Optional Map Viewer Tools** The checkboxes in this section define the tools available to the user in the right toolbar of the main map. Elements that are not checked are not visible. +- **OGC Service to use as a graticule**: This is optional and allows the use of an external service to display the graticule on the map. + +### Viewer Map Configuration {#user-interface-config-viewermap} + +This section is for configuring the map shown when viewing a record. + +- **Path to the context file (XML)**: An optional path to an XML file defining base layers and other configuration options. See `web/src/main/webapp/WEB-INF/data/data/resources/map/config-viewer.xml` for an example. +- **Extent, expressed in current projection**: Use this option to override the extent defined in the context file. + +![](img/ui-settings-mapviewer.png) + +- **Layer objects in JSON**: Define additional layers to be shown on the map using JSON syntax. The supported types are: + - **wms**: generic WMS layer, required properties: `name, url`. + - **wmts**: generic WMTS layer, required properties: `name, url`. + - **tms**: generic TMS layer, required property: `url`. + - **osm**: OpenStreetMap default layer, no other property required. + - **stamen**: Stamen layers, required property: `name`. + - **bing_aerial**: Bing Aerial background, required property: `key` containing the license key. + +![](img/ui-settings-mapviewerlayers.png) + +All layers can also have some optional extra properties: + +- **title** The title/label of the layer. +- **projectionList** Projection array to restrict this layer to certain projections on the map. + +Examples of layers: + +This layer will use OpenStreetMap Stamen style, but only when the map is in `EPSG:3857`: + +``` json +{"type":"stamen","projectionList":["EPSG:3857"]} +``` + +This WMS layer will be shown but only when the map is on `EPSG:4326`: + +``` json +{"type":"wms","title":"OI.OrthoimageCoverage","name":"OI.OrthoimageCoverage", +"url":"http://www.ign.es/wms-inspire/pnoa-ma?request=GetCapabilities&service=WMS", +"projectionList":["EPSG:4326"]} +``` + +### Search Map Configuration + +This section defines the configuration for the mini map shown on the search page. It uses the same options as in [Viewer Map Configuration](user-interface-configuration.md#user-interface-config-viewermap). + +### Editor Map Configuration + +This section defines the configuration for the map shown when editing a record. It uses the same options as in [Viewer Map Configuration](user-interface-configuration.md#user-interface-config-viewermap). + +## Gazetteer + +- **Gazetteer**: If enabled a gazetteer will be shown in the top left of the main map. +- **Application URL**: Set the application URL used for the gazetteer. In general this should be left as the default, but additional filtering can be applied using the syntax described at , for example to restrict results to a particular country (`country=FR`). + +![](img/ui-settings-gazzetteer.png) + +## Record View + +- **Record view**: +- **Show Social bar**: If enabled the social bar (links to facebook, twitter etc) are enabled in record view. + +## Editor Application + +- **Editor application**: If enabled the editor page, or contribute tab is available to users with the appropriate privileges. If not enabled the contribute tab is not shown in the top toolbar. +- **Application URL**: This is the URL to the editor application and can generally be left as the default. +- **Only my records**: If this checkbox is enabled then the "Only my records" checkbox in the editor dashboard will be checked by default. +- **Display filters in dashboard**: If enabled, the currently selected facets will be shown above the search results in both the editor dashboard the batch editor page. +- **Fluid container for the Editor**: If enabled, the editor application will have a full width container. If disabled it will have a fixed width and centered container. +- **New metadata page layout**: Choose from the options for the layout of the `add new metadata` page. The default is `Horizontal` but a vertical layout can be chosen, or a custom layout based on a supplied template. +- **Editor page indent type**: Choose from the options for the indent style when editing a record. The default is for minimal indents, select `Colored indents` to use the style shown below: + +![](img/ui-settings-indent.png) + +## Admin console + +- **Admin console**: +- **Application URL**: Set the application URL for the admin console. In general this should be left as the default. + +## Sign in application + +- **Sign in application**: +- **Application URL**: Set the application URL for the sign in page. In general this should be left as the default. + +## Sign out application + +- **Application URL**: Set the application URL for the sign out. In general this should be left as the default. + +## Search application + +- **Search application**: +- **Application URL**: Set the application URL for the search page. In general this should be left as the default. + +## JSON Configuration + +This section shows the JSON configuration for the currently applied User Interface settings. From here, the json can be saved to a file (by copying and pasting). + +- **Test client configuration**: Click this button to test the configuration in a new browser tab. +- **Reset configuration**: Click this button to reset the configuration back to the default. Note that this will revert any changes you have made in the above page. + +![](img/ui-settings-json.png) diff --git a/docs/manual/docs/administrator-guide/img/admin.png b/docs/manual/docs/administrator-guide/img/admin.png new file mode 100644 index 0000000000..ff06c848db Binary files /dev/null and b/docs/manual/docs/administrator-guide/img/admin.png differ diff --git a/docs/manual/docs/administrator-guide/index.md b/docs/manual/docs/administrator-guide/index.md new file mode 100644 index 0000000000..7d2a75603e --- /dev/null +++ b/docs/manual/docs/administrator-guide/index.md @@ -0,0 +1,10 @@ +# Administrator guide + +- [Configuring the catalog](configuring-the-catalog/index.md) +- [Managing users and groups](managing-users-and-groups/index.md) +- [Managing classification system](managing-classification-systems/index.md) +- [Managing metadata & template](managing-metadata-standards/index.md) + +![](img/admin.png) + +All Admin functions are available from the Admin Dashboard from the main menu. On the Admin Dashboard you will find shortcuts to any administration option your role can access. diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/categories.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/categories.png new file mode 100644 index 0000000000..60919d7be7 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/categories.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-api-collect.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-api-collect.png new file mode 100644 index 0000000000..d5a2f913ee Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-api-collect.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-api-synch.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-api-synch.png new file mode 100644 index 0000000000..dbb4244b34 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-api-synch.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-cache.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-cache.png new file mode 100644 index 0000000000..c1bb06ffe0 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-cache.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-editor-popup.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-editor-popup.png new file mode 100644 index 0000000000..02c293c383 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-editor-popup.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-editor-popupopen.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-editor-popupopen.png new file mode 100644 index 0000000000..6a01da316e Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-editor-popupopen.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-import.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-import.png new file mode 100644 index 0000000000..efd3373fe8 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-import.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-manager.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-manager.png new file mode 100644 index 0000000000..0b0242abee Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-manager.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-search.png b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-search.png new file mode 100644 index 0000000000..b10d8fba12 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-classification-systems/img/directories-search.png differ diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/index.md b/docs/manual/docs/administrator-guide/managing-classification-systems/index.md new file mode 100644 index 0000000000..b7cbca16eb --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-classification-systems/index.md @@ -0,0 +1,5 @@ +# Managing classification system + +- [Managing categories](managing-categories.md) +- [Managing directories](managing-directories.md) +- [Managing thesaurus](managing-thesaurus.md) diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/managing-categories.md b/docs/manual/docs/administrator-guide/managing-classification-systems/managing-categories.md new file mode 100644 index 0000000000..6afc42ce6f --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-classification-systems/managing-categories.md @@ -0,0 +1,9 @@ +# Managing categories + +GeoNetwork has a concept of categories that can be assigned to metadata documents, but these are not represented in the metadata. So when the metadata is exported, the category will be lost. You can use these categories to separate documents into groups, without changing the actual content of the metadata. Categories can be used to filter a search result, or limit the output of a custom csw endpoint. + +To assign a category to a metadata document. Go to the metadata modification form and select the requested category from the pull down in the menu. Then save your metadata. + +To modify the available categories in the catalog, from the admin page, open the "classification systems" and then the "category" tab. + +Note: If you add or modify categories, they may not obtain an appropriate icon. These icon are managed in `/catalog/style/gn_icons.less`. In this file category-classes are mapped to font-awesome variables that map to a certain [font-awesome icon](https://fontawesome.io). diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/managing-directories.md b/docs/manual/docs/administrator-guide/managing-classification-systems/managing-directories.md new file mode 100644 index 0000000000..19ffb269aa --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-classification-systems/managing-directories.md @@ -0,0 +1,196 @@ +# Managing directories + +The catalog supports metadata records that are composed from fragments of metadata. The idea is that the fragments of metadata can be used in more than one metadata record. + +Here is a typical example of a fragment. This is a responsible party and it could be used in the same metadata record more than once or in more than one metadata record if applicable. + +``` xml + + + John D'Ath + + + Mulligan & Sons, Funeral Directors + + + Undertaker + + + + + +``` + +Metadata fragments that are saved in the catalogue database are called subtemplates. This is mainly for historical reasons as a subtemplate is like a template metadata record in that it can be used as a 'template' for constructing a new metadata record. + +Fragments can be inserted in metadata record in 2 modes: + +- by copy/paste +- by link (if xlink support is enabled. See [Metadata XLink](../configuring-the-catalog/system-configuration.md#xlink_config)) + +When using XLinks, if the fragment is updated, then the related fragment in all metadata records will also be updated (check the XLink cache). + +Fragments may be created by harvesting (see [Harvesting Fragments of Metadata to support re-use](../../user-guide/harvesting/index.md#harvesting_fragments)) or imported using the metadata import page. + +This section of the manual describes: + +- how to manage directories of subtemplates +- how to extract fragments from an existing set of metadata records and store them as subtemplates +- how to manage the fragment cache used to speed up access to fragments that are not in the local catalogue + +## Managing Directories of subtemplates + +There are some differences between the handling of subtemplates and metadata records. Unlike metadata records, subtemplates do not have a consistent root element, the metadata schema they use may not be recognizable, they do not appear in the main search results (unless they are part of a metadata record). Therefore, the editor board allows you to search and manage privileges for directory entries. + +![](img/directories-search.png) + +From the editor board, choose `Manage directory` to access the editor for directory entries: + +![](img/directories-manager.png) + +If you do not see the `Organizations and Contacts` tab then ensure that you have created subtemplates for contacts for your metadata profile, and that you have loaded them using the `Metadata and Templates` section. + +From this page, editors can choose a type of directory using the top tabs, edit/remove/import new subtemplates. + +To import new entries, use the metadata import page and choose the appropriate type of record: + +![](img/directories-import.png) + +Like metadata records, they are allocated an integer id and are stored in the catalog metadata table (with template field set to "y"). + +## Insert a directory entry in a metadata record + +From the metadata editor, the directory can be used to populate contacts for example. + +![](img/directories-editor-popup.png) + +Open the directory selector, choose a contact and then choose the contact role. + +![](img/directories-editor-popupopen.png) + +## Extracting subtemplates from metadata records + +Many sites have existing metadata records with common information eg. contact information in an ISO CI_Contact element. Directory entries such as these can be extracted from a selected set of metadata records using the "Extract subtemplates" API. + +To use this function the following set of steps should be followed: + +- Make sure you understand what an XPath is - see for example. +- Identify fragments of metadata that they would like to manage as reusable subtemplates in the metadata record. This can be done using an XPath. eg. the XPath `.//gmd:CI_ResponsibleParty` identifies all responsible party in a records. An example of such a fragment (taken from one of the sample records) is shown in the following example: + +``` xml + + + Jippe Hoogeveen + + + FAO - NRCW + + + Technical Officer + + + + + + + + + + + + + + + + + Viale delle Terme di Caracalla + + + Rome + + + + + + 00153 + + + Italy + + + jippe.hoogeveen@fao.org + + + + + + + + + +``` + +- Identify and record the XPath of a field or fields within the fragment which text content will be used as the id of the subtemplate. This XPath should be relative to the root element of the fragment identified in the previous step. So for example, in the fragment above we could choose `.//gmd:electronicMailAddress/gco:CharacterString/text()` as the id for the fragments to be created. +- On the API page, choose the registries / collect operation: + +![](img/directories-api-collect.png) + +- Fill in the form with the information collected in the previous steps. +- Extracted subtemplates can be previewed using the GET mode and once validated, use the PUT method to save results in the catalog. + +Finally, go to the subtemplate directory management interface and you should be able to select the root element of your subtemplates to examine the extracted subtemplates. + +Subtemplate indexing is based on the schema (see index-fields folder for details). Currently ISO19139 index subtemplates using as root element: + +- gmd:CI_ResponsibleParty +- gmd:MD_Distribution +- gmd:CI_OnlineResource +- gmd:EX_Extent + +In ISO19115-3 + +- cit:CI_Responsibility +- *[mdq:result] +- gex:EX_Extent + +Other configuration examples to collect: + +- Parties in ISO19115-3 + - `xpath`: `.//cit:CI_Responsibility` + - `identifierXpath`: `.//cit:electronicMailAddress/*/text()` +- Quality specifications in ISO19115-3 + - `xpath`: `.//*[mdq:result]` + - `identifierXpath`: `.//cit:title/*/text()` +- Extent in ISO19115-3 + - `xpath`: `.//gex:EX_Extent` + - `identifierXpath`: `concat(.//gex:westBoundLongitude/*/text(), ', ', .//gex:eastBoundLongitude/*/text(), ', ', .//gex:southBoundLatitude/*/text(), ', ',.//gex:northBoundLatitude/*/text())` or `gex:description/*/text()` +- Constraints in ISO19115-3 + - `xpath`: `.//mri:resourceConstraints/*` + +## Synchronizing subtemplates with metadata records + +Once created, the catalog provides the capability to synchronize metadata records with directory entries. For this, use the API testing page. + +The synchronize process use the same parameters as the collecting process with 2 optionals arguments: + +- `propertiesToCopy` to preserve some element which may be defined in the fragment in the metadata (eg. contact role) +- `substituteAsXLink` to indicate if copy/paste mode or XLink mode should be used. + +![](img/directories-api-synch.png) + +## Managing the fragment cache + +If metadata records in your catalog link in fragments from external sites, the catalog caches these fragments after the first look up so as to reduce the amount of network traffic and speed up the display of metadata records in search results. + +The cache is handled automatically using the Java Cache System (JCS). JCS handles large caches intelligently by: + +- defining a maximum number of cached objects +- using as much main memory as possible before moving to secondary storage (disk) +- providing cache persistence: the cache is saved to disk when the web application is shutdown and restores the cache from disk when restarting + +You can configure JCS parameters in GeoNetwork using the JCS configuration file in **INSTALL_DIR/web/geonetwork/WEB-INF/classes/cache.ccf**. + +Some operations in the catalog (such as harvesting) that generate metadata fragments, will automatically refresh the XLink cache when a new fragment is generated. However, if you are linking fragments from an external site, then depending on how often the change, you will need to manually refresh the XLink cache. To do this you should navigate to the Administration page and select the "Clear XLink Cache and Rebuild Index of Records with XLinks" function as highlighted in the following screenshot of the "Administration" page. + +![](img/directories-cache.png) diff --git a/docs/manual/docs/administrator-guide/managing-classification-systems/managing-thesaurus.md b/docs/manual/docs/administrator-guide/managing-classification-systems/managing-thesaurus.md new file mode 100644 index 0000000000..ca161024dd --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-classification-systems/managing-thesaurus.md @@ -0,0 +1,207 @@ +# Managing thesaurus + +## Introduction + +A thesaurus is a list of concepts from a specialized field of knowledge. In a metadata catalog, concepts from a thesaurus can be assigned to a metadata record (as keywords) as a way of associating it with one or more concepts from a field of knowledge. For example, a record may be assigned a keyword 'AGRICULTURE - Crops' meaning that the record describes a resource or activity relating to crops in the field of Agriculture. It's a good practice to look for existing thesauri before creating your own thesaurus. + +In GeoNetwork, the process of assigning keywords to a metadata record takes place in the metadata editor. The user can choose concepts from one or more thesauri to associate the record with the concepts described by those concepts. This process is supported for both ISO19115/19139 and dublin core metadata records using an thesaurus picker. + +Concepts within a field of knowledge or in different fields of knowledge may be related or even be equivalent. For example, in a thesaurus describing geographic regions, the Australian state of 'Tasmania' is a specialization of the country of Australia. As an example of overlapping concepts in different fields, a thesaurus describing science activities in the field of global change may have concepts relating to agricultural activities that will be equivalent to terms from a thesaurus that describes the themes used in a map series. + +In GeoNetwork, thesauri are represented as SKOS () and stored in an application/xml+rdf encoding. SKOS captures concepts and relationships between concepts. SKOS thesauri can be imported from standalone files or they can be generated from ISO19135 register records in a GeoNetwork catalog. ISO19135 (more on this below) not only captures the concepts and relationships between the concepts, but (amongst other things) how the concepts have evolved and most importantly, who has contributed to and managed the evolution of the concepts and the thesauri itself. + +## External, Local and Register Thesauri + +There are three types of thesaurus in GeoNetwork. The different types are based on where the thesaurus comes from: + +- *External*: A thesaurus managed by an external organisation and imported as a SKOS file. It is flagged to `external` which means that users are not allowed to edit the thesaurus. +- *Local*: A thesaurus built in the GeoNetwork thesaurus editor and stored as a SKOS file. It is flagged as `local` which means that users are allowed to edit the thesaurus. +- *Register*: A SKOS thesaurus created from an ISO19135 register record. Users can edit the thesaurus by changing the content of the ISO19135 register record in the GeoNetwork metadata editor and then regenerating the thesaurus. Users cannot edit the thesaurus in thesaurus manager. + +## ISO19115/19139 Thesaurus Categories + +All thesauri in GeoNetwork are categorized using the code list values for the gmd:MD_KeywordTypeCode element from ISO19115/19139. The categories and their meanings are given below but can also be found in : + +| ISO Thesaurus Category | Description | +|------------------------|------------------------------------------------------------------------------------| +| place | Thesaurus has concepts identifying a location | +| stratum | Thesaurus has concepts identifying layers of any deposited substance | +| temporal | Thesaurus has concepts identifying a time period | +| theme | Thesaurus has concepts identifying a particular subject or topic | +| discipline | Thesaurus has concepts identifying a branch of instruction or specialized learning | + +## SKOS format + +The Simple Knowledge Organisation Systems (SKOS) is an area of work developing specifications and standards to support the use of knowledge organisation systems (KOS) such as thesauri, classification schemes. This format is used by GeoNetwork to store thesaurus information. + +A concept is defined by an identifier, a preferred label, a definition and links with other concepts. Labels and definitions could be stored in multiple languages (using the xml:lang attributes). Three type of links between concepts have been defined in the SKOS format: + +- related terms +- broader terms +- narrower terms + +For example, a concept `ABLETTE` could be defined as follow with a label in French and English, linked to broader concept: + + + ABLETTE + BLEAK + + + +GeoNetwork supports multilingual thesauri (e.g. Agrovoc). Search and editing takes place in the current user interface language (i.e. if the interface is in English, when editing metadata, GeoNetwork will only search for concept in English). + +We use SKOS to represent thesauri in GeoNetwork because: + +- it provides a simple and compact method of describing concepts and relationships between concepts from a field of knowledge +- SKOS concepts can be queried and managed by the sesame/openRDF software used by GeoNetwork + +## ISO19135 register format + +ISO19135 is an ISO standard that describes procedures for registering an item and the schema for describing a list (or register) of items and the processes by which the items can be created and evolve. This schema is available as a plugin for use in GeoNetwork. To use it, you must download and load the iso19135 plugin schema into GeoNetwork. FIXME: We need a standard way of referring to plugin schemas and a standard place from which they can be downloaded. + +A typical ISO19135 register record describes: + +- the name and a description of the register +- version and language information +- contact information of those that have a role in the register (eg. manager, contributor, custodian, publisher etc) +- the elements used to describe an item in the register +- the items + +The standard information used to describe a register item includes: + +- identifier +- name and description of item +- field of application +- lineage and references to related register items + +An example of a register item from register of the NASA GCMD (Global Change Master Directory) science keywords is shown below. + + + + 7 + + + Aquaculture + + + valid + + + 2006 + + + + + + + 5 + + + + + + + + +As mentioned earlier, to use a thesaurus described by an ISO19135 register record, GeoNetwork uses an XSLT called xml_iso19135ToSKOS.xsl (from the convert subdirectory in the iso19135 plugin schema) to extract the following from the ISO19135 register record: + +- valid concepts (grg:itemIdentifier, grg:name, grg:status) +- relationships to other concepts (grg:specificationLineage) +- title, version and other management info + +This information is used build a SKOS file. The SKOS file is then available for query and management by the sesame/openRDF software used in GeoNetwork. + +## Creating or Importing a Thesaurus + +External and local thesauri are created or imported using the thesaurus manager. You can use the thesaurus manager by: + +- logging in as an administrator +- navigating to the 'Administration' page and clicking on the link `Manage thesauri` + +The thesaurus manager page will show a list of thesauri that have been created or imported. The upper part of the page provides the user with functions to edit, add, modify or search a thesaurus. The lower part provides a function to upload an external thesaurus in SKOS format. + +### Creating a local thesaurus + +To create a local thesaurus, click the `+` sign on the category you want your thesaurus to be in. Once created, the thesaurus can be updated through the edit interface. The meaning of each column is as follows: + +- **Type** - This is an identifier assigned to the thesaurus in GeoNetwork. It is composed of the ISO category to which the thesaurus has been assigned (see the codelist for the gmd:MD_KeywordTypeCode element in ), whether the thesaurus is a local, external or register thesaurus and the filename of the SKOS file that holds the thesaurus. (Note: the name of the file used to hold a register thesaurus is the uuid of the ISO19135 register record that describes the thesaurus). +- **Name** - This is the name of the thesaurus which is the administrator on creation or the filename if the thesaurus is ting a thesaurus, the name of the thesaurus will be the filename of the thesaurus. + +For each thesaurus the following buttons are available: + +- **Download** - Link to the SKOS RDF file. +- **Delete** - Remove thesaurus from the current node. +- **View** - If type is external, the view button allows to search and view concepts. +- **Edit** - If type is local, the edit button allows to search, add, remove and view concepts. + +### Import an external thesaurus + +GeoNetwork allows thesaurus import in SKOS format. Once uploaded, an external thesaurus cannot be updated. Select the category, browse for the thesaurus file and click upload. The SKOS file will be in `GEONETWORK_DATA_DIR/config/codelist/external/thesauri/`. + +At the bottom of the page there are the following buttons: + +1. *Back*: Go back to the main administration page. +2. *Upload*: Upload the selected RDF file to the node. Then it will list all thesaurus available on the node. + +### Creating a register thesaurus + +An ISO19135 record in the local GeoNetwork catalog can be turned into a SKOS file and used as a thesaurus in GeoNetwork. ISO19135 records not in the local catalog can be harvested from other catalogs (eg. the catalog of the organisation that manages the register). Once the ISO19135 register record is in the local catalog, the process of turning it into a thesaurus for use in the keywords selector begins a search for the record. Having located the record in the search results, one of the actions on the record is to 'Create/Update Thesaurus'. + +> *Search results showing ISO19135 record with thesaurus creation action* + +After selecting this action, you can choose the ISO thesaurus category appropriate for this thesaurus: + +> *Selecting the ISO thesaurus category when creating a thesaurus* + +After selecting the ISO thesaurus category, the ISO19135 register record is converted to a SKOS file and installed as a thesaurus ready for use in the metadata editor. As described above in the section on ISO19135, only the valid register items are included in the thesaurus. This behaviour and any of the mappings between ISO19135 register items and the SKOS thesaurus file can be changed or inspected by looking at the XSLT xml_iso19135TOSKOS.xsl in the convert subdirectory of the iso19135 schema plugin. + +## Editing/browsing a local or external thesaurus: add/remove/browse keywords + +From the thesaurus administration interface, click on the edit button for a local thesaurus or the view button for an external thesaurus. This interface allows: + +- keywords search +- add/remove keywords for local thesaurus. + +Use the textbox and the type of search in order to search for keywords. + +## Editing a register thesaurus + +A register thesaurus is created from an ISO19135 metadata record as described above, so a register thesaurus is updated by editing the ISO19135 metadata record and then regenerating the register thesaurus. The ISO19135 metadata record can be created and edited in the GeoNetwork editor. + +### Preparing to edit an ISO19135 register record {#xlinks_thesaurus} + +Register records can be very large. For example, a register record describing the ANZLIC Geographic Extent Names register has approx 1800 register items. Each register item holds not only the name of the geographic extent, but also its geographic extent and details of the lineage, relationships to other terms and potentially, the evolution of the extent (changes to name, geographic extent) including the details of changes and why those changes occurred. Editing such a large record in the GeoNetwork editor can cause performance problems for both the browser and the server because the editor constructs an HTML form describing the entire record. Fortunately, a much more scalable approach exists which is based on extracting the register items from the ISO19135 register record, storing them as subtemplates (essentially small metadata records with just the content of the register item). The process for extracting register items from an ISO19135 register record is as follows: + +- search for and select the register record +- choose 'Extract register items' from the 'Actions on selected set' menu +- After the register items have been extracted, you should see a results summary like the following. +- The figure for 'Subtemplates extracted' is the number of register items extracted from the ISO19135 register record. + +### Editing a register item + +To edit/change any of the register items that have been extracted as subtemplates, you can use the Directory management interface. This interface is accessed from the 'Administration' menu, under 'Manage Directories'. In this interface: + +- select 'Register Item (GeoNetwork)' as the type of subtemplate to edit as follows. +- enter a search term or just select the search option to return the first 50 register items. +- register items will appear in the left hand side bar, selecting on one will open an editing interface in the right hand panel. + +### Editing global register information + +To edit/change any of the global register information (eg. register owner, manager, version, languages), edit the register record in the normal GeoNetwork metadata editing interface. + +## Metadata editing: adding keywords + +When editing an ISO metadata record, a keyword (or concept) picker can be used which allows the editor to: + +- do searches for keywords in one or more thesauri in the catalog (search results are displayed on the left). +- select one or more keywords and add them to the selected items list (using arrows or drag & drop) on the right. +- add the selected keywords directly into metadata, grouping keywords by thesaurus. + +The editor can also control how many keywords from searches are displayed in the keyword picker (default is 50). + +Notice that a URL pointing to the source thesaurus is included in the Thesaurus Name citation (the actual element used for this is gmd:otherCitationDetails/gmx:FileName). The thesaurus can be downloaded as a SKOS file if it is a local or external thesaurus. For register thesauri the URL refers to the ISO19135 register record from which the thesaurus was created. + +## Search criteria: keywords + +You can search on keywords using the facet panel. All keywords are stored in the index field `tag` and are also available in field depending on thesaurus name eg. `th_theme` for INSPIRE themes. The field name is based on the thesaurus type and filename. diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/configure-validation.md b/docs/manual/docs/administrator-guide/managing-metadata-standards/configure-validation.md new file mode 100644 index 0000000000..07ac9f00bc --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-metadata-standards/configure-validation.md @@ -0,0 +1,27 @@ +# Configuring validation levels {#configure-validation} + +Each standard defines validation levels (using schematron - see [Implementing schema plugins](../../customizing-application/implementing-a-schema-plugin.md)). By default, ISO19139 proposes validation using: + +- ISO rules +- INSPIRE rules (TG v1.3) +- GeoNetwork rules (only related to multilingual records) +- URL checker + +All levels will be applied by default during validation and the admin interface allows customization if a rule: + +- is required to be valid (will be reported in green/red depending on the status) +- is for information only (will be reported in blue) +- is ignored. + +![](img/validation-level.png) + +Also conditions can be set to only apply rules to specific records. The condition can be defined on: + +- XPath +- Group +- User profile +- Keyword + +For example, [geocat.ch](https://www.geocat.ch/) defines for the GM03 ISO19139 profile rules depending on groups (ie. partners) and the type of dataset eg. a basic geodata. + +![](img/validation-level-example.png) diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-choice.png b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-choice.png new file mode 100644 index 0000000000..764dfe7e58 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-choice.png differ diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-config.png b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-config.png new file mode 100644 index 0000000000..678d75bfbb Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-config.png differ diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-custom.png b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-custom.png new file mode 100644 index 0000000000..bcbfa61e43 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-custom.png differ diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-customform.png b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-customform.png new file mode 100644 index 0000000000..bc40fa9752 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-customform.png differ diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-setting.png b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-setting.png new file mode 100644 index 0000000000..c28c31fe2d Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/mit-setting.png differ diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/img/validation-level-example.png b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/validation-level-example.png new file mode 100644 index 0000000000..d538765be4 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/validation-level-example.png differ diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/img/validation-level.png b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/validation-level.png new file mode 100644 index 0000000000..110e18e345 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-metadata-standards/img/validation-level.png differ diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/index.md b/docs/manual/docs/administrator-guide/managing-metadata-standards/index.md new file mode 100644 index 0000000000..4b5c7cb1d9 --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-metadata-standards/index.md @@ -0,0 +1,5 @@ +# Managing metadata & template {#metadata-and-template} + +- [Managing metadata standards](standards.md) +- [Configuring validation levels](configure-validation.md) +- [Configuring metadata identifier](metadata-identifier.md) diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/metadata-identifier.md b/docs/manual/docs/administrator-guide/managing-metadata-standards/metadata-identifier.md new file mode 100644 index 0000000000..b45b2049f8 --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-metadata-standards/metadata-identifier.md @@ -0,0 +1,34 @@ +# Configuring metadata identifier {#metadata_identifier} + +Some organisations require the definition of metadata identifiers using [URN](https://en.wikipedia.org/wiki/Uniform_Resource_Name) templates. + +From the `admin console` --> `metadata and template` --> `Metadata identifier templates` users can customise the behaviour of the catalog when creating new metadata: + +- Create a random UUID. This is the "standard" behaviour of GeoNetwork and it's set as default. +- Use metadata URN templates to define the metadata identifiers. This option allows the user to enter a metadata identifier from the metadata URN templates defined by an administrator user. + +To enable the usage of metadata URN templates for the metadata identifiers, the user should disable the following setting: + +![](img/mit-setting.png) + +Once enabled the metadata create page displays a new panel, that allows the user to select the metadata identifier template: + +![](img/mit-choice.png) + +- Custom identifier: Allows the user to enter a free-text value for the metadata identifier. + +![](img/mit-custom.png) + +- Autogenerated identifier: the catalog creates a random UUID. +- A list of custom templates: A list of the metadata identifier templates. When the user selects one of these templates, the form request the different template values. + +![](img/mit-customform.png) + +New templates can be added in the configuration interface: + +![](img/mit-config.png) + +For each template a user can define some parameters to fill in the metadata create form. Parameters are defined between curly braces. For example: + +- ::{TT}{AA}{II}{CCCC} +- au.gov.bom::{IDCODE} diff --git a/docs/manual/docs/administrator-guide/managing-metadata-standards/standards.md b/docs/manual/docs/administrator-guide/managing-metadata-standards/standards.md new file mode 100644 index 0000000000..63fe7a73e4 --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-metadata-standards/standards.md @@ -0,0 +1,52 @@ +# Managing metadata standards + +Metadata records in GeoNetwork are described by a schema. The schema sets out the structuring of the metadata record and provides all the ancillary data and functions to use the schema in GeoNetwork. + +A metadata schema plugin capability was introduced in GeoNetwork 2.8.0. In 3.0.0 the plugin capability was expanded to facilitate the fact that plugins can contain java-code. + +!!! note + + Adding a metadata schema to GeoNetwork that is incorrect or invalid can thoroughly break your GeoNetwork instance. This section is for catalogue administrators who are confident about metadata schemas and understand the different technologies involved with a GeoNetwork metadata schema. + + +A detailed description of what constitutes a metadata schema for GeoNetwork can be found in the GeoNetwork Developers Manual. This section will describe how to access the schema add, update and delete functions and how those functions should be used. + +!!! note + + Metadata schemas should be thoroughly tested in a development instance of GeoNetwork **before** they are deployed in a production instance. Errors in a schema plugin (particularly in the presentation XSLTs) may make your GeoNetwork instance unusable. + + +## Adding a schema + +To add a metadata schema to the catalog, a rebuild of the sources is required. In a source-code tree there are 4 actions to be done in the settings (database). + +- Place the schema-folder in /schemas + +- Verify and if compatible update the version of GeoNetwork (parent) referenced from the pom.xml file in the schema plugin. + +- Add a reference in /schemas/pom.xml to the newly added schema + + ``` xml + {myschema} + ``` + +- Add references to the newly added schema in /web/pom.xml + + ``` xml + + ${project.groupId} + {myschema} + ${project.version} + + ``` + +- and + + ``` xml + + ${project.basedir}/../schemas/{myschema}/src/main/plugin + ${basedir}/src/main/webapp/WEB-INF/data/config/schema_plugins + + ``` + +Then Build and deploy your instance of GeoNetwork. diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/authentication-mode.md b/docs/manual/docs/administrator-guide/managing-users-and-groups/authentication-mode.md new file mode 100644 index 0000000000..61b53c68e4 --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-users-and-groups/authentication-mode.md @@ -0,0 +1,845 @@ +# Authentication mode + +By default the catalog uses the internal database for user management and authentication. However there are some other authentication mechanisms available: + +- [Configuring LDAP](authentication-mode.md#authentication-ldap) +- [Configuring LDAP - Hierarchy](authentication-mode.md#authentication-ldap-hierarchy) +- [Configuring CAS](authentication-mode.md#authentication-cas) +- [Configuring OAUTH2 OpenID Connect](authentication-mode.md#authentication-openid) +- [Configuring Keycloak](authentication-mode.md#authentication-keycloak) +- [Configuring Shibboleth](authentication-mode.md#authentication-shibboleth) + +Which mode to use is configured in **`WEB-INF/config-security/config-security.xml`** or via an environment variable `geonetwork.security.type`. + +Uncomment the relevant line in **`WEB-INF/config-security/config-security.xml`**: + +``` xml + +``` + +## Configuring LDAP {#authentication-ldap} + +[Lightweight Directory Access Protocol (LDAP)](https://en.wikipedia.org/wiki/Ldap) enables GeoNetwork to verify usernames and passwords to a remote identity store. LDAP implementation uses the default GeoNetwork Login User Interface elements. + +GeoNetwork currently has 2 approaches to configure LDAP. Verify also the alternative approach in [Configuring LDAP - Hierarchy](authentication-mode.md#authentication-ldap-hierarchy). + +The LDAP configuration is defined in `WEB-INF/config-security/config-security.properties`, you can then configure your environment updating the previous file or overriding the properties in the file `WEB-INF/config-security/config-security-overrides.properties`. + +1. Define the LDAP connection: + + - `ldap.base.provider.url`: This tells the portal where the LDAP server is located. Make sure that the computer with the catalog can hit the computer with the LDAP server. Check to make sure that the appropriate ports are opened, etc. + - `ldap.base.dn`: this will usually look something like: "dc=[organizationnamehere],dc=org" + - `ldap.security.principal` / `ldap.security.credentials`: Define LDAP administrator user to use to bind to LDAP. If not define, an anonymous bind is made. Principal is the username and credentials property the password. + + ``` text + # LDAP security properties + ldap.base.provider.url=ldap://localhost:389 + ldap.base.dn=dc=fao,dc=org + ldap.security.principal=cn=admin,dc=fao,dc=org + ldap.security.credentials=ldap + ``` + + To verify that you have the correct settings, try to connect to the LDAP server using an LDAP browser application. + +2. Define where to find users in LDAP structure for authentication: + + - `ldap.base.search.base`: this is where the catalog will look for users for authentication. + - `ldap.base.dn.pattern`: this is the distinguished name for the user to bind with. `{0}` is replaced by the user name typed in the sign in screen. + + ``` text + ldap.base.search.base=ou=people + ldap.base.dn.pattern=uid={0},${ldap.base.search.base} + #ldap.base.dn.pattern=mail={0},${ldap.base.search.base} + ``` + +### Authorization Settings + +When using LDAP, the user information and privileges for GeoNetwork could be defined from the LDAP attributes. + +#### User information + +The user information could be retrieved from the LDAP configuring for each user attribute in the catalog database which LDAP attributes match. If the attribute is empty or not defined, a default value could be defined. The property value is composed by two parts separated by `,` character. The first part is the attribute name and the second part is the default value in case the attribute name is not define or the attribute value in LDAP is empty. + +The configuration is the following: + +``` text +# Map user information to LDAP attributes and default values +# ldapUserContextMapper.mapping[name]=ldap_attribute,default_value +ldapUserContextMapper.mapping[name]=cn, +ldapUserContextMapper.mapping[surname]=givenName, +ldapUserContextMapper.mapping[mail]=mail,data@myorganization.org +ldapUserContextMapper.mapping[organisation]=,myorganization +ldapUserContextMapper.mapping[kind]=, +ldapUserContextMapper.mapping[address]=, +ldapUserContextMapper.mapping[zip]=, +ldapUserContextMapper.mapping[state]=, +ldapUserContextMapper.mapping[city]=, +ldapUserContextMapper.mapping[country]=, +``` + +#### Privileges configuration + +User groups and user profiles could be set optionally from LDAP information or not. By default user privileges are managed from the local database. If LDAP information should be used to define user privileges, set the `ldap.privilege.import` property `true`: + +``` text +ldap.privilege.import=true +``` + +When importing privileges from LDAP, the catalog administrator could decide to create groups defined in the LDAP and not defined in local database. For this set the following property to true: + +``` text +ldap.privilege.create.nonexisting.groups=false +``` + +In order to define which groups the user is member of and which profile is the user: + +``` text +ldapUserContextMapper.mapping[privilege]=groups,sample +# If not set, the default profile is RegisteredUser +# Valid profiles are ADMINISTRATOR, USER_ADMIN, REVIEWER, EDITOR, REGISTERED_USER, GUEST +ldapUserContextMapper.mapping[profile]=privileges,RegisteredUser +``` + +Attributes configuration: + +- privilege attribute contains the group this user is member of. More than one group is allowed. +- profile attribute contains the profile of the user. + +User valid profiles are: + +- Administrator +- UserAdmin +- Reviewer +- Editor +- RegisteredUser +- Guest + +If LDAP attribute containing profiles does not match the catalog profile list, a mapping could be defined: + +``` text +# Map LDAP custom profiles to catalog profiles. Not used if ldap.privilege.pattern is defined. +ldapUserContextMapper.profileMapping[Admin]=Administrator +ldapUserContextMapper.profileMapping[Editor]=Reviewer +ldapUserContextMapper.profileMapping[Public]=RegisteredUser +``` + +For example, in the previous configuration, the attribute value `Admin` will be mapped to `Administrator` (which is a valid profile for the catalog). + +An attribute could define both the profile and the group for a user. To extract this information, a custom pattern could be defined to populate user privileges according to that attribute: + +1. Define one attribute for the profile and one for groups in `WEB-INF/config-security/config-security-overrides.properties` + + ``` text + # In config-security-overrides.properties + ldapUserContextMapper.mapping[privilege]=cat_privileges,sample + ``` + +2. Define one attribute for the privilege and define a custom pattern: + + ``` text + # In config-security.properties + ldap.privilege.pattern=CAT_(.*)_(.*) + ldap.privilege.pattern.idx.group=1 + ldap.privilege.pattern.idx.profil=2 + ``` + + Enable the bean `er` for `LDAPUserDetailsContextMapperWithPattern` ( in `WEB-INF/config-security/config-security-ldap.xml`). + + ``` xml + + + + + + + + + + + + + + + + + + + + + + ``` + +3. Define custom location for extracting group and role (no support for group/role combination) (use LDAPUserDetailsContextMapperWithProfileSearch in **`config-security.xml`**). + + ``` text + ldap.privilege.search.group.attribute=cn + ldap.privilege.search.group.object=ou=groups + #ldap.privilege.search.group.query=(&(objectClass=*)(memberUid=uid={0},${ldap.base.search.base},${ldap.base.dn})(cn=EL_*)) + ldap.privilege.search.group.queryprop=memberuid + ldap.privilege.search.group.query=(&(objectClass=*)(memberUid=uid={0},${ldap.base.search.base},${ldap.base.dn})(|(cn=SP_*)(cn=EL_*))) + ldap.privilege.search.group.pattern=EL_(.*) + ldap.privilege.search.privilege.attribute=cn + ldap.privilege.search.privilege.object=ou=groups + ldap.privilege.search.privilege.query=(&(objectClass=*)(memberUid=uid={0},${ldap.base.search.base},${ldap.base.dn})(cn=SV_*)) + ldap.privilege.search.privilege.pattern=SV_(.*) + ``` + + The LDAP attribute can contains the following configuration to define the different type of users, for example: + + ``` text + cat_privileges=CAT_ALL_Administrator + + -- Define a reviewer for the group GRANULAT + cat_privileges=CAT_GRANULAT_Reviewer + + -- Define a reviewer for the group GRANULAT and editor for MIMEL + cat_privileges=CAT_GRANULAT_Reviewer + cat_privileges=CAT_MIMEL_Editor + + -- Define a reviewer for the group GRANULAT and editor for MIMEL and RegisteredUser for NATURA2000 + cat_privileges=CAT_GRANULAT_Reviewer + cat_privileges=CAT_MIMEL_Reviewer + cat_privileges=CAT_NATURA2000_RegisteredUser + + -- Only a registered user for GRANULAT + cat_privileges=CAT_GRANULAT_RegisteredUser + ``` + +#### Synchronization + +A synchronization task is taking care of removing LDAP users that may be deleted. For example: + +- T0: User A signs in to the catalog. A local user A is created in the user database. +- T1: User A is deleted from the LDAP (User A cannot sign in to the catalog anymore). +- T2: The synchronization task will check that all local LDAP users exist in LDAP: + - If the user does not own any records, it will be deleted. + - If the user owns metadata records, a warning message will be written to the catalog logging system. The owner of the record should be changed to another user before the task can remove the current owner. + +By default the task runs once every day. This can be changed in the following property: + +``` text +# Run LDAP sync every day at 23:30 +ldap.sync.cron=0 30 23 * * ? +``` + +The following properties allow advanced configuration of the synchronisation process: + +``` text +ldap.sync.user.search.base=${ldap.base.search.base} +ldap.sync.user.search.filter=(&(objectClass=*)(mail=*@*)(givenName=*)) +ldap.sync.user.search.attribute=uid +ldap.sync.group.search.base=ou=groups +ldap.sync.group.search.filter=(&(objectClass=posixGroup)(cn=EL_*)) +ldap.sync.group.search.attribute=cn +ldap.sync.group.search.pattern=EL_(.*) +``` + +#### Debugging + +If the connection fails, try to increase the logging level for LDAP in `WEB-INF/classes/log4j.xml`: + +``` xml + + + +``` + +Or from the Configuration Settings set the `Log level` to `DEV` temporarily: + +![](img/setting-log-level.png) + +## Configuring LDAP - Hierarchy {#authentication-ldap-hierarchy} + +A slightly different method for LDAP configuration was introduced in mid-2020. + +This extends the original configuration infrastructure (original configurations still work without any changes). + +Before you start configuring, you will need to know; + +1. URL to your LDAP Server +2. Username/password to login to the LDAP Server (to execute queries) +3. LDAP query to find a user (given what they type in on the login screen) +4. Details of how to convert the LDAP user's attributes to GeoNetwork user attributes +5. LDAP query to find groups a user is a member of +6. How to convert a LDAP group to a GeoNetwork Group/Profile + +!!! note + + There is a [video developer chat](https://www.youtube.com/watch?v=f8rvbEdnE-g) that goes into details for how to configure LDAP including setting up a pre-configured LDAP server (using Apache Directory Studio) for testing/debugging/learning. + + +!!! note + + Should I use the Hierarchy or Original configuration? + + If you already have an existing (Original) configuration, there's no need to move to the new one. Most of the code between the two is the same. + + If you are starting a new configuration, I would recommend the Hierarchy configuration. It's a little simpler and supported by test cases and test infrastructure. It also supports LDAPs where users/groups are in multiple directories. + + +### Configuring LDAP Beans (Hierarchy) + +GeoNetwork comes with a sample LDAP configuration that you can use in Apache Directory Studio to create the same LDAP server used in the test cases. There is also a sample GeoNetwork configuration that connects to this LDAP server. Please see `core-geonetwork/blob/master/core/src/test/resources/org/fao/geonet/kernel/security/ldap/README.md`{.interpreted-text role="repo"} or the [video developer chat](https://www.youtube.com/watch?v=f8rvbEdnE-g) for instructions. + +!!! note + + To use this configuration, uncomment the "" line in ``web/src/main/webapp/WEB-INF/config-security/config-security.xml`` + + +1. Configure the `ce` bean with a reference to your LDAP server and a user that can execute LDAP queries. + + ``` xml + + + + + + + ``` + +2. Configure the `ch` bean with the query used to find the user (given what was typed in the login page). + + NOTE: Set `ee` to `ue` to do a recursive search of the LDAP. Use `se` to control which directory the search starts in ("" means start from the root). + + ``` xml + + + + + + + + ``` + +3. Configure the `er` bean with how to convert the LDAP user's attributes to GeoNetwork user attributes (see the original configuration documentation, above). + + NOTE: The `ue` portion has two parts. The first part is the name of LDAP attribute (can be blank). The second part is the default value if the LDAP attribute is missing or empty (see the original configuration documentation, above). + + ``` xml + + + + + + + + + + + + + + + + + + + + + ``` + +4. Continue configuring the `er` bean so the LDAP can also provide group/profile roles for the user. + + NOTE: The `ry` is the LDAP directory where the membership query will be start ("" means start at the root of the LDAP). + + ``` xml + + + + + + + + + + + + + + ``` + +5. Continue configuring the `er` bean so the LDAP roles can be converted to GeoNetwork Groups/Profiles. + + NOTE: You can use multiple `rs`. + + ``` xml + + + + + + + + + + ``` + +There are currently two ways to convert an LDAP group to GeoNetwork Groups/Profiles. + +- The `er`, which works the same as the original LDAP configuration. It uses a regular expression to parse the LDAP group name into a GeoNetwork Group/Profile. This will convert the LDAP role `OR` into the GeoNetwork group `AL` with Profile `r.` + + ``` xml + + + + + + + + + + + + + + + ``` + +- There is also a more direct way using `er`. This directly converts the LDAP group name into a list of GeoNetwork Groups/Profiles. + + ``` xml + + + + + + + + HGIS_GeoNetwork_Admin + + + + + + + + + + + + + HGIS_GeoNetwork_Editor + + + + + + + + + + + + + + ``` + +## Configuring CAS {#authentication-cas} + +To enable CAS, set up authentication by including `WEB-INF/config-security/config-security-cas.xml` in `WEB-INF/config-security/config-security.xml`, uncommenting the following lines: + +``` xml + + +``` + +CAS can use either LDAP or a database for user management. To use a database uncomment the following lines instead: + +``` xml + + +``` + +The CAS configuration is defined in `WEB-INF/config-security/config-security.properties`. You can configure your environment by updating the previous file or by defining property overrides in the file `WEB-INF/config-security/config-security-overrides.properties`: + +``` text +cas.baseURL=https://localhost:8443/cas +cas.ticket.validator.url=${cas.baseURL} +cas.login.url=${cas.baseURL}/login +cas.logout.url=${cas.baseURL}/logout?url=${geonetwork.https.url}/ +``` + +## Configuring OAUTH2 OpenID Connect {#authentication-openid} + +[OAUTH2 OpenID Connect](https://openid.net/connect/) is an authentication and authorization system based on OAUTH2. Geonetwork's OpenID Connect plugin has been tested with [Keycloak](https://keycloak.org) and [Azure AD](https://azure.microsoft.com/en-ca/services/active-directory/), but should work with any provider. + +Basic Setup Steps: + +1. Configure your IDP Server (i.e. Keycloak or Azure AD) + 1. Ensure that the ID Token provides role/group information + 2. Authorize your Geonetwork URLs for redirects (i.e. `http://localhost:8080/geonetwork/login/oauth2/code/geonetwork-oicd`) + 3. Record the Client ID + 4. Record the Client Secret + 5. Get the Server's JSON metadata document +2. Configure Geonetwork via environment variables + 1. ``GEONETWORK_SECURITY_TYPE=openidconnect`` + 2. ``OPENIDCONNECT_CLIENTSECRET=\...`` (from your IDP server) + 3. ``OPENIDCONNECT_CLIENTID=\...`` (from your IDP server) + 4. ``OPENIDCONNECT_SERVERMETADATA_JSON_TEXT='\...'`` (the text of your Server's JSON metadata document) + 5. ``OPENIDCONNECT_IDTOKENROLELOCATION=\...`` (location of the user's roles in the ID Token) + +Geonetwork's Open ID Connect plugin has a lot of configuration options - please see the `WEB-INF/config-security/config-security-openidconnect.xml` and `WEB-INF/config-security/config-security-openidconnect-overrides.properties` files. + +### Environment Variable and Meaning + +**GEONETWORK_SECURITY_TYPE** + +Should be `ct`. + +**OPENIDCONNECT_CLIENTID** + +The name of the client/application you configured on your OpenID server. + +**OPENIDCONNECT_CLIENTSECRET** + +The `et` you configured on your OpenID server. + +**OPENIDCONNECT_SERVERMETADATA_CONFIG_URL** + +URL to the external OIDC server's JSON metadata document. This is typically at ``/.well-known/openid-configuration`` on the IDP server. + +!!! note + + This will download the server's configuration everytime GeoNetwork starts up, which could be a security concern. For security, use a `ps` URL. + + +**OPENIDCONNECT_SERVERMETADATA_JSON_TEXT** + +Should be the text of your OpenID server's metadata configuration (JSON). + +**OPENIDCONNECT_SERVERMETADATA_FNAME** + +Instead of putting the OpenID server's metadata configuration as text in a variable (``OPENIDCONNECT_SERVERMETADATA_JSON_TEXT``), you can put the JSON contents in a file and reference it with this variable (ie. `/WEB-INF/config-security/openid-configuration.json`) + +**OPENIDCONNECT_IDTOKENROLELOCATION** + +Where, in the ID Token, are the users roles/groups stored (i.e. "groups", "roles", or "resource_access.gn-key.roles") + +**OPENIDCONNECT_ROLECONVERTER** + +This provides simple role conversion from the OpenID server to Geonetwork roles. + +ie. ``"GeonetworkAdmin=Administrator,GeonetworkEditor=Editor"`` + +This will convert "GeonetworkAdmin" (from the OpenID Server) to the Geonetwork "Administrator" role. + +!!! note + + Like the keycloak plugin, you can use role/group names of the form "group:role" to assign a user to Geonetwork group and permission level. + + +**OPENIDCONNECT_MINIMUMPROFILE** + +Every user who authenticates against the OpenID server will be given this role. + +Default is ``"RegisteredUser"``. + +**OPENIDCONNECT_USERPROFILEUPDATEENABLED** + +When a user logs on, update their Geotwork profile from the OpenID server's ID Token. + +Default is ``"true"``. + +**OPENIDCONNECT_USERGROUPUPDATEENABLED** + +When a user logs on, update their Geotwork group/role permissions. + +Default is ``"true"``. + +**OPENIDCONNECT_SCOPES** + +Limit the requested scope access to the OpenID server. + +Default "openid email profile", and "openid email profile offline_access" (for bearer tokens). + +**OPENIDCONNECT_LOGINTYPE** + +How Geonetwork deals with users who are not logged on. + +Default is "LINK" - users can click on the "login" link on the main page. + +"AUTOLOGIN" - No login form provided which will automatically login the user when possible. + +**OPENIDCONNECT_LOGSENSITIVE_INFO** + +"true" or "false" (default) + +Logs: CODE, ACCESS TOKEN, ID TOKEN, userinfo endpoint result, and calculated GeoNetwork authorities. + +LOGGING THIS INFORMATION IS PROBABLY A SECURITY AND PERSONAL INFORMATION RISK. DO NOT TURN THIS ON IN A SYSTEM THAT IS ACTUALLY BEING USED. + +We try not to log very sensitive information - we don't log the full access or id token (just the claims part). We log the single-use CODE, but it should have already been deactivated by the server before we log it. + +The access token, userinfo, and id token contain sensitive information (i.e. real names, email address, etc\...) + +### Configuration for a Keycloak Server + +It's outside the scope of this document to fully describe the steps to configure keycloak, but this should serve as a guide. + +This will configure keycloak backed by **another OpenID IDP** (for example, by an Azure AD). In keycloak: + +1. Create a realm (i.e. `lm`) +2. Create an openid client (i.e. `nt`). This is your ClientID. + 1. Root URL: ``http://localhost:7777/geonetwork`` (this is the GN root URL) + 2. Valid Redirect URIs: ``http://localhost:7777/geonetwork/*`` + 3. Access Type: Confidential + 4. On the `ls` tab, get the secret (this is your Client Secret) + 5. On the `es` tab, create some roles: Administrator, Editor, Reviewer, RegisteredGuest +3. Create your backing Identity Provider (i.e. to another OpenID server). Or you can configure users directly in keycloak. + 1. At the bottom of the page, choose "import from URL" and import the backing server's configuration location. + 2. Add the Client Secret (from the backing service) + 3. Add the Client ID (from the backing service) + 4. set "Client Authentication" to "Client secret sent as post" +4. Configure role translation + 1. Edit the "Identity Provider" you just created, and go to the "Mappers" tab. + 2. Press "Create" and and add a "Claim to Role". + 3. Set Sync Mode Override to "Force" + 4. Claim: `es` + 5. Claim Value: `DP` + 6. Role: choose the "Administrator" role from the `nt` client. + 7. Repeat the above for Administrator, Editor, Reviewer, and RegisteredGuest +5. Configure details for your backing IDP + 1. Edit the "Identity Provider" you just configured + 2. On the Mappers tab, "Add Builtin" and tick "client roles (User Client Role)" then "Add selected" + 3. Edit the "client roles" mapper and make sure "Add to ID token" and "Add to userinfo" are on + +You should have Keycloak's Client id ("myclient") and the client secret. The configuration JSON is available at `https://YOUR_KEYCLOAK_HOST/realms/{YOUR REALM NAME}/.well-known/openid-configuration` + +Your environment variables will looks like this: + +``` properties +GEONETWORK_SECURITY_TYPE=openidconnect +OPENIDCONNECT_CLIENTSECRET='...' +OPENIDCONNECT_CLIENTID='...' +OPENIDCONNECT_SERVERMETADATA_JSON_TEXT='...big json text...' +OPENIDCONNECT_IDTOKENROLELOCATION='resource_access.{your client id}.roles' +``` + +### Azure AD Configuration + +There are two ways to setup Azure AD. The first is with user and groups (a more traditional LDAP method) or with Application Roles. + +#### With Users and Groups + +Setup the Azure Application: + +1. Create a new `on` +2. use `http://localhost:8080/geonetwork/login/oauth2/code/geonetwork-oicd` as a redirect URIs +3. On the "Certificates & Secrets" add a new secret and record it (make sure you get the secret value and NOT the object id) +4. Make sure the groups are in the ID token - on the "Manifest" tab, edit the JSON so that "groupMembershipClaims": "SecurityGroup" is set +5. On the summary page, get the Application (client) ID +6. On the summary page, choose "Endpoints" (at the top) and get the JSON text from the "OpenID Connect metadata document" Endpoints + +Setup users and groups: + +1. In Azure AD, go to groups +2. Add new Groups - "geonetworkAdmin", "geonetworkReviewer", etc\... Record the name and the group's **Object ID** +3. Edit a User, and choose Groups, and add them to appropriate group. + +Your environment variables will looks like this: + +``` properties +GEONETWORK_SECURITY_TYPE=openidconnect +OPENIDCONNECT_CLIENTSECRET='...' +OPENIDCONNECT_CLIENTID='...' +OPENIDCONNECT_SERVERMETADATA_JSON_TEXT='...big json text...' +OPENIDCONNECT_IDTOKENROLELOCATION='groups' +OPENIDCONNECT_ROLECONVERTER='3a94275f-7d53-4205-8d78-11f39e9ffa5a=Administrator,d93c6444-feee-4b67-8c0f-15d6796370cb=Reviewer' +``` + +!!! note + + The roles are in the "roles" part of the ID Token. + + +!!! note + + The OPENIDCONNECT_ROLECONVERTER converts the Azure AD Group's Object ID to a Geonetwork Role. + + +#### With Application Roles + +Setup the Azure Application: + +1. Create a new Enterprise application +2. use `http://localhost:8080/geonetwork/login/oauth2/code/geonetwork-oicd` as a redirect URIs +3. On the "Certificates & Secrets" add a new secret and record it (make sure you get the secret value and NOT the object id) +4. Make sure the groups are in the ID token - on the "Manifest" tab, edit the JSON so that "groupMembershipClaims": "ApplicationGroup" is set +5. On the summary page, get the Application (client) ID +6. On the summary page, choose "Endpoints" (at the top) and get the JSON text from the "OpenID Connect metadata document" Endpoints + +Setup Application Roles: + +1. In Application you created, go to "App Roles". +2. Add new Groups - "Editor", "Reviewer", etc\... + +Assign Users: + +1. Go to Azure AD, Enterprise Application, then the application you created +2. Choose "Assign users and groups" +3. Press the "Add user/group" (top) +4. Press "None Selected" (under Users) and choose some users +5. Press "None Selected" (Under Select a Role) and choose some roles +6. Configure all your users with roles + +Your environment variables will looks like this: + +``` properties +GEONETWORK_SECURITY_TYPE=openidconnect +OPENIDCONNECT_CLIENTSECRET='...' +OPENIDCONNECT_CLIENTID='...' +OPENIDCONNECT_SERVERMETADATA_JSON_TEXT='...big json text...' +OPENIDCONNECT_IDTOKENROLELOCATION='roles' +``` + +!!! note + + The roles are in the "roles" part of the ID Token. + + +!!! note + + You don't typically have to do any role conversion since the role name will be used in the ID Token. + + +### OIDC Bearer Tokens {#oidc_bearer_tokens} + +Bearer Tokens are also supported - you can attach the JWT Bearer token to any request by setting the HTTP header like this: + +``` properties +Authorization: Bearer: +``` + +Bearer Tokens are mostly used for automated (desktop or application) API calls - real users should just login normally using OIDC. + +1. Setup your OIDC configuration (see [Configuring OAUTH2 OpenID Connect](authentication-mode.md#authentication-openid)) +2. Setup the OIDC Bearer token configuration (see [Configuration](authentication-mode.md#bearer_token_configuration)) +3. Obtain a Bearer token from the OIDC server. This is the hard part and there are several ways to do this. One way that is used is via the OAuth 2.0 Device Authorization Grant ("Device Flow") workflow. +4. Attach it to your request headers (see [OIDC Bearer Tokens](authentication-mode.md#oidc_bearer_tokens)) +5. Make protected requests to the Geonetwork API + +This has been tested with Keycloak and with Azure AD. It should work with other JWT-based OIDC services. + +#### Validation + +The token is validated in three major ways: + +1. The bearer token will be used to access the `fo` ("token validation") endpoint specified in the OIDC configuration. This means the IDP validates the token (at the very least its signature and expiry). +2. The bearer token (JWT) will be checked that the audience for it is the same as our configurated OIDC configuration. This will ensure that someone isn't getting a token from a different service and attempting to use it here. See ``AudienceAccessTokenValidator.java`` +3. The bearer token (JWT) will be checked that the subject of the JWT and the `fo` (returned from the IDP) are the same. This shouldnt be a problem in our use-case, but the OAUTH2 specification recommends this check. See ``SubjectAccessTokenValidator.java`` + +#### Configuration {#bearer_token_configuration} + +Configure OIDC as above - ensure this is working. + +Instead of using `GEONETWORK_SECURITY_TYPE=openidconnect`, use `GEONETWORK_SECURITY_TYPE=openidconnectbearer`. + +Inside `WEB-INF/config-security/config-security-openidconnectbearer.xml`: + +1. If you are using keycloak (configured with Groups in the `fo` response), then uncomment the `er` bean and comment out the `er` bean. +2. If you are using Azure AD (MS Graph API for the user's groups), then then uncomment the `er` bean and comment out the `er` bean. + +The easiest way to test is to obtain a Bearer Token, and then use a browser plugin to add the ``Authorization: Bearer `` header to all requests. When you visit the Geonetwork website, you should see yourself logged in with the appropriate permissions. + +#### Other Providers + +This has been tested with Azure AD (groups in the MS Graph API) and KeyCloak (groups in the `fo`). + +For other IDP, you might have to make some modifications. + +1. Make sure the `or` and `or` work correctly for your JWT bearer tokens. +2. Make sure that the user's groups are available - see the `er` interface and its two implementations - `er` and `er`. + +## Configuring Keycloak {#authentication-keycloak} + +[Keycloak](https://keycloak.org) is a software solution to facilitate storage of authentication details, user federation, identity brokering and social login. GeoNetwork can be set up to use a keycloak instance for authentication. + +Install keycloak from its instructions or use this example setup in docker + +Keycloak details are defined via environment variables + +``` text +KEYCLOAK_AUTH_SERVER_URL={keycloak url} +KEYCLOAK_REALM={realm name} +KEYCLOAK_RESOURCE={client name} +KEYCLOAK_SECRET={client secret} +KEYCLOAK_DISABLE_TRUST_MANAGER={true|false} +``` + +You can setup more advance keycloak settings by editing the file **`WEB-INF/config-security/keycloak.json`** + +### Geonetwork client URL configuration + +Ensure that when you configure your client that you setup the valid redirect uris to your geonetwork installation. i.e. `https://localhost:8443/geonetwork/*`. If this is not setup correctly you may get and error indicating that a wrong redirect uri was supplied. Also if wanting to test the client backchannel logout then ensure that the admin URL is also set to the geonetwork installation. + +### Sample user/role/group setup + +#### Sample Role setup + +In your client role settings (clients -> myclient -> roles). Add the following roles + +``` text +Administrator +RegisteredUser +Guest +sample:UserAdmin +sample:Reviewer +sample:Editor +sample:RegisteredUser +``` + +#### Sample Group configuration + +1. Go to keycloak groups (left menu). +2. Create a new group called "Administrator" +3. Edit the group. Go to Role Mappings -> Client Roles (myclient) -> select the administrator roles and click on "Add selected" Any user joined to the Administrator group will be a geonetwork administrator. + +#### Sample User configuration + +1. Go to keycloak users (left menu) +2. Add or select existing user. Then go to that user. +3. Go to role Mappings -> Client Roles (myclient) -> select the available roles to be applied and click on "Add selected" or go to Groups -> Available Groups -> Click on the Administrator Group and then click on "Join" + +A similar setup is described for geoserver in the [geoserver documentation](https://docs.geoserver.org/latest/en/user/community/keycloak/index.html). + +## Configuring EU Login {#authentication-ecas} + +EU Login is the central login mechanism of the European Commission. You can enable login against that central service in case your intended users have ar can acquire a EU Login. + +To enable EU Login, set up authentication by including `WEB-INF/config-security/config-security-ecas.xml` in `WEB-INF/config-security/config-security.xml`, uncommenting the following line: + +``` xml + +``` + +EU-login requires an ecas-plugin provided by the European Union. The ecas plugin is available via [CITnet](https://citnet.tech.ec.europa.eu/CITnet/nexus) for various java containers, such as Tomcat and JBoss. + +For tomcat, add two files to the tomcat lib folder: ecas-tomcat-x.y.z.jar and log4j-x.y.z.jar. Inside the lib folder copy two folders from **`eulogin-tomcat-x.y.z-config.zip`**: **`org/apache/catalina/authenticator`** and **`org/apache/catalina/startup`**. The mbeans folder contains a file **`mbeans-descriptors.xml`**. The startup folder contains a file **`Authenticators.properties`**. Verify that the JDK trusts the [ECAS certificates](https://webgate.ec.europa.eu/CITnet/confluence/display/IAM/Downloads-Certificates) else import them on the keystore of the JVM. + +The EU Login configuration is defined in **`WEB-INF/config-security/config-security.properties`**. You can configure your environment by updating the previous file or by defining property overrides in the file **`WEB-INF/config-security/config-security-overrides.properties`**: + +``` text +cas.baseURL=https://webgate.ec.europa.eu/cas +``` + +Restart the service and check the authentication menchanism. + +## Configuring Shibboleth {#authentication-shibboleth} + +The catalog can operate in a SAML secured federation. Shibboleth should be installed in Apache as described [here](https://wiki.shibboleth.net/confluence/display/SHIB2/Installation). The catalog is accessed via Apache. Setup Shibboleth authentication by including `WEB-INF/config-security/config-security-shibboleth.xml` in `WEB-INF/config-security/config-security.xml`. You can then configure your environment in `config-security-shibboleth-overrides.properties`. diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/creating-group.md b/docs/manual/docs/administrator-guide/managing-users-and-groups/creating-group.md new file mode 100644 index 0000000000..3cfe17939d --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-users-and-groups/creating-group.md @@ -0,0 +1,28 @@ +# Creating group + +The administrator can create new groups of users. User groups could correspond to logical units within an organisation, for example `es`, `re`, `nd`, `er`, `th` and so on. + +To create new groups you should be logged on with an account that has administrative privileges. + +1. Select the *Administration* button in the menu. On the Administration page, select *Group management*. + +2. Select *Add a new group*. You may want to remove the *Sample* group; + +3. Fill out the details. The email address will be used to send feedback on data downloads when they occur for resources that are part of the Group. + + !!! warning + + The Name should *NOT* contain spaces! You can use the Localization panel to provide localized names for groups. + + +4. Click *Save* + +Access privileges can be set per metadata record. You can define privileges on a per Group basis. + +Privileges that can be set relate to visibility of the Metadata (*Publish*), data *Download*, *Interactive Map* access and display of the record in the *Featured* section of the home page. + +*Editing* defines the groups for which editors can edit the metadata record. + +*Notify* defines what Groups are notified when a file managed by GeoNetwork is downloaded. + +Below is an example of the privileges management table related to a dataset. diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/creating-user.md b/docs/manual/docs/administrator-guide/managing-users-and-groups/creating-user.md new file mode 100644 index 0000000000..240fac6944 --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-users-and-groups/creating-user.md @@ -0,0 +1,10 @@ +# Creating user + +To add a new user to the GeoNetwork system, please do the following: + +1. Select the *Administration* button in the menu. On the Administration page, select *User management*. +2. Click the button *Add a new user*; +3. Provide the *information* required for the new user; +4. Assign the correct *profile* (see [Users, Groups and Roles](index.md#user_profiles)); +5. Assign the user to a *group* (see [Creating group](creating-group.md)); +6. Click *Save*. diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/img/password-forgot.png b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/password-forgot.png new file mode 100644 index 0000000000..d1bc512667 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/password-forgot.png differ diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/img/selfregistration-form.png b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/selfregistration-form.png new file mode 100644 index 0000000000..09321a4e4b Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/selfregistration-form.png differ diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/img/selfregistration-start.png b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/selfregistration-start.png new file mode 100644 index 0000000000..7e9a6f8084 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/selfregistration-start.png differ diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-about-to-be-cancelled.png b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-about-to-be-cancelled.png new file mode 100644 index 0000000000..9dfe2b17db Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-about-to-be-cancelled.png differ diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-has-expired.png b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-has-expired.png new file mode 100644 index 0000000000..d449d7b6c5 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-has-expired.png differ diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-will-expire-soon.png b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-will-expire-soon.png new file mode 100644 index 0000000000..ead6a368e0 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/session-will-expire-soon.png differ diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/img/setting-log-level.png b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/setting-log-level.png new file mode 100644 index 0000000000..4c694145e1 Binary files /dev/null and b/docs/manual/docs/administrator-guide/managing-users-and-groups/img/setting-log-level.png differ diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/index.md b/docs/manual/docs/administrator-guide/managing-users-and-groups/index.md new file mode 100644 index 0000000000..d05f35d035 --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-users-and-groups/index.md @@ -0,0 +1,78 @@ +# Managing users and groups + +- [Creating group](creating-group.md) +- [Creating user](creating-user.md) +- [User Self-Registration](user-self-registration.md) +- [Authentication mode](authentication-mode.md) + +## Default user {#user-defaults} + +Upon installation a default user with name `admin` and password `admin` is created. It is recommended to log in with these credentials directly after the installation has completed and to change the default password. + +## User session + +After the authentication process, a user session is created. This session will be closed automatically at some point by the server for security reasons. The default session timeout is set to 35 min (see [User session timeout configuration](../../customizing-application/advanced-configuration.md#session-timeout-configuration) for details). + +When there is no activity in the browser and the session is about to expire, a warning is displayed next to the user details 3 minutes before the timeout takes place: + +![](img/session-will-expire-soon.png) + +One (1) minute before the timeout, another message is displayed: + +![](img/session-about-to-be-cancelled.png) + +When the session seems to have been destroyed by the catalog, a message recommends to refresh the page and sign in again if needed: + +![](img/session-has-expired.png) + +## Users, Groups and Roles {#user_profiles} + +The catalog uses the concept of Users, Groups and User Profiles. + +- A User can be part of one or more Groups. +- A User has a Role in a Group. +- The Administrator Role is not related to a Group. + +The combination of Role and Group defines what tasks the User can perform on the system or on specific metadata records. + +Users can have different roles in different groups. A role defines what tasks the user can perform. + +Roles are hierarchical and based on inheritance. This means that a user with an Editor profile can create and modify new metadata records, but can also use all functions a Registered user can use. + +Rights associated with the roles are illustrated in detail in the list below: + +1. **Administrator Profile** + + The Administrator has special privileges that give access to all available functions. + + These include: + + - Full rights for creating new groups and new users. + - Rights to change users/groups profiles. + - Full rights for creating/editing/deleting new/old metadata. + - Perform system administration and configuration tasks. + +2. **User Administrator Profile** + + The user administrator is the administrator of his/her own group(s) with the following privileges: + + - Full rights on creating new users within their own groups. + - Rights to change users profiles within their own groups. + +3. **Content Reviewer Profile** + + The content reviewer is the only person allowed to give final clearance on the metadata publication on the Intranet and/or on the Internet: + + - Rights on reviewing metadata content within their own groups and authorising its approval and publication. + +4. **Editor Profile** + + The editor works on metadata with following privileges: + + - Full rights on creating/editing/ deleting new/old data within their own groups. + +5. **Registered User Profile** + + The Registered User has more access privileges than non-authenticated Guest users: + + - Right to download protected data. diff --git a/docs/manual/docs/administrator-guide/managing-users-and-groups/user-self-registration.md b/docs/manual/docs/administrator-guide/managing-users-and-groups/user-self-registration.md new file mode 100644 index 0000000000..2594a81f72 --- /dev/null +++ b/docs/manual/docs/administrator-guide/managing-users-and-groups/user-self-registration.md @@ -0,0 +1,107 @@ +# User Self-Registration {#user_self_registration} + +To enable the self-registration functions, see [System configuration](../configuring-the-catalog/system-configuration.md). When self-registration is enabled, for users that are not logged in, an additional link is shown on the login page: + +![](img/selfregistration-start.png) + +Click the `Create an account` button and fill out the registration form: + +![](img/selfregistration-form.png) + +The fields in this form are self-explanatory except for the following: + +- **Email**: The user's email address. This is mandatory and will be used as the username. +- **Profile**: By default, self-registered users are given the `Registered User` profile (see previous section). If any other profile is selected: + - the user will still be given the `Registered User` profile + - an email will be sent to the Email address nominated in the Feedback section of the 'System Administration' menu, informing them of the request for a more privileged profile + +## What happens when a user self-registers? + +When a user self-registration occurs, the user receives an email with the new account details that looks something like the following: + + Dear User, + + Your registration at The Greenhouse GeoNetwork Site was successful. + + Your account is: + username : dubya.shrub@greenhouse.gov + password : 0110O3 + usergroup: GUEST + usertype : REGISTEREDUSER + + You've told us that you want to be "Editor", you will be contacted by our office soon. + + To log in and access your account, please click on the link below. + http://greenhouse.gov/geonetwork + + Thanks for your registration. + + Yours sincerely, + The team at The Greenhouse GeoNetwork Site + +Notice that the user has requested an 'Editor' profile. As a result an email will be sent to the Email address nominated in the Feedback (see [Feedback](../configuring-the-catalog/system-configuration.md#system-config-feedback)) section of the `System Administration` menu which looks something like the following: + +Notice also that the user has been added to the built-in user group 'GUEST'. This is a security restriction. An administrator/user-administrator can add the user to other groups if that is required later. + +If you want to change the content of this email, you should modify `xslt/service/account/registration-pwd-email.xsl`. + + Dear Admin, + + Newly registered user dubya.shrub@greenhouse.gov has requested "Editor" access for: + + Instance: The Greenhouse GeoNetwork Site + Url: http://greenhouse.gov/geonetwork + + User registration details: + + Name: Dubya + Surname: Shrub + Email: dubya.shrub@greenhouse.gov + Organisation: The Greenhouse + Type: gov + Address: 146 Main Avenue, Creationville + State: Clerical + Post Code: 92373 + Country: Mythical + + Please action. + + The Greenhouse GeoNetwork Site + +If you want to change the content of this email, you should modify `xslt/service/account/registration-prof-email.xsl`. + +## The 'Forgot your password?' function + +This function allows users who have forgotten their password to request a new one. Go to the sign in page to access the form: + +![](img/password-forgot.png) + +For security reasons, only users that have the `Registered User` profile can request a new password. + +If a user takes this option they will receive an email inviting them to change their password as follows: + + You have requested to change your Greenhouse GeoNetwork Site password. + + You can change your password using the following link: + + http://localhost:8080/geonetwork/srv/en/password.change.form?username=dubya.shrub@greenhouse.gov&changeKey=635d6c84ddda782a9b6ca9dda0f568b011bb7733 + + This link is valid for today only. + + Greenhouse GeoNetwork Site + +The catalog has generated a changeKey from the forgotten password and the current date and emailed that to the user as part of a link to a change password form. + +If you want to change the content of this email, you should modify `xslt/service/account/password-forgotten-email.xsl`. + +When the user clicks on the link, a change password form is displayed in their browser and a new password can be entered. When that form is submitted, the changeKey is regenerated and checked with the changeKey supplied in the link, if they match then the password is changed to the new password supplied by the user. + +The final step in this process is a verification email sent to the email address of the user confirming that a change of password has taken place: + + Your Greenhouse GeoNetwork Site password has been changed. + + If you did not change this password contact the Greenhouse GeoNetwork Site helpdesk + + The Greenhouse GeoNetwork Site team + +If you want to change the content of this email, you should modify `xslt/service/account/password-changed-email.xsl`. diff --git a/docs/manual/docs/annexes/gallery/img/agroenvgeo_data_inra_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/agroenvgeo_data_inra_fr_geonetwork.png new file mode 100644 index 0000000000..d776bbfff4 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/agroenvgeo_data_inra_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/catalogue-imos_aodn_org_au_geonetwork.png b/docs/manual/docs/annexes/gallery/img/catalogue-imos_aodn_org_au_geonetwork.png new file mode 100644 index 0000000000..31d355a5b0 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/catalogue-imos_aodn_org_au_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/catalogue_ec_gc_ca_geonetwork.png b/docs/manual/docs/annexes/gallery/img/catalogue_ec_gc_ca_geonetwork.png new file mode 100644 index 0000000000..775347e1e6 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/catalogue_ec_gc_ca_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/catalogue_geo-ide_developpement-durable_gouv_fr_catalogue.png b/docs/manual/docs/annexes/gallery/img/catalogue_geo-ide_developpement-durable_gouv_fr_catalogue.png new file mode 100644 index 0000000000..6d6302d4e2 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/catalogue_geo-ide_developpement-durable_gouv_fr_catalogue.png differ diff --git a/docs/manual/docs/annexes/gallery/img/cdgp_u-strasbg_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/cdgp_u-strasbg_fr_geonetwork.png new file mode 100644 index 0000000000..d4ed9dea30 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/cdgp_u-strasbg_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/doterr_fr_accueil.png b/docs/manual/docs/annexes/gallery/img/doterr_fr_accueil.png new file mode 100644 index 0000000000..5ab95a954c Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/doterr_fr_accueil.png differ diff --git a/docs/manual/docs/annexes/gallery/img/download_data_grandlyon_com_catalogue.png b/docs/manual/docs/annexes/gallery/img/download_data_grandlyon_com_catalogue.png new file mode 100644 index 0000000000..9e401ad00d Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/download_data_grandlyon_com_catalogue.png differ diff --git a/docs/manual/docs/annexes/gallery/img/ecat_ga_gov_au_geonetwork.png b/docs/manual/docs/annexes/gallery/img/ecat_ga_gov_au_geonetwork.png new file mode 100644 index 0000000000..9b1b122e3f Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/ecat_ga_gov_au_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/fao_org_geonetwork.png b/docs/manual/docs/annexes/gallery/img/fao_org_geonetwork.png new file mode 100644 index 0000000000..cac6dbe78b Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/fao_org_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/gatt_lmi_is_geonetwork.png b/docs/manual/docs/annexes/gallery/img/gatt_lmi_is_geonetwork.png new file mode 100644 index 0000000000..23126e28fb Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/gatt_lmi_is_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/gdk_gdi-de_org_gdi-de.png b/docs/manual/docs/annexes/gallery/img/gdk_gdi-de_org_gdi-de.png new file mode 100644 index 0000000000..96ab86e3f3 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/gdk_gdi-de_org_gdi-de.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geo2france_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geo2france_fr_geonetwork.png new file mode 100644 index 0000000000..0ed098a8e0 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geo2france_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geo_be_catalogs_1_resources.png b/docs/manual/docs/annexes/gallery/img/geo_be_catalogs_1_resources.png new file mode 100644 index 0000000000..c64aee29c6 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geo_be_catalogs_1_resources.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geo_gob_bo_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geo_gob_bo_geonetwork.png new file mode 100644 index 0000000000..37770c934c Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geo_gob_bo_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geocat_ch_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geocat_ch_geonetwork.png new file mode 100644 index 0000000000..3884e9b427 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geocat_ch_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geocatalog_webservice-energy_org_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geocatalog_webservice-energy_org_geonetwork.png new file mode 100644 index 0000000000..f9880c7e29 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geocatalog_webservice-energy_org_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geocatalogue_apur_org_catalogue.png b/docs/manual/docs/annexes/gallery/img/geocatalogue_apur_org_catalogue.png new file mode 100644 index 0000000000..f5902e6719 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geocatalogue_apur_org_catalogue.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geocatalogue_geoportail_lu.png b/docs/manual/docs/annexes/gallery/img/geocatalogue_geoportail_lu.png new file mode 100644 index 0000000000..9f0ce89fb8 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geocatalogue_geoportail_lu.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geodata_nz_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geodata_nz_geonetwork.png new file mode 100644 index 0000000000..3344775028 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geodata_nz_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geograndest_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geograndest_fr_geonetwork.png new file mode 100644 index 0000000000..42866e34e3 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geograndest_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geoguyane_fr_catalogue.png b/docs/manual/docs/annexes/gallery/img/geoguyane_fr_catalogue.png new file mode 100644 index 0000000000..bdf3ca710f Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geoguyane_fr_catalogue.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geomartinique_fr_accueil.png b/docs/manual/docs/annexes/gallery/img/geomartinique_fr_accueil.png new file mode 100644 index 0000000000..d4d34a9e38 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geomartinique_fr_accueil.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geometadatensuche_inspire_gv_at.png b/docs/manual/docs/annexes/gallery/img/geometadatensuche_inspire_gv_at.png new file mode 100644 index 0000000000..9736daebc9 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geometadatensuche_inspire_gv_at.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geonorge_no_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geonorge_no_geonetwork.png new file mode 100644 index 0000000000..a202637221 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geonorge_no_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geonormandie_fr_accueil.png b/docs/manual/docs/annexes/gallery/img/geonormandie_fr_accueil.png new file mode 100644 index 0000000000..ac7a699845 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geonormandie_fr_accueil.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geopal_org_accueil.png b/docs/manual/docs/annexes/gallery/img/geopal_org_accueil.png new file mode 100644 index 0000000000..d4f8f1e384 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geopal_org_accueil.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geoportail_lepuyenvelay_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geoportail_lepuyenvelay_fr_geonetwork.png new file mode 100644 index 0000000000..650fb9a973 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geoportail_lepuyenvelay_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/geoportal_kscnet_ru_geonetwork.png b/docs/manual/docs/annexes/gallery/img/geoportal_kscnet_ru_geonetwork.png new file mode 100644 index 0000000000..9f6a3ad65f Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/geoportal_kscnet_ru_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/georep_nc.png b/docs/manual/docs/annexes/gallery/img/georep_nc.png new file mode 100644 index 0000000000..2c39b830f5 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/georep_nc.png differ diff --git a/docs/manual/docs/annexes/gallery/img/gis_ices_dk_geonetwork.png b/docs/manual/docs/annexes/gallery/img/gis_ices_dk_geonetwork.png new file mode 100644 index 0000000000..fdf1efe6de Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/gis_ices_dk_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/iandc_pnra_aq.png b/docs/manual/docs/annexes/gallery/img/iandc_pnra_aq.png new file mode 100644 index 0000000000..94a5cb9d9f Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/iandc_pnra_aq.png differ diff --git a/docs/manual/docs/annexes/gallery/img/ide_cat_en_catalogue.png b/docs/manual/docs/annexes/gallery/img/ide_cat_en_catalogue.png new file mode 100644 index 0000000000..768cc7c01e Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/ide_cat_en_catalogue.png differ diff --git a/docs/manual/docs/annexes/gallery/img/idee_es_csw-codsi-idee.png b/docs/manual/docs/annexes/gallery/img/idee_es_csw-codsi-idee.png new file mode 100644 index 0000000000..4e95630b82 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/idee_es_csw-codsi-idee.png differ diff --git a/docs/manual/docs/annexes/gallery/img/ids_craig_fr_geocat.png b/docs/manual/docs/annexes/gallery/img/ids_craig_fr_geocat.png new file mode 100644 index 0000000000..e2129485ce Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/ids_craig_fr_geocat.png differ diff --git a/docs/manual/docs/annexes/gallery/img/indores_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/indores_fr_geonetwork.png new file mode 100644 index 0000000000..6015af6e5e Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/indores_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/inspire_gov_hu_geonetwork.png b/docs/manual/docs/annexes/gallery/img/inspire_gov_hu_geonetwork.png new file mode 100644 index 0000000000..6c05423ef2 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/inspire_gov_hu_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/karugeo_fr_accueil.png b/docs/manual/docs/annexes/gallery/img/karugeo_fr_accueil.png new file mode 100644 index 0000000000..233fbe7758 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/karugeo_fr_accueil.png differ diff --git a/docs/manual/docs/annexes/gallery/img/meta_data-za_org_catalogue.png b/docs/manual/docs/annexes/gallery/img/meta_data-za_org_catalogue.png new file mode 100644 index 0000000000..869c821528 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/meta_data-za_org_catalogue.png differ diff --git a/docs/manual/docs/annexes/gallery/img/metadados_snirh_gov_br_geonetwork.png b/docs/manual/docs/annexes/gallery/img/metadados_snirh_gov_br_geonetwork.png new file mode 100644 index 0000000000..faa9f636d8 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/metadados_snirh_gov_br_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/metadata_geopunt_be_zoekdienst.png b/docs/manual/docs/annexes/gallery/img/metadata_geopunt_be_zoekdienst.png new file mode 100644 index 0000000000..c4fa4fb230 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/metadata_geopunt_be_zoekdienst.png differ diff --git a/docs/manual/docs/annexes/gallery/img/metadata_vlaanderen_be.png b/docs/manual/docs/annexes/gallery/img/metadata_vlaanderen_be.png new file mode 100644 index 0000000000..d17b805076 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/metadata_vlaanderen_be.png differ diff --git a/docs/manual/docs/annexes/gallery/img/metadata_vlaanderen_be_metadatacenter.png b/docs/manual/docs/annexes/gallery/img/metadata_vlaanderen_be_metadatacenter.png new file mode 100644 index 0000000000..62dfbb7f8c Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/metadata_vlaanderen_be_metadatacenter.png differ diff --git a/docs/manual/docs/annexes/gallery/img/metawal_wallonie_be.png b/docs/manual/docs/annexes/gallery/img/metawal_wallonie_be.png new file mode 100644 index 0000000000..cea6dfc456 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/metawal_wallonie_be.png differ diff --git a/docs/manual/docs/annexes/gallery/img/mongeosource_fr_geosource.png b/docs/manual/docs/annexes/gallery/img/mongeosource_fr_geosource.png new file mode 100644 index 0000000000..f2ceb587b2 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/mongeosource_fr_geosource.png differ diff --git a/docs/manual/docs/annexes/gallery/img/msdi_data_gov_mt_geonetwork.png b/docs/manual/docs/annexes/gallery/img/msdi_data_gov_mt_geonetwork.png new file mode 100644 index 0000000000..c601779bf0 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/msdi_data_gov_mt_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/nationaalgeoregister_nl_geonetwork.png b/docs/manual/docs/annexes/gallery/img/nationaalgeoregister_nl_geonetwork.png new file mode 100644 index 0000000000..32e66f9c81 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/nationaalgeoregister_nl_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/opendata_zuid-holland_nl_geonetwork.png b/docs/manual/docs/annexes/gallery/img/opendata_zuid-holland_nl_geonetwork.png new file mode 100644 index 0000000000..4bb65ef66e Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/opendata_zuid-holland_nl_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/paikkatietohakemisto_fi.png b/docs/manual/docs/annexes/gallery/img/paikkatietohakemisto_fi.png new file mode 100644 index 0000000000..2c18932666 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/paikkatietohakemisto_fi.png differ diff --git a/docs/manual/docs/annexes/gallery/img/picto-occitanie_fr_accueil.png b/docs/manual/docs/annexes/gallery/img/picto-occitanie_fr_accueil.png new file mode 100644 index 0000000000..ce3a2dd248 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/picto-occitanie_fr_accueil.png differ diff --git a/docs/manual/docs/annexes/gallery/img/pigma_org_geonetwork.png b/docs/manual/docs/annexes/gallery/img/pigma_org_geonetwork.png new file mode 100644 index 0000000000..03e94e4eca Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/pigma_org_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/prodige_cerema_fr.png b/docs/manual/docs/annexes/gallery/img/prodige_cerema_fr.png new file mode 100644 index 0000000000..ed1834f606 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/prodige_cerema_fr.png differ diff --git a/docs/manual/docs/annexes/gallery/img/santegraphie_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/santegraphie_fr_geonetwork.png new file mode 100644 index 0000000000..864a7ab900 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/santegraphie_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/services_data_shom_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/services_data_shom_fr_geonetwork.png new file mode 100644 index 0000000000..be83c3bb1d Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/services_data_shom_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/sextant_ifremer_fr_eng.png b/docs/manual/docs/annexes/gallery/img/sextant_ifremer_fr_eng.png new file mode 100644 index 0000000000..b3e9b0e4d3 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/sextant_ifremer_fr_eng.png differ diff --git a/docs/manual/docs/annexes/gallery/img/sigloire_fr.png b/docs/manual/docs/annexes/gallery/img/sigloire_fr.png new file mode 100644 index 0000000000..f799c5d8ea Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/sigloire_fr.png differ diff --git a/docs/manual/docs/annexes/gallery/img/www_cdata_cerema_fr_geonetwork.png b/docs/manual/docs/annexes/gallery/img/www_cdata_cerema_fr_geonetwork.png new file mode 100644 index 0000000000..29cb719ff7 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/www_cdata_cerema_fr_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/img/www_metadados_geo_ibge_gov_br_geonetwork_ibge.png b/docs/manual/docs/annexes/gallery/img/www_metadados_geo_ibge_gov_br_geonetwork_ibge.png new file mode 100644 index 0000000000..b057834f73 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/www_metadados_geo_ibge_gov_br_geonetwork_ibge.png differ diff --git a/docs/manual/docs/annexes/gallery/img/www_metadados_idesp_sp_gov_br_catalogo.png b/docs/manual/docs/annexes/gallery/img/www_metadados_idesp_sp_gov_br_catalogo.png new file mode 100644 index 0000000000..c287616928 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/www_metadados_idesp_sp_gov_br_catalogo.png differ diff --git a/docs/manual/docs/annexes/gallery/img/www_sandre_eaufrance_fr_atlas.png b/docs/manual/docs/annexes/gallery/img/www_sandre_eaufrance_fr_atlas.png new file mode 100644 index 0000000000..c80b9d0231 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/www_sandre_eaufrance_fr_atlas.png differ diff --git a/docs/manual/docs/annexes/gallery/img/www_wodgik_katowice_pl_8080_geonetwork.png b/docs/manual/docs/annexes/gallery/img/www_wodgik_katowice_pl_8080_geonetwork.png new file mode 100644 index 0000000000..891abf8986 Binary files /dev/null and b/docs/manual/docs/annexes/gallery/img/www_wodgik_katowice_pl_8080_geonetwork.png differ diff --git a/docs/manual/docs/annexes/gallery/index.md b/docs/manual/docs/annexes/gallery/index.md new file mode 100644 index 0000000000..5fc50ed761 --- /dev/null +++ b/docs/manual/docs/annexes/gallery/index.md @@ -0,0 +1,243 @@ +# Some GeoNetwork nodes {#gallery} + +- + + ![](img/catalogue_geo-ide_developpement-durable_gouv_fr_catalogue.png) + +- + + ![](img/geocatalog_webservice-energy_org_geonetwork.png) + +- + + ![](img/geometadatensuche_inspire_gv_at.png) + +- + + ![](img/geoportal_kscnet_ru_geonetwork.png) + +- + + ![](img/inspire_gov_hu_geonetwork.png) + +- + + ![](img/meta_data-za_org_catalogue.png) + +- + + ![](img/metadata_geopunt_be_zoekdienst.png) + +- + + ![](img/metawal_wallonie_be.png) + +- + + ![](img/services_data_shom_fr_geonetwork.png) + +- + + ![](img/fao_org_geonetwork.png) + +- + + ![](img/geoguyane_fr_catalogue.png) + +- + + ![](img/geonorge_no_geonetwork.png) + +- + + ![](img/geopal_org_accueil.png) + +- + + ![](img/idee_es_csw-codsi-idee.png) + +- + + ![](img/www_metadados_geo_ibge_gov_br_geonetwork_ibge.png) + +- + + ![](img/www_metadados_idesp_sp_gov_br_catalogo.png) + +- + + ![](img/nationaalgeoregister_nl_geonetwork.png) + +- + + ![](img/www_sandre_eaufrance_fr_atlas.png) + +- + + ![](img/sigloire_fr.png) + +- + + ![](img/www_wodgik_katowice_pl_8080_geonetwork.png) + +- + + ![](img/agroenvgeo_data_inra_fr_geonetwork.png) + +- + + ![](img/catalogue-imos_aodn_org_au_geonetwork.png) + +- + + ![](img/catalogue_ec_gc_ca_geonetwork.png) + +- + + ![](img/cdgp_u-strasbg_fr_geonetwork.png) + +- + + ![](img/download_data_grandlyon_com_catalogue.png) + +- + + ![](img/ecat_ga_gov_au_geonetwork.png) + +- + + ![](img/gatt_lmi_is_geonetwork.png) + +- + + ![](img/gdk_gdi-de_org_gdi-de.png) + +- + + ![](img/geo_gob_bo_geonetwork.png) + +- + + ![](img/geocatalogue_apur_org_catalogue.png) + +- + + ![](img/geocatalogue_geoportail_lu.png) + +- + + ![](img/geodata_nz_geonetwork.png) + +- + + ![](img/geoportail_lepuyenvelay_fr_geonetwork.png) + +- + + ![](img/georep_nc.png) + +- + + ![](img/gis_ices_dk_geonetwork.png) + +- + + ![](img/iandc_pnra_aq.png) + +- + + ![](img/ide_cat_en_catalogue.png) + +- + + ![](img/ids_craig_fr_geocat.png) + +- + + ![](img/metadados_snirh_gov_br_geonetwork.png) + +- + + ![](img/metadata_vlaanderen_be.png) + +- + + ![](img/metadata_vlaanderen_be_metadatacenter.png) + +- + + ![](img/msdi_data_gov_mt_geonetwork.png) + +- + + ![](img/opendata_zuid-holland_nl_geonetwork.png) + +- + + ![](img/prodige_cerema_fr.png) + +- + + ![](img/santegraphie_fr_geonetwork.png) + +- + + ![](img/sextant_ifremer_fr_eng.png) + +- + + ![](img/www_cdata_cerema_fr_geonetwork.png) + +- + + ![](img/doterr_fr_accueil.png) + +- + + ![](img/geo_be_catalogs_1_resources.png) + +- + + ![](img/geo2france_fr_geonetwork.png) + +- + + ![](img/geocat_ch_geonetwork.png) + +- + + ![](img/geograndest_fr_geonetwork.png) + +- + + ![](img/geomartinique_fr_accueil.png) + +- + + ![](img/geonormandie_fr_accueil.png) + +- + + ![](img/indores_fr_geonetwork.png) + +- + + ![](img/karugeo_fr_accueil.png) + +- + + ![](img/mongeosource_fr_geosource.png) + +- + + ![](img/paikkatietohakemisto_fi.png) + +- + + ![](img/picto-occitanie_fr_accueil.png) + +- + + ![](img/pigma_org_geonetwork.png) + +To add your catalog to this list, add it to [this list](https://github.com/geonetwork/doc/tree/develop/source/annexes/gallery/gallery-urls.csv). diff --git a/docs/manual/docs/annexes/index.md b/docs/manual/docs/annexes/index.md new file mode 100644 index 0000000000..5ac9b9c66c --- /dev/null +++ b/docs/manual/docs/annexes/index.md @@ -0,0 +1,5 @@ +# Annexes + +- [Metadata Exchange Format (MEF)](mef-format.md) +- [Some GeoNetwork nodes](gallery/index.md) +- [Standards](standards/index.md) diff --git a/docs/manual/docs/annexes/mef-format.md b/docs/manual/docs/annexes/mef-format.md new file mode 100644 index 0000000000..f550478e1b --- /dev/null +++ b/docs/manual/docs/annexes/mef-format.md @@ -0,0 +1,148 @@ +# Metadata Exchange Format (MEF) {#mef_format} + +## Introduction + +The metadata exchange format (MEF in short) is a specially designed file format for the purpose of metadata exchange between different platforms. A metadata exported as a MEF can be imported by any platform which is able to understand MEF. This format has been developed with GeoNetwork in mind so the information it contains is mainly related to GeoNetwork. Nevertheless, it can be used as an interoperability format between different platforms. + +This format has been designed with the following needs in mind: + +1. Export a metadata record for backup purposes +2. Import a metadata record from a previous backup +3. Import a metadata record from a different GeoNetwork version to allow a smooth migration from one version to another. +4. Capture metadata plus thumbnails and any data uploaded with the metadata record. + +In the paragraphs below, some terms should be intended as follows: + +1. the term actor is used to indicate any system (application, service etc\...) that operates on metadata. +2. the term reader will be used to indicate any actor that can import metadata from a MEF file. +3. the term writer will be used to indicate any actor that can generate a MEF file. + +## MEF v1 file format + +A MEF file is simply a ZIP file which contains the following files: + +``` text +Root + | + +--- metadata.xml + +--- info.xml + +--- public + | +---- all public documents and thumbnails + +--- private + +---- all private documents and thumbnails +``` + +1. *metadata.xml*: this file contains the metadata itself, in XML format. The text encoding of the metadata (eg. UTF-8) is specified in the XML declaration. +2. *info.xml*: this is a special XML file which contains information related to the metadata (metadata about the metadata). Examples of the information in the info.xml file are: creation date, modification date, privileges This information is needed by GeoNetwork. +3. *public*: this is a directory used to store the metadata thumbnails and other public files. There are no restrictions on the image format but it is strongly recommended to use the portable network graphics (PNG), JPEG or GIF format. +4. *private*: this is a directory used to store all data (maps, shape files etc\...) uploaded with the metadata in the GeoNetwork editor. Files in this directory are *private* in the sense that authorisation is required to access them. There are no restrictions on the file types that can be stored into this directory. + +Any other file or directory present in the MEF file should be ignored by readers that don't recognise them. This allows actors to add custom extensions to the MEF file. + +A MEF file can have empty public and private folders depending upon the export format, which can be: + +- *simple*: both public and private are omitted. +- *partial*: only public files are provided. +- *full*: both public and private files are provided. + +It is recommended to use the .mef extension when naming MEF files. + +## MEF v2 file format + +MEF version 2 support the following: + +- multi-metadata support: more than one metadata record and data can be stored in a single MEF file. +- multi-schema support: be able to store in a single MEF n formats (eg. for an ISO profile, also store a version of that record in the base ISO19115/ISO19139 schema). + +Current export services that create MEF files from a metadata record with related records (eg. paent, feature catalog etc), can include these related metadata records in the MEF. + +MEF v2 format structure is the following: + +``` text +Root + | + + 0..n metadata + | + +--- metadata + | +--- metadata.xml + | +--- (optional) metadata.iso19139.xml + +--- info.xml + +--- applschema + | +--- (optional) metadata.xml (ISO19110 Feature Catalog) + +--- public + | +---- all public documents and thumbnails + +--- private + +---- all private documents and thumbnails +``` + +!!! note + + metadata.iso19139.xml is generated by GeoNetwork actors on export if the metadata record in metadata.xml is an ISO19115/19139 profile. On import, this record may be selected for loading if the ISO19115/19139 profile is not present. + + +## The info.xml file + +This file contains general information about a metadata. It must have an info root element with a mandatory version attribute. This attribute must be in the X.Y form, where X represents the major version and Y the minor one. The purpose of this attribute is to allow future changes of this format maintaining compatibility with older readers. The policy behind the version is this: + +1. A change to Y means a minor change. All existing elements in the previous version must be left unchanged: only new elements or attributes may be added. A reader capable of reading version X.Y is also capable of reading version X.Y' with Y'>Y. +2. A change to X means a major change. Usually, a reader of version X.Y is not able to read version X'.Y with X'>X. + +The root element must have the following children: + +1. *general*: a container for general information. It must have the following children: + - *uuid*: this is the universally unique identifier assigned to the metadata and must be a valid UUID. This element is optional and, when omitted, the reader should generate one. A metadata without a UUID can be imported several times into the same system without breaking uniqueness constraints. When missing, the reader should also generate the siteId value. + - *createDate*: This date indicates when the metadata was created. + - *changeDate*: This date keeps track of the most recent change to the metadata. + - *siteId*: This is an UUID that identifies the actor that created the metadata and must be a valid UUID. When the UUID element is missing, this element should be missing too. If present, it will be ignored. + - *siteName*: This is a human readable name for the actor that created the metadata. It must be present only if the siteId is present. + - *schema*: The name of the schema for the metadata record in metadata.xml. When the MEF is imported by a GeoNetwork actor, this name should be the name of a metadata schema handled by the actor (eg. iso19139). If the GeoNetwork actor does not have such a schema, it may try and select another metadata with a schema that is present (eg. the metadata in metadata-iso19139.xml could be loaded because the iso19139 schema is present). + - *format*: Indicates the MEF export format. The element's value must belong to the following set: { *simple*, *partial*, *full* }. + - *localId*: This is an optional element. If present, indicates the id used locally by the sourceId actor to store the metadata. Its purpose is just to allow the reuse of the same local id when reimporting a metadata. + - *isTemplate*: A boolean field that indicates if this metadata is a template used to create new ones. There is no real distinction between a real metadata and a template but some actors use it to allow fast metadata creation. The value must be: { *true*, *false* }. + - *rating*: This is an optional element. If present, indicates the users' rating of the metadata ranging from 1 (a bad rating) to 5 (an excellent rating). The special value 0 means that the metadata has not been rated yet. Can be used to sort search results. + - *popularity*: Another optional value. If present, indicates the popularity of the metadata. The value must be positive and high values mean high popularity. The criteria used to set the popularity is left to the writer. Its main purpose is to provide a metadata ordering during a search. +2. *categories*: a container for categories associated to this metadata. A category is just a name, like 'audio-video' that classifies the metadata to allow an easy search. Each category is specified by a category element which must have a name attribute. This attribute is used to store the category's name. If there are no categories, the categories element will be empty. +3. *privileges*: a container for privileges associated to this metadata. Privileges are operations that a group (which represents a set of users) can do on a metadata and are specified by a set of group elements. Each one of these, has a mandatory name attribute to store the group's name and a set of operation elements used to store the operations allowed on the metadata. Each operation element must have a name attribute which value must belong to the following set: { *view*, *download*, *notify*, *dynamic*, *featured* }. If there are no groups or the actor does not have the concept of group, the privileges element will be empty. A group element without any operation element must be ignored by readers. +4. *public*: All metadata thumbnails (and any other public file) must be listed here. This container contains a file element for each file. Mandatory attributes of this element are name, which represents the file's name and changeDate, which contains the date of the latest change to the file. The public element is optional but, if present, must contain all the files present in the metadata's public directory and any reader that imports these files must set the latest change date on these using the provided ones. The purpose of this element is to provide more information in the case the MEF format is used for metadata harvesting. +5. *private*: This element has the same purpose and structure of the public element but is related to maps and all other private files. + +Any other element or attribute should be ignored by readers that don't understand them. This allows actors to add custom attributes or subtrees to the XML. + +### Date format {#info_xml} + +Unless differently specified, all dates in this file must be in the ISO/8601 format. The pattern must be ``YYYY-MM-DDTHH:mm:SS`` and the timezone should be the local one. + +Example of info file: + +``` xml + + + 0619abc0-708b-eeda-8202-000d98959033 + 2006-12-11T10:33:21 + 2006-12-14T08:44:43 + 0619cc50-708b-11da-8202-000d9335906e + FAO main site + iso19139 + full + 204 + false + + + + + + + + + + + + + + + + + + + +``` diff --git a/docs/manual/docs/annexes/standards/dublin-core.md b/docs/manual/docs/annexes/standards/dublin-core.md new file mode 100644 index 0000000000..0550f369eb --- /dev/null +++ b/docs/manual/docs/annexes/standards/dublin-core.md @@ -0,0 +1,1193 @@ +# Dublin core (dublin-core) {#dublin-core} + +The Dublin Core Metadata Element Set is a vocabulary of fifteen properties for + +: use in resource description. The name "Dublin" is due to its origin at a 1995 invitational workshop in Dublin, Ohio; "core" because its elements are broad and generic, usable for describing a wide range of resources. + +More details: + +## Metadata editor + +This standard can be encoded using 3 view(s). + +- [View: Simple (default)](dublin-core.md#dublin-core-view-default) +- [View: Full (advanced)](dublin-core.md#dublin-core-view-advanced) +- [View: XML (xml)](dublin-core.md#dublin-core-view-xml) + +### View: Simple (default) {#dublin-core-view-default} + +This view is composed of1tab(s). + +- [Tab: Simple (default)](dublin-core.md#dublin-core-tab-default) + +This view also allows to add the following element even if not in the current record: + +- Subject and Keywords (dc:subject) + +#### Tab: Simple (default) {#dublin-core-tab-default} + +![](img/dublin-core-tab-default.png) + +This tab display elements from the XML metadata record. + +##### Section: Metadata + +See [Metadata](dublin-core.md#dublin-core-elem-simpledc-8506dd4a73872a53513368db419204a3) + +### View: Full (advanced) {#dublin-core-view-advanced} + +This view is composed of1tab(s). + +- [Tab: Full (advanced)](dublin-core.md#dublin-core-tab-advanced) + +#### Tab: Full (advanced) {#dublin-core-tab-advanced} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Metadata + +See [Metadata](dublin-core.md#dublin-core-elem-simpledc-8506dd4a73872a53513368db419204a3) + +### View: XML (xml) {#dublin-core-view-xml} + +This view is composed of1tab(s). + +- [Tab: XML (xml)](dublin-core.md#dublin-core-tab-xml) + +#### Tab: XML (xml) {#dublin-core-tab-xml} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +## Schema technical details + +Standard identifier + +: + +> dublin-core + +Version + +: + +> 1.0 + +Schema location + +: + +Schema namespaces + +: + +- +- +- + +Schema detection mode + +: + +> gns:elements (root) + +Schema detection elements + +: + +- simpledc + +## Standard elements + +List of all elements available in the standard. + +### Contributor {#dublin-core-elem-dc-contributor-0974cafd6cf5302fe8501874dbe3b3ac} + +Name + +: + +> dc:contributor + +Description + +: + +```{=html} +An entity responsible for making contributions to the content of the resource. +``` +### Coverage {#dublin-core-elem-dc-coverage-8a3ad050a5c9949ad92271f646817e10} + +Name + +: + +> dc:coverage + +Description + +: + +```{=html} +The extent or scope of the content of the resource. Typically, Coverage will + include spatial location (a place name or geographic coordinates), temporal period (a period + label, date, or date range), or jurisdiction (such as a named administrative entity). +``` +``` xml + + North 45.668, South 45.635, East 4.805, West 4.768. CHARLY + +``` + +### Creator {#dublin-core-elem-dc-creator-f6d71ca3a0b4e9aeb0e518f195f8256e} + +Name + +: + +> dc:creator + +Description + +: + +```{=html} +An entity primarily responsible for making the content of the resource. +``` +``` xml + + Métropole de Lyon / Direction Innovation Numérique et Systèmes d'Information + (DINSI) (Géomatique et données métropolitaines) + +``` + +### Date {#dublin-core-elem-dc-date-23c64254f66925f9eb6e3bd19c442233} + +Name + +: + +> dc:date + +Description + +: + +```{=html} +A date of an event in the lifecycle of the resource. Typically, Date will be + associated with the creation or availability of the resource. +``` +### Description {#dublin-core-elem-dc-description-8918d5eea5202286bfa9ceaac948b704} + +Name + +: + +> dc:description + +Description + +: + +```{=html} +An account of the content of the resource. +``` +``` xml + + La maquette 3D de la commune (2009 ou 2012) est composée de deux à six + couches de données. A minima, toutes les maquettes se composent des deux + couches suivantes : - Le Modèle numérique de terrain (TIN) et ses textures + associées ; - Les bâtiments 3D texturés (BATIS). Elle est complétée par une + ou plusieurs des couches ci-dessous : - Les surfaces en eau (WATER) et leurs + textures associées ; - Les bâtiments « remarquables » (Mairies, Eglises + etc…) ; - Les ponts « remarquables » ; - Les objets « remarquables » + (Statues, Fontaines etc…). Ces données sont modélisées suivant la norme + CityGML et fournies dans ce format. Ces maquettes sont produites avec le + logiciel RhinoTerrain/RhinoCity. + +``` + +### Format {#dublin-core-elem-dc-format-3842730cdb5c8559fe6f2737815429ea} + +Name + +: + +> dc:format + +Description + +: + +```{=html} +The physical or digital manifestation of the resource. Typically, Format will + include the media-type or dimensions of the resource. Format may be used to identify the + software, hardware, or other equipment needed to display or operate the resource. +``` +### Resource Identifier {#dublin-core-elem-dc-identifier-7d64a0a5c40868491c49bf7df7574752} + +Name + +: + +> dc:identifier + +Description + +: + +```{=html} +An unambiguous reference to the resource within a given context. +``` +``` xml +a806d3e1-c240-43a9-bbc3-643e8c93b10d +``` + +### Language {#dublin-core-elem-dc-language-74e0ef625be0b45d0e6c64d5f76e1895} + +Name + +: + +> dc:language + +Description + +: + +```{=html} +A language of the intellectual content of the resource. Recommended best practice + is to use RFC 3066, which, in conjunction with ISO 639, defines two- and three-letter primary + language tags with optional subtags. +``` +``` xml +fre +``` + +### Publisher {#dublin-core-elem-dc-publisher-5534d3efaa13b75c3aa34c379dd91025} + +Name + +: + +> dc:publisher + +Description + +: + +```{=html} +An entity responsible for making the resource available. +``` +``` xml + + Métropole de Lyon / Direction Innovation Numérique et Systèmes d'Information + (DINSI) (Géomatique et données métropolitaines) + +``` + +### Relation {#dublin-core-elem-dc-relation-3772ef19f1f075e519d2d0a60ec6f05a} + +Name + +: + +> dc:relation + +Description + +: + +```{=html} +A reference to a related resource. +``` +### Rights Management {#dublin-core-elem-dc-rights-32dce43ec1342a098287b03b6a5cb72f} + +Name + +: + +> dc:rights + +Description + +: + +```{=html} +Information about rights held in and over the resource. +``` +### Source {#dublin-core-elem-dc-source-104607b158c41c5855de1ed62ae223dd} + +Name + +: + +> dc:source + +Description + +: + +```{=html} +A Reference to a resource from which the present resource is derived. The present + resource may be derived from the Source resource in whole or in part. +``` +``` xml + + Le Modèle numérique de terrain est issu d’une saisie photogrammétrique + réalisée à partir de la prise de vue aérienne (2009 ou 2012). Les fichiers + des textures associées plaquées sur le MNT correspondent à + l’orthophotographie aérienne qui possède une résolution de 10 cm pour 2012 + et 16 cm pour 2009. - Les surfaces en eau (WATER) ont été identifiées à + partir d’une saisie photogrammétrique réalisée à partir de la même prise de + vue aérienne. - Les bâtiments 3D proviennent de la saisie photogrammétrique + réalisée à partir de la prise de vue aérienne. Les textures plaquées sur ces + bâtiments proviennent des clichés issus de la prise de vue aérienne. - Les + bâtiments « remarquables » (Mairies, Eglises etc…), les ponts « remarquables + » et les objets « remarquables » (Statues, Fontaines etc…) ont été texturés + à partir de photographies terrestres. + +``` + +### Subject and Keywords {#dublin-core-elem-dc-subject-a88bd90b4991695f8c45fe01df3f64d6} + +Name + +: + +> dc:subject + +Description + +: + +```{=html} +A topic of the content of the resource. Typically, Subject will be expressed as + keywords, key phrases, or classification codes that describe a topic of the resource. +``` +``` xml +Localisation +``` + +### Title {#dublin-core-elem-dc-title-18e3be863c870257c8b70d577038ee5f} + +Name + +: + +> dc:title + +Description + +: + +```{=html} +A name given to the resource. Typically, Title will be a name by which the resource + is formally known. +``` +``` xml + + Maquette 3D texturée de la commune de Charly (la Métropole de Lyon) + +``` + +### Resource Type {#dublin-core-elem-dc-type-15bbc75f8dbe617d6ed609fcf1202ee1} + +Name + +: + +> dc:type + +Description + +: + +```{=html} +The nature or genre of the content of the resource. Type includes terms describing + general categories, functions, genres, or aggregation levels for content. +``` +Recommended values + +| code | label | +|---------|---------| +| dataset | Dataset | +| service | Service | + +``` xml +nonGeographicDataset +``` + +### URI {#dublin-core-elem-dc-URI-8f2cb1e27778e1b1977e670ca7e7a282} + +Name + +: + +> dc:URI + +Description + +: + +### Abstract {#dublin-core-elem-dct-abstract-a48c3a17636153c58749c5fc29d1bd28} + +Name + +: + +> dct:abstract + +Description + +: + +```{=html} +A summary of the content of the resource. +``` +### Access Rights {#dublin-core-elem-dct-accessRights-972cd1c89a0274325b1a3b99e34c95be} + +Name + +: + +> dct:accessRights + +Description + +: + +```{=html} +Information about who can access the resource or an indication of its security + status. +``` +### Accrual Method {#dublin-core-elem-dct-accrualMethod-6fa8ea67638a1578c231025e31dd40e9} + +Name + +: + +> dct:accrualMethod + +Description + +: + +```{=html} +The method by which items are added to a collection. +``` +### Accrual Periodicity {#dublin-core-elem-dct-accrualPeriodicity-2a4c9a8426dd588e960559174a3df263} + +Name + +: + +> dct:accrualPeriodicity + +Description + +: + +```{=html} +The frequency with which items are added to a collection. +``` +Recommended values + +| code | label | +|-------------|-------------| +| continual | Continual | +| daily | Daily | +| weekly | Weekly | +| fortnightly | Fortnightly | +| monthly | Monthly | +| quarterly | Quarterly | +| biannually | Biannually | +| annually | Annually | +| asNeeded | As needed | +| irregular | Irregular | +| notPlanned | Not planned | +| unknown | Unknown | + +``` xml +Irregular +``` + +### Accrual Policy {#dublin-core-elem-dct-accrualPolicy-0ae937a1f9081db219a5dd04ed4610d4} + +Name + +: + +> dct:accrualPolicy + +Description + +: + +```{=html} +The policy governing the addition of items to a collection. +``` +### Alternative Title {#dublin-core-elem-dct-alternative-2518e8fc9fa67f5a10348016aae8bb0f} + +Name + +: + +> dct:alternative + +Description + +: + +```{=html} +An alternative name for the resource. +``` +### Audience {#dublin-core-elem-dct-audience-a610cbdc155d7cd9c87c8f22ef245521} + +Name + +: + +> dct:audience + +Description + +: + +```{=html} +A class of entity for whom the resource is intended or useful. +``` +### Bibliographic Citation {#dublin-core-elem-dct-bibliographicCitation-0d3ba175bdb84be48dec71bdb6b318da} + +Name + +: + +> dct:bibliographicCitation + +Description + +: + +```{=html} +A bibliographic reference for the resource. +``` +### Conforms To {#dublin-core-elem-dct-conformsTo-703d80b57bd6629b2bff3f57efd52dc5} + +Name + +: + +> dct:conformsTo + +Description + +: + +```{=html} +An established standard to which the described resource conforms. +``` +### Date Created {#dublin-core-elem-dct-created-9aebe20151c1c962d66737fcb9b87c2c} + +Name + +: + +> dct:created + +Description + +: + +```{=html} +Date of creation of the resource. +``` +``` xml +2014-12-19 +``` + +### Date Accepted {#dublin-core-elem-dct-dateAccepted-9f6f7b46bae794b317c939c75170b0f1} + +Name + +: + +> dct:dateAccepted + +Description + +: + +```{=html} +Date of acceptance of the resource. +``` +### Date Copyrighted {#dublin-core-elem-dct-dateCopyrighted-1a3940c001fd2db761829940957d8bf7} + +Name + +: + +> dct:dateCopyrighted + +Description + +: + +```{=html} +Date of copyright. +``` +### Date Submitted {#dublin-core-elem-dct-dateSubmitted-0e038c3b8ac6daca57211a938eca6154} + +Name + +: + +> dct:dateSubmitted + +Description + +: + +```{=html} +Date of submission of the resource +``` +``` xml +2015-01-23 +``` + +### Audience Education Level {#dublin-core-elem-dct-educationLevel-fa33466d34d56fb066753a6d97089631} + +Name + +: + +> dct:educationLevel + +Description + +: + +```{=html} +A class of entity, defined in terms of progression through an educational or + training context, for which the described resource is intended. +``` +### Extent {#dublin-core-elem-dct-extent-8a3a9adeaaac054e64dff722ad23c776} + +Name + +: + +> dct:extent + +Description + +: + +```{=html} +The size or duration of the resource. +``` +### Has Format {#dublin-core-elem-dct-hasFormat-d136ed16dc44af39fdf1b98b9fb4bc33} + +Name + +: + +> dct:hasFormat + +Description + +: + +```{=html} +A related resource that is substantially the same as the pre-existing described + resource, but in another format. +``` +### Has Part {#dublin-core-elem-dct-hasPart-f251f156dd8774a81f44c13c7b4a9e7d} + +Name + +: + +> dct:hasPart + +Description + +: + +```{=html} +A related resource that is included either physically or logically in the described + resource. +``` +### Has Version {#dublin-core-elem-dct-hasVersion-b8dc08cd4fc15cf1df605c2905b0c5e3} + +Name + +: + +> dct:hasVersion + +Description + +: + +```{=html} +A related resource that is a version, edition, or adaptation of the described + resource. +``` +### Instructional Method {#dublin-core-elem-dct-instructionalMethod-d220d889250a4a0f7e3efe29fc0f0ada} + +Name + +: + +> dct:instructionalMethod + +Description + +: + +```{=html} +A process, used to engender knowledge, attitudes and skills, that the resource is + designed to support. +``` +### Is Format Of {#dublin-core-elem-dct-isFormatOf-8378903643254b5b83ae2acdc251b6a6} + +Name + +: + +> dct:isFormatOf + +Description + +: + +```{=html} +A related resource that is substantially the same as the described resource, but in + another format. +``` +### Is part of {#dublin-core-elem-dct-isPartOf-6697c98943756abf56d4c2a50f9dc9a2} + +Name + +: + +> dct:isPartOf + +Description + +: + +```{=html} +A related resource in which the described resource is physically or logically + included. +``` +``` xml +8017c69a-5b17-404f-acdd-d9c37a0afac4 +``` + +### Is Referenced By {#dublin-core-elem-dct-isReferencedBy-4cf2c75a368a7773ec781eaa6f4a7c03} + +Name + +: + +> dct:isReferencedBy + +Description + +: + +```{=html} +A related resource that references, cites, or otherwise points to the described + resource. +``` +### Is Replaced By {#dublin-core-elem-dct-isReplacedBy-1e391e071c75e45dcf0a309285a642a0} + +Name + +: + +> dct:isReplacedBy + +Description + +: + +```{=html} +A related resource that supplants, displaces, or supersedes the described + resource. +``` +### Is Required By {#dublin-core-elem-dct-isRequiredBy-def534523d854e3440e36701bea47cc4} + +Name + +: + +> dct:isRequiredBy + +Description + +: + +```{=html} +A related resource that requires the described resource to support its function, + delivery, or coherence. +``` +### Date Issued {#dublin-core-elem-dct-issued-9f6ad8cb4b5e6225c1cb755489adb774} + +Name + +: + +> dct:issued + +Description + +: + +```{=html} +Date of formal issuance (e.g., publication) of the resource. +``` +### Is Version Of {#dublin-core-elem-dct-isVersionOf-d1658a9e84f777d0a335528e82921417} + +Name + +: + +> dct:isVersionOf + +Description + +: + +```{=html} +A related resource of which the described resource is a version, edition, or + adaptation. +``` +### License {#dublin-core-elem-dct-license-865405c25292b886c12f7d056ebaabda} + +Name + +: + +> dct:license + +Description + +: + +```{=html} +A legal document giving official permission to do something with the resource. +``` +### Mediator {#dublin-core-elem-dct-mediator-ab02c72730e6dbccbfb74b07e00edf10} + +Name + +: + +> dct:mediator + +Description + +: + +```{=html} +An entity that mediates access to the resource and for whom the resource is + intended or useful. +``` +### Medium {#dublin-core-elem-dct-medium-95f834fde8ee306293ebebcfd7a3aba5} + +Name + +: + +> dct:medium + +Description + +: + +```{=html} +The material or physical carrier of the resource. +``` +### Date Modified {#dublin-core-elem-dct-modified-66ecff9b0ec74fad28c5babebc1eec7d} + +Name + +: + +> dct:modified + +Description + +: + +```{=html} +Data metadata was modified +``` +``` xml +2016-02-03T21:33:45 +``` + +### Provenance {#dublin-core-elem-dct-provenance-4ec9c18f260230d4455195d6a6f28c17} + +Name + +: + +> dct:provenance + +Description + +: + +```{=html} +A statement of any changes in ownership and custody of the resource since its + creation that are significant for its authenticity, integrity and interpretation. +``` +### Related resource {#dublin-core-elem-dct-references-3a44416fcd20eea0684aad2fd3228fdd} + +Name + +: + +> dct:references + +Description + +: + +```{=html} +A related resource that is referenced, cited, or otherwise pointed to by the + described resource. +``` +### Replaces {#dublin-core-elem-dct-replaces-c5b09017642a464af7a04db426f6d74f} + +Name + +: + +> dct:replaces + +Description + +: + +```{=html} +A related resource that is supplanted, displaced, or superseded by the described + resource. +``` +### Requires {#dublin-core-elem-dct-requires-2ad52ab491717dc624f79f92303f4679} + +Name + +: + +> dct:requires + +Description + +: + +```{=html} +A related resource that is required by the described resource to support its + function, delivery, or coherence. +``` +### Rights Holder {#dublin-core-elem-dct-rightsHolder-0f4304cc1135f8fc29f7a0ede8daa268} + +Name + +: + +> dct:rightsHolder + +Description + +: + +```{=html} +A person or organization owning or managing rights over the resource. +``` +### Spatial {#dublin-core-elem-dct-spatial-5100d679492a6f79fd3e53db624bcab2} + +Name + +: + +> dct:spatial + +Description + +: + +```{=html} +Spatial characteristics of the intellectual content of the resource. +``` +``` xml +RGF93 / CC46 (EPSG:3946) +``` + +### Table Of Contents {#dublin-core-elem-dct-tableOfContents-c20c496386cad7aa48ad05ca41a6340b} + +Name + +: + +> dct:tableOfContents + +Description + +: + +```{=html} +A list of subunits of the resource. +``` +### Temporal Coverage {#dublin-core-elem-dct-temporal-0a2abb1d37421418cafeb48bd21e6854} + +Name + +: + +> dct:temporal + +Description + +: + +```{=html} +Temporal characteristics of the resource. +``` +### Date Valid {#dublin-core-elem-dct-valid-343768fccc581bc0822c69e6ca19c70c} + +Name + +: + +> dct:valid + +Description + +: + +```{=html} +Date (often a range) of validity of a resource. +``` +### Metadata {#dublin-core-elem-simpledc-8506dd4a73872a53513368db419204a3} + +Name + +: + +> simpledc + +Description + +: + +``` xml + + + Maquette 3D texturée de la commune de Charly (la Métropole de Lyon) + + + Métropole de Lyon / Direction Innovation Numérique et Systèmes d'Information + (DINSI) (Géomatique et données métropolitaines) + + Localisation + + La maquette 3D de la commune (2009 ou 2012) est composée de deux à six + couches de données. A minima, toutes les maquettes se composent des deux + couches suivantes : - Le Modèle numérique de terrain (TIN) et ses textures + associées ; - Les bâtiments 3D texturés (BATIS). Elle est complétée par une + ou plusieurs des couches ci-dessous : - Les surfaces en eau (WATER) et leurs + textures associées ; - Les bâtiments « remarquables » (Mairies, Eglises + etc…) ; - Les ponts « remarquables » ; - Les objets « remarquables » + (Statues, Fontaines etc…). Ces données sont modélisées suivant la norme + CityGML et fournies dans ce format. Ces maquettes sont produites avec le + logiciel RhinoTerrain/RhinoCity. + + + Métropole de Lyon / Direction Innovation Numérique et Systèmes d'Information + (DINSI) (Géomatique et données métropolitaines) + + nonGeographicDataset + application/zip + CityGML (taille : 260.0 Mo) + application/zip + executable (taille : 829.2 Mo) + application/zip + CityGML (taille : 113.5 Mo) + application/zip + executable (taille : 339.2 Mo) + application/pdf + pdf (taille : 315 Ko) + + Le Modèle numérique de terrain est issu d’une saisie photogrammétrique + réalisée à partir de la prise de vue aérienne (2009 ou 2012). Les fichiers + des textures associées plaquées sur le MNT correspondent à + l’orthophotographie aérienne qui possède une résolution de 10 cm pour 2012 + et 16 cm pour 2009. - Les surfaces en eau (WATER) ont été identifiées à + partir d’une saisie photogrammétrique réalisée à partir de la même prise de + vue aérienne. - Les bâtiments 3D proviennent de la saisie photogrammétrique + réalisée à partir de la prise de vue aérienne. Les textures plaquées sur ces + bâtiments proviennent des clichés issus de la prise de vue aérienne. - Les + bâtiments « remarquables » (Mairies, Eglises etc…), les ponts « remarquables + » et les objets « remarquables » (Statues, Fontaines etc…) ont été texturés + à partir de photographies terrestres. + + fre + + https://download.data.grandlyon.com/files/grandlyon/localisation/bati3d/CHARLY_2012.zip + + + https://download.data.grandlyon.com/files/grandlyon/localisation/bati3d/_EXE_CHARLY_2012.zip + + + https://download.data.grandlyon.com/files/grandlyon/localisation/bati3d/CHARLY_2009.zip + + + https://download.data.grandlyon.com/files/grandlyon/localisation/bati3d/_EXE_CHARLY_2009.zip + + + https://download.data.grandlyon.com/files/grandlyon/localisation/bati3d/Maquettes_3D_CityGML.pdf + + + https://download.data.grandlyon.com/files/grandlyon/LicenceOuverte.pdf + + + North 45.668, South 45.635, East 4.805, West 4.768. CHARLY + + Licence Ouverte + Pas de restriction d'accès public selon INSPIRE + 2014-12-19 + 2015-01-23 + 8017c69a-5b17-404f-acdd-d9c37a0afac4 + RGF93 / CC46 (EPSG:3946) + Irregular + 2016-02-03T21:33:45 + a806d3e1-c240-43a9-bbc3-643e8c93b10d + +``` + +## Standard codelists + +List of all codelists available in the standard. + +No codelist defined. diff --git a/docs/manual/docs/annexes/standards/img/dublin-core-tab-default.png b/docs/manual/docs/annexes/standards/img/dublin-core-tab-default.png new file mode 100644 index 0000000000..5b4fc46009 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/dublin-core-tab-default.png differ diff --git a/docs/manual/docs/annexes/standards/img/iso19110-tab-default.png b/docs/manual/docs/annexes/standards/img/iso19110-tab-default.png new file mode 100644 index 0000000000..cd8909c621 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/iso19110-tab-default.png differ diff --git a/docs/manual/docs/annexes/standards/img/iso19139-tab-dataQualityInfo.png b/docs/manual/docs/annexes/standards/img/iso19139-tab-dataQualityInfo.png new file mode 100644 index 0000000000..064802f892 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/iso19139-tab-dataQualityInfo.png differ diff --git a/docs/manual/docs/annexes/standards/img/iso19139-tab-default.png b/docs/manual/docs/annexes/standards/img/iso19139-tab-default.png new file mode 100644 index 0000000000..32c6428013 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/iso19139-tab-default.png differ diff --git a/docs/manual/docs/annexes/standards/img/iso19139-tab-identificationInfo.png b/docs/manual/docs/annexes/standards/img/iso19139-tab-identificationInfo.png new file mode 100644 index 0000000000..7e5b536046 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/iso19139-tab-identificationInfo.png differ diff --git a/docs/manual/docs/annexes/standards/img/iso19139-tab-inspire.png b/docs/manual/docs/annexes/standards/img/iso19139-tab-inspire.png new file mode 100644 index 0000000000..30a57aa728 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/iso19139-tab-inspire.png differ diff --git a/docs/manual/docs/annexes/standards/img/iso19139-tab-referenceSystemInfo.png b/docs/manual/docs/annexes/standards/img/iso19139-tab-referenceSystemInfo.png new file mode 100644 index 0000000000..b7ab16adb5 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/iso19139-tab-referenceSystemInfo.png differ diff --git a/docs/manual/docs/annexes/standards/img/metawal-tramedesaxes.png b/docs/manual/docs/annexes/standards/img/metawal-tramedesaxes.png new file mode 100644 index 0000000000..2be2d50495 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/metawal-tramedesaxes.png differ diff --git a/docs/manual/docs/annexes/standards/img/sextant-checkpoint.png b/docs/manual/docs/annexes/standards/img/sextant-checkpoint.png new file mode 100644 index 0000000000..937e3b5521 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/sextant-checkpoint.png differ diff --git a/docs/manual/docs/annexes/standards/img/standardlist.png b/docs/manual/docs/annexes/standards/img/standardlist.png new file mode 100644 index 0000000000..bda4e3c719 Binary files /dev/null and b/docs/manual/docs/annexes/standards/img/standardlist.png differ diff --git a/docs/manual/docs/annexes/standards/index.md b/docs/manual/docs/annexes/standards/index.md new file mode 100644 index 0000000000..6216f402af --- /dev/null +++ b/docs/manual/docs/annexes/standards/index.md @@ -0,0 +1,16 @@ +# Standards + +The catalog support the following standards: + +![](img/standardlist.png) + +- [Geographic information -- Metadata (iso19115-3.2018)](iso19115-3.2018.md) +- [Geographic information -- Metadata (iso19139:2007) (iso19139)](iso19139.md) +- [Geographic information -- Methodology for feature cataloguing (Deprecated - use ISO19115-3) (iso19110)](iso19110.md) +- [Dublin core (dublin-core)](dublin-core.md) + +ISO19110 can be used to encode feature catalogue (but ISO19115-3 is recommended). + +Dublin core (for CSW only) is only used to test OGC CSW testsuites. + +Others standards and community profiles are available on . diff --git a/docs/manual/docs/annexes/standards/iso19110.md b/docs/manual/docs/annexes/standards/iso19110.md new file mode 100644 index 0000000000..dea7a09042 --- /dev/null +++ b/docs/manual/docs/annexes/standards/iso19110.md @@ -0,0 +1,1877 @@ +# Geographic information -- Methodology for feature cataloguing (Deprecated - use ISO19115-3) (iso19110) {#iso19110} + +More details: + +## Metadata editor + +This standard can be encoded using 3 view(s). + +- [View: Simple (default)](iso19110.md#iso19110-view-default) +- [View: Full (advanced)](iso19110.md#iso19110-view-advanced) +- [View: XML (xml)](iso19110.md#iso19110-view-xml) + +### View: Simple (default) {#iso19110-view-default} + +This view is composed of1tab(s). + +- [Tab: Simple (default)](iso19110.md#iso19110-tab-default) + +This view also allows to add the following element even if not in the current record: + +- Code (gfc:code) +- Codelist (gfc:listedValue) + +#### Tab: Simple (default) {#iso19110-tab-default} + +![](img/iso19110-tab-default.png) + +This tab display elements from the XML metadata record. + +##### Name + +```{=html} +Feature catalogue name +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gmx:name + +See [Name](iso19110.md#iso19110-elem-gmx-name-5ec0c4442ad2b94944636103e556d401) + +##### Name + +```{=html} +Feature catalogue name +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gfc:name + +See [Name](iso19110.md#iso19110-elem-gfc-name-134285dc9b9a3268556039e2fe3f370e) + +##### Scope + +```{=html} +Scope definition +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gmx:scope + +See [Scope](iso19110.md#iso19110-elem-gmx-scope-14efac6982297b09ba1324e80138092f) + +##### Scope + +```{=html} +Scope definition +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gfc:scope + +See [Scope](iso19110.md#iso19110-elem-gfc-scope-4f044fce55b8e0b6dd0d77516ad9e66d) + +##### Field of application + +```{=html} +Field of application +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gmx:fieldOfApplication + +See [Field of application](iso19110.md#iso19110-elem-gmx-fieldOfApplication-66508d1f139317e01e1decd095915428) + +##### Field of application + +```{=html} +Field of application +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gfc:fieldOfApplication + +See [Field of application](iso19110.md#iso19110-elem-gfc-fieldOfApplication-548e0631e3ea92f7dd05ac533b6c14d2) + +##### Version + +```{=html} +Catalogue version +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gmx:versionNumber + +See [Version](iso19110.md#iso19110-elem-gmx-versionNumber-075201f18225aec432b46c75a93589a2) + +##### Version + +```{=html} +Catalogue version +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gfc:versionNumber + +See [Version](iso19110.md#iso19110-elem-gfc-versionNumber-d66ec9fd5c22c70a69dd2b759d66cc4f) + +##### Date + +```{=html} +Catalogue date +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gmx:versionDate + +See [Date](iso19110.md#iso19110-elem-gmx-versionDate-6c27e2ee0b2daa4ab1aea9ef374bc08f) + +##### Catalogue producer + +```{=html} +Catalogue responsible +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gfc:producer + +See [Catalogue producer](iso19110.md#iso19110-elem-gfc-producer-5a13bfab8b07441bc9f9f71dcfdf7f6c) + +##### Functional language + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gfc:functionalLanguage + +See [Functional language](iso19110.md#iso19110-elem-gfc-functionalLanguage-7a21d9c35ed9c400c40959ede97b8d76) + +##### Property description + +```{=html} +Property description +``` + +XPath + +: + +> /gfc:FC_FeatureCatalogue/gfc:featureType + +See [Property description](iso19110.md#iso19110-elem-gfc-featureType-d6099a684b15337451388dd46048c48f) + +Type + +: + +> suggest + +### View: Full (advanced) {#iso19110-view-advanced} + +This view is composed of1tab(s). + +- [Tab: Full (advanced)](iso19110.md#iso19110-tab-advanced) + +#### Tab: Full (advanced) {#iso19110-tab-advanced} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Feature Catalogue description + +See [Feature Catalogue description](iso19110.md#iso19110-elem-gfc-FC_FeatureCatalogue-a4de444fdd9a6e86e8ba63bb96be363c) + +### View: XML (xml) {#iso19110-view-xml} + +This view is composed of1tab(s). + +- [Tab: XML (xml)](iso19110.md#iso19110-tab-xml) + +#### Tab: XML (xml) {#iso19110-tab-xml} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +## Schema technical details + +Standard identifier + +: + +> iso19110 + +Version + +: + +> 1.0 + +Schema location + +: + +> + +Schema namespaces + +: + +- +- +- +- + +Schema detection mode + +: + +> elements (root) + +Schema detection elements + +: + +- gfc:FC_FeatureCatalogue +- gfc:FC_FeatureType + +## Standard elements + +List of all elements available in the standard. + +### Text {#iso19110-elem-gco-CharacterString-44f4a753bad9d1df04d0611f28f05110} + +Name + +: + +> gco:CharacterString + +Description + +: + +### Lower cardinality {#iso19110-elem-gco-lower-52bfcbb528e9aaefc2e33f4fdc55aa5f} + +Name + +: + +> gco:lower + +Description + +: + +```{=html} +Lower cardinality +``` +``` xml + + 1 + +``` + +### Nil reason {#iso19110-elem-gco-nilReason-59d9c7937eb12ff82e61921ee335d062} + +Name + +: + +> gco:nilReason + +Description + +: + +### Range {#iso19110-elem-gco-range-6709132eada2bd317e3ad342849df5ef} + +Name + +: + +> gco:range + +Description + +: + +``` xml + + + + 1 + + + 1 + + + + +``` + +### Upper cardinality {#iso19110-elem-gco-upper-a58d7645455b8f20c0d2608c5bc1b6ab} + +Name + +: + +> gco:upper + +Description + +: + +```{=html} +Upper cardinality +``` +``` xml + + 1 + + +``` + +### Affects value of {#iso19110-elem-gfc-affectsValueOf-3cc26e7cd38219c7bb06fbe8e5438598} + +Name + +: + +> gfc:affectsValueOf + +Description + +: + +### Aliases {#iso19110-elem-gfc-aliases-7ec87797f5b619c461f2acf995b56b2e} + +Name + +: + +> gfc:aliases + +Description + +: + +### Cardinalities {#iso19110-elem-gfc-cardinality-36c218fd045f824ca4f9d1ceb6ffbcc2} + +Name + +: + +> gfc:cardinality + +Description + +: + +```{=html} +Cardinalities +``` +``` xml + + + + + + 1 + + + 1 + + + + + + +``` + +### Elements {#iso19110-elem-gfc-carrierOfCharacteristics-c804ac9130fc47e8753b8d2e3776840b} + +Name + +: + +> gfc:carrierOfCharacteristics + +Description + +: + +```{=html} +Association, attribute, operation, ... +``` +``` xml + + + + VALUE + + + + + + + + + + 1 + + + 1 + + + + + + + + + + + + + + + + + Low coasts + + + 1 + + + Areas within 10km from the coastline and with an elevation + below 50m. + + + + + + + + High coasts + + + 2 + + + Areas within 10km from the coastline and with an elevation + above 50m. + + + + + + + + Inlands + + + 3 + + + Areas between 0 and 200 m outside the coastal strip. + + + + + + + + Uplands + + + 4 + + + Zones between 200 and 500 m plus the flat areas between 500 and + 1000m. + + + + + + + + Mountains + + + 5 + + + Slopy areas between 500 and 1000m and all the areas over + 1000m. + + + + + + + + INTEGER + + + + + +``` + +### Code {#iso19110-elem-gfc-code-c62e74de82d004d4ec09d403e4b59c3b} + +Name + +: + +> gfc:code + +Description + +: + +### Constrained by {#iso19110-elem-gfc-constrainedBy-5e5ace57efe55c1890bec294427a780a} + +Name + +: + +> gfc:constrainedBy + +Description + +: + +### Definition {#iso19110-elem-gfc-definition-4bc2a8f5046951fa9e77311ef6d927f2} + +Name + +: + +> gfc:definition + +Description + +: + +```{=html} +Property definition +``` +### Definition reference {#iso19110-elem-gfc-definitionReference-30806ed7d5bf82b19c877082a919216e} + +Name + +: + +> gfc:definitionReference + +Description + +: + +### Definition source {#iso19110-elem-gfc-definitionSource-7f9ab04b040daf81d7d761ea83101e88} + +Name + +: + +> gfc:definitionSource + +Description + +: + +### Description {#iso19110-elem-gfc-description-87db9aea10cf7281b199782a15b17015} + +Name + +: + +> gfc:description + +Description + +: + +### Association role {#iso19110-elem-gfc-FC_AssociationRole-48c91ffbc9251a3377010490882da453} + +Name + +: + +> gfc:FC_AssociationRole + +Description + +: + +### Constraint {#iso19110-elem-gfc-FC_Constraint-8b0503c998a5c3cfd079077286bcc18c} + +Name + +: + +> gfc:FC_Constraint + +Description + +: + +### Feature association {#iso19110-elem-gfc-FC_FeatureAssociation-7bfc562c6ffccb3dd540692bd8c0fda7} + +Name + +: + +> gfc:FC_FeatureAssociation + +Description + +: + +### Attribute {#iso19110-elem-gfc-FC_FeatureAttribute-f3f350a00639f88ab53dd23d5ad5724e} + +Name + +: + +> gfc:FC_FeatureAttribute + +Description + +: + +``` xml + + + VALUE + + + + + + + + + + 1 + + + 1 + + + + + + + + + + + + + + + + + Low coasts + + + 1 + + + Areas within 10km from the coastline and with an elevation + below 50m. + + + + + + + + High coasts + + + 2 + + + Areas within 10km from the coastline and with an elevation + above 50m. + + + + + + + + Inlands + + + 3 + + + Areas between 0 and 200 m outside the coastal strip. + + + + + + + + Uplands + + + 4 + + + Zones between 200 and 500 m plus the flat areas between 500 and + 1000m. + + + + + + + + Mountains + + + 5 + + + Slopy areas between 500 and 1000m and all the areas over + 1000m. + + + + + + + + INTEGER + + + + +``` + +### Feature Catalogue description {#iso19110-elem-gfc-FC_FeatureCatalogue-a4de444fdd9a6e86e8ba63bb96be363c} + +Name + +: + +> gfc:FC_FeatureCatalogue + +Description + +: + +``` xml + + + Elevation breakdown feature catalogue + + + Dataset elevation breakdown (raster 1 km) + + + 1.0 + + + 2012-11-05T10:56:11 + + + + + European Environment Agency + + + + + + + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + mauro.michielon@eea.europa.eu + + + + + + + + + + + + + + Elevation breakdown + + + The Elevation breakdown is used to allocate Land cover changes into + homogeneous areas as function of height, slope and distance to the sea. + + + + false + + + + + + VALUE + + + + + + + + + + 1 + + + 1 + + + + + + + + + + + + + + + + + Low coasts + + + 1 + + + Areas within 10km from the coastline and with an elevation + below 50m. + + + + + + + + High coasts + + + 2 + + + Areas within 10km from the coastline and with an elevation + above 50m. + + + + + + + + Inlands + + + 3 + + + Areas between 0 and 200 m outside the coastal strip. + + + + + + + + Uplands + + + 4 + + + Zones between 200 and 500 m plus the flat areas between 500 and + 1000m. + + + + + + + + Mountains + + + 5 + + + Slopy areas between 500 and 1000m and all the areas over + 1000m. + + + + + + + + INTEGER + + + + + + + + +``` + +### Feature operation {#iso19110-elem-gfc-FC_FeatureOperation-637b82bc0e9951563005e479a9e1d152} + +Name + +: + +> gfc:FC_FeatureOperation + +Description + +: + +### Attribute table description {#iso19110-elem-gfc-FC_FeatureType-38ad06d5e87d9bf33d5f111e7bca0eb4} + +Name + +: + +> gfc:FC_FeatureType + +Description + +: + +```{=html} +Attribute table description +``` +``` xml + + + Elevation breakdown + + + The Elevation breakdown is used to allocate Land cover changes into + homogeneous areas as function of height, slope and distance to the sea. + + + + false + + + + + + VALUE + + + + + + + + + + 1 + + + 1 + + + + + + + + + + + + + + + + + Low coasts + + + 1 + + + Areas within 10km from the coastline and with an elevation + below 50m. + + + + + + + + High coasts + + + 2 + + + Areas within 10km from the coastline and with an elevation + above 50m. + + + + + + + + Inlands + + + 3 + + + Areas between 0 and 200 m outside the coastal strip. + + + + + + + + Uplands + + + 4 + + + Zones between 200 and 500 m plus the flat areas between 500 and + 1000m. + + + + + + + + Mountains + + + 5 + + + Slopy areas between 500 and 1000m and all the areas over + 1000m. + + + + + + + + INTEGER + + + + + + +``` + +### Heritance relation {#iso19110-elem-gfc-FC_InheritanceRelation-fe8bfb4f25b16151bf7dc241c0bb800c} + +Name + +: + +> gfc:FC_InheritanceRelation + +Description + +: + +### Codelist {#iso19110-elem-gfc-FC_ListedValue-281cee06b2347acc7c485783eb4cf22f} + +Name + +: + +> gfc:FC_ListedValue + +Description + +: + +### Role type {#iso19110-elem-gfc-FC_RoleType-8f835d500036f8c773643298ee9a1287} + +Name + +: + +> gfc:FC_RoleType + +Description + +: + +### Feature catalogue {#iso19110-elem-gfc-featureCatalogue-747a0827bf295f6d27168cd2b274929b} + +Name + +: + +> gfc:featureCatalogue + +Description + +: + +``` xml + +``` + +### Property description {#iso19110-elem-gfc-featureType-d6099a684b15337451388dd46048c48f} + +Name + +: + +> gfc:featureType + +Description + +: + +```{=html} +Property description +``` +### Field of application {#iso19110-elem-gfc-fieldOfApplication-548e0631e3ea92f7dd05ac533b6c14d2} + +Name + +: + +> gfc:fieldOfApplication + +Description + +: + +```{=html} +Field of application +``` +### Formal definition {#iso19110-elem-gfc-formalDefinition-61fbbceaf2b0eca25754ba29528ac201} + +Name + +: + +> gfc:formalDefinition + +Description + +: + +### Functional language {#iso19110-elem-gfc-functionalLanguage-7a21d9c35ed9c400c40959ede97b8d76} + +Name + +: + +> gfc:functionalLanguage + +Description + +: + +### Inherits from {#iso19110-elem-gfc-inheritsFrom-d48c2429ef37a9f7001c4c78b3185ad8} + +Name + +: + +> gfc:inheritsFrom + +Description + +: + +### Inherits to {#iso19110-elem-gfc-inheritsTo-21e907a9a6f03374cf39958e940d6c04} + +Name + +: + +> gfc:inheritsTo + +Description + +: + +### Abstract {#iso19110-elem-gfc-isAbstract-108adb5fd93bc80097796cf3e185145e} + +Name + +: + +> gfc:isAbstract + +Description + +: + +```{=html} +Is this element an abstract element ? +``` +``` xml + + false + +``` + +### Is navigable {#iso19110-elem-gfc-isNavigable-ee77efa13eb047461f3d1b10eb057ad2} + +Name + +: + +> gfc:isNavigable + +Description + +: + +### Is ordered {#iso19110-elem-gfc-isOrdered-99dd774d6527b2e2a6714029b3d85562} + +Name + +: + +> gfc:isOrdered + +Description + +: + +### Label {#iso19110-elem-gfc-label-f039ffb9cb376d0473d7be6326b20fd7} + +Name + +: + +> gfc:label + +Description + +: + +### Codelist {#iso19110-elem-gfc-listedValue-10921452105d681cb7bcb8c2851416f9} + +Name + +: + +> gfc:listedValue + +Description + +: + +```{=html} +List of values for this element. +``` +### Member name {#iso19110-elem-gfc-memberName-3bd14590c8d90557f5d48e886a3ebef7} + +Name + +: + +> gfc:memberName + +Description + +: + +``` xml + + VALUE + +``` + +### Name {#iso19110-elem-gfc-name-134285dc9b9a3268556039e2fe3f370e} + +Name + +: + +> gfc:name + +Description + +: + +```{=html} +Feature catalogue name +``` +``` xml + + Elevation breakdown feature catalogue + +``` + +### Observes value of {#iso19110-elem-gfc-observesValueOf-b236ed68892a516373f72b89b397cde4} + +Name + +: + +> gfc:observesValueOf + +Description + +: + +### Catalogue producer {#iso19110-elem-gfc-producer-5a13bfab8b07441bc9f9f71dcfdf7f6c} + +Name + +: + +> gfc:producer + +Description + +: + +```{=html} +Catalogue responsible +``` +``` xml + + + + European Environment Agency + + + + + + + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + mauro.michielon@eea.europa.eu + + + + + + + + + + +``` + +### Relation {#iso19110-elem-gfc-relation-aacba568eb3b35bd7b8432488f11bf69} + +Name + +: + +> gfc:relation + +Description + +: + +### Role name {#iso19110-elem-gfc-roleName-75ef0d862fac206908f78b9ecd526c65} + +Name + +: + +> gfc:roleName + +Description + +: + +### Role type {#iso19110-elem-gfc-roleType-e11e8dd83ce112d38151e4c5d41f5e57} + +Name + +: + +> gfc:roleType + +Description + +: + +### Scope {#iso19110-elem-gfc-scope-4f044fce55b8e0b6dd0d77516ad9e66d} + +Name + +: + +> gfc:scope + +Description + +: + +```{=html} +Scope definition +``` +``` xml + + Dataset elevation breakdown (raster 1 km) + +``` + +### Signature {#iso19110-elem-gfc-signature-a322fc9fc498999771ea25d75eeadb92} + +Name + +: + +> gfc:signature + +Description + +: + +### Triggered by value of {#iso19110-elem-gfc-triggeredByValueOf-f9c78e57b38ecbf17a07eae27ddceb25} + +Name + +: + +> gfc:triggeredByValueOf + +Description + +: + +### Type {#iso19110-elem-gfc-type-8d417215d65176688a81728103dee9d4} + +Name + +: + +> gfc:type + +Description + +: + +### Property name {#iso19110-elem-gfc-typeName-5eb6a83793b5f1865c0a10bc6d3cb399} + +Name + +: + +> gfc:typeName + +Description + +: + +``` xml + + Elevation breakdown + +``` + +### Unique instance {#iso19110-elem-gfc-uniqueInstance-b0b6a49f0189dc2499564de5cdfd25a0} + +Name + +: + +> gfc:uniqueInstance + +Description + +: + +### Value measurement unit {#iso19110-elem-gfc-valueMeasurementUnit-3722d826b1a00b71bfae6cd7eefff3cd} + +Name + +: + +> gfc:valueMeasurementUnit + +Description + +: + +``` xml + + + + + + +``` + +### Value type {#iso19110-elem-gfc-valueType-faeb30b744a5e7aa19f43cb83bf2a9ab} + +Name + +: + +> gfc:valueType + +Description + +: + +``` xml + + + + INTEGER + + + +``` + +### Date {#iso19110-elem-gfc-versionDate-536720beffcbb11d9da8bd041ad7a762} + +Name + +: + +> gfc:versionDate + +Description + +: + +```{=html} +Catalogue date +``` +``` xml + + 2012-11-05T10:56:11 + +``` + +### Version {#iso19110-elem-gfc-versionNumber-d66ec9fd5c22c70a69dd2b759d66cc4f} + +Name + +: + +> gfc:versionNumber + +Description + +: + +```{=html} +Catalogue version +``` +``` xml + + 1.0 + +``` + +### Responsible party {#iso19110-elem-gmd-CI_ResponsibleParty-f8269ab6464cabb0bc5d4b5d8e2d410c} + +Name + +: + +> gmd:CI_ResponsibleParty + +Description + +: + +```{=html} +Responsible party +``` +``` xml + + + European Environment Agency + + + + + + + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + mauro.michielon@eea.europa.eu + + + + + + + + + +``` + +### Responsible party {#iso19110-elem-gmd-responsibleParty-7352aaa3187b52425f19d3f567e8b88a} + +Name + +: + +> gmd:responsibleParty + +Description + +: + +```{=html} +Responsible party +``` +### Anchor {#iso19110-elem-gmx-Anchor-4e506485badff59411e1cb2c1f5031e3} + +Name + +: + +> gmx:Anchor + +Description + +: + +### Field of application {#iso19110-elem-gmx-fieldOfApplication-66508d1f139317e01e1decd095915428} + +Name + +: + +> gmx:fieldOfApplication + +Description + +: + +```{=html} +Field of application +``` +### File name {#iso19110-elem-gmx-FileName-2a19fe714b24f0a417598321882eef7f} + +Name + +: + +> gmx:FileName + +Description + +: + +### Name {#iso19110-elem-gmx-name-5ec0c4442ad2b94944636103e556d401} + +Name + +: + +> gmx:name + +Description + +: + +```{=html} +Feature catalogue name +``` +### Scope {#iso19110-elem-gmx-scope-14efac6982297b09ba1324e80138092f} + +Name + +: + +> gmx:scope + +Description + +: + +```{=html} +Scope definition +``` +### Date {#iso19110-elem-gmx-versionDate-6c27e2ee0b2daa4ab1aea9ef374bc08f} + +Name + +: + +> gmx:versionDate + +Description + +: + +```{=html} +Catalogue date +``` +### Version {#iso19110-elem-gmx-versionNumber-075201f18225aec432b46c75a93589a2} + +Name + +: + +> gmx:versionNumber + +Description + +: + +```{=html} +Catalogue version +``` +## Standard codelists + +List of all codelists available in the standard. + +### Standard codelists (gmd:CI_RoleCode) {#iso19110-cl-gmd-CI_RoleCode} + +| code | label | description | +|-----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| resourceProvider | Resource provider | Party that supplies the resource | +| custodian | Custodian | Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource | +| owner | Owner | Party that owns the resource | +| user | User | Party who uses the resource | +| distributor | Distributor | Party who distributes the resource | +| originator | Originator | Party who created the resource | +| pointOfContact | Point of contact | Party who can be contacted for acquiring knowledge about or acquisition of the resource | +| principalInvestigator | Principal investigator | Key party responsible for gathering information and conducting research | +| processor | Processor | Party that has processed the data in a manner such that the resource has been modified | +| publisher | Publisher | Party who published the resource | +| author | Author | Party who authored the resource | diff --git a/docs/manual/docs/annexes/standards/iso19115-3.2018.md b/docs/manual/docs/annexes/standards/iso19115-3.2018.md new file mode 100644 index 0000000000..baaabc077f --- /dev/null +++ b/docs/manual/docs/annexes/standards/iso19115-3.2018.md @@ -0,0 +1,20114 @@ +# Geographic information -- Metadata (iso19115-3.2018) {#iso19115-3.2018} + +The objective of ISO 19115 is to provide a model for describing information or resources that can have geographic extents. This part of ISO 19115 is intended to be used by information system analysts, program planners, and developers of information systems, as well as others in order to define basic principles and requirements for standardized description of information resources. This part of ISO 19115 defines metadata elements, their properties, and the relationships between elements, and establishes a common set of metadata terminology, definitions, and extension procedures. + +Although the primary purpose of this part of ISO 19115 is to describe digital information that has a geographic extent, it can be used to describe all types of resources including textual documents, initiatives, software, sensors, non-geographic information, product specifications and repositories, i.e. it can be used to describe information resources that do not have geographic extent. Some domains have their own metadata standards, such as the Dublin Core for libraries. If necessary such standards and this part of ISO 19115 could be profiled to create a Community Schema. + +This schema also includes: + +- Describe imagery data (covered by ISO19115-2) +- Embed data model (feature catalogue) in the dataset record (covered by ISO19110) +- Data quality described using ISO19157 + +More information: + +- [Using the latest ISO Standard for Geographic Information (ISO19115-1) for an INSPIRE Discovery Service](https://www.iso.org/standard/53798.html) + +This standard is maintained on and is available by default in GeoNetwork. The TC211 is maintaining the XSD for this standard on . + +Example of catalogues using this standard: + +- [Metawal - Catalogue pour l'information géographique de Wallonie](https://metawal.wallonie.be/) is using ISO19115-3 as the default standard for all records. Main advantages are: categorizations of related documents (eg. online sources, DQ reports, GIS styles, Data models), better description of organization / parties and roles, remain compliant to the INSPIRE directive by converting to ISO19139 through CSW. + +![](img/metawal-tramedesaxes.png) + +- [Sextant - Checkpoints](https://sextant.ifremer.fr/) is using ISO19115-3 for data quality description of Specification / Products and upstream data. + +![](img/sextant-checkpoint.png) + +More details: + +## Metadata editor + +This standard can be encoded using 3 view(s). + +- `iso19115-3.2018-view-default`{.interpreted-text role="ref"} +- `iso19115-3.2018-view-advanced`{.interpreted-text role="ref"} +- `iso19115-3.2018-view-xml`{.interpreted-text role="ref"} + +### View: Simple (default) {#iso19115-3.2018-view-default} + +This view is composed of1tab(s). + +- `iso19115-3.2018-tab-default`{.interpreted-text role="ref"} + +This view also allows to add the following element even if not in the current record: + +- Descriptive keywords (mri:descriptiveKeywords) +- Processor (mrl:processor) +- Cited responsible party (cit:citedResponsibleParty) +- Point of contact (mri:pointOfContact) +- Contact (mdb:contact) +- (mcc:processor) +- Elements (gfc:carrierOfCharacteristics) +- Party (cit:party) +- Individual (cit:CI_Individual) +- Organisation (cit:CI_Organisation) +- Codelist (gfc:listedValue) + +#### Tab: Simple (default) {#iso19115-3.2018-tab-default} + +This tab display elements from the XML metadata record. + +##### Section: Identification info + +```{=html} +Basic information about the resource(s) to which the metadata applies +``` +See `iso19115-3.2018-elem-mdb-identificationInfo-7b3f7b7fbb8a986c92658058fe54f876`{.interpreted-text role="ref"} + +##### Section: Content Information + +```{=html} +Provides information about the feature catalogue and describes the coverage and image data characteristics +``` +See `iso19115-3.2018-elem-mdb-contentInfo-477f3b1af76890ee3158c66524002fd8`{.interpreted-text role="ref"} + +##### Section: Distribution Information + +```{=html} +Provides information about the distributor of and options for obtaining the resource(s) +``` +See `iso19115-3.2018-elem-mdb-distributionInfo-26e7e205c5605edb7225b0aa5c3950f1`{.interpreted-text role="ref"} + +##### Section: Data quality info + +```{=html} +Provides overall assessment of quality of a resource(s) +``` +See `iso19115-3.2018-elem-mdb-dataQualityInfo-05c1cd27fb52b7bc5c361a03fb962e72`{.interpreted-text role="ref"} + +##### Section: Resource lineage + +```{=html} +Information about the provenance, source(s), and/or the production process(es) applied to the resource +``` +See `iso19115-3.2018-elem-mdb-resourceLineage-b38f8fe2e0d2dee771b11f2dfcb77937`{.interpreted-text role="ref"} + +##### Section: Spatial representation info + +```{=html} +Digital representation of spatial information in the dataset +``` +See `iso19115-3.2018-elem-mdb-spatialRepresentationInfo-fa98674c3f9afa7324634c07cda62b3b`{.interpreted-text role="ref"} + +##### Section: Reference System Information + +```{=html} +Description of the spatial and temporal reference systems used in the dataset +``` +See `iso19115-3.2018-elem-mdb-referenceSystemInfo-6e40de8cf9dbe75d0601aedf78756344`{.interpreted-text role="ref"} + +##### Section: Acquisition information + +See `iso19115-3.2018-elem-mdb-acquisitionInformation-ce87174a305975fd6ab50c76fa062e87`{.interpreted-text role="ref"} + +##### Section: Portrayal catalogue info + +```{=html} +Provides information about the catalogue of rules defined for the portrayal of a resource(s) +``` +See `iso19115-3.2018-elem-mdb-portrayalCatalogueInfo-f6c73fdd3d7c18f1e90d4a8853986230`{.interpreted-text role="ref"} + +##### Section: Metadata constraints + +```{=html} +Provides restrictions on the access and use of metadata +``` +See `iso19115-3.2018-elem-mdb-metadataConstraints-cd13aab243e8cf8b0009f3c2cc6288a6`{.interpreted-text role="ref"} + +##### Section: Metadata maintenance + +```{=html} +Provides information about the frequency of metadata updates, and the scope of those updates +``` +See `iso19115-3.2018-elem-mdb-metadataMaintenance-f31a9a9880a6a939b8125c2505a04439`{.interpreted-text role="ref"} + +##### Section: Application schema info + +```{=html} +Provides information about the conceptual schema of a dataset +``` +See `iso19115-3.2018-elem-mdb-applicationSchemaInfo-6e29d5e06caa68d593c2abc867db859e`{.interpreted-text role="ref"} + +##### Section: Metadata + +##### Metadata identifier + +```{=html} +Unique identifier for this metadata file +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataIdentifier + +See `iso19115-3.2018-elem-mdb-metadataIdentifier-a4b2a53a6ba91300cd824aaa32dced12`{.interpreted-text role="ref"} + +##### Default locale + +```{=html} +Language and character set used for documenting metadata +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:defaultLocale + +See `iso19115-3.2018-elem-mdb-defaultLocale-dd848d0de1837131c70510c4ab1253b4`{.interpreted-text role="ref"} + +##### Other locale + +```{=html} +Provides information about alternatively used localised character strings +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:otherLocale + +See `iso19115-3.2018-elem-mdb-otherLocale-f4f26265136a3b0812c2ce9d90c0c17f`{.interpreted-text role="ref"} + +##### Contact + +```{=html} +Party responsible for the metadata information +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:contact + +See `iso19115-3.2018-elem-mdb-contact-bd86ee4331a33e4a09966e9d3837b346`{.interpreted-text role="ref"} + +##### Parent metadata + +```{=html} +Identification of the parent metadata record +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:parentMetadata + +See `iso19115-3.2018-elem-mdb-parentMetadata-d82be96796ed0eaaa63a697cfec1287a`{.interpreted-text role="ref"} + +##### Type of resource + +```{=html} +Type of resource for which metadata is provided +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataScope + +See `iso19115-3.2018-elem-mdb-metadataScope-85ce83354003a98ad94f8f749af858f7`{.interpreted-text role="ref"} + +##### Alternative metadata reference + +```{=html} +Reference to alternative metadata, e.g Dublin Core, FGDC, or metadata in a non-ISO standard for the same resource +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:alternativeMetadataReference + +See `iso19115-3.2018-elem-mdb-alternativeMetadataReference-d658e4e78b4bb85f325070dac38656f2`{.interpreted-text role="ref"} + +##### Metadata linkage + +```{=html} +Online location where the metadata is available +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataLinkage + +See `iso19115-3.2018-elem-mdb-metadataLinkage-582ff009f1d12392ca0be7e310ace58b`{.interpreted-text role="ref"} + +##### Date info + +```{=html} +Date(s) associated with the metadata. NOTE Creation” date must be provided, others can also be provided +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:dateInfo + +See `iso19115-3.2018-elem-mdb-dateInfo-74b8e273fbd6b264ff0c70ca542b6fa3`{.interpreted-text role="ref"} + +##### Metadata standard + +```{=html} +Citation for the standard to which the metadata conforms. NOTE Metadata standard citations should include an identifier. +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataStandard + +See `iso19115-3.2018-elem-mdb-metadataStandard-317906f5ed0893d367c6a78ab2d68812`{.interpreted-text role="ref"} + +##### Metadata profile + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataProfile + +See `iso19115-3.2018-elem-mdb-metadataProfile-92627fbcc80493116a75b90146bcf055`{.interpreted-text role="ref"} + +### View: Full (advanced) {#iso19115-3.2018-view-advanced} + +This view is composed of13tab(s). + +- `iso19115-3.2018-tab-identificationInfo`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-contentInfo`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-distributionInfo`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-dataQualityInfo`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-resourceLineage`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-spatialRepresentationInfo`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-referenceSystemInfo`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-acquisitionInformation`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-metadata`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-portrayalCatalogueInfo`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-metadataConstraints`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-metadataMaintenance`{.interpreted-text role="ref"} +- `iso19115-3.2018-tab-applicationSchemaInfo`{.interpreted-text role="ref"} + +#### Tab: Identification (identificationInfo) {#iso19115-3.2018-tab-identificationInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Identification info + +```{=html} +Basic information about the resource(s) to which the metadata applies +``` +See `iso19115-3.2018-elem-mdb-identificationInfo-7b3f7b7fbb8a986c92658058fe54f876`{.interpreted-text role="ref"} + +#### Tab: Content (contentInfo) {#iso19115-3.2018-tab-contentInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Content Information + +```{=html} +Provides information about the feature catalogue and describes the coverage and image data characteristics +``` +See `iso19115-3.2018-elem-mdb-contentInfo-477f3b1af76890ee3158c66524002fd8`{.interpreted-text role="ref"} + +#### Tab: Distribution (distributionInfo) {#iso19115-3.2018-tab-distributionInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Distribution Information + +```{=html} +Provides information about the distributor of and options for obtaining the resource(s) +``` +See `iso19115-3.2018-elem-mdb-distributionInfo-26e7e205c5605edb7225b0aa5c3950f1`{.interpreted-text role="ref"} + +#### Tab: Quality (dataQualityInfo) {#iso19115-3.2018-tab-dataQualityInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Data quality info + +```{=html} +Provides overall assessment of quality of a resource(s) +``` +See `iso19115-3.2018-elem-mdb-dataQualityInfo-05c1cd27fb52b7bc5c361a03fb962e72`{.interpreted-text role="ref"} + +#### Tab: Lineage (resourceLineage) {#iso19115-3.2018-tab-resourceLineage} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Resource lineage + +```{=html} +Information about the provenance, source(s), and/or the production process(es) applied to the resource +``` +See `iso19115-3.2018-elem-mdb-resourceLineage-b38f8fe2e0d2dee771b11f2dfcb77937`{.interpreted-text role="ref"} + +#### Tab: Spatial rep. (spatialRepresentationInfo) {#iso19115-3.2018-tab-spatialRepresentationInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Spatial representation info + +```{=html} +Digital representation of spatial information in the dataset +``` +See `iso19115-3.2018-elem-mdb-spatialRepresentationInfo-fa98674c3f9afa7324634c07cda62b3b`{.interpreted-text role="ref"} + +#### Tab: Ref. system (referenceSystemInfo) {#iso19115-3.2018-tab-referenceSystemInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Reference System Information + +```{=html} +Description of the spatial and temporal reference systems used in the dataset +``` +See `iso19115-3.2018-elem-mdb-referenceSystemInfo-6e40de8cf9dbe75d0601aedf78756344`{.interpreted-text role="ref"} + +#### Tab: Acquisition info (acquisitionInformation) {#iso19115-3.2018-tab-acquisitionInformation} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Acquisition information + +See `iso19115-3.2018-elem-mdb-acquisitionInformation-ce87174a305975fd6ab50c76fa062e87`{.interpreted-text role="ref"} + +#### Tab: Metadata (metadata) {#iso19115-3.2018-tab-metadata} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Metadata + +##### Metadata identifier + +```{=html} +Unique identifier for this metadata file +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataIdentifier + +See `iso19115-3.2018-elem-mdb-metadataIdentifier-a4b2a53a6ba91300cd824aaa32dced12`{.interpreted-text role="ref"} + +##### Default locale + +```{=html} +Language and character set used for documenting metadata +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:defaultLocale + +See `iso19115-3.2018-elem-mdb-defaultLocale-dd848d0de1837131c70510c4ab1253b4`{.interpreted-text role="ref"} + +##### Other locale + +```{=html} +Provides information about alternatively used localised character strings +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:otherLocale + +See `iso19115-3.2018-elem-mdb-otherLocale-f4f26265136a3b0812c2ce9d90c0c17f`{.interpreted-text role="ref"} + +##### Contact + +```{=html} +Party responsible for the metadata information +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:contact + +See `iso19115-3.2018-elem-mdb-contact-bd86ee4331a33e4a09966e9d3837b346`{.interpreted-text role="ref"} + +##### Parent metadata + +```{=html} +Identification of the parent metadata record +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:parentMetadata + +See `iso19115-3.2018-elem-mdb-parentMetadata-d82be96796ed0eaaa63a697cfec1287a`{.interpreted-text role="ref"} + +##### Type of resource + +```{=html} +Type of resource for which metadata is provided +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataScope + +See `iso19115-3.2018-elem-mdb-metadataScope-85ce83354003a98ad94f8f749af858f7`{.interpreted-text role="ref"} + +##### Alternative metadata reference + +```{=html} +Reference to alternative metadata, e.g Dublin Core, FGDC, or metadata in a non-ISO standard for the same resource +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:alternativeMetadataReference + +See `iso19115-3.2018-elem-mdb-alternativeMetadataReference-d658e4e78b4bb85f325070dac38656f2`{.interpreted-text role="ref"} + +##### Metadata linkage + +```{=html} +Online location where the metadata is available +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataLinkage + +See `iso19115-3.2018-elem-mdb-metadataLinkage-582ff009f1d12392ca0be7e310ace58b`{.interpreted-text role="ref"} + +##### Date info + +```{=html} +Date(s) associated with the metadata. NOTE Creation” date must be provided, others can also be provided +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:dateInfo + +See `iso19115-3.2018-elem-mdb-dateInfo-74b8e273fbd6b264ff0c70ca542b6fa3`{.interpreted-text role="ref"} + +##### Metadata standard + +```{=html} +Citation for the standard to which the metadata conforms. NOTE Metadata standard citations should include an identifier. +``` + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataStandard + +See `iso19115-3.2018-elem-mdb-metadataStandard-317906f5ed0893d367c6a78ab2d68812`{.interpreted-text role="ref"} + +##### Metadata profile + +XPath + +: + +> /mdb:MD_Metadata/mdb:metadataProfile + +See `iso19115-3.2018-elem-mdb-metadataProfile-92627fbcc80493116a75b90146bcf055`{.interpreted-text role="ref"} + +#### Tab: Portrayal (portrayalCatalogueInfo) {#iso19115-3.2018-tab-portrayalCatalogueInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Portrayal catalogue info + +```{=html} +Provides information about the catalogue of rules defined for the portrayal of a resource(s) +``` +See `iso19115-3.2018-elem-mdb-portrayalCatalogueInfo-f6c73fdd3d7c18f1e90d4a8853986230`{.interpreted-text role="ref"} + +#### Tab: Md. constraints (metadataConstraints) {#iso19115-3.2018-tab-metadataConstraints} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Metadata constraints + +```{=html} +Provides restrictions on the access and use of metadata +``` +See `iso19115-3.2018-elem-mdb-metadataConstraints-cd13aab243e8cf8b0009f3c2cc6288a6`{.interpreted-text role="ref"} + +#### Tab: Md. maintenance (metadataMaintenance) {#iso19115-3.2018-tab-metadataMaintenance} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Metadata maintenance + +```{=html} +Provides information about the frequency of metadata updates, and the scope of those updates +``` +See `iso19115-3.2018-elem-mdb-metadataMaintenance-f31a9a9880a6a939b8125c2505a04439`{.interpreted-text role="ref"} + +#### Tab: Schema info (applicationSchemaInfo) {#iso19115-3.2018-tab-applicationSchemaInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Application schema info + +```{=html} +Provides information about the conceptual schema of a dataset +``` +See `iso19115-3.2018-elem-mdb-applicationSchemaInfo-6e29d5e06caa68d593c2abc867db859e`{.interpreted-text role="ref"} + +### View: XML (xml) {#iso19115-3.2018-view-xml} + +This view is composed of1tab(s). + +- `iso19115-3.2018-tab-xml`{.interpreted-text role="ref"} + +#### Tab: XML (xml) {#iso19115-3.2018-tab-xml} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +## Schema technical details + +Standard identifier + +: + +> iso19115-3.2018 + +Version + +: + +> 1.0 + +Schema location + +: + +> + +Schema namespaces + +: + +- +- +- +- +- +- +- +- +- +- +- + +Schema detection mode + +: + +> elements (root) + +Schema detection elements + +: + +- cit:CI_Organisation +- cit:CI_Responsibility +- mcc:MD_BrowseGraphic +- mco:MD_Constraints +- mco:MD_LegalConstraints +- mco:MD_SecurityConstraints +- mdb:MD_Metadata +- mdq:DQ_AbsoluteExternalPositionalAccuracy +- mdq:DQ_AccuracyOfATimeMeasurement +- mdq:DQ_CompletenessCommission +- mdq:DQ_CompletenessOmission +- mdq:DQ_ConceptualConsistency +- mdq:DQ_Confidence +- mdq:DQ_DomainConsistency +- mdq:DQ_FormatConsistency +- mdq:DQ_GriddedDataPositionalAccuracy +- mdq:DQ_Homogeneity +- mdq:DQ_NonQuantitativeAttributeCorrectness +- mdq:DQ_QuantitativeAttributeAccuracy +- mdq:DQ_RelativeInternalPositionalAccuracy +- mdq:DQ_Representativity +- mdq:DQ_TemporalConsistency +- mdq:DQ_TemporalValidity +- mdq:DQ_ThematicClassificationCorrectness +- mdq:DQ_TopologicalConsistency +- mdq:DQ_UsabilityElement +- mrd:MD_Format +- mrs:MD_ReferenceSystem + +## Standard elements + +List of all elements available in the standard. + +### Name of the calendar era {#iso19115-3.2018-elem-calendarEraName-ec7b1c5ffbce0e1b8ddb7e74376c0b6e} + +Name + +: + +> calendarEraName + +Description + +: + +### Character set {#iso19115-3.2018-elem-cat-characterSet-52f1baf6f54b3997a8466c8f0bf097be} + +Name + +: + +> cat:characterSet + +Description + +: + +### Field of application {#iso19115-3.2018-elem-cat-fieldOfApplication-5bc58fccff6401611fa893189aceaaba} + +Name + +: + +> cat:fieldOfApplication + +Description + +: + +```{=html} +Field of application +``` +### Language {#iso19115-3.2018-elem-cat-language-c1b6596a8773519ed974661112541469} + +Name + +: + +> cat:language + +Description + +: + +### Language (locale) {#iso19115-3.2018-elem-cat-locale-885b210b8fd2b91d64ac8933002875c0} + +Name + +: + +> cat:locale + +Description + +: + +### Name {#iso19115-3.2018-elem-cat-name-1fcd08e54b352d11b28503ec22b0f840} + +Name + +: + +> cat:name + +Description + +: + +```{=html} +Feature catalogue name +``` +### Scope {#iso19115-3.2018-elem-cat-scope-ab251abb91bc86162e5e3909c4ea453a} + +Name + +: + +> cat:scope + +Description + +: + +```{=html} +Scope definition +``` +### Date {#iso19115-3.2018-elem-cat-versionDate-87cadc81f222434772d4afbc70202647} + +Name + +: + +> cat:versionDate + +Description + +: + +```{=html} +Catalogue date +``` +### Version {#iso19115-3.2018-elem-cat-versionNumber-cc9ba326c564cc1cd3dfe1d5f48c56ef} + +Name + +: + +> cat:versionNumber + +Description + +: + +```{=html} +Catalogue version +``` +### Address {#iso19115-3.2018-elem-cit-address-CI_Contact-97d82fe84f0b58d25ab4a3bc467b682e} + +Name + +: + +> cit:address + +Context + +: + +> CI_Contact + +Description + +: + +```{=html} +Physical and email address at which the organization or + individual may be + contacted +``` +### Adresse {#iso19115-3.2018-elem-cit-address-855032095c3291ece299ab89936fbd31} + +Name + +: + +> cit:address + +Description + +: + +```{=html} +Adresse physique et électronique à laquelle la personne ou + l'organisation responsable peut être contactée +``` +```{=html} +Adresse postale ou électronique d'un premier niveau de contact (par + exemple un secrétariat). Ces informations sont du type CI_Address et sont + gérées dans la classe du même nom. +``` +### Administrative area {#iso19115-3.2018-elem-cit-administrativeArea-b8c4ff9a4088ccf36d86a7844f6ee578} + +Name + +: + +> cit:administrativeArea + +Description + +: + +```{=html} +State, province of the location +``` +### Alternate title {#iso19115-3.2018-elem-cit-alternateTitle-11081d54ab21175ab27ed26bd70f1318} + +Name + +: + +> cit:alternateTitle + +Description + +: + +```{=html} +Short name or other language name by which the cited + information is known. + Example: "DCW" as an alternative title for "Digital Chart of the World +``` +### Application profile {#iso19115-3.2018-elem-cit-applicationProfile-cc4b32b3780fe5ec9c452cc5cadd0991} + +Name + +: + +> cit:applicationProfile + +Description + +: + +```{=html} +Name of an application profile that can be used with the online + resource +``` +### Address {#iso19115-3.2018-elem-cit-CI_Address-5ae5f6aeaca8c394467355c580134ce5} + +Name + +: + +> cit:CI_Address + +Description + +: + +```{=html} +Location of the responsible individual or organization +``` +### Citation {#iso19115-3.2018-elem-cit-CI_Citation-07ef81205ee846bbc18cc8483d63b488} + +Name + +: + +> cit:CI_Citation + +Description + +: + +```{=html} +Standardised resource reference +``` +### Contact {#iso19115-3.2018-elem-cit-CI_Contact-9c64730242278628f7068b237dc2e3ba} + +Name + +: + +> cit:CI_Contact + +Description + +: + +```{=html} +Information required to enable contact with the responsible + person and/or + organization +``` +### Date {#iso19115-3.2018-elem-cit-CI_Date-d1dcaf53cc1f919898b4cb1f2716d465} + +Name + +: + +> cit:CI_Date + +Description + +: + +```{=html} +Reference date and event used to describe it (YYYY-MM-DD) +``` +### Individual {#iso19115-3.2018-elem-cit-CI_Individual-f6229448aa872e50835de3e9bf949386} + +Name + +: + +> cit:CI_Individual + +Description + +: + +```{=html} +Class of information about the party if the party is + an individual +``` +### OnLine resource {#iso19115-3.2018-elem-cit-CI_OnlineResource-44959d6b329db39e0b0fc7fe8776471b} + +Name + +: + +> cit:CI_OnlineResource + +Description + +: + +```{=html} +Information about on-line sources from which the dataset, + specification, or + community profile name and extended metadata elements can be obtained +``` +### Organisation {#iso19115-3.2018-elem-cit-CI_Organisation-053268e94a93caf2bca99e2e34be8ecd} + +Name + +: + +> cit:CI_Organisation + +Description + +: + +```{=html} +Class of information about the party if the party is + an organization +``` +### Responsibility {#iso19115-3.2018-elem-cit-CI_Responsibility-071c0ed4ea21aca2435009ff6d74ca00} + +Name + +: + +> cit:CI_Responsibility + +Description + +: + +```{=html} +Class of information about the party and their + role +``` +### Role code {#iso19115-3.2018-elem-cit-CI_RoleCode-4d462a9e57560b8f52a159210fb7a409} + +Name + +: + +> cit:CI_RoleCode + +Description + +: + +### Standard codelists Role code (cit:CI_RoleCode) + +| code | label | description | +|-----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| resourceProvider | Resource provider | Party that supplies the resource | +| custodian | Custodian | Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource | +| owner | Owner | Party that owns the resource | +| user | User | Party who uses the resource | +| distributor | Distributor | Party who distributes the resource | +| originator | Originator | Party who created the resource | +| pointOfContact | Point of contact | Party who can be contacted for acquiring knowledge about or acquisition of the resource | +| principalInvestigator | Principal investigator | Key party responsible for gathering information and conducting research | +| processor | Processor | Party that has processed the data in a manner such that the resource has been modified | +| publisher | Publisher | Party who published the resource | +| author | Author | Party who authored the resource | +| sponsor | Sponsor | Party who speaks for the resource | +| coAuthor | Co-author | Party who jointly authors the resource | +| collaborator | Collaborator | Party who assists with the generation of the resource other than the principal investigator | +| editor | Editor | Party who reviewed or modified the resource to improve the content | +| mediator | Mediator | A class of entity that mediates access to the resource and for whom the resource is intended or useful | +| rightsHolder | Rights holder | Party owning or managing rights over the resource | +| contributor | Contributor | Party contributing to the resource | +| funder | Funder | Party providing monetary support for the resource | +| stakeholder | Stakeholder | Party who has an interest in the resource or the use of the resource | + +### Séries {#iso19115-3.2018-elem-cit-CI_Series-05997b3c9b5a88806c44ec019dd105f6} + +Name + +: + +> cit:CI_Series + +Description + +: + +```{=html} +Class of information about the series, or aggregate + resource, to which a resource belongs +``` +### Telephone {#iso19115-3.2018-elem-cit-CI_Telephone-57584ba11ae4721360c06e9f1a980082} + +Name + +: + +> cit:CI_Telephone + +Description + +: + +```{=html} +Telephone numbers for contacting the responsible individual or + organization +``` +### Cited responsible party {#iso19115-3.2018-elem-cit-citedResponsibleParty-12711cd21eb7ccd8be6d15ff06b1fecc} + +Name + +: + +> cit:citedResponsibleParty + +Description + +: + +```{=html} +Name and position information for an individual or organization + that is + responsible for the resource +``` +### City {#iso19115-3.2018-elem-cit-city-64053d57bd74c4e93afb69989ee49cb4} + +Name + +: + +> cit:city + +Description + +: + +```{=html} +City of the location +``` +### Contact Information {#iso19115-3.2018-elem-cit-contactInfo-5c594c4932c99a4158471697d7f84f18} + +Name + +: + +> cit:contactInfo + +Description + +: + +```{=html} +Address of the responsible party +``` +### Contact instructions {#iso19115-3.2018-elem-cit-contactInstructions-28da1ff5a0492d67e13453f2a39ca9e2} + +Name + +: + +> cit:contactInstructions + +Description + +: + +```{=html} +Supplemental instructions on how or when to contact the + individual or + organization +``` +### Contact type {#iso19115-3.2018-elem-cit-contactType-20fe26a0025843f8389415944deb170c} + +Name + +: + +> cit:contactType + +Description + +: + +```{=html} +Type of the contact +``` +### Country {#iso19115-3.2018-elem-cit-country-8569b7d15373c7d51d73fe19899ddc47} + +Name + +: + +> cit:country + +Description + +: + +```{=html} +Country of the physical address +``` +### Country {#iso19115-3.2018-elem-cit-country-cit-CI_Address-2e0d29619005dfe74c7a6d24b38058f3} + +Name + +: + +> cit:country + +Context + +: + +> cit:CI_Address + +Description + +: + +```{=html} +Country of the address +``` + +Condition + +: + +> optional + +### Date {#iso19115-3.2018-elem-cit-date-c960311cb0c208a0574cc6c1189e291b} + +Name + +: + +> cit:date + +Description + +: + +```{=html} +Formatted as 2007-09-12 (YYYY-MM-DD) +``` +```{=html} +reference date and event used to describe it +``` +### Date {#iso19115-3.2018-elem-cit-date-cit-CI_Citation-f920bf44c6e3baee883e7de01175e514} + +Name + +: + +> cit:date + +Context + +: + +> cit:CI_Citation + +Description + +: + +```{=html} +Reference date for the cited resource +``` + +Condition + +: + +> mandatory + +### Date {#iso19115-3.2018-elem-cit-date-cit-CI_Date-ba0770057c4e9ec8eb2d52e7d0b2c59f} + +Name + +: + +> cit:date + +Context + +: + +> cit:CI_Date + +Description + +: + +```{=html} +Reference date for the cited resource +``` + +Condition + +: + +> mandatory + +### Date type {#iso19115-3.2018-elem-cit-dateType-441176555042ce6ede97954a98eb7b83} + +Name + +: + +> cit:dateType + +Description + +: + +```{=html} +Event used for reference date +``` + +Condition + +: + +> mandatory + +### Delivery point {#iso19115-3.2018-elem-cit-deliveryPoint-81ad23bd0554b46cfbd1f7dfa20f81ea} + +Name + +: + +> cit:deliveryPoint + +Description + +: + +```{=html} +Address line for the location (as described in ISO 11180, annex + A) +``` +```{=html} +Address line for the location. Example Street number + and name, Suite number, etc. +``` +### Description {#iso19115-3.2018-elem-cit-description-cit-CI_OnlineResource-01ddc3b7f9794277399a2c56f4e7f0aa} + +Name + +: + +> cit:description + +Context + +: + +> cit:CI_OnlineResource + +Description + +: + +```{=html} +Detailed text description of what the online resource is/does +``` +``` xml + + Ce service de téléchargement ATOM Feed permet de télécharger la série de couches de + données conforme au thème INSPIRE "Sites protégés". Cliquez sur le lien correspondant aux couches de + données Natura 2000 pour télécharger les informations relatives à ce mécanisme de désignation. + +``` + +### Edition {#iso19115-3.2018-elem-cit-edition-04e1813c8da877a03f60df27a3b69ab2} + +Name + +: + +> cit:edition + +Description + +: + +```{=html} +Version of the cited resource +``` +### Edition date {#iso19115-3.2018-elem-cit-editionDate-2fe8af778725aaaa1c77f6f5094c2c27} + +Name + +: + +> cit:editionDate + +Description + +: + +```{=html} +Date of the edition (YYYY-MM-DD) +``` +### Electronic mail address {#iso19115-3.2018-elem-cit-electronicMailAddress-8abe82c5c90b49acb18508577ddf6f95} + +Name + +: + +> cit:electronicMailAddress + +Description + +: + +```{=html} +Address of the electronic mailbox of the responsible + organization or + individual +``` +### Extent {#iso19115-3.2018-elem-cit-extent-cit-CI_Responsibility-cafbc635a55f5453157ec2cc54c624f8} + +Name + +: + +> cit:extent + +Context + +: + +> cit:CI_Responsibility + +Description + +: + +```{=html} +Spatial or temporal extent of the role +``` +### Function {#iso19115-3.2018-elem-cit-function-d1ccd71b112690a7ae7f187d2b1286b9} + +Name + +: + +> cit:function + +Description + +: + +```{=html} +Code for function performed by the online resource +``` +### Graphic {#iso19115-3.2018-elem-cit-graphic-cit-CI_Citation-a71bc47c4468f216fac662acedf06ff2} + +Name + +: + +> cit:graphic + +Context + +: + +> cit:CI_Citation + +Description + +: + +```{=html} +Citation graphic or logo for the cited resource +``` + +Condition + +: + +> optional + +### Hours of service {#iso19115-3.2018-elem-cit-hoursOfService-005f6a6884104abc1caeff5be47c98b8} + +Name + +: + +> cit:hoursOfService + +Description + +: + +```{=html} +Time period (including time zone) when individuals can contact + the organization + or individual +``` +### Citation identifier {#iso19115-3.2018-elem-cit-identifier-cit-CI_Citation-39034d5cd7f284b1b393efdee0580e49} + +Name + +: + +> cit:identifier + +Context + +: + +> cit:CI_Citation + +Description + +: + +```{=html} +Identifier of the citation +``` +### Individual {#iso19115-3.2018-elem-cit-individual-55ac5c7a0365c3cc796a297e2f6bdf73} + +Name + +: + +> cit:individual + +Description + +: + +```{=html} +An individual in the named organization +``` +### ISBN {#iso19115-3.2018-elem-cit-ISBN-32066ff442c8b0e2dbb3b0885a94976a} + +Name + +: + +> cit:ISBN + +Description + +: + +```{=html} +International Standard Book Number +``` +### ISSN {#iso19115-3.2018-elem-cit-ISSN-1e3a944a9bd57fddb021ebdd8d9e882a} + +Name + +: + +> cit:ISSN + +Description + +: + +```{=html} +International Standard Serial Number +``` +### Issue identification {#iso19115-3.2018-elem-cit-issueIdentification-d6144f3517e8dca0a71cfcdac7907efa} + +Name + +: + +> cit:issueIdentification + +Description + +: + +```{=html} +Information identifying the issue of the series +``` +### Linkage {#iso19115-3.2018-elem-cit-linkage-72b815e56327f02e8c718dfc3c53955c} + +Name + +: + +> cit:linkage + +Description + +: + +```{=html} +Location (address) for on-line access using a Uniform Resource + Locator address + or similar addressing scheme such as http://www.statkart.no/isotc211 +``` + +Condition + +: + +> mandatory + +### Logo {#iso19115-3.2018-elem-cit-logo-aafda1f3a41ecfe3fa4c4dcc6a4f4c34} + +Name + +: + +> cit:logo + +Description + +: + +```{=html} +Graphic identifying the organization +``` +### Name of the resource {#iso19115-3.2018-elem-cit-name-cit-CI_OnlineResource-ab7fb0a1840b8534cbf9f4b41530ae35} + +Name + +: + +> cit:name + +Context + +: + +> cit:CI_OnlineResource + +Description + +: + +```{=html} +Name of the online resource +``` +### Name {#iso19115-3.2018-elem-cit-name-cit-CI_Series-0266f984b84af8225a054d8f77cbf48a} + +Name + +: + +> cit:name + +Context + +: + +> cit:CI_Series + +Description + +: + +```{=html} +Name of the series, or aggregate dataset, of which the dataset + is a + part +``` +### Organisation name {#iso19115-3.2018-elem-cit-name-cit-CI_Organisation-35d4282d04316174623d834f8a425bba} + +Name + +: + +> cit:name + +Context + +: + +> cit:CI_Organisation + +Description + +: + +```{=html} +Name of the responsible organization +``` + +Condition + +: + +> conditional + +### Individual name {#iso19115-3.2018-elem-cit-name-cit-CI_Individual-652968a35c18c887fd63b5a8f0623dd8} + +Name + +: + +> cit:name + +Context + +: + +> cit:CI_Individual + +Description + +: + +```{=html} +Name of the responsible person- surname, given name, title +``` +### Name {#iso19115-3.2018-elem-cit-name-ebbdb582d68421b99463b31059d63b5a} + +Name + +: + +> cit:name + +Description + +: + +### Number {#iso19115-3.2018-elem-cit-number-be212daea0ac64953b2c7b1ef5e8c0d5} + +Name + +: + +> cit:number + +Description + +: + +```{=html} +Telephone number by which individuals can contact + responsible organisation or individual +``` +### Number type {#iso19115-3.2018-elem-cit-numberType-528a01ad72f823205c2faaeb99a60907} + +Name + +: + +> cit:numberType + +Description + +: + +```{=html} +Type of telephone number +``` +### Online resource {#iso19115-3.2018-elem-cit-onlineResource-cit-CI_Contact-1f4b0cbdb455e04f053de4187d716280} + +Name + +: + +> cit:onlineResource + +Context + +: + +> cit:CI_Contact + +Description + +: + +```{=html} +On-line information that can be used to contact the + individual or organisation +``` +### Website {#iso19115-3.2018-elem-cit-onlineResource-2ed916ad0165783c0e00cd631a2fa9e4} + +Name + +: + +> cit:onlineResource + +Description + +: + +```{=html} +Define URL to access the website +``` +```{=html} +On-line information that can be used to contact the individual + or + organisation +``` +### Other citation details {#iso19115-3.2018-elem-cit-otherCitationDetails-12cf58786723aa5bbbb5768a566120b7} + +Name + +: + +> cit:otherCitationDetails + +Description + +: + +```{=html} +Other information required to complete the citation that is not + recorded + elsewhere +``` +### Page {#iso19115-3.2018-elem-cit-page-8f0b8d638ea1b8990cc7a78128a246d1} + +Name + +: + +> cit:page + +Description + +: + +```{=html} +Details on which pages of the publication the article was + published +``` +### Party {#iso19115-3.2018-elem-cit-party-cit-CI_Responsibility-21218621f3c4fc5f48c55804f5a14d2e} + +Name + +: + +> cit:party + +Context + +: + +> cit:CI_Responsibility + +Description + +: + +```{=html} +Information about the party +``` +### Identifier for the party {#iso19115-3.2018-elem-cit-partyIdentifier-cd101436a544472459e8b848a2eb8e56} + +Name + +: + +> cit:partyIdentifier + +Description + +: + +### Telephone {#iso19115-3.2018-elem-cit-phone-29b2e78f752a094113d95c28083ead50} + +Name + +: + +> cit:phone + +Description + +: + +```{=html} +Telephone numbers at which the organisation or + individual may be contacted +``` +### Position name {#iso19115-3.2018-elem-cit-positionName-77a4db52c54386c39c3267bb69aad17a} + +Name + +: + +> cit:positionName + +Description + +: + +```{=html} +Role or position of the responsible person +``` + +Condition + +: + +> conditional + +### Postal code {#iso19115-3.2018-elem-cit-postalCode-103d77a2e1d3eb6891052449be62520e} + +Name + +: + +> cit:postalCode + +Description + +: + +```{=html} +ZIP or other postal code +``` +### Presentation form {#iso19115-3.2018-elem-cit-presentationForm-9b37d87116e709efbd758957d7ddbb34} + +Name + +: + +> cit:presentationForm + +Description + +: + +```{=html} +Mode in which the resource is represented +``` +### Protocol {#iso19115-3.2018-elem-cit-protocol-56ba71e5a9e6ae87797545a296a791f2} + +Name + +: + +> cit:protocol + +Description + +: + +```{=html} +Connection protocol to be used +``` +Recommended values + +| code | label | +|----------------------------------|------------------------------------------------| +| OGC API - Coverages | OGC API - Coverages | +| OGC API - Features | OGC API - Features | +| OGC API - Maps | OGC API - Maps | +| OGC API - Records | OGC API - Records | +| OGC:CSW | OGC-CSW Catalogue Service for the Web | +| OGC:KML | OGC-KML Keyhole Markup Language | +| OGC:GML | OGC-GML Geography Markup Language | +| OGC:ODS | OGC-ODS OpenLS Directory Service | +| OGC:OGS | OGC-ODS OpenLS Gateway Service | +| OGC:OUS | OGC-ODS OpenLS Utility Service | +| OGC:OPS | OGC-ODS OpenLS Presentation Service | +| OGC:ORS | OGC-ODS OpenLS Route Service | +| OGC:SOS | OGC-SOS Sensor Observation Service | +| OGC:SPS | OGC-SPS Sensor Planning Service | +| OGC:SAS | OGC-SAS Sensor Alert Service | +| OGC:WCS | OGC-WCS Web Coverage Service | +| OGC:WCTS | OGC-WCTS Web Coordinate Transformation Service | +| OGC:WFS | OGC-WFS Web Feature Service | +| INSPIRE Atom | INSPIRE Atom | +| OGC:WMS | OGC-WMS Web Map Service | +| OGC:WMTS | OGC-WMS Web Map Tile Service | +| OGC:WNS | OGC-WNS Web Notification Service | +| OGC:WPS | OGC-WPS Web Processing Service | +| WWW:DOWNLOAD-1.0-ftp--download | File for download through FTP | +| WWW:DOWNLOAD-1.0-http--download | File for download | +| ESRI:REST | ESRI REST Service | +| ESRI:REST-TILED | ESRI REST Tiled Service | +| | GIS file | +| | GIS RASTER file | +| WWW:LINK-1.0-http--link | Web address (URL) | +| WWW:LINK-1.0-http--rss | RSS News feed (URL) | +| DB:POSTGIS | PostGIS database table | +| DB:ORACLE | ORACLE database table | +| WWW:LINK-1.0-http--opendap | OPeNDAP URL | +| RBNB:DATATURBINE | Data Turbine | +| UKST | Unknown Service Type | + +``` xml + + atom:feed + +``` + +### Protocol request {#iso19115-3.2018-elem-cit-protocolRequest-e58550e17f9baca9aaa1dc62bec847d1} + +Name + +: + +> cit:protocolRequest + +Description + +: + +```{=html} +Request used to access the resource depending on the protocol + (to be used mainly for POST requests) +``` +### Role {#iso19115-3.2018-elem-cit-role-8e99af312ea1dbd228b50677ba6b9fd7} + +Name + +: + +> cit:role + +Description + +: + +### Role {#iso19115-3.2018-elem-cit-role-cit-CI_Responsibility-e5aa9d82909db5e5beb67eb483f8bdc4} + +Name + +: + +> cit:role + +Context + +: + +> cit:CI_Responsibility + +Description + +: + +```{=html} +Function performed by the responsible party +``` + +Condition + +: + +> mandatory + +### Role {#iso19115-3.2018-elem-cit-role-mri-MD_Association-9fb15da4e2c1795eed15ad17f6b508bb} + +Name + +: + +> cit:role + +Context + +: + +> mri:MD_Association + +Description + +: + +```{=html} +Reference to the ends (roles) of a concrete association +``` +### Series {#iso19115-3.2018-elem-cit-series-33d7a9a9d8aab2b7285884917cc0368c} + +Name + +: + +> cit:series + +Description + +: + +```{=html} +Information about the series, or aggregate resource, + of which the resource is a part +``` +### Format name {#iso19115-3.2018-elem-cit-title-/mdb-MD_Metadata/mdb-distributionInfo/mrd-MD_Distribution/mrd-distributionFormat/mrd-MD_Format/mrd-formatSpecificationCitation/cit-CI_Citation/cit-title-11140ae1a791f8912ad78af979af4a3a} + +Name + +: + +> cit:title + +Context + +: + +> /mdb:MD_Metadata/mdb:distributionInfo/mrd:MD_Distribution/mrd:distributionFormat/mrd:MD_Format/mrd:formatSpecificationCitation/cit:CI_Citation/cit:title + +Description + +: + +```{=html} +Name of the data transfer format(s) +``` +```{=html} +File or link format name +``` +Recommended values + +| code | label | +|-----------------|-----------------| +| Text | Text | +| XLS | XLS | +| ESRI Shapefile | ESRI Shapefile | +| Mapinfo MIF/MID | Mapinfo MIF/MID | +| Mapinfo TAB | Mapinfo TAB | +| KML | KML | +| GML | GML | +| XYZ Ascii | XYZ Ascii | +| NetCDF | NetCDF | +| GeoTIFF | GeoTIFF | +| TIFF | TIFF | +| ECW | ECW | +| JPEG2000 | JPEG2000 | +| ZIP | ZIP | +| PDF | PDF | +| PNG | PNG | +| JPEG | JPEG | +| OGC:WMC | OGC:WMC | +| OGC:OWS-C | OGC OWS Context | + +### Specification {#iso19115-3.2018-elem-cit-title-/mdb-MD_Metadata/mdb-dataQualityInfo/mdq-DQ_DataQuality/mdq-report/mdq-DQ_DomainConsistency/mdq-result/mdq-DQ_ConformanceResult/mdq-specification/cit-CI_Citation/cit-title-b03759562aa7906e72e843780b064c77} + +Name + +: + +> cit:title + +Context + +: + +> /mdb:MD_Metadata/mdb:dataQualityInfo/mdq:DQ_DataQuality/mdq:report/mdq:DQ_DomainConsistency/mdq:result/mdq:DQ_ConformanceResult/mdq:specification/cit:CI_Citation/cit:title + +Description + +: + +Recommended values + +| code | label | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services | COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services | +| INSPIRE Data Specification on Administrative Units - Guidelines v3.0.1 | Guide INSPIRE sur les unités administratives | +| INSPIRE Data Specification on Cadastral Parcels - Guidelines v 3.0.1 | Guide INSPIRE sur les parcelles cadastrales | +| INSPIRE Data Specification on Geographical Names - Guidelines v 3.0.1 | Guide INSPIRE sur les dénominations géographiques | +| INSPIRE Data Specification on Hydrography - Guidelines v 3.0.1 | Guide INSPIRE sur l'hydrographie | +| INSPIRE Data Specification on Protected Sites - Guidelines v 3.1.0 | Guide INSPIRE sur les sites protégés | +| INSPIRE Data Specification on Transport Networks - Guidelines v 3.1.0 | Guide INSPIRE sur les réseaux de transport | +| INSPIRE Data Specification on Addresses - Guidelines v 3.0.1 | Guide INSPIRE sur les adresses | +| INSPIRE Specification on Coordinate Reference Systems - Guidelines v 3.1 | Guide INSPIRE sur les référentiels de coordonnées | +| INSPIRE Specification on Geographical Grid Systems - Guidelines v 3.0.1 | Guide INSPIRE sur les systèmes de maillage géographique | + +Recommended values + +| code | label | +|-----------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------| +| RÈGLEMENT (UE) N° 976/2009 | Règlement service en réseau INSPIRE (service de recherche et de consultation) - RÈGLEMENT (UE) N° 976/2009 | +| RÈGLEMENT (UE) N° 1088/2010 | Règlement service en réseau INSPIRE (service de téléchargement et de transformation) - RÈGLEMENT (UE) N° 1088/2010 | +| Technical Guidance for the implementation of INSPIRE Discovery Services -- v.3.1 | Guide INSPIRE sur les services de recherche | +| Technical Guidance for the implementation of INSPIRE View Services - v3.1 -- part 4 | Guide INSPIRE sur les services de consultation -- profil ISO 19128 (WMS) | +| Technical Guidance for the implementation of INSPIRE View Services - v3.1 -- part 5 | Guide INSPIRE sur les services de consultation -- profil ISO WMTS 1.0.0 | +| Technical Guidance for the INSPIRE Schema Transformation Network Service - v3.0 | Guide INSPIRE sur les services de transformation de schéma | +| Technical Guidance for the implementation of INSPIRE Download Services -- level1 - v3.0 | Guide INSPIRE sur les services de téléchargement -- classe de conformité 1 (ATOM pré-défini) | +| Technical Guidance for the implementation of INSPIRE Download Services -- level2 - v3.0 | Guide INSPIRE sur les services de téléchargement -- classe de conformité 2 (WFS pré-défini) | +| Technical Guidance for the implementation of INSPIRE Download Services -- level3 - v3.0 | Guide INSPIRE sur les services de téléchargement -- classe de conformité 3 (WFS direct) | + +### Title {#iso19115-3.2018-elem-cit-title-/mdb-MD_Metadata/mdb-identificationInfo/mri-MD_DataIdentification/mri-citation/cit-CI_Citation/cit-title-5084206f0cda801f58faf7204c09b3d1} + +Name + +: + +> cit:title + +Context + +: + +> /mdb:MD_Metadata/mdb:identificationInfo/mri:MD_DataIdentification/mri:citation/cit:CI_Citation/cit:title + +Description + +: + +```{=html} +Name by which the cited resource is known +``` +### Title {#iso19115-3.2018-elem-cit-title-7dfafb62cad1555c0ee6d132f1e775fd} + +Name + +: + +> cit:title + +Description + +: + +```{=html} +Name by which the cited resource is known +``` + +Condition + +: + +> mandatory + +### Code {#iso19115-3.2018-elem-code-mri-MD_Identifier-67258785530ff4b1ebf28f28ce66d33b} + +Name + +: + +> code + +Context + +: + +> mri:MD_Identifier + +Description + +: + +```{=html} +Alphanumeric value identifying an instance in the namespace +``` +```{=html} +alphanumeric value identifying an instance in the namespace +``` +### System code {#iso19115-3.2018-elem-code-5d6344f28f37d0f73c2cb79145f5668d} + +Name + +: + +> code + +Description + +: + +```{=html} +Code. i.e. EPSG code. +``` +### Code {#iso19115-3.2018-elem-code-mri-MD_CodeValue-e885cdcb9c42da39e0093542b4865e30} + +Name + +: + +> code + +Context + +: + +> mri:MD_CodeValue + +Description + +: + +```{=html} +Value code +``` +```{=html} +Value code (i.e. numeric) +``` +### Reference Authority {#iso19115-3.2018-elem-codeSpace-c90144a092543c4117eb54a71d33ac63} + +Name + +: + +> codeSpace + +Description + +: + +```{=html} +Authority responsible for codification. i.e. EPSG +``` +### Date et heure {#iso19115-3.2018-elem-dqc-dateTime-440241ab056365dcafe4e74d8e833374} + +Name + +: + +> dqc:dateTime + +Description + +: + +### Related element {#iso19115-3.2018-elem-dqc-relatedElement-8807300908c0949ebb1329e3e7a3eacc} + +Name + +: + +> dqc:relatedElement + +Description + +: + +### Factor {#iso19115-3.2018-elem-factor-5afe00178e76b0c48a70e7bc76d88080} + +Name + +: + +> factor + +Description + +: + +### Frame {#iso19115-3.2018-elem-frame-495bc4e6402da158707765fec6ad81e3} + +Name + +: + +> frame + +Description + +: + +```{=html} +Frame attribute provides a URI reference that identifies a + description of the reference system +``` +### Name {#iso19115-3.2018-elem-gco-aName-ec573ab870f9406d1373cd7815dbaf97} + +Name + +: + +> gco:aName + +Description + +: + +### Type name {#iso19115-3.2018-elem-gco-aName-gco-TypeName-9aedcb12c741bbbd96004346261c4dda} + +Name + +: + +> gco:aName + +Context + +: + +> gco:TypeName + +Description + +: + +Recommended values + +| code | label | +|-----------|-----------| +| BOOLEAN | BOOLEAN | +| BYTE | BYTE | +| CHARACTER | CHARACTER | +| DATE | DATE | +| DATETIME | DATETIME | +| DOUBLE | DOUBLE | +| FLOAT | FLOAT | +| INTEGER | INTEGER | +| NUMERIC | NUMERIC | +| REAL | REAL | +| SERIAL | SERIAL | +| VARCHAR | VARCHAR | +| TEXT | TEXT | + +### Angle {#iso19115-3.2018-elem-gco-Angle-7ce2d1a5c0a7c675bf50204696f97212} + +Name + +: + +> gco:Angle + +Description + +: + +```{=html} +Angle +``` +### Attribute type {#iso19115-3.2018-elem-gco-attributeType-8d0028999602c0fc0861c3e2cdfd3ba4} + +Name + +: + +> gco:attributeType + +Description + +: + +### Binary {#iso19115-3.2018-elem-gco-Binary-fae8ca1153637dd8df3141b8d77f0b88} + +Name + +: + +> gco:Binary + +Description + +: + +### Text {#iso19115-3.2018-elem-gco-CharacterString-b1698de198f86561c868ca9fb4242d60} + +Name + +: + +> gco:CharacterString + +Description + +: + +### Usage Date / Time {#iso19115-3.2018-elem-gco-DateTime-mri-MD_Usage-354630792f5d24d7c5134ae38f654663} + +Name + +: + +> gco:DateTime + +Context + +: + +> mri:MD_Usage + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +```{=html} +date and time of the first use or range of uses of the resource and/or + resource + series +``` +### Planned Available Date / Time {#iso19115-3.2018-elem-gco-DateTime-mrd-MD_StandardOrderProcess-16e3d91c2572d6377e06810858b43450} + +Name + +: + +> gco:DateTime + +Context + +: + +> mrd:MD_StandardOrderProcess + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +```{=html} +date and time when theresource will be available +``` +### Date and time {#iso19115-3.2018-elem-gco-DateTime-e6a33d377eb75a1ef5224b35ce0810da} + +Name + +: + +> gco:DateTime + +Description + +: + +```{=html} +Date and time or range of date and time on or over which the + process step occurred + (YYYY-MM-DDThh:mm:ss) +``` +### Distance {#iso19115-3.2018-elem-gco-Distance-02d18ba9c09dae7b4a4ee648ca1afd68} + +Name + +: + +> gco:Distance + +Description + +: + +```{=html} +Distance +``` +### Length {#iso19115-3.2018-elem-gco-Length-fc950d15ea62227f0431a5fe64f47d48} + +Name + +: + +> gco:Length + +Description + +: + +```{=html} +Length +``` +### Name {#iso19115-3.2018-elem-gco-localName-7c3666b9b35b4cde01f4a7c8f51c0fb9} + +Name + +: + +> gco:localName + +Description + +: + +### Local name {#iso19115-3.2018-elem-gco-LocalName-08c97bf6632239439f713537c5d5ecda} + +Name + +: + +> gco:LocalName + +Description + +: + +### Lower cardinality {#iso19115-3.2018-elem-gco-lower-aeb71a259de3a9b79e057b2587339450} + +Name + +: + +> gco:lower + +Description + +: + +```{=html} +Lower cardinality +``` +### Measure {#iso19115-3.2018-elem-gco-Measure-7fd8ef9f27cda91ac9513456c11a7fef} + +Name + +: + +> gco:Measure + +Description + +: + +```{=html} +Measure +``` +### Name of Measure {#iso19115-3.2018-elem-gco-Measure-mri-DQ_Element-9093d47a462e74a70a172237586f2f36} + +Name + +: + +> gco:Measure + +Context + +: + +> mri:DQ_Element + +Description + +: + +```{=html} +Name of the test applied to the data +``` +### Unit of Measure {#iso19115-3.2018-elem-gco-Measure-mri-EX_VerticalExtent-11f2ea0a92433742e4b068e8aa6c5e87} + +Name + +: + +> gco:Measure + +Context + +: + +> mri:EX_VerticalExtent + +Description + +: + +```{=html} +Vertical units used for vertical extent information Examples: + metres, feet, + millimetres, hectopascals +``` +### Member name {#iso19115-3.2018-elem-gco-MemberName-029e1a339fbce38a70a42b617c003ece} + +Name + +: + +> gco:MemberName + +Description + +: + +### Multiplicity {#iso19115-3.2018-elem-gco-Multiplicity-0dca80c90498a1272be725fe1b99baba} + +Name + +: + +> gco:Multiplicity + +Description + +: + +### Multiplicity range {#iso19115-3.2018-elem-gco-MultiplicityRange-5d8f76d1c4cd389c59b4d736b2301979} + +Name + +: + +> gco:MultiplicityRange + +Description + +: + +### Nil reason {#iso19115-3.2018-elem-gco-nilReason-69d908b4be9b96c2663ae9726ae2b787} + +Name + +: + +> gco:nilReason + +Description + +: + +### Range {#iso19115-3.2018-elem-gco-range-3b2d2f387c5ecf91d053fa864086b9b4} + +Name + +: + +> gco:range + +Description + +: + +### Record {#iso19115-3.2018-elem-gco-Record-c95feb94990445212e6d0234fdfdb79f} + +Name + +: + +> gco:Record + +Description + +: + +### Record type {#iso19115-3.2018-elem-gco-RecordType-baa419e16ebadaef186f5d1d4378d1db} + +Name + +: + +> gco:RecordType + +Description + +: + +### Scoped name {#iso19115-3.2018-elem-gco-ScopedName-1edc4de3e2fd49cb8bfddd8e85a4a987} + +Name + +: + +> gco:ScopedName + +Description + +: + +### Period duration {#iso19115-3.2018-elem-gco-TM_PeriodDuration-f702b95baf47dfb1a87c02f15a5dd639} + +Name + +: + +> gco:TM_PeriodDuration + +Description + +: + +```{=html} +The duration data type is used to specify a time interval. + +The time interval is specified in the following form "PnYnMnDTnHnMnS" +where: + +* P indicates the period (required) +* nY indicates the number of years +* nM indicates the number of months +* nD indicates the number of days +* T indicates the start of a time section (required if you are going to +specify hours, minutes, or seconds) +* nH indicates the number of hours +* nM indicates the number of minutes +* nS indicates the number of seconds +``` +### Type name {#iso19115-3.2018-elem-gco-TypeName-4009cb017635c2d3ff82934005a4ff9b} + +Name + +: + +> gco:TypeName + +Description + +: + +### Upper cardinality {#iso19115-3.2018-elem-gco-upper-0d20822ffdc1ca6563de53fd87a067c2} + +Name + +: + +> gco:upper + +Description + +: + +```{=html} +Upper cardinality +``` +### Anchor {#iso19115-3.2018-elem-gcx-Anchor-064e20d9f65a23dc450f791da24017aa} + +Name + +: + +> gcx:Anchor + +Description + +: + +```{=html} +Supports hyper-linking capabilities and ensures a web-like + implementation of CharacterStrings +``` +### File name {#iso19115-3.2018-elem-gcx-FileName-0bd7e76cc1295f6aa4aebc92c3448842} + +Name + +: + +> gcx:FileName + +Description + +: + +```{=html} +File name and source URL. +``` +### Mime file type {#iso19115-3.2018-elem-gcx-MimeFileType-a1cd8621fdd682eaee51c6582ba01ed4} + +Name + +: + +> gcx:MimeFileType + +Description + +: + +### Description {#iso19115-3.2018-elem-gex-description-gex-EX_Extent-28ac6cc0d81cbece1978a8620e803fad} + +Name + +: + +> gex:description + +Context + +: + +> gex:EX_Extent + +Description + +: + +```{=html} +Spatial and temporal extent for the referring object +``` +### Bounding Polygon {#iso19115-3.2018-elem-gex-EX_BoundingPolygon-3014dd690ec865ffc1790c19f4d93efd} + +Name + +: + +> gex:EX_BoundingPolygon + +Description + +: + +```{=html} +Boundary enclosing the dataset, expressed as the closed set of + (x,y) + coordinates of the polygon (last point replicates first point) +``` +### Extent {#iso19115-3.2018-elem-gex-EX_Extent-f2e723e195c26ffd1f6db79524409843} + +Name + +: + +> gex:EX_Extent + +Description + +: + +```{=html} +Information about spatial, vertical, and temporal extent +``` +``` xml + + + + + 2.78 + + + 6.41 + + + 49.46 + + + 50.85 + + + + +``` + +### Geographic bounding box {#iso19115-3.2018-elem-gex-EX_GeographicBoundingBox-b271c47a118602d36a5450570a2f6b30} + +Name + +: + +> gex:EX_GeographicBoundingBox + +Description + +: + +```{=html} +Geographic position of the dataset +``` +``` xml + + + 2.78 + + + 6.41 + + + 49.46 + + + 50.85 + + +``` + +### Geographic description {#iso19115-3.2018-elem-gex-EX_GeographicDescription-1d22aba992d17d899cc84e108455ef36} + +Name + +: + +> gex:EX_GeographicDescription + +Description + +: + +```{=html} +Description of the geographic area using identifiers +``` +### Spatial temporal extent {#iso19115-3.2018-elem-gex-EX_SpatialTemporalExtent-95530705e6fbad209cc29205102c0888} + +Name + +: + +> gex:EX_SpatialTemporalExtent + +Description + +: + +```{=html} +Extent with respect to date/time and spatial boundaries +``` +### Temporal extent {#iso19115-3.2018-elem-gex-EX_TemporalExtent-d2db3333e80d49d8a458007ff3838015} + +Name + +: + +> gex:EX_TemporalExtent + +Description + +: + +```{=html} +Time period covered by the content of the dataset +``` +### Vertical extent {#iso19115-3.2018-elem-gex-EX_VerticalExtent-cbd5924052cb1b8e0bf8f5416ece44a2} + +Name + +: + +> gex:EX_VerticalExtent + +Description + +: + +```{=html} +Vertical domain of dataset +``` +### Extent {#iso19115-3.2018-elem-gex-extent-gex-EX_TemporalExtent-eb6cbcb83beb909bff900f1169937ce4} + +Name + +: + +> gex:extent + +Context + +: + +> gex:EX_TemporalExtent + +Description + +: + +```{=html} +Date and time for the content of the dataset +``` +### Extent {#iso19115-3.2018-elem-gex-extent-396cb78192c906d06c8014fd67c5a704} + +Name + +: + +> gex:extent + +Description + +: + +```{=html} +Geographic/Temporal Extent of Service +``` +### Extent type code {#iso19115-3.2018-elem-gex-extentTypeCode-36b0ae6983fbd52220a364b33650402b} + +Name + +: + +> gex:extentTypeCode + +Description + +: + +```{=html} +Indication of whether the bounding polygon encompasses an area + covered by the data or an area where data is not present. Possible values: '1' for + inclusion or '0' for exclusion +``` +### Geographic element {#iso19115-3.2018-elem-gex-geographicElement-a738fb045db07afd86c8631512cdfcd0} + +Name + +: + +> gex:geographicElement + +Description + +: + +```{=html} +Provides geographic component of the extent of the referring + object +``` +``` xml + + + + 2.78 + + + 6.41 + + + 49.46 + + + 50.85 + + + +``` + +### Geographic identifier {#iso19115-3.2018-elem-gex-geographicIdentifier-c6240129281eca8d905c5e34faad841d} + +Name + +: + +> gex:geographicIdentifier + +Description + +: + +```{=html} +Identifier used to represent a geographic area +``` + +Condition + +: + +> mandatory + +### Maximum value {#iso19115-3.2018-elem-gex-maximumValue-afcaee5c22764eaa540b44ed5a0d7662} + +Name + +: + +> gex:maximumValue + +Description + +: + +```{=html} +Highest vertical extent contained in the dataset +``` + +Condition + +: + +> mandatory + +### Minimum value {#iso19115-3.2018-elem-gex-minimumValue-83e87d76db1e018a13bb2a6649e2daf0} + +Name + +: + +> gex:minimumValue + +Description + +: + +```{=html} +Lowest vertical extent contained in the dataset +``` + +Condition + +: + +> mandatory + +### Polygon {#iso19115-3.2018-elem-gex-polygon-9e8a179ed9d619370d2aa0a543d1d3f9} + +Name + +: + +> gex:polygon + +Description + +: + +```{=html} +Sets of points defining the bounding polygon +``` + +Condition + +: + +> mandatory + +### Spatial extent {#iso19115-3.2018-elem-gex-spatialExtent-26a397b1ac7439d895ca7bfee22eb379} + +Name + +: + +> gex:spatialExtent + +Description + +: + +```{=html} +Spatial extent component of composite spatial and temporal + extent +``` + +Condition + +: + +> mandatory + +### Temporal element {#iso19115-3.2018-elem-gex-temporalElement-7a393c950f34c06f559b8d7e9179e623} + +Name + +: + +> gex:temporalElement + +Description + +: + +```{=html} +Provides temporal component of the extent of the referring + object +``` + +Condition + +: + +> conditional + +### Vertical CRS {#iso19115-3.2018-elem-gex-verticalCRS-b1977041fc95ed539e434436c2103f79} + +Name + +: + +> gex:verticalCRS + +Description + +: + +```{=html} +Provides information about the origin from which the maximum + and minimum elevation values are measured +``` +### Vertical CRS identifier {#iso19115-3.2018-elem-gex-verticalCRSId-ed97e16f10262e33a28e43ad10d84eb7} + +Name + +: + +> gex:verticalCRSId + +Description + +: + +```{=html} +Provides information about the origin from which the maximum + and minimum elevation values are measured +``` +### Vertical element {#iso19115-3.2018-elem-gex-verticalElement-36d7efb1213f5644ea5903878e0c6f91} + +Name + +: + +> gex:verticalElement + +Description + +: + +```{=html} +Provides vertical component of the extent of the referring + object +``` + +Condition + +: + +> conditional + +### Vertical extent {#iso19115-3.2018-elem-gex-verticalExtent-2536a2a55f2bab6e63bb5fca185b08a4} + +Name + +: + +> gex:verticalExtent + +Description + +: + +```{=html} +Vertical extent component +``` +### Affects value of {#iso19115-3.2018-elem-gfc-affectsValueOf-4e1acc1c69d17604f8ea2ec18fd8aac2} + +Name + +: + +> gfc:affectsValueOf + +Description + +: + +### Aliases {#iso19115-3.2018-elem-gfc-aliases-1f3ecb3fce2e8b73e3b5404492fd5e4e} + +Name + +: + +> gfc:aliases + +Description + +: + +### Cardinalities {#iso19115-3.2018-elem-gfc-cardinality-54aa6718c034715f68366669d9c257df} + +Name + +: + +> gfc:cardinality + +Description + +: + +```{=html} +Cardinalities +``` +Recommended values + +| code | label | +|------|-------| +| 0..1 | 0..1 | +| 1..n | 0..n | +| 1..1 | 1..1 | +| 1..n | 1..n | + +### Elements {#iso19115-3.2018-elem-gfc-carrierOfCharacteristics-682149d26e0b5d9590e5d0c646422c67} + +Name + +: + +> gfc:carrierOfCharacteristics + +Description + +: + +```{=html} +Association, attribute, operation, ... +``` +### Code {#iso19115-3.2018-elem-gfc-code-1b6f547562a07b95ab72fddc20aca409} + +Name + +: + +> gfc:code + +Description + +: + +### Constrained by {#iso19115-3.2018-elem-gfc-constrainedBy-a7116446b2c586c6d8a70e2cf940932b} + +Name + +: + +> gfc:constrainedBy + +Description + +: + +### Definition {#iso19115-3.2018-elem-gfc-definition-1f7a798ac46834d7201d94001a371a2b} + +Name + +: + +> gfc:definition + +Description + +: + +```{=html} +Property definition +``` +### Definition reference {#iso19115-3.2018-elem-gfc-definitionReference-330ee93d4b59935b32ddcf04e41bc6f1} + +Name + +: + +> gfc:definitionReference + +Description + +: + +### Definition source {#iso19115-3.2018-elem-gfc-definitionSource-c33b1dd8d05c8122a1e066717bbe01b5} + +Name + +: + +> gfc:definitionSource + +Description + +: + +### Description {#iso19115-3.2018-elem-gfc-description-76104ba864ae4643a9a538027b8a0704} + +Name + +: + +> gfc:description + +Description + +: + +### Designation {#iso19115-3.2018-elem-gfc-designation-10a4f05fcab681ae1738c886134eb754} + +Name + +: + +> gfc:designation + +Description + +: + +### Association role {#iso19115-3.2018-elem-gfc-FC_AssociationRole-54c0b4b36dcbbbf887cfb6edfdda0582} + +Name + +: + +> gfc:FC_AssociationRole + +Description + +: + +### Binding {#iso19115-3.2018-elem-gfc-FC_Binding-8a7dd41a834377a6bd72a8dbb1f5f350} + +Name + +: + +> gfc:FC_Binding + +Description + +: + +### Bound association role {#iso19115-3.2018-elem-gfc-FC_BoundAssociationRole-b4754a7a6f41689a055280d5d2d05cc5} + +Name + +: + +> gfc:FC_BoundAssociationRole + +Description + +: + +### Bound feature attribute {#iso19115-3.2018-elem-gfc-FC_BoundFeatureAttribute-898e24636ada22d18a56641a7dcabd7a} + +Name + +: + +> gfc:FC_BoundFeatureAttribute + +Description + +: + +### Constraint {#iso19115-3.2018-elem-gfc-FC_Constraint-1d48e37a33b2ef6abacdb535438af2c5} + +Name + +: + +> gfc:FC_Constraint + +Description + +: + +### Definition reference {#iso19115-3.2018-elem-gfc-FC_DefinitionReference-fbb7ecc7c5c5b257ab9491fd4ee28e39} + +Name + +: + +> gfc:FC_DefinitionReference + +Description + +: + +### Definition source {#iso19115-3.2018-elem-gfc-FC_DefinitionSource-14e171ff3f78bdf3d634d1ba925d3d36} + +Name + +: + +> gfc:FC_DefinitionSource + +Description + +: + +### Feature association {#iso19115-3.2018-elem-gfc-FC_FeatureAssociation-baa21e2722e293fddbc3037c64118776} + +Name + +: + +> gfc:FC_FeatureAssociation + +Description + +: + +### Attribute {#iso19115-3.2018-elem-gfc-FC_FeatureAttribute-f9e32c08dc1c646c7b52c4cceec296f5} + +Name + +: + +> gfc:FC_FeatureAttribute + +Description + +: + +### Feature Catalogue description {#iso19115-3.2018-elem-gfc-FC_FeatureCatalogue-a85c1d0f43b46f8451f4c40daf0bc705} + +Name + +: + +> gfc:FC_FeatureCatalogue + +Description + +: + +### Feature operation {#iso19115-3.2018-elem-gfc-FC_FeatureOperation-e6ef41cdc09cdb4283da0094259ca585} + +Name + +: + +> gfc:FC_FeatureOperation + +Description + +: + +### Attribute table description {#iso19115-3.2018-elem-gfc-FC_FeatureType-807cb5c8e0cef875eaeb1111deebb772} + +Name + +: + +> gfc:FC_FeatureType + +Description + +: + +```{=html} +Attribute table description +``` +### Heritance relation {#iso19115-3.2018-elem-gfc-FC_InheritanceRelation-7e2a5d36b54c948ee7498bd5d828044f} + +Name + +: + +> gfc:FC_InheritanceRelation + +Description + +: + +### Codelist {#iso19115-3.2018-elem-gfc-FC_ListedValue-167a17d6b51fe41652abde46b836c975} + +Name + +: + +> gfc:FC_ListedValue + +Description + +: + +### Multilingual definition reference {#iso19115-3.2018-elem-gfc-FC_LocalisedDefinitionReference-18e0e9f983507db8496dad6d98da596c} + +Name + +: + +> gfc:FC_LocalisedDefinitionReference + +Description + +: + +### Role type {#iso19115-3.2018-elem-gfc-FC_RoleType-d046a278232203a2c540d3302274ee88} + +Name + +: + +> gfc:FC_RoleType + +Description + +: + +### Standard codelists Role type (gfc:FC_RoleType) + +| code | label | description | +|-------------|-------------|------------------------------------------| +| ordinary | Ordinary | Indicates an ordinary association. | +| aggregation | Aggregation | Indicates a UML aggregation (part role). | +| composition | Composition | Indicates a UML composition (part role). | + +### Feature catalogue {#iso19115-3.2018-elem-gfc-featureCatalogue-2b9e65b7ec8057df6a5468181ecbf3a3} + +Name + +: + +> gfc:featureCatalogue + +Description + +: + +### Property description {#iso19115-3.2018-elem-gfc-featureType-a588b6f71d43e8be637aa765477a74d2} + +Name + +: + +> gfc:featureType + +Description + +: + +```{=html} +Property description +``` +### Field of application {#iso19115-3.2018-elem-gfc-fieldOfApplication-91b54a5961930c2b79e37217649551b7} + +Name + +: + +> gfc:fieldOfApplication + +Description + +: + +```{=html} +Field of application +``` +### Formal definition {#iso19115-3.2018-elem-gfc-formalDefinition-9bfd839d612e02d56624fd469562f8cb} + +Name + +: + +> gfc:formalDefinition + +Description + +: + +### Functional language {#iso19115-3.2018-elem-gfc-functionalLanguage-e4caa81d46aea92c7c5c84574fc281eb} + +Name + +: + +> gfc:functionalLanguage + +Description + +: + +### Global property {#iso19115-3.2018-elem-gfc-globalProperty-2576ecf5bb2d911abe673a5626b23316} + +Name + +: + +> gfc:globalProperty + +Description + +: + +### Identifier {#iso19115-3.2018-elem-gfc-identifier-17f8eb8d6427c71971e22ffdd78ccb9d} + +Name + +: + +> gfc:identifier + +Description + +: + +### Inheritance relation {#iso19115-3.2018-elem-gfc-inheritanceRelation-6d26d325e36d277b7f1d330ac39bfbb9} + +Name + +: + +> gfc:inheritanceRelation + +Description + +: + +### Inherits from {#iso19115-3.2018-elem-gfc-inheritsFrom-18bd2dbc3edecade14d5894004fd60f0} + +Name + +: + +> gfc:inheritsFrom + +Description + +: + +### Inherits to {#iso19115-3.2018-elem-gfc-inheritsTo-a417363112776608dbf84d83d3fb67ef} + +Name + +: + +> gfc:inheritsTo + +Description + +: + +### Abstract {#iso19115-3.2018-elem-gfc-isAbstract-62461dcfba818df55568584e01173415} + +Name + +: + +> gfc:isAbstract + +Description + +: + +```{=html} +Is this element an abstract element ? +``` +### Is navigable {#iso19115-3.2018-elem-gfc-isNavigable-a831d2a69ea24f3e933ff219c14aaedf} + +Name + +: + +> gfc:isNavigable + +Description + +: + +### Is ordered {#iso19115-3.2018-elem-gfc-isOrdered-c203a60136a7c3943c35a82e53c031eb} + +Name + +: + +> gfc:isOrdered + +Description + +: + +### Label {#iso19115-3.2018-elem-gfc-label-447cd3024c5921db22777d687b3d4d17} + +Name + +: + +> gfc:label + +Description + +: + +### Codelist {#iso19115-3.2018-elem-gfc-listedValue-4fac52554c89276cf08dc3f966a665cf} + +Name + +: + +> gfc:listedValue + +Description + +: + +```{=html} +List of values for this element. +``` +### Member name {#iso19115-3.2018-elem-gfc-memberName-8e8235a1cdd6868a4af054b03fe96350} + +Name + +: + +> gfc:memberName + +Description + +: + +### Name {#iso19115-3.2018-elem-gfc-name-54b5c264e311ea93b097ceebb8b6befa} + +Name + +: + +> gfc:name + +Description + +: + +```{=html} +Feature catalogue name +``` +### Observes value of {#iso19115-3.2018-elem-gfc-observesValueOf-a157ab4b39a2131d1b4ec430005d70fc} + +Name + +: + +> gfc:observesValueOf + +Description + +: + +### Catalogue producer {#iso19115-3.2018-elem-gfc-producer-ecb58d02ce17a2079eb9665aa1e9a441} + +Name + +: + +> gfc:producer + +Description + +: + +```{=html} +Catalogue responsible +``` +### Relation {#iso19115-3.2018-elem-gfc-relation-ea980be9c74952068db1b1d008ea08df} + +Name + +: + +> gfc:relation + +Description + +: + +### Role name {#iso19115-3.2018-elem-gfc-roleName-ff1b162ef6ce9c374ba1681aa15691f6} + +Name + +: + +> gfc:roleName + +Description + +: + +### Role type {#iso19115-3.2018-elem-gfc-roleType-77146288bea15becb410a880f16d04c3} + +Name + +: + +> gfc:roleType + +Description + +: + +### Scope {#iso19115-3.2018-elem-gfc-scope-92c0cc9eb4b0d3fe850346a9d741c495} + +Name + +: + +> gfc:scope + +Description + +: + +```{=html} +Scope definition +``` +### Signature {#iso19115-3.2018-elem-gfc-signature-6d40a2368f5c5b76921d7c51b1b7cb70} + +Name + +: + +> gfc:signature + +Description + +: + +### Source {#iso19115-3.2018-elem-gfc-source-49d8df7454dfdb2caae5ec3f70fed1ee} + +Name + +: + +> gfc:source + +Description + +: + +### Source identifier {#iso19115-3.2018-elem-gfc-sourceIdentifier-69e2dff11c6fe458930d27876a77c6ed} + +Name + +: + +> gfc:sourceIdentifier + +Description + +: + +### Subtype {#iso19115-3.2018-elem-gfc-subtype-947c0bc7e4d45ff82b8afa6c6fdf9132} + +Name + +: + +> gfc:subtype + +Description + +: + +### Supertype {#iso19115-3.2018-elem-gfc-supertype-47d00c276a785fb966b84370e7820d40} + +Name + +: + +> gfc:supertype + +Description + +: + +### Translation {#iso19115-3.2018-elem-gfc-translation-3668f7d14cd3e2fe636e67ced85f40b2} + +Name + +: + +> gfc:translation + +Description + +: + +### Triggered by value of {#iso19115-3.2018-elem-gfc-triggeredByValueOf-f3b11de6224235f1982818f79e33bbb4} + +Name + +: + +> gfc:triggeredByValueOf + +Description + +: + +### Type {#iso19115-3.2018-elem-gfc-type-b70cc9bafe6869c97eef915521895006} + +Name + +: + +> gfc:type + +Description + +: + +### Property name {#iso19115-3.2018-elem-gfc-typeName-b1641f3126adf6d82ee4f50601aeb631} + +Name + +: + +> gfc:typeName + +Description + +: + +### Unique instance {#iso19115-3.2018-elem-gfc-uniqueInstance-3faf7b4ff9a9af53dfd0b6d8b2e95b98} + +Name + +: + +> gfc:uniqueInstance + +Description + +: + +### Value measurement unit {#iso19115-3.2018-elem-gfc-valueMeasurementUnit-2380f4c62edf6c737e875281fb4be44e} + +Name + +: + +> gfc:valueMeasurementUnit + +Description + +: + +### Value type {#iso19115-3.2018-elem-gfc-valueType-9d3e77e2649b5cc3dab7232c7d02d891} + +Name + +: + +> gfc:valueType + +Description + +: + +### Date {#iso19115-3.2018-elem-gfc-versionDate-6bbeb2519dec6ad3b9bb84ea49e53458} + +Name + +: + +> gfc:versionDate + +Description + +: + +```{=html} +Catalogue date +``` +### Version {#iso19115-3.2018-elem-gfc-versionNumber-f09ca54eb78c0633a010eefa907291de} + +Name + +: + +> gfc:versionNumber + +Description + +: + +```{=html} +Catalogue version +``` +### Axis {#iso19115-3.2018-elem-gml-axis-ee4896c6d7c2f971473c33b8a5bb7364} + +Name + +: + +> gml:axis + +Description + +: + +### Axis abbreviation {#iso19115-3.2018-elem-gml-axisAbbrev-06f07ba235d694508081df9b1f650243} + +Name + +: + +> gml:axisAbbrev + +Description + +: + +### Axis direction {#iso19115-3.2018-elem-gml-axisDirection-9e24abc19c9f9a5de788584d548e728c} + +Name + +: + +> gml:axisDirection + +Description + +: + +### Base unit {#iso19115-3.2018-elem-gml-BaseUnit-6c9bea4b727b4bf13d9cd293271472dd} + +Name + +: + +> gml:BaseUnit + +Description + +: + +### Begin {#iso19115-3.2018-elem-gml-begin-9267d72967877bb18ec2ee804105e8f8} + +Name + +: + +> gml:begin + +Description + +: + +### Begin date {#iso19115-3.2018-elem-gml-beginPosition-f00b219677910b0a7663831bcae4a837} + +Name + +: + +> gml:beginPosition + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +### Catalog symbol {#iso19115-3.2018-elem-gml-catalogSymbol-20debf93163e22b85511488caf7de721} + +Name + +: + +> gml:catalogSymbol + +Description + +: + +### Coordinates {#iso19115-3.2018-elem-gml-coordinates-93bba1ad2afcfd7886ad123ead5134b9} + +Name + +: + +> gml:coordinates + +Description + +: + +```{=html} +Used to record an array of tuples or coordinates. +``` +### Coordinate system axis {#iso19115-3.2018-elem-gml-CoordinateSystemAxis-3ad068d898bdac7b95af25206b91e31e} + +Name + +: + +> gml:CoordinateSystemAxis + +Description + +: + +### Description {#iso19115-3.2018-elem-gml-description-2600f7b526a347a9b798b8cce5449036} + +Name + +: + +> gml:description + +Description + +: + +```{=html} +Text description of the element +``` +### Description reference {#iso19115-3.2018-elem-gml-descriptionReference-578284e505af5531320c6e14a708a760} + +Name + +: + +> gml:descriptionReference + +Description + +: + +### Domain of validity {#iso19115-3.2018-elem-gml-domainOfValidity-1a276165942a51b46610456025c67328} + +Name + +: + +> gml:domainOfValidity + +Description + +: + +### Duration {#iso19115-3.2018-elem-gml-duration-048a2eb087c6f51866b129ff32bfd626} + +Name + +: + +> gml:duration + +Description + +: + +```{=html} +Conforms to the ISO 8601 syntax for temporal length as + implemented by the XML Schema duration type. +``` +### End {#iso19115-3.2018-elem-gml-end-52f9f66d3851e2c0326222a2a447ef52} + +Name + +: + +> gml:end + +Description + +: + +### End date {#iso19115-3.2018-elem-gml-endPosition-9f8aaba04b72980299ec61c0b8d2d646} + +Name + +: + +> gml:endPosition + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +### Outer boundary {#iso19115-3.2018-elem-gml-exterior-5721530d7165b757db1c8601fe7a24e6} + +Name + +: + +> gml:exterior + +Description + +: + +```{=html} +The outer boundary of a solid. +``` +### Identifier {#iso19115-3.2018-elem-gml-id-42de2c4c8a671cebba710db1b18c0107} + +Name + +: + +> gml:id + +Description + +: + +```{=html} +Unique identifier +``` +### Ellipsoid {#iso19115-3.2018-elem-gml-id-mri-MD_CRS-c97605d29328beea996712b90459c4b0} + +Name + +: + +> gml:id + +Context + +: + +> mri:MD_CRS + +Description + +: + +```{=html} +Identity of the ellipsoid used +``` +```{=html} +identity of the ellipsoid used +``` +### Identifier {#iso19115-3.2018-elem-gml-identifier-ee45781f2ae3fc17f684139652109a84} + +Name + +: + +> gml:identifier + +Description + +: + +### Inner boundary {#iso19115-3.2018-elem-gml-interior-3164a957fa955b24e183bc071bb38263} + +Name + +: + +> gml:interior + +Description + +: + +```{=html} +The inner boundary of a solid +``` +### Linear ring {#iso19115-3.2018-elem-gml-LinearRing-ced37e1154857d6ce3d664076659332c} + +Name + +: + +> gml:LinearRing + +Description + +: + +```{=html} +A gml:LinearRing is defined by four or more coordinate tuples, + with linear + interpolation between them; the first and last coordinates shall be + coincident. +``` +### Line {#iso19115-3.2018-elem-gml-LineString-600185f9928ea52861bb6db1d8faaaf9} + +Name + +: + +> gml:LineString + +Description + +: + +```{=html} +A gml:LineString is a special curve that consists of a single + segment with + linear interpolation. It is defined by two or more coordinate tuples, with + linear + interpolation between them. +``` +### Maximum value {#iso19115-3.2018-elem-gml-maximumValue-7f3fca69f6f90158c23b4b8ab4cea8d2} + +Name + +: + +> gml:maximumValue + +Description + +: + +### Metadata property {#iso19115-3.2018-elem-gml-metaDataProperty-d35cc559d1ea5955993b4b1f09eb07d8} + +Name + +: + +> gml:metaDataProperty + +Description + +: + +### Minimum value {#iso19115-3.2018-elem-gml-minimumValue-2b8ffd52e40a4035d7ac9df8ac3c0ff4} + +Name + +: + +> gml:minimumValue + +Description + +: + +### Name {#iso19115-3.2018-elem-gml-name-db4e6ae78001c92be5ac3e74d7ec8d77} + +Name + +: + +> gml:name + +Description + +: + +### Point {#iso19115-3.2018-elem-gml-Point-3d13098ff5d2b030481b094ab9d32184} + +Name + +: + +> gml:Point + +Description + +: + +```{=html} +A gml:Point is defined by a single coordinate tuple. +``` +### Point type {#iso19115-3.2018-elem-gml-PointType-060f62970e5ada17f74811359552d183} + +Name + +: + +> gml:PointType + +Description + +: + +### Polygon {#iso19115-3.2018-elem-gml-Polygon-be0aca51ddc0b4e76ab1f54444748cc0} + +Name + +: + +> gml:Polygon + +Description + +: + +```{=html} +A gml:Polygon is a special surface that is defined by a single + surface patch. + The boundary of this patch is coplanar and the polygon uses planar + interpolation in its + interior. +``` +### Pos {#iso19115-3.2018-elem-gml-pos-4fff453ab55389744543f2df6c5a0e0a} + +Name + +: + +> gml:pos + +Description + +: + +### Projected CRS {#iso19115-3.2018-elem-gml-ProjectedCRS-5d3ed9ff2ace3bd4dc4b6d4a68c24491} + +Name + +: + +> gml:ProjectedCRS + +Description + +: + +### Quantity type {#iso19115-3.2018-elem-gml-quantityType-49cf23ca6944dea5ec8fe2740bd8441e} + +Name + +: + +> gml:quantityType + +Description + +: + +### Quantity type reference {#iso19115-3.2018-elem-gml-quantityTypeReference-7d7da8f239d830b79402c17fbbd8bd34} + +Name + +: + +> gml:quantityTypeReference + +Description + +: + +### Range meaning {#iso19115-3.2018-elem-gml-rangeMeaning-02f759e960e187822ef303d11aaaaee5} + +Name + +: + +> gml:rangeMeaning + +Description + +: + +### Realization epoch {#iso19115-3.2018-elem-gml-realizationEpoch-c07141b4c3761224c67b8ad71596f617} + +Name + +: + +> gml:realizationEpoch + +Description + +: + +### Related time {#iso19115-3.2018-elem-gml-relatedTime-a4c0ec44ce9c5e9404b7a318ea456e82} + +Name + +: + +> gml:relatedTime + +Description + +: + +```{=html} +Defines the relation of a given time to the object. +``` +### Remarks {#iso19115-3.2018-elem-gml-remarks-aa7c5b619988014f875df4eb43f8fc20} + +Name + +: + +> gml:remarks + +Description + +: + +### Remote schema {#iso19115-3.2018-elem-gml-remoteSchema-e5c36c448e77fee875f1b4cbd87d5e37} + +Name + +: + +> gml:remoteSchema + +Description + +: + +### Scope {#iso19115-3.2018-elem-gml-scope-0030a4d6fa08ad7c1eb516c1bdf3377b} + +Name + +: + +> gml:scope + +Description + +: + +### Time edge {#iso19115-3.2018-elem-gml-TimeEdge-8de5f2633834b77940206332af02a3f3} + +Name + +: + +> gml:TimeEdge + +Description + +: + +### Time edge type {#iso19115-3.2018-elem-gml-TimeEdgeType-6f3c48eb82089951457a8b6e66376d72} + +Name + +: + +> gml:TimeEdgeType + +Description + +: + +### Time instant {#iso19115-3.2018-elem-gml-TimeInstant-9ed28d4003f6f01dcbb5c2a35eb1b868} + +Name + +: + +> gml:TimeInstant + +Description + +: + +### Time instant type {#iso19115-3.2018-elem-gml-TimeInstantType-3f5810bbca58aa889cce1be23cb8b296} + +Name + +: + +> gml:TimeInstantType + +Description + +: + +### Time interval {#iso19115-3.2018-elem-gml-timeInterval-1e58ea97b2d3c8d2ee8af8fba944525e} + +Name + +: + +> gml:timeInterval + +Description + +: + +```{=html} +conforms to ISO 11404 which is based on floating point values + for temporal length. + ISO 11404 syntax specifies the use of a positiveInteger together with + appropriate values for radix and factor. The resolution of the time + interval is to one radix ^(-factor) of the specified time unit. + The value of the unit is either selected from the units for time intervals + from ISO 31-1:1992, or is another suitable unit. The encoding is defined + for GML in gml:TimeUnitType. The second component of this union type + provides a method for indicating time units other than the six standard + units given in the enumeration. +``` +### Time node {#iso19115-3.2018-elem-gml-TimeNode-91dbe7a18704bd38bb78222821f700d4} + +Name + +: + +> gml:TimeNode + +Description + +: + +### Time node type {#iso19115-3.2018-elem-gml-TimeNodeType-8ad896bbeae74ddc6aeccb985219b0c8} + +Name + +: + +> gml:TimeNodeType + +Description + +: + +### Time period {#iso19115-3.2018-elem-gml-TimePeriod-d6dba552b799834fed47973fd4b7cd4f} + +Name + +: + +> gml:TimePeriod + +Description + +: + +### Time period type {#iso19115-3.2018-elem-gml-TimePeriodType-c1129dd5a4a5df9ca9aa3fcd4c8fb9b8} + +Name + +: + +> gml:TimePeriodType + +Description + +: + +### Time position {#iso19115-3.2018-elem-gml-timePosition-6857f16de011b9783e13a5d6d6273486} + +Name + +: + +> gml:timePosition + +Description + +: + +### Time position {#iso19115-3.2018-elem-gml-TimePosition-505d1e7bef8e83fa4766daf84513beff} + +Name + +: + +> gml:TimePosition + +Description + +: + +### Unit definition {#iso19115-3.2018-elem-gml-UnitDefinition-c407f907d054e79a4c4664b4c832b325} + +Name + +: + +> gml:UnitDefinition + +Description + +: + +### Units system {#iso19115-3.2018-elem-gml-unitsSystem-cc71d59e78af646f2d29be97dc8c2212} + +Name + +: + +> gml:unitsSystem + +Description + +: + +### Vertical CRS {#iso19115-3.2018-elem-gml-VerticalCRS-0499658a8cbf1588dc852d46a97208e2} + +Name + +: + +> gml:VerticalCRS + +Description + +: + +### Vertical CS {#iso19115-3.2018-elem-gml-verticalCS-da6818bd5029d419378e56a1452af0c8} + +Name + +: + +> gml:verticalCS + +Description + +: + +### Vertical CS {#iso19115-3.2018-elem-gml-VerticalCS-5b2ac8a91a1b1c96e534eac65bbacf38} + +Name + +: + +> gml:VerticalCS + +Description + +: + +### Vertical datum {#iso19115-3.2018-elem-gml-verticalDatum-b6eee3a14a8b0f1075ae043a034e1f40} + +Name + +: + +> gml:verticalDatum + +Description + +: + +### Vertical datum {#iso19115-3.2018-elem-gml-VerticalDatum-cebbc2196212fde90a395c3c216b36c6} + +Name + +: + +> gml:VerticalDatum + +Description + +: + +### Hidden Elements {#iso19115-3.2018-elem-hidden-elements-c22e8449aff98b154969567fdc5c04f0} + +Name + +: + +> hidden-elements + +Description + +: + +```{=html} +Child elements and attributes have been hidden because you do + no have access to view those elements +``` +### Identifier {#iso19115-3.2018-elem-id-2345f9dc93f577a30435e73a55c2e3c0} + +Name + +: + +> id + +Description + +: + +```{=html} +Unique identifier +``` +### Indeterminate position {#iso19115-3.2018-elem-indeterminatePosition-69ea8df41d40c0c9e8bb430d26bb0d49} + +Name + +: + +> indeterminatePosition + +Description + +: + +### Standard codelists Indeterminate position (indeterminatePosition) + +| code | label | +|---------|---------| +| after | After | +| before | Before | +| now | Now | +| unknown | Unknown | + +### Is infinite {#iso19115-3.2018-elem-isInfinite-f8b250954f378d7fed3f293b112e13c4} + +Name + +: + +> isInfinite + +Description + +: + +### Character encoding {#iso19115-3.2018-elem-lan-characterEncoding-2b6f0a1f954994506c54ac850f001f89} + +Name + +: + +> lan:characterEncoding + +Description + +: + +```{=html} +CharacterEncoding +``` +### Country {#iso19115-3.2018-elem-lan-country-da9f45a56a7e3bea3fad555ba7b0e8a6} + +Name + +: + +> lan:country + +Description + +: + +```{=html} +Designation of the specific country of the locale language +``` + +Condition + +: + +> optional + +### Country {#iso19115-3.2018-elem-lan-country-lan-PT_Locale-9ff105f1f19be3b26f3ab04cef7f90f2} + +Name + +: + +> lan:country + +Context + +: + +> lan:PT_Locale + +Description + +: + +```{=html} +Designation of the specific country of the locale language +``` + +Condition + +: + +> optional + +### Date {#iso19115-3.2018-elem-lan-date-lan-PT_LocaleContainer-132a4183d35d301254fb13df2d7d0338} + +Name + +: + +> lan:date + +Context + +: + +> lan:PT_LocaleContainer + +Description + +: + +```{=html} +Date of creation or revision of the locale + container +``` + +Condition + +: + +> mandatory + +### Description {#iso19115-3.2018-elem-lan-description-lan-PT_LocaleContainer-1f47795aecc317bde4c9afb79d853eb6} + +Name + +: + +> lan:description + +Context + +: + +> lan:PT_LocaleContainer + +Description + +: + +```{=html} +Designation of the locale language +``` + +Condition + +: + +> mandatory + +### Language {#iso19115-3.2018-elem-lan-language-8a2e23cada8f90f768153cd009dd1421} + +Name + +: + +> lan:language + +Description + +: + +```{=html} +Designation of the locale language +``` +### ISO Language code {#iso19115-3.2018-elem-lan-LanguageCode-dbfc1c90b859ca52a01a1f8bafbaf567} + +Name + +: + +> lan:LanguageCode + +Description + +: + +```{=html} +Language code +``` +### Locale {#iso19115-3.2018-elem-lan-locale-lan-PT_LocaleContainer-e7de1934cd262890bd1e025b68448154} + +Name + +: + +> lan:locale + +Context + +: + +> lan:PT_LocaleContainer + +Description + +: + +```{=html} +Locale in which the localised strings of the + container are expressed +``` + +Condition + +: + +> mandatory + +### Locale {#iso19115-3.2018-elem-lan-locale-lan-LocalisedCharacterString-89a38d8f8dd189b863a75f8a0f74f7ba} + +Name + +: + +> lan:locale + +Context + +: + +> lan:LocalisedCharacterString + +Description + +: + +```{=html} +defines the locale in which the value (sequence of + characters) of the localised character string is expressed +``` + +Condition + +: + +> mandatory + +### Localised character string {#iso19115-3.2018-elem-lan-LocalisedCharacterString-901dcad3602cb2b433174b51134a10d7} + +Name + +: + +> lan:LocalisedCharacterString + +Description + +: + +```{=html} +Expression of a free text in a given locale +``` +### Localised string {#iso19115-3.2018-elem-lan-localisedString-lan-PT_LocaleContainer-bf9b4b45e7257abd994d0abe61aa8e43} + +Name + +: + +> lan:localisedString + +Context + +: + +> lan:PT_LocaleContainer + +Description + +: + +```{=html} +Provides the list of localised character string + expressing the linguistic translation of a set of textual information in a + given locale +``` + +Condition + +: + +> mandatory + +### Character set code {#iso19115-3.2018-elem-lan-MD_CharacterSetCode-b9a04835e79ab3aca7ae89608dd5b3b4} + +Name + +: + +> lan:MD_CharacterSetCode + +Description + +: + +```{=html} +Use IANA Character Set register: + http://www.iana.org/assignments/character-sets. These are the official + names for character sets that may be used in the Internet and may be + referred to in Internet documentation. These names are expressed in + ANSI_X3.4-1968 which is commonly called US-ASCII or simply ASCII. +``` +### Standard codelists Character set code (lan:MD_CharacterSetCode) + +| code | label | description | +|------------|--------------|-----------------------------------------------------------------------------------------------------------------------------------| +| ucs2 | UCS2 | 16-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| ucs4 | UCS4 | 32-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| utf7 | UTF7 | 7-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf8 | UTF8 | 8-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf16 | UTF16 | 16-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| 8859part1 | 8859 Part 1 | ISO/IEC 8859-1, Information technology - 8-bit single byte coded graphic character sets - Part 1 : Latin alphabet No.1 | +| 8859part2 | 8859 Part 2 | ISO/IEC 8859-2, Information technology - 8-bit single byte coded graphic character sets - Part 2 : Latin alphabet No.2 | +| 8859part3 | 8859 Part 3 | ISO/IEC 8859-3, Information technology - 8-bit single byte coded graphic character sets - Part 3 : Latin alphabet No.3 | +| 8859part4 | 8859 Part 4 | ISO/IEC 8859-4, Information technology - 8-bit single byte coded graphic character sets - Part 4 : Latin alphabet No.4 | +| 8859part5 | 8859 Part 5 | ISO/IEC 8859-5, Information technology - 8-bit single byte coded graphic character sets - Part 5 : Latin/Cyrillic alphabet | +| 8859part6 | 8859 Part 6 | ISO/IEC 8859-6, Information technology - 8-bit single byte coded graphic character sets - Part 6 : Latin/Arabic alphabet | +| 8859part7 | 8859 Part 7 | ISO/IEC 8859-7, Information technology - 8-bit single byte coded graphic character sets - Part 7 : Latin/Greek alphabet | +| 8859part8 | 8859 Part 8 | ISO/IEC 8859-8, Information technology - 8-bit single byte coded graphic character sets - Part 8 : Latin/Hebrew alphabet | +| 8859part9 | 8859 Part 9 | ISO/IEC 8859-9, Information technology - 8-bit single byte coded graphic character sets - Part 9 : Latin alphabet No.5 | +| 8859part10 | 8859 Part 10 | ISO/IEC 8859-10, Information technology - 8-bit single byte coded graphic character sets - Part 10 : Latin alphabet No.6 | +| 8859part11 | 8859 Part 11 | ISO/IEC 8859-11, Information technology - 8-bit single byte coded graphic character sets - Part 11 : Latin/Thai alphabet | +| 8859part13 | 8859 Part 13 | ISO/IEC 8859-13, Information technology - 8-bit single byte coded graphic character sets - Part 13 : Latin alphabet No.7 | +| 8859part14 | 8859 Part 14 | ISO/IEC 8859-14, Information technology - 8-bit single byte coded graphic character sets - Part 14 : Latin alphabet No.8 (Celtic) | +| 8859part15 | 8859 Part 15 | ISO/IEC 8859-15, Information technology - 8-bit single byte coded graphic character sets - Part 15 : Latin alphabet No.9 | +| 8859part16 | 8859 Part 16 | ISO/IEC 8859-16, Information technology - 8-bit single byte coded graphic character sets - Part 16 : Latin alphabet No.10 | +| jis | JIS | Japanese code set used for electronic transmission | +| shiftJIS | Shift JIS | Japanese code set used on MS-DOS machines | +| eucJP | EUC JP | Japanese code set used on UNIX based machines | +| usAscii | US ASCII | United States ASCII code set (ISO 646 US) | +| ebcdic | EBCDIC | IBM mainframe code set | +| eucKR | EUC KR | Korean code set | +| big5 | Big 5 | Traditional Chinese code set used in Taiwan, Hong Kong of China and other areas | +| GB2312 | GB2312 | Simplified Chinese code set | + +### Locale {#iso19115-3.2018-elem-lan-PT_Locale-c8a7a406cec8fd65657ae57ca0af6974} + +Name + +: + +> lan:PT_Locale + +Description + +: + +```{=html} +Locale +``` +### Container of localised character strings {#iso19115-3.2018-elem-lan-PT_LocaleContainer-117d7bd7272ea9abb9365a5aeb6e9bbc} + +Name + +: + +> lan:PT_LocaleContainer + +Description + +: + +```{=html} +Container of localised character strings. NOTE It provides a + means to isolate the localised strings related to a given locale. +``` +### Party responsible {#iso19115-3.2018-elem-lan-responsibleParty-lan-PT_LocaleContainer-0877d1ab157089bc69c5a6c64e7d8256} + +Name + +: + +> lan:responsibleParty + +Context + +: + +> lan:PT_LocaleContainer + +Description + +: + +```{=html} +Responsible parties of the locale container +``` + +Condition + +: + +> mandatory + +### Acquisition plan {#iso19115-3.2018-elem-mac-acquisitionPlan-4c8c1de47fbe550f3ccd431aa4a29724} + +Name + +: + +> mac:acquisitionPlan + +Description + +: + +### Acquisition requirement {#iso19115-3.2018-elem-mac-acquisitionRequirement-e37fc1c473395ccb539432ef3f950800} + +Name + +: + +> mac:acquisitionRequirement + +Description + +: + +### Author {#iso19115-3.2018-elem-mac-author-32773deaf9e82a5689b4e658e4bd0470} + +Name + +: + +> mac:author + +Description + +: + +### Air temperature average {#iso19115-3.2018-elem-mac-averageAirTemperature-d2e612416638d6ffbb455c9c9ab8cbbc} + +Name + +: + +> mac:averageAirTemperature + +Description + +: + +```{=html} +Average air temperature along the flight pass during the photo flight. +``` +### Child operation {#iso19115-3.2018-elem-mac-childOperation-ebec2a49b25229de0983dcc2e1235f3d} + +Name + +: + +> mac:childOperation + +Description + +: + +### Citation {#iso19115-3.2018-elem-mac-citation-9bf03298a3d41fa91feea2e4ccd51310} + +Name + +: + +> mac:citation + +Description + +: + +### Content {#iso19115-3.2018-elem-mac-content-f214d41a1c2135aaca4c17c657d771a0} + +Name + +: + +> mac:content + +Description + +: + +### Context {#iso19115-3.2018-elem-mac-context-7feab93bc0b7c188e27294530aeb9bf9} + +Name + +: + +> mac:context + +Description + +: + +```{=html} +Meaning of the event +``` +### Description {#iso19115-3.2018-elem-mac-description-3b10ebf848544f1783a7a05fa206e323} + +Name + +: + +> mac:description + +Description + +: + +### Environmental conditions {#iso19115-3.2018-elem-mac-environmentalConditions-b48e662a6b728e9481ee8de2f5f562be} + +Name + +: + +> mac:environmentalConditions + +Description + +: + +### Expected objective {#iso19115-3.2018-elem-mac-expectedObjective-1515a363116cec7e226709b5e3a29df5} + +Name + +: + +> mac:expectedObjective + +Description + +: + +### Expiry date {#iso19115-3.2018-elem-mac-expiryDate-67127493055f27d7a84c5d6c33dad0f3} + +Name + +: + +> mac:expiryDate + +Description + +: + +### Extent {#iso19115-3.2018-elem-mac-extent-32bca388546aa036836a0999d4a0985f} + +Name + +: + +> mac:extent + +Description + +: + +### Function {#iso19115-3.2018-elem-mac-function-43a516d7a5a9d330dfbca44dee9e7805} + +Name + +: + +> mac:function + +Description + +: + +### History {#iso19115-3.2018-elem-mac-history-2863203dec4254489da43424346c292a} + +Name + +: + +> mac:history + +Description + +: + +### Hosted {#iso19115-3.2018-elem-mac-hosted-a93658bd768bab76294623bdc03a7f46} + +Name + +: + +> mac:hosted + +Description + +: + +### Identifier {#iso19115-3.2018-elem-mac-identifier-81da0e180981d90216072a56b23a8aac} + +Name + +: + +> mac:identifier + +Description + +: + +### Instrument {#iso19115-3.2018-elem-mac-instrument-e2f3702c569b7cc4ec779f6747ddf617} + +Name + +: + +> mac:instrument + +Description + +: + +### Instrumentation event {#iso19115-3.2018-elem-mac-instrumentationEvent-4578f8e6e9f5bd9e5f143d95dcd6e551} + +Name + +: + +> mac:instrumentationEvent + +Description + +: + +```{=html} +An event related to a platform/instrument/sensor +``` +### Latest acceptable date {#iso19115-3.2018-elem-mac-latestAcceptableDate-4898adac6a40ba5ac94a923f11ee7df5} + +Name + +: + +> mac:latestAcceptableDate + +Description + +: + +### Language (locale) {#iso19115-3.2018-elem-mac-locale-1f9333f7305eb86aca37ce9b26daa454} + +Name + +: + +> mac:locale + +Description + +: + +### Maximum altitude {#iso19115-3.2018-elem-mac-maxAltitude-e09b6ad8e0fc72eece1045c524609e34} + +Name + +: + +> mac:maxAltitude + +Description + +: + +```{=html} +Maximum altitude during the photo flight. +``` +### Maximum of relative humidity {#iso19115-3.2018-elem-mac-maxRelativeHumidity-b6e9aa984f7a6d9c47d5f1ed397ff185} + +Name + +: + +> mac:maxRelativeHumidity + +Description + +: + +```{=html} +Maximum relative humidity along the flight pass during the photo flight. +``` +### Metadata constraints {#iso19115-3.2018-elem-mac-metadataConstraints-2b5dd2d8c580cbf6942d2aca1a24b252} + +Name + +: + +> mac:metadataConstraints + +Description + +: + +### Meterological conditions {#iso19115-3.2018-elem-mac-meterologicalConditions-d1a103da456e4ddb5ac84a6c34645147} + +Name + +: + +> mac:meterologicalConditions + +Description + +: + +```{=html} +Meteorological conditions in the photo flight area, in particular clouds, snow and wind. +``` +### Acquisition information {#iso19115-3.2018-elem-mac-MI_AcquisitionInformation-6dc340212b25f0c014271a29f5dd08ad} + +Name + +: + +> mac:MI_AcquisitionInformation + +Description + +: + +### Environmental record {#iso19115-3.2018-elem-mac-MI_EnvironmentalRecord-7f442841494df00f426bcc2b0851325f} + +Name + +: + +> mac:MI_EnvironmentalRecord + +Description + +: + +```{=html} +Information about the environmental conditions during the acquisition +``` +### Event {#iso19115-3.2018-elem-mac-MI_Event-ebe92cdc7725c63f0eff85b23d2f32c1} + +Name + +: + +> mac:MI_Event + +Description + +: + +```{=html} +Identification of a significant collection point within an operation +``` +### Instrument {#iso19115-3.2018-elem-mac-MI_Instrument-6eacc5914df11972c7d81a384ec2a3ce} + +Name + +: + +> mac:MI_Instrument + +Description + +: + +```{=html} +Characteristics of the measuring instrument +``` +### Instrumentation event {#iso19115-3.2018-elem-mac-MI_InstrumentationEvent-edc1ed671f48408d806ee8b24cba3472} + +Name + +: + +> mac:MI_InstrumentationEvent + +Description + +: + +### Instrumentation event list {#iso19115-3.2018-elem-mac-MI_InstrumentationEventList-ea0c6f932372328f403129acf99234e2} + +Name + +: + +> mac:MI_InstrumentationEventList + +Description + +: + +```{=html} +List of events related to platform/ instrument/sensor +``` +### Objective {#iso19115-3.2018-elem-mac-MI_Objective-26ac604605f8af66cb893cef57b01e4f} + +Name + +: + +> mac:MI_Objective + +Description + +: + +```{=html} +Describes the characteristics, spatial and temporal extent of the intended object to be observed +``` +### Operation {#iso19115-3.2018-elem-mac-MI_Operation-98933bc74bcfaf78c957c2b0a95acb1b} + +Name + +: + +> mac:MI_Operation + +Description + +: + +```{=html} +Designations for the operation used to acquire the dataset +``` +### Plan {#iso19115-3.2018-elem-mac-MI_Plan-ef5177b27b97b5ec45c6d82aebce6725} + +Name + +: + +> mac:MI_Plan + +Description + +: + +```{=html} +Designations for the planning information related to meeting the data acquisition requirements +``` +### Platform {#iso19115-3.2018-elem-mac-MI_Platform-7e4bdeefe1bc78a5f0dca2cb685eda26} + +Name + +: + +> mac:MI_Platform + +Description + +: + +```{=html} +Designations for the platform used to acquire the dataset +``` +### Platform pass {#iso19115-3.2018-elem-mac-MI_PlatformPass-4d1995d96efd13f5b1244545b89da350} + +Name + +: + +> mac:MI_PlatformPass + +Description + +: + +```{=html} +Identification of collection coverage. +``` +### Requested date {#iso19115-3.2018-elem-mac-MI_RequestedDate-9ad587a48505fdbd81772da036ccf318} + +Name + +: + +> mac:MI_RequestedDate + +Description + +: + +### Requirement {#iso19115-3.2018-elem-mac-MI_Requirement-3b49f0fe913e6addc285b9b9e670e5f3} + +Name + +: + +> mac:MI_Requirement + +Description + +: + +```{=html} +Requirement to be satisfied by the planned data acquisition +``` +### Revision {#iso19115-3.2018-elem-mac-MI_Revision-aa242ad86f140c920e8f3f10ce3873aa} + +Name + +: + +> mac:MI_Revision + +Description + +: + +```{=html} +History of the revision of an event +``` +### Sensor {#iso19115-3.2018-elem-mac-MI_Sensor-1213e290019529db22e20c83052b64db} + +Name + +: + +> mac:MI_Sensor + +Description + +: + +```{=html} +Specific type of instrument +``` +### Mounted on {#iso19115-3.2018-elem-mac-mountedOn-18c62cdc237e376b21d0e74d2c3b2391} + +Name + +: + +> mac:mountedOn + +Description + +: + +### Objective {#iso19115-3.2018-elem-mac-objective-f6969734c75afde5ff62a2397caef765} + +Name + +: + +> mac:objective + +Description + +: + +### Objective occurrence {#iso19115-3.2018-elem-mac-objectiveOccurence-a37834ed908ca4ee9d177d34dffff8c8} + +Name + +: + +> mac:objectiveOccurence + +Description + +: + +### Operation {#iso19115-3.2018-elem-mac-operation-33100585e6aa7f87c9f4adc93a740f1e} + +Name + +: + +> mac:operation + +Description + +: + +### Other property {#iso19115-3.2018-elem-mac-otherProperty-9c092131f6ca89ea73c6807fd14c2b31} + +Name + +: + +> mac:otherProperty + +Description + +: + +### Other property type {#iso19115-3.2018-elem-mac-otherPropertyType-f33fc4918fb4268f0073efc189ff4919} + +Name + +: + +> mac:otherPropertyType + +Description + +: + +### Parent operation {#iso19115-3.2018-elem-mac-parentOperation-c561a03420b95045a67c77bb7dd2af62} + +Name + +: + +> mac:parentOperation + +Description + +: + +### Pass {#iso19115-3.2018-elem-mac-pass-1f75aaf313f44ae7d58fe1b4f8c448e7} + +Name + +: + +> mac:pass + +Description + +: + +### Plan {#iso19115-3.2018-elem-mac-plan-9166bddcc181db05999aeedc97b54cda} + +Name + +: + +> mac:plan + +Description + +: + +### Platform {#iso19115-3.2018-elem-mac-platform-865e14036ff1d013e11fd2afd0108d6a} + +Name + +: + +> mac:platform + +Description + +: + +### Priority {#iso19115-3.2018-elem-mac-priority-52f9057ea4ae961125cb328b36d968db} + +Name + +: + +> mac:priority + +Description + +: + +```{=html} +Priority applied to the target +``` +### Recipient {#iso19115-3.2018-elem-mac-recipient-6b1a56cb60ca97365b1ececa8473c112} + +Name + +: + +> mac:recipient + +Description + +: + +### Related event {#iso19115-3.2018-elem-mac-relatedEvent-c343b731477ef2687d01751e388e8209} + +Name + +: + +> mac:relatedEvent + +Description + +: + +### Related pass {#iso19115-3.2018-elem-mac-relatedPass-913feab1c6f4fac31d46edf22de3eef7} + +Name + +: + +> mac:relatedPass + +Description + +: + +### Related sensor {#iso19115-3.2018-elem-mac-relatedSensor-b22fab77d761aa9e6046faa7581e68bb} + +Name + +: + +> mac:relatedSensor + +Description + +: + +### Requested date {#iso19115-3.2018-elem-mac-requestedDate-d38587d25a59a1a223f730353f102c82} + +Name + +: + +> mac:requestedDate + +Description + +: + +```{=html} +Range of date validity +``` +### Requested date of collection {#iso19115-3.2018-elem-mac-requestedDateOfCollection-76623dcb1fe75b01f587722ad3168472} + +Name + +: + +> mac:requestedDateOfCollection + +Description + +: + +### Requestor {#iso19115-3.2018-elem-mac-requestor-d769b574f6987630916fdd7c0995838c} + +Name + +: + +> mac:requestor + +Description + +: + +### Revision history {#iso19115-3.2018-elem-mac-revisionHistory-2e83384a42f16c9b91738b749272cfd1} + +Name + +: + +> mac:revisionHistory + +Description + +: + +### Satisfied requirement {#iso19115-3.2018-elem-mac-satisfiedRequirement-f9bf2f69059992413e902d634b40662d} + +Name + +: + +> mac:satisfiedRequirement + +Description + +: + +### Satisfied plan {#iso19115-3.2018-elem-mac-satisifiedPlan-fcbae74a0125ba3d459ccb25f56ee57c} + +Name + +: + +> mac:satisifiedPlan + +Description + +: + +### Scope {#iso19115-3.2018-elem-mac-scope-b02c43f01a8862e3af90a0e7ea66dcab} + +Name + +: + +> mac:scope + +Description + +: + +```{=html} +The specific data to which the acquisition information applies +``` +### Sensing instrument {#iso19115-3.2018-elem-mac-sensingInstrument-86ced1fab519e44c3fcd7325f491ed88} + +Name + +: + +> mac:sensingInstrument + +Description + +: + +### Sensor {#iso19115-3.2018-elem-mac-sensor-147aa2dffb67eddc2fa663e4c90b9f11} + +Name + +: + +> mac:sensor + +Description + +: + +### Sequence {#iso19115-3.2018-elem-mac-sequence-cacb52f654bf50348861ff06567e0bfd} + +Name + +: + +> mac:sequence + +Description + +: + +```{=html} +Relative time ordering of the event +``` +### Significant event {#iso19115-3.2018-elem-mac-significantEvent-290296da36d2627f560e1627fbfda7dc} + +Name + +: + +> mac:significantEvent + +Description + +: + +### Solar azimuth {#iso19115-3.2018-elem-mac-solarAzimuth-4bcda66fb83091bd3da326421c027203} + +Name + +: + +> mac:solarAzimuth + +Description + +: + +```{=html} +Clockwise angle in degrees from north to the centre of the sun’s disc. + Note: This angle is calculated from the nadir point of the sensor, not at the centre point of the image +``` +### Solar elevation {#iso19115-3.2018-elem-mac-solarElevation-af60e0eceb072b322b47c7d7a52421ba} + +Name + +: + +> mac:solarElevation + +Description + +: + +```{=html} +Angle between the horizon and the centre of the Sun’s disk +``` +### Sponsor {#iso19115-3.2018-elem-mac-sponsor-6bc390be3142f1f2b7ef936b3f677d2d} + +Name + +: + +> mac:sponsor + +Description + +: + +### Status {#iso19115-3.2018-elem-mac-status-32c22a9cae01134bd1520ed5116bc066} + +Name + +: + +> mac:status + +Description + +: + +### Time {#iso19115-3.2018-elem-mac-time-d7340d3c53dd6d1afac0240f87395978} + +Name + +: + +> mac:time + +Description + +: + +### Trigger {#iso19115-3.2018-elem-mac-trigger-622d8aa6e371df3f548306153c8ed493} + +Name + +: + +> mac:trigger + +Description + +: + +### Type {#iso19115-3.2018-elem-mac-type-2ac10a6cc42a333f605f86a2d5dd90c6} + +Name + +: + +> mac:type + +Description + +: + +### Constraint language {#iso19115-3.2018-elem-mas-constraintLanguage-6714589d416dbd712eacbe4f41b27057} + +Name + +: + +> mas:constraintLanguage + +Description + +: + +```{=html} +Formal language used in Application Schema +``` + +Condition + +: + +> mandatory + +### Graphics file {#iso19115-3.2018-elem-mas-graphicsFile-c3962cc9dc571ea941923664d931e386} + +Name + +: + +> mas:graphicsFile + +Description + +: + +```{=html} +Full application schema given as a graphics file +``` +### Application Schema Information {#iso19115-3.2018-elem-mas-MD_ApplicationSchemaInformation-239070d65d62849e45f86b052fc4b371} + +Name + +: + +> mas:MD_ApplicationSchemaInformation + +Description + +: + +```{=html} +Information about the application schema used to build the + dataset +``` +### Name {#iso19115-3.2018-elem-mas-name-mas-MD_ApplicationSchemaInformation-286a47b5c1b4cb4c26a6c502e81eab33} + +Name + +: + +> mas:name + +Context + +: + +> mas:MD_ApplicationSchemaInformation + +Description + +: + +```{=html} +Name of the application schema used +``` + +Condition + +: + +> mandatory + +### Schema ASCII {#iso19115-3.2018-elem-mas-schemaAscii-6a6918c5cca40db84b935a30a162f1fa} + +Name + +: + +> mas:schemaAscii + +Description + +: + +```{=html} +Full application schema given as an ASCII file +``` +### Schema language {#iso19115-3.2018-elem-mas-schemaLanguage-b9f9ab982f3e38f3100229b3919c7fe6} + +Name + +: + +> mas:schemaLanguage + +Description + +: + +```{=html} +Identification of the schema language used +``` + +Condition + +: + +> mandatory + +### Software development file {#iso19115-3.2018-elem-mas-softwareDevelopmentFile-9ba5d58b0408fa64717c4af73681252e} + +Name + +: + +> mas:softwareDevelopmentFile + +Description + +: + +```{=html} +Full application schema given as a software development file +``` +### Software development file format {#iso19115-3.2018-elem-mas-softwareDevelopmentFileFormat-921ba1f4eea12ce9cfb2f5a735b547a8} + +Name + +: + +> mas:softwareDevelopmentFileFormat + +Description + +: + +```{=html} +Software dependent format used for the application schema + software dependent + file +``` +### Attribute instances {#iso19115-3.2018-elem-mcc-attributeInstances-c2c72bc14be935621cb9c3906b18aa81} + +Name + +: + +> mcc:attributeInstances + +Description + +: + +```{=html} +Attribute instances to which the information applies +``` +### Attributes {#iso19115-3.2018-elem-mcc-attributes-1b6aa85965648de38efe03ea2375ae57} + +Name + +: + +> mcc:attributes + +Description + +: + +```{=html} +Attributes to which the information applies +``` +### Authority {#iso19115-3.2018-elem-mcc-authority-7e7bc76f9f5323599c8181b4bc336579} + +Name + +: + +> mcc:authority + +Description + +: + +```{=html} +Person or party responsible for maintenance of the namespace +``` +### Code {#iso19115-3.2018-elem-mcc-code-2dc2af7f022e459d364d671a8820be3f} + +Name + +: + +> mcc:code + +Description + +: + +```{=html} +Alphanumeric value identifying an instance in the namespace +``` +```{=html} +Alphanumeric value identifying an instance in the + namespace. NOTE Avoid characters that are not legal in URLs. EXAMPLE + EPSG::4326 +``` + +Condition + +: + +> mandatory + +### Codespace {#iso19115-3.2018-elem-mcc-codeSpace-1d595727b533966b906de29071e58024} + +Name + +: + +> mcc:codeSpace + +Description + +: + +```{=html} +Name or identifier of the person or organization responsible + for + namespace +``` +```{=html} +Identifier or namespace in which the code is valid +``` +Recommended values + +| code | label | +|------|-------| +| EPSG | EPSG | + +### Dataset {#iso19115-3.2018-elem-mcc-dataset-761bde17236898889de12474f6474d19} + +Name + +: + +> mcc:dataset + +Description + +: + +```{=html} +Dataset to which the information applies +``` +### Description {#iso19115-3.2018-elem-mcc-description-0a923100b3a1e6ae550b85f0a01ae8d7} + +Name + +: + +> mcc:description + +Description + +: + +```{=html} +natural language description of the meaning of the + code value. EXAMPLE For codeSpace = EPSG, code= 4326, description = + WGS-84. +``` +### Extent {#iso19115-3.2018-elem-mcc-extent-mcc-MD_Scope-9e1c7fbcc9cf379619506e011c40f92f} + +Name + +: + +> mcc:extent + +Context + +: + +> mcc:MD_Scope + +Description + +: + +```{=html} +Information about the horizontal, vertical and temporal extent + of the data specified by the scope +``` +### Feature instances {#iso19115-3.2018-elem-mcc-featureInstances-17bff6871ce84163c48f358d231b0856} + +Name + +: + +> mcc:featureInstances + +Description + +: + +```{=html} +Feature instances to which the information applies +``` +### Features {#iso19115-3.2018-elem-mcc-features-cd1d3790286adbd6dc53f82c201f23c1} + +Name + +: + +> mcc:features + +Description + +: + +```{=html} +Features to which the information applies +``` +### File description {#iso19115-3.2018-elem-mcc-fileDescription-b4c8b6a2ce9129eb824c8e8ed9463435} + +Name + +: + +> mcc:fileDescription + +Description + +: + +```{=html} +Text description of the illustration +``` +### File name {#iso19115-3.2018-elem-mcc-fileName-286b40df4c38bcadc32de27920d0ce50} + +Name + +: + +> mcc:fileName + +Description + +: + +```{=html} +Name of the file that contains a graphic that provides an + illustration of the + dataset. It could be a public image document URL. +``` + +Condition + +: + +> mandatory + +### File type {#iso19115-3.2018-elem-mcc-fileType-f47a2fb159012c382d43688a0c9cca21} + +Name + +: + +> mcc:fileType + +Description + +: + +```{=html} +Format in which the illustration is encoded +``` +```{=html} +Format in which the illustration is encoded Examples: EPS, GIF, JPEG, + PBM, PS, + TIFF, PDF +``` +Recommended values + +| code | label | +|------|-------| +| EPS | EPS | +| GIF | GIF | +| JPEG | JPEG | +| PNG | PNG | +| PBM | PBM | +| PS | PS | +| TIFF | TIFF | +| PDF | PDF | + +### Image constraints {#iso19115-3.2018-elem-mcc-imageConstraints-2d7c5a019e2366e90316111db4ab52dc} + +Name + +: + +> mcc:imageConstraints + +Description + +: + +```{=html} +restriction on access and/or use of browse graphic +``` +### Hierarchy level {#iso19115-3.2018-elem-mcc-level-7824a07e81fe2c038930823b13560140} + +Name + +: + +> mcc:level + +Description + +: + +```{=html} +Hierarchical level of the data specified by the scope +``` + +Condition + +: + +> mandatory + +### Level description {#iso19115-3.2018-elem-mcc-levelDescription-a3e2988d868514fc0ee95ad80a3c9cc0} + +Name + +: + +> mcc:levelDescription + +Description + +: + +```{=html} +Detailed description about the level of the data specified by + the + scope +``` +### Linkage {#iso19115-3.2018-elem-mcc-linkage-mcc-MD_BrowseGraphic-e51921d09bbc809d8d87caeaba6938f9} + +Name + +: + +> mcc:linkage + +Context + +: + +> mcc:MD_BrowseGraphic + +Description + +: + +```{=html} +link to browse graphic +``` +### Browse Graphic {#iso19115-3.2018-elem-mcc-MD_BrowseGraphic-5fedaf89e0cf7c798b88be661c7870a3} + +Name + +: + +> mcc:MD_BrowseGraphic + +Description + +: + +```{=html} +Graphic that provides an illustration of the dataset (should + include a legend for the graphic) +``` +```{=html} +Graphic that provides an illustration of a resource + NOTE Should include a legend for the graphic, if applicable. EXAMPLE A + dataset, an organisation logo, security constraint or citation graphic. +``` +### Identifier {#iso19115-3.2018-elem-mcc-MD_Identifier-f39fe5214b22e40dfa250c2d1c95eae0} + +Name + +: + +> mcc:MD_Identifier + +Description + +: + +```{=html} +Value uniquely identifying an object within a namespace +``` +### Status {#iso19115-3.2018-elem-mcc-MD_ProgressCode-27457369101e4cc3540e5d9cc6d5aa8f} + +Name + +: + +> mcc:MD_ProgressCode + +Description + +: + +### Standard codelists Status (mcc:MD_ProgressCode) + +| code | label | description | +|-------------------|--------------------|--------------------------------------------------------------------------------------| +| completed | Completed | Production of the data has been completed | +| historicalArchive | Historical archive | Data has been stored in an offline storage facility | +| obsolete | Obsolete | Data is no longer relevant | +| onGoing | On going | Data is continually being updated | +| planned | Planned | Fixed date has been established upon or by which the data will be created or updated | +| required | Required | Data needs to be generated or updated | +| underDevelopment | Under development | Data is currently in the process of being created | +| final | Final | Progress concluded and no changes will be accepted | +| pending | Pending | Committed to, but not yet addressed | +| retired | Retired | Item is no longer recommended for use. It has not been superseded by another item | +| superseded | Superseded | Replaced by new item | +| tentative | Tentative | Provisional changes likely before resource becomes final or complete | +| valid | Valid | Acceptable under specific conditions | +| accepted | Accepted | Agreed to by sponsor | +| notAccepted | Not Accepted | Rejected by sponsor | +| withdrawn | Withdrawn | Withdrawn | +| proposed | Proposed | Suggested that development needs to be undertaken | +| deprecated | Deprecated | Resource superseded and will become obsolete, use only for historical purposes | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|-------------|--------------|-------------| +| notobsolete | Not obsolete | | + +``` xml + +``` + +### Scope {#iso19115-3.2018-elem-mcc-MD_Scope-3a2e1c3040c7203740b3178b8d9370b3} + +Name + +: + +> mcc:MD_Scope + +Description + +: + +```{=html} +Class of information about the target resource and + physical extent for which information is reported +``` +### Scope code {#iso19115-3.2018-elem-mcc-MD_ScopeCode-2f9ce057ea5e2205c2adee8624bac996} + +Name + +: + +> mcc:MD_ScopeCode + +Description + +: + +```{=html} +Class of information to which the referencing entity applies +``` +### Standard codelists Scope code (mcc:MD_ScopeCode) + +| code | label | description | +|----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| attribute | Attribute | Information applies to the attribute class | +| attributeType | Attribute type | Information applies to the characteristic of a feature | +| collectionHardware | Collection hardware | Information applies to the collection hardware class | +| collectionSession | Collection session | Information applies to the collection session | +| dataset | Dataset | Information applies to the dataset | +| series | Series | Information applies to the series | +| nonGeographicDataset | Non geographic dataset | Information applies to non-geographic data | +| dimensionGroup | Dimension group | Information applies to a dimension group | +| feature | Feature | Information applies to a feature | +| featureType | Feature type | Information applies to a feature type | +| propertyType | Property type | Information applies to a property type | +| fieldSession | Field session | Information applies to a field session | +| software | Software | Information applies to a computer program or routine | +| service | 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 behaviour, such as a use case | +| model | Model | Information applies to a copy or imitation of an existing or hypothetical object | +| tile | Tile | Information applies to a tile, a spatial subset of geographic data | +| metadata | Metadata | Information applies to metadata | +| initiative | Initiative | Information applies to an initiative | +| sample | Sample | Information applies to a sample | +| document | Document | Information applies to a document | +| repository | Repository | Information applies to a repository | +| aggregate | Aggregate | Information applies to an aggregate resource | +| product | Product | Metadata describing an ISO 19131 data product specification | +| collection | Collection | Information applies to an unstructured set | +| coverage | Coverage | Information applies to a coverage | +| application | Application | Information resource hosted on a specific set of hardware and accessible over a network | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|------------------------------|--------------------------------|-------------| +| map staticMap interactiveMap | Map Static map Interactive map | | + +### Scope description {#iso19115-3.2018-elem-mcc-MD_ScopeDescription-7995800501eaf72f941d8e81542f8e98} + +Name + +: + +> mcc:MD_ScopeDescription + +Description + +: + +```{=html} +Description of the class of information covered by the + information +``` + +Condition + +: + +> Either attributes, features, featureInstances, attributeInstnaces, dataset or other must be provided + +### Scope description {#iso19115-3.2018-elem-mcc-MD_ScopeDescription_Type-e5f6e8be7b7d7e196f4bbdfbb3c51a9c} + +Name + +: + +> mcc:MD_ScopeDescription_Type + +Description + +: + +```{=html} +Description of the class of information covered by the + information +``` + +Condition + +: + +> Either attributes, features, featureInstances, attributeInstnaces, dataset or other must be provided + +### Spatial Representation Type {#iso19115-3.2018-elem-mcc-MD_SpatialRepresentationTypeCode-31b02e6b3fa659af6d7f3bae53ccb6a2} + +Name + +: + +> mcc:MD_SpatialRepresentationTypeCode + +Description + +: + +### Standard codelists Spatial Representation Type (mcc:MD_SpatialRepresentationTypeCode) + +| code | label | description | +|-------------|--------------|----------------------------------------------------------------------------------------------------| +| vector | Vector | Vector data is used to represent geographic data | +| grid | Grid | Grid data is used to represent geographic data | +| textTable | Text, table | Textual or tabular data is used to represent geographic data | +| tin | TIN | Triangulated irregular network | +| stereoModel | Stereo model | Three-dimensional view formed by the intersecting homologous rays of an overlapping pair of images | +| video | Video | Scene from a video recording | + +``` xml + +``` + +### Other {#iso19115-3.2018-elem-mcc-other-0d4f5c50da1b8c13a103dc016e5c4255} + +Name + +: + +> mcc:other + +Description + +: + +```{=html} +Class of information that does not fall into the other + categories to which the + information applies +``` +### URI {#iso19115-3.2018-elem-mcc-URI-c4a96ada6291119a71dedb4fa821fe83} + +Name + +: + +> mcc:URI + +Description + +: + +### Version {#iso19115-3.2018-elem-mcc-version-mcc-MD_Identifier-e51f35d9b386584a92603051050142b7} + +Name + +: + +> mcc:version + +Context + +: + +> mcc:MD_Identifier + +Description + +: + +```{=html} +version identifier for the namespace +``` +### Access constraints {#iso19115-3.2018-elem-mco-accessConstraints-4434175ab3a8a6536daed140ccea3129} + +Name + +: + +> mco:accessConstraints + +Description + +: + +```{=html} +Access constraints applied to assure the protection of privacy + or intellectual + property, and any special restrictions or limitations on obtaining the + resource +``` +``` xml + + + +``` + +### Addressee {#iso19115-3.2018-elem-mco-addressee-mco-MD_Releasability-6b109e079fa7b6014b3d6746221d694b} + +Name + +: + +> mco:addressee + +Context + +: + +> mco:MD_Releasability + +Description + +: + +```{=html} +party to which the release statement applies +``` +### Classification {#iso19115-3.2018-elem-mco-classification-e17c62f61fd7efcb2183fbbb83922018} + +Name + +: + +> mco:classification + +Description + +: + +```{=html} +Name of the handling restrictions on the resource or metadata +``` + +Condition + +: + +> mandatory + +### Classification system {#iso19115-3.2018-elem-mco-classificationSystem-16a2730ef6db9ca4295ef332b221b3c4} + +Name + +: + +> mco:classificationSystem + +Description + +: + +```{=html} +Name of the classification system +``` +### Constraint application scope {#iso19115-3.2018-elem-mco-constraintApplicationScope-f10f04ce2d0209c0bab3f67d865cb084} + +Name + +: + +> mco:constraintApplicationScope + +Description + +: + +```{=html} +Spatial and/or temporal extent and or level of the application + of the constraint restrictions +``` +### Constraints of dissemination {#iso19115-3.2018-elem-mco-disseminationConstraints-mco-MD_Releasability-5c7a4a52cd05e52596ded12c6b653cb4} + +Name + +: + +> mco:disseminationConstraints + +Context + +: + +> mco:MD_Releasability + +Description + +: + +```{=html} +Component in determining releasability +``` +### Graphic {#iso19115-3.2018-elem-mco-graphic-787e1689b35d8928184c1b5bbd16ed01} + +Name + +: + +> mco:graphic + +Description + +: + +```{=html} +Graphic /symbol indicating the constraint +``` +### Handling description {#iso19115-3.2018-elem-mco-handlingDescription-7fba7a0ac032339d0c1b1886a1389060} + +Name + +: + +> mco:handlingDescription + +Description + +: + +```{=html} +Additional information about the restrictions on handling the + resource +``` +### Constraints {#iso19115-3.2018-elem-mco-MD_Constraints-33996fc2b6dc952cdf62806ef26202c2} + +Name + +: + +> mco:MD_Constraints + +Description + +: + +```{=html} +Restrictions on the access and use of a resource or metadata +``` +### Legal constraints {#iso19115-3.2018-elem-mco-MD_LegalConstraints-238a415897a1738a0d8b0e2e3c9bfd96} + +Name + +: + +> mco:MD_LegalConstraints + +Description + +: + +```{=html} +Restrictions and legal prerequisites for accessing and using + the resource or + metadata +``` +### Releasability {#iso19115-3.2018-elem-mco-MD_Releasability-88ac438bcff297d513b5fd666d45c824} + +Name + +: + +> mco:MD_Releasability + +Description + +: + +```{=html} +information about resource release constraints +``` +### Access constraints {#iso19115-3.2018-elem-mco-MD_RestrictionCode-mco-accessConstraints-060503bb481a7679abdc9347b485cd8a} + +Name + +: + +> mco:MD_RestrictionCode + +Context + +: + +> mco:accessConstraints + +Description + +: + +### Standard codelists Access constraints (mco:MD_RestrictionCode) + +| code | label | description | +|----------------------------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| copyright | Copyright | Exclusive right to the publication, production, or sale of the rights to a literary, dramatic, musical, or artistic work, or to the use of a commercial print or label, granted by law for a specified period of time to an author, composer, artist, distributor | +| patent | Patent | Government has granted exclusive right to make, sell, use or license an invention or discovery | +| patentPending | Pending patent | Produced or sold information awaiting a patent | +| trademark | Trademark | A name, symbol, or other device identifying a product, officially registered and legally restricted to the use of the owner or manufacturer | +| license | License | Formal permission to do something | +| intellectualPropertyRights | Intellectual property rights | Rights to financial benefit from and control of distribution of non-tangible property that is a result of creativity | +| restricted | Restricted | Withheld from general circulation or disclosure | +| otherRestrictions | Other restrictions | Limitation not listed | +| unrestricted | Unrestricted | No constraints exist | +| licenceUnrestricted | Licence Unrestricted | formal permission not required to use the resource | +| licenceEndUser | Licence End User | Formal permission required for a person or an entity to use the resource and that may differ from the person that orders or purchases it | +| licenceDistributor | Licence Distributor | Formal permission required for a person or an entity to commercialize or distribute the resource | +| private | Private | Protects rights of individual or organisations from observation, intrusion, or attention of others | +| statutory | Statutory | Prescribed by law | +| confidential | Confidential | Not available to the public. NOTE: Contains information that could be prejudicial to a commercial, industrial, or national interest | +| SBU | Sensitive But Unclassified | Although unclassified, requires strict controls over its distribution | +| in-confidence | In-Confidence | With trust | + +### Security constraints {#iso19115-3.2018-elem-mco-MD_SecurityConstraints-efee55f2eb2d70f01eed428298e807ca} + +Name + +: + +> mco:MD_SecurityConstraints + +Description + +: + +```{=html} +Handling restrictions imposed on the resource or metadata for + national security + or similar security concerns +``` +### Other constraints {#iso19115-3.2018-elem-mco-otherConstraints-ee6f8fc54e0aa9767312008217583cec} + +Name + +: + +> mco:otherConstraints + +Description + +: + +```{=html} +Other restrictions and legal prerequisites for accessing and using the + resource +``` + +Condition + +: + +> conditional + +### Référence {#iso19115-3.2018-elem-mco-reference-be92d9dc3eac6458ea063c8b4e4d16e0} + +Name + +: + +> mco:reference + +Description + +: + +```{=html} +citation for the limitation or constraint EXAMPLE + Copyright statement,licence agreement, etc. +``` +### Releasability {#iso19115-3.2018-elem-mco-releasability-45662b1e4d3b7b93ffac2cacd9e20d8f} + +Name + +: + +> mco:releasability + +Description + +: + +```{=html} +information concerning the parties to whom the + resource can or cannot be released +``` +### Party responsible {#iso19115-3.2018-elem-mco-responsibleParty-47b9fb4016b7f424d783277a602b5819} + +Name + +: + +> mco:responsibleParty + +Description + +: + +```{=html} +Party responsible for the resource constraints +``` + +Condition + +: + +> mandatory + +### Statement {#iso19115-3.2018-elem-mco-statement-mco-MD_Releasability-7986cf3965f16774710c30022ed20228} + +Name + +: + +> mco:statement + +Context + +: + +> mco:MD_Releasability + +Description + +: + +```{=html} +Release statement +``` +### Use constraints {#iso19115-3.2018-elem-mco-useConstraints-a78891e6df6724f942e929e70f301fa3} + +Name + +: + +> mco:useConstraints + +Description + +: + +```{=html} +Constraints applied to assure the protection of privacy or + intellectual + property, and any special restrictions or limitations or warnings on using + the + resource +``` +``` xml + + + +``` + +### Use limitation {#iso19115-3.2018-elem-mco-useLimitation-40f33cf5aed3dcaded9c6b9b6893a17a} + +Name + +: + +> mco:useLimitation + +Description + +: + +```{=html} +Limitation affecting the fitness for use of the resource. Example, _not to be + used for navigation_ +``` +``` xml + + Conditions d'accès et d'utilisation + +``` + +### User note {#iso19115-3.2018-elem-mco-userNote-e0170adc40a3e38bc167e63c55773149} + +Name + +: + +> mco:userNote + +Description + +: + +```{=html} +Explanation of the application of the legal constraints or + other restrictions + and legal prerequisites for obtaining and using the resource or metadata +``` +### Acquisition information {#iso19115-3.2018-elem-mdb-acquisitionInformation-ce87174a305975fd6ab50c76fa062e87} + +Name + +: + +> mdb:acquisitionInformation + +Description + +: + +### Alternative metadata reference {#iso19115-3.2018-elem-mdb-alternativeMetadataReference-d658e4e78b4bb85f325070dac38656f2} + +Name + +: + +> mdb:alternativeMetadataReference + +Description + +: + +```{=html} +Reference to alternative metadata, e.g Dublin Core, + FGDC, or metadata in a non-ISO standard for the same resource +``` +### Application schema info {#iso19115-3.2018-elem-mdb-applicationSchemaInfo-6e29d5e06caa68d593c2abc867db859e} + +Name + +: + +> mdb:applicationSchemaInfo + +Description + +: + +```{=html} +Provides information about the conceptual schema of a dataset +``` +### Contact {#iso19115-3.2018-elem-mdb-contact-bd86ee4331a33e4a09966e9d3837b346} + +Name + +: + +> mdb:contact + +Description + +: + +```{=html} +Party responsible for the metadata information +``` + +Condition + +: + +> mandatory + +``` xml + + + + + + + + + Organisation + + + + + + + mail@organisation.org + + + + + + + + + +``` + +### Content Information {#iso19115-3.2018-elem-mdb-contentInfo-477f3b1af76890ee3158c66524002fd8} + +Name + +: + +> mdb:contentInfo + +Description + +: + +```{=html} +Provides information about the feature catalogue and describes + the coverage and + image data characteristics +``` +### Data quality info {#iso19115-3.2018-elem-mdb-dataQualityInfo-05c1cd27fb52b7bc5c361a03fb962e72} + +Name + +: + +> mdb:dataQualityInfo + +Description + +: + +```{=html} +Provides overall assessment of quality of a resource(s) +``` +``` xml + + + + + + + + + + + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + Voir la spécification référencée + + + + + + + + +``` + +### Date info {#iso19115-3.2018-elem-mdb-dateInfo-74b8e273fbd6b264ff0c70ca542b6fa3} + +Name + +: + +> mdb:dateInfo + +Description + +: + +```{=html} +Date(s) associated with the metadata. NOTE Creation” + date must be provided, others can also be provided +``` +### Default locale {#iso19115-3.2018-elem-mdb-defaultLocale-dd848d0de1837131c70510c4ab1253b4} + +Name + +: + +> mdb:defaultLocale + +Description + +: + +```{=html} +Language and character set used for documenting + metadata +``` +``` xml + + + + + + + + + + +``` + +### Distribution Information {#iso19115-3.2018-elem-mdb-distributionInfo-26e7e205c5605edb7225b0aa5c3950f1} + +Name + +: + +> mdb:distributionInfo + +Description + +: + +```{=html} +Provides information about the distributor of and options for + obtaining the + resource(s) +``` +``` xml + + + + + + + + ESRI Shapefile + + + + 1.0 + + + + + + + + + + + https://geoservices.wallonie.be/inspire/atom/PS_Service.xml + + + atom:feed + + + Service de téléchargement ATOM Feed - Inspire + + + Ce service de téléchargement ATOM Feed permet de télécharger la série de couches de + données conforme au thème INSPIRE "Sites protégés". Cliquez sur le lien correspondant aux couches de + données Natura 2000 pour télécharger les informations relatives à ce mécanisme de désignation. + + + + + + + + + + +``` + +### Identification info {#iso19115-3.2018-elem-mdb-identificationInfo-7b3f7b7fbb8a986c92658058fe54f876} + +Name + +: + +> mdb:identificationInfo + +Description + +: + +```{=html} +Basic information about the resource(s) to which the metadata + applies +``` + +Condition + +: + +> mandatory + +``` xml + + + + + + INSPIRE - TG2 - Template + + + + + 2019-10-01 + + + + + + + + + + 48c6f2bb-4828-46eb-a2cc-d5bcb94340dc + + + https://registry.organisation.fr/datasets + + + + + + + Description du jeu de données + + + + + + + + + + + + + Organisation + + + + + + + mail@organisation.org + + + + + + + + + + + + + + + + + + 25000 + + + + + + + biota + + + environment + + + + + + + 2.78 + + + 6.41 + + + 49.46 + + + 50.85 + + + + + + + + + + + + + + + + Protected site + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GEMET themes + + + + + 2009-09-22 + + + + + + + + + + + + + + + + + + + + + Natura 2000 sites (Birds Directive) + + + + + + + + INSPIRE priority data set + + + + + 2018-04-24 + + + + + + + + + + + + + + + + + + + + + + + + No + limitations to public access + + + + + + + Conditions d'accès et d'utilisation + + + + + + Description des autres contraintes (eg. CGI, Licence) + + + + + + + + + + + + + + + +``` + +### Metadata {#iso19115-3.2018-elem-mdb-MD_Metadata-2a52ffbcceba76f90e734fdd465035a1} + +Name + +: + +> mdb:MD_Metadata + +Description + +: + +```{=html} +Root entity which defines metadata about a resource or + resources +``` +``` xml + + + + + 6d50311c-3ffd-4c09-aa0b-fe9ab1bb93fa + + + urn:uuid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Organisation + + + + + + + mail@organisation.org + + + + + + + + + + + + + 2019-10-07T13:35:35 + + + + + + + + + + 2019-09-20T15:52:19 + + + creation + + + + + + + ISO 19115 + + + 2003/Cor 1:2006 + + + + + + + http://localhost:8080/geonetwork/srv/eng//metadata/6d50311c-3ffd-4c09-aa0b-fe9ab1bb93fa + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3035 + + + + + + + + + + + INSPIRE - TG2 - Template + + + + + 2019-10-01 + + + + + + + + + + 48c6f2bb-4828-46eb-a2cc-d5bcb94340dc + + + https://registry.organisation.fr/datasets + + + + + + + Description du jeu de données + + + + + + + + + + + + + Organisation + + + + + + + mail@organisation.org + + + + + + + + + + + + + + + + + + 25000 + + + + + + + biota + + + environment + + + + + + + 2.78 + + + 6.41 + + + 49.46 + + + 50.85 + + + + + + + + + + + + + + + + Protected site + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GEMET themes + + + + + 2009-09-22 + + + + + + + + + + + + + + + + + + + + + Natura 2000 sites (Birds Directive) + + + + + + + + INSPIRE priority data set + + + + + 2018-04-24 + + + + + + + + + + + + + + + + + + + + + + + + No + limitations to public access + + + + + + + Conditions d'accès et d'utilisation + + + + + + Description des autres contraintes (eg. CGI, Licence) + + + + + + + + + + + + + + + + + + + + + + + ESRI Shapefile + + + + 1.0 + + + + + + + + + + + https://geoservices.wallonie.be/inspire/atom/PS_Service.xml + + + atom:feed + + + Service de téléchargement ATOM Feed - Inspire + + + Ce service de téléchargement ATOM Feed permet de télécharger la série de couches de + données conforme au thème INSPIRE "Sites protégés". Cliquez sur le lien correspondant aux couches de + données Natura 2000 pour télécharger les informations relatives à ce mécanisme de désignation. + + + + + + + + + + + + + + + + + + + + + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + Voir la spécification référencée + + + + + + + + + + + + Généalogie du jeu de données + + + + + + + + + + + +``` + +### Hierarchy level {#iso19115-3.2018-elem-mdb-MD_MetadataScope-51fe8da3ee06d996c5cb057ea86d4341} + +Name + +: + +> mdb:MD_MetadataScope + +Description + +: + +```{=html} +Scope to which the metadata applies (see annex H for more + information about + metadata hierarchy levels) +``` +``` xml + + + + + +``` + +### Resource scope {#iso19115-3.2018-elem-mdb-MD_MetadataScoperd-a377c6e12454a013ffc0c05045d2ff20} + +Name + +: + +> mdb:MD_MetadataScoperd + +Description + +: + +```{=html} +Information about the scope of the resource. +``` +### Metadata constraints {#iso19115-3.2018-elem-mdb-metadataConstraints-cd13aab243e8cf8b0009f3c2cc6288a6} + +Name + +: + +> mdb:metadataConstraints + +Description + +: + +```{=html} +Provides restrictions on the access and use of metadata +``` +### Metadata Extension Information {#iso19115-3.2018-elem-mdb-metadataExtensionInfo-04e7d4f2e4caa82c3ee3957e01387b10} + +Name + +: + +> mdb:metadataExtensionInfo + +Description + +: + +```{=html} +Information describing metadata extensions +``` +### Metadata identifier {#iso19115-3.2018-elem-mdb-metadataIdentifier-a4b2a53a6ba91300cd824aaa32dced12} + +Name + +: + +> mdb:metadataIdentifier + +Description + +: + +```{=html} +Unique identifier for this metadata file +``` +``` xml + + + + 6d50311c-3ffd-4c09-aa0b-fe9ab1bb93fa + + + urn:uuid + + + +``` + +### Metadata linkage {#iso19115-3.2018-elem-mdb-metadataLinkage-582ff009f1d12392ca0be7e310ace58b} + +Name + +: + +> mdb:metadataLinkage + +Description + +: + +```{=html} +Online location where the metadata is available +``` +``` xml + + + + http://localhost:8080/geonetwork/srv/eng//metadata/6d50311c-3ffd-4c09-aa0b-fe9ab1bb93fa + + + + + + +``` + +### Metadata maintenance {#iso19115-3.2018-elem-mdb-metadataMaintenance-f31a9a9880a6a939b8125c2505a04439} + +Name + +: + +> mdb:metadataMaintenance + +Description + +: + +```{=html} +Provides information about the frequency of metadata updates, + and the scope of + those updates +``` +### Metadata profile {#iso19115-3.2018-elem-mdb-metadataProfile-92627fbcc80493116a75b90146bcf055} + +Name + +: + +> mdb:metadataProfile + +Description + +: + +### Type of resource {#iso19115-3.2018-elem-mdb-metadataScope-85ce83354003a98ad94f8f749af858f7} + +Name + +: + +> mdb:metadataScope + +Description + +: + +```{=html} +Type of resource for which metadata is provided +``` +``` xml + + + + + + + +``` + +### Metadata standard {#iso19115-3.2018-elem-mdb-metadataStandard-317906f5ed0893d367c6a78ab2d68812} + +Name + +: + +> mdb:metadataStandard + +Description + +: + +```{=html} +Citation for the standard to which the metadata + conforms. NOTE Metadata standard citations should include an identifier. +``` +``` xml + + + + ISO 19115 + + + 2003/Cor 1:2006 + + + +``` + +### Name {#iso19115-3.2018-elem-mdb-name-66f58b43b2635c779b3af02b3a9748e5} + +Name + +: + +> mdb:name + +Description + +: + +```{=html} +Description of the scope. +``` + +Condition + +: + +> optional + +### Other locale {#iso19115-3.2018-elem-mdb-otherLocale-f4f26265136a3b0812c2ce9d90c0c17f} + +Name + +: + +> mdb:otherLocale + +Description + +: + +```{=html} +Provides information about alternatively used + localised character strings +``` +### Parent metadata {#iso19115-3.2018-elem-mdb-parentMetadata-d82be96796ed0eaaa63a697cfec1287a} + +Name + +: + +> mdb:parentMetadata + +Description + +: + +```{=html} +Identification of the parent metadata record +``` +### Portrayal catalogue info {#iso19115-3.2018-elem-mdb-portrayalCatalogueInfo-f6c73fdd3d7c18f1e90d4a8853986230} + +Name + +: + +> mdb:portrayalCatalogueInfo + +Description + +: + +```{=html} +Provides information about the catalogue of rules defined for + the portrayal of + a resource(s) +``` +### Reference System Information {#iso19115-3.2018-elem-mdb-referenceSystemInfo-6e40de8cf9dbe75d0601aedf78756344} + +Name + +: + +> mdb:referenceSystemInfo + +Description + +: + +```{=html} +Description of the spatial and temporal reference systems used + in the + dataset +``` +``` xml + + + + + + http://www.opengis.net/def/crs/EPSG/0/3035 + + + + + +``` + +### Resource lineage {#iso19115-3.2018-elem-mdb-resourceLineage-b38f8fe2e0d2dee771b11f2dfcb77937} + +Name + +: + +> mdb:resourceLineage + +Description + +: + +```{=html} +Information about the provenance, source(s), and/or + the production process(es) applied to the resource +``` +``` xml + + + + Généalogie du jeu de données + + + + + + + + + + +``` + +### Resource scope {#iso19115-3.2018-elem-mdb-resourceScope-4c3f10bfb66b2ced01f50b3f1f71d4dc} + +Name + +: + +> mdb:resourceScope + +Description + +: + +```{=html} +Code for the scope. +``` + +Condition + +: + +> mandatory + +``` xml + + + +``` + +### Spatial representation info {#iso19115-3.2018-elem-mdb-spatialRepresentationInfo-fa98674c3f9afa7324634c07cda62b3b} + +Name + +: + +> mdb:spatialRepresentationInfo + +Description + +: + +```{=html} +Digital representation of spatial information in the dataset +``` +### Abstract {#iso19115-3.2018-elem-mdq-abstract-fca818cec40fe2f6148cf5424c4a90c6} + +Name + +: + +> mdq:abstract + +Description + +: + +### Date time {#iso19115-3.2018-elem-mdq-dateTime-e5096902a7314e76382ac0f08d866277} + +Name + +: + +> mdq:dateTime + +Description + +: + +### Deductive source {#iso19115-3.2018-elem-mdq-deductiveSource-5831020c420d98cef9262f352dbfcd50} + +Name + +: + +> mdq:deductiveSource + +Description + +: + +```{=html} +Information on which data are used as + sources in deductive evaluation method +``` +### Derived element {#iso19115-3.2018-elem-mdq-derivedElement-f4c2ee6a8acedce6cfb84f98ec17f06e} + +Name + +: + +> mdq:derivedElement + +Description + +: + +### Absolute external positional accuracy {#iso19115-3.2018-elem-mdq-DQ_AbsoluteExternalPositionalAccuracy-8bcd872552f871a19dce36d6bc7e8700} + +Name + +: + +> mdq:DQ_AbsoluteExternalPositionalAccuracy + +Description + +: + +```{=html} +Closeness of reported coordinate values to values accepted as + or being + true +``` +### Accuracy of time measurement {#iso19115-3.2018-elem-mdq-DQ_AccuracyOfATimeMeasurement-8d3752286366dd7dff87ad296ad7c413} + +Name + +: + +> mdq:DQ_AccuracyOfATimeMeasurement + +Description + +: + +```{=html} +Correctness of the temporal references of an item (reporting of + error in time + measurement) +``` +### Aggregation derivation {#iso19115-3.2018-elem-mdq-DQ_AggregationDerivation-ec544a1c126234ec85e6650ee644a702} + +Name + +: + +> mdq:DQ_AggregationDerivation + +Description + +: + +### Completeness commission {#iso19115-3.2018-elem-mdq-DQ_CompletenessCommission-0dd42a0ab10753452a3199c28fc5599c} + +Name + +: + +> mdq:DQ_CompletenessCommission + +Description + +: + +```{=html} +Excess data present in the dataset, as described by the scope +``` +### Completeness omission {#iso19115-3.2018-elem-mdq-DQ_CompletenessOmission-9f6df725bfe69d1f3664bdde5916ea83} + +Name + +: + +> mdq:DQ_CompletenessOmission + +Description + +: + +```{=html} +Data absent from the dataset, as described by the scope +``` +### Conceptual consistency {#iso19115-3.2018-elem-mdq-DQ_ConceptualConsistency-eb99a1efe55b65f59083813a036e4ecf} + +Name + +: + +> mdq:DQ_ConceptualConsistency + +Description + +: + +```{=html} +Adherence to rules of the conceptual schema +``` +### Metaquality / Confidence {#iso19115-3.2018-elem-mdq-DQ_Confidence-00d5fd5323b9dff53e6e4d6613946c29} + +Name + +: + +> mdq:DQ_Confidence + +Description + +: + +```{=html} +Trustworthiness of a data quality result. +``` +### Conformance result {#iso19115-3.2018-elem-mdq-DQ_ConformanceResult-070bb6852050a16c31715ecb6aa09f84} + +Name + +: + +> mdq:DQ_ConformanceResult + +Description + +: + +```{=html} +Information about the outcome of evaluating + the obtained value (or set of values) against a + specified acceptable conformance quality + level +``` +``` xml + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + Voir la spécification référencée + + + +``` + +### Data inspection {#iso19115-3.2018-elem-mdq-DQ_DataInspection-f2e9ffb22ebdaddde326ffa11dac81ef} + +Name + +: + +> mdq:DQ_DataInspection + +Description + +: + +### Data quality {#iso19115-3.2018-elem-mdq-DQ_DataQuality-b969b0659a4303d9c1d35e4757ac62b3} + +Name + +: + +> mdq:DQ_DataQuality + +Description + +: + +```{=html} +Quality information for the data specified by a data quality + scope +``` +``` xml + + + + + + + + + + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + Voir la spécification référencée + + + + + + + +``` + +### Descriptive result {#iso19115-3.2018-elem-mdq-DQ_DescriptiveResult-0191aad06a8d885f697f59296d80b017} + +Name + +: + +> mdq:DQ_DescriptiveResult + +Description + +: + +```{=html} +Data quality descriptive result +``` +### Domain consistency {#iso19115-3.2018-elem-mdq-DQ_DomainConsistency-c1ef69d6172610098aba6ed8e5b38a88} + +Name + +: + +> mdq:DQ_DomainConsistency + +Description + +: + +```{=html} +Adherence of values to the value domains +``` +``` xml + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + Voir la spécification référencée + + + + + +``` + +### Evaluation method {#iso19115-3.2018-elem-mdq-DQ_EvaluationMethod-53191928f6b3e447e7e5200f6f9faf7b} + +Name + +: + +> mdq:DQ_EvaluationMethod + +Description + +: + +### Format consistency {#iso19115-3.2018-elem-mdq-DQ_FormatConsistency-8b5f34fa2b437f53829de2f084c0d3e8} + +Name + +: + +> mdq:DQ_FormatConsistency + +Description + +: + +```{=html} +Degree to which data is stored in accordance with the physical + structure of the + dataset, as described by the scope +``` +### Full inspection {#iso19115-3.2018-elem-mdq-DQ_FullInspection-de21b3a5be286e24d1fdec85ffb1b319} + +Name + +: + +> mdq:DQ_FullInspection + +Description + +: + +### Gridded data positional accuracy {#iso19115-3.2018-elem-mdq-DQ_GriddedDataPositionalAccuracy-6d18be23581ad90ef59f83b6bf5a4cf5} + +Name + +: + +> mdq:DQ_GriddedDataPositionalAccuracy + +Description + +: + +```{=html} +Closeness of gridded data position values to values accepted as + or being + true +``` +### Metaquality / Homogeneity {#iso19115-3.2018-elem-mdq-DQ_Homogeneity-180b944deee523419756c21b2194bb4d} + +Name + +: + +> mdq:DQ_Homogeneity + +Description + +: + +```{=html} +Expected or tested uniformity of the results obtained for a + data quality evaluation. +``` +### Indirect evaluation {#iso19115-3.2018-elem-mdq-DQ_IndirectEvaluation-e1a02547fc4a7b62e5408257b4a9a33d} + +Name + +: + +> mdq:DQ_IndirectEvaluation + +Description + +: + +### Measure reference {#iso19115-3.2018-elem-mdq-DQ_MeasureReference-b2f194226c538d01f7e1336f76fc0b24} + +Name + +: + +> mdq:DQ_MeasureReference + +Description + +: + +### Non quantitative attribute accuracy {#iso19115-3.2018-elem-mdq-DQ_NonQuantitativeAttributeAccuracy-a6eb7ec155510e83e271bb09695d3e4f} + +Name + +: + +> mdq:DQ_NonQuantitativeAttributeAccuracy + +Description + +: + +```{=html} +Correctness of non-quantitative attributes +``` +### Non quantitative attribute correctness {#iso19115-3.2018-elem-mdq-DQ_NonQuantitativeAttributeCorrectness-e1763f4a806bc415f75649d03e74e3bc} + +Name + +: + +> mdq:DQ_NonQuantitativeAttributeCorrectness + +Description + +: + +### Quantitative attribute accuracy {#iso19115-3.2018-elem-mdq-DQ_QuantitativeAttributeAccuracy-239216433c75c857c4138b0b58c352ab} + +Name + +: + +> mdq:DQ_QuantitativeAttributeAccuracy + +Description + +: + +```{=html} +Accuracy of quantitative attributes +``` +### Quantitative result {#iso19115-3.2018-elem-mdq-DQ_QuantitativeResult-e4aa4d6aa466082557a0e3ffcc2c9a57} + +Name + +: + +> mdq:DQ_QuantitativeResult + +Description + +: + +```{=html} +The values or information about the value(s) (or set of values) + obtained from + applying a data quality measure +``` +### Relative internal positional accuracy {#iso19115-3.2018-elem-mdq-DQ_RelativeInternalPositionalAccuracy-e4a653fe1414c1411957fc3952382400} + +Name + +: + +> mdq:DQ_RelativeInternalPositionalAccuracy + +Description + +: + +```{=html} +Closeness of the relative positions of features in the scope to + their + respective relative positions accepted as or being true +``` +### Metaquality / Representativity {#iso19115-3.2018-elem-mdq-DQ_Representativity-10240a1df9c53d02ddecae55fbafdbed} + +Name + +: + +> mdq:DQ_Representativity + +Description + +: + +```{=html} +Degree to which the sample used has produced a result which is + representative of the + data within the data quality scope +``` +### Sample based inspection {#iso19115-3.2018-elem-mdq-DQ_SampleBasedInspection-c33d13f764fa09dfb5a475d6e7195bdf} + +Name + +: + +> mdq:DQ_SampleBasedInspection + +Description + +: + +### Standalone quality report information {#iso19115-3.2018-elem-mdq-DQ_StandaloneQualityReportInformation-b121dac5f5592e3a9bb1a99b3a062d8d} + +Name + +: + +> mdq:DQ_StandaloneQualityReportInformation + +Description + +: + +### Temporal consistency {#iso19115-3.2018-elem-mdq-DQ_TemporalConsistency-0d4957b3d0b9c0dd8cca38734eb41fdf} + +Name + +: + +> mdq:DQ_TemporalConsistency + +Description + +: + +```{=html} +Correctness of ordered events or sequences, if reported +``` +### Temporal validity {#iso19115-3.2018-elem-mdq-DQ_TemporalValidity-99a32e6469000326870fa96cdada6a0d} + +Name + +: + +> mdq:DQ_TemporalValidity + +Description + +: + +```{=html} +Validity of data specified by the scope with respect to time +``` +### Thematic classification correctness {#iso19115-3.2018-elem-mdq-DQ_ThematicClassificationCorrectness-918c902da0e32c6f77178fcd97d60564} + +Name + +: + +> mdq:DQ_ThematicClassificationCorrectness + +Description + +: + +```{=html} +Comparison of the classes assigned to features or their + attributes to a + universe of discourse +``` +### Topological consistency {#iso19115-3.2018-elem-mdq-DQ_TopologicalConsistency-fa568b7fed7969dafdabfbcbdcfe0232} + +Name + +: + +> mdq:DQ_TopologicalConsistency + +Description + +: + +```{=html} +Correctness of the explicitly encoded topological + characteristics of the + dataset as described by the scope +``` +### Usability element {#iso19115-3.2018-elem-mdq-DQ_UsabilityElement-595e258aadfc90d614ad2b18937f035f} + +Name + +: + +> mdq:DQ_UsabilityElement + +Description + +: + +### Element report {#iso19115-3.2018-elem-mdq-elementReport-3cab2d79e4788afae28f563eb6f2be3a} + +Name + +: + +> mdq:elementReport + +Description + +: + +### Evaluation method {#iso19115-3.2018-elem-mdq-evaluationMethod-7861233af309ce32dbd0720123144e93} + +Name + +: + +> mdq:evaluationMethod + +Description + +: + +### Evaluation method description {#iso19115-3.2018-elem-mdq-evaluationMethodDescription-8d6e04e7fe7c9f9d3bce27ee81f522cf} + +Name + +: + +> mdq:evaluationMethodDescription + +Description + +: + +### Evaluation method type {#iso19115-3.2018-elem-mdq-evaluationMethodType-aedca134bbad262feabe9ace78c65b95} + +Name + +: + +> mdq:evaluationMethodType + +Description + +: + +### Evaluation procedure {#iso19115-3.2018-elem-mdq-evaluationProcedure-7e7c31ff40c9145381585833a674ca58} + +Name + +: + +> mdq:evaluationProcedure + +Description + +: + +### Explanation {#iso19115-3.2018-elem-mdq-explanation-cb1e2747d00884eed567257f6159357a} + +Name + +: + +> mdq:explanation + +Description + +: + +``` xml + + Voir la spécification référencée + +``` + +### File description {#iso19115-3.2018-elem-mdq-fileDescription-5d8d5370baa1113d804263b54d2a7068} + +Name + +: + +> mdq:fileDescription + +Description + +: + +### File format {#iso19115-3.2018-elem-mdq-fileFormat-9db9383f8fdb906cbec0c9aecc6283a3} + +Name + +: + +> mdq:fileFormat + +Description + +: + +### Result file name {#iso19115-3.2018-elem-mdq-fileName-a1158f7c0bf6be8f9584593a47af5977} + +Name + +: + +> mdq:fileName + +Description + +: + +### File type {#iso19115-3.2018-elem-mdq-fileType-c856d12e8ac8fd38d94e53cd6685a205} + +Name + +: + +> mdq:fileType + +Description + +: + +### Measure {#iso19115-3.2018-elem-mdq-measure-6de6f9f0d8d88ce71be56b93112a0ab7} + +Name + +: + +> mdq:measure + +Description + +: + +### Measure description {#iso19115-3.2018-elem-mdq-measureDescription-c54ad7c4f745a142d2f4a5a0569d174f} + +Name + +: + +> mdq:measureDescription + +Description + +: + +### Measure identification {#iso19115-3.2018-elem-mdq-measureIdentification-8a53966de7a9af0351fc36cc6563d9b8} + +Name + +: + +> mdq:measureIdentification + +Description + +: + +### Name of measure {#iso19115-3.2018-elem-mdq-nameOfMeasure-6d30a22ce349987e83351f36f006edeb} + +Name + +: + +> mdq:nameOfMeasure + +Description + +: + +### Pass {#iso19115-3.2018-elem-mdq-pass-81090ac8a72d22f1cb603c4d5d8c6a69} + +Name + +: + +> mdq:pass + +Description + +: + +``` xml + +``` + +### Coverage result {#iso19115-3.2018-elem-mdq-QE_CoverageResult-f8dae57f155420ec0fcaf24a2c89f826} + +Name + +: + +> mdq:QE_CoverageResult + +Description + +: + +```{=html} +Result of a data quality measure organising the measured values + as a coverage +``` +### Quality result file {#iso19115-3.2018-elem-mdq-QualityResultFile-f109f1bd9f2a7613c2240692764c6a67} + +Name + +: + +> mdq:QualityResultFile + +Description + +: + +### Reference doc {#iso19115-3.2018-elem-mdq-referenceDoc-0c442bf28823c9941c64476828a3aa8d} + +Name + +: + +> mdq:referenceDoc + +Description + +: + +### Related quality element {#iso19115-3.2018-elem-mdq-relatedElement-6cb5c2f116627d3ffebd1a44e60c6db6} + +Name + +: + +> mdq:relatedElement + +Description + +: + +### Report {#iso19115-3.2018-elem-mdq-report-3f560e7342c96a85b285df503914cd24} + +Name + +: + +> mdq:report + +Description + +: + +```{=html} +Quantitative quality information for the data specified by the + scope +``` + +Condition + +: + +> conditional + +``` xml + + + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + Voir la spécification référencée + + + + + + +``` + +### Report reference {#iso19115-3.2018-elem-mdq-reportReference-3fdd5c73d4c70e02ac95dcd1344fdc0c} + +Name + +: + +> mdq:reportReference + +Description + +: + +### Result {#iso19115-3.2018-elem-mdq-result-4b9abc04ab0aa92a7dfd24268ea92451} + +Name + +: + +> mdq:result + +Description + +: + +``` xml + + + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + + + Voir la spécification référencée + + + + +``` + +### Result content description {#iso19115-3.2018-elem-mdq-resultContentDescription-439741e7294de36459a0575d34b1e0d0} + +Name + +: + +> mdq:resultContentDescription + +Description + +: + +### Result file {#iso19115-3.2018-elem-mdq-resultFile-dd9d02421d1a1daac0ab8764cb9460ab} + +Name + +: + +> mdq:resultFile + +Description + +: + +### Result format {#iso19115-3.2018-elem-mdq-resultFormat-ddf9dccddc161522b101561d867e7416} + +Name + +: + +> mdq:resultFormat + +Description + +: + +### Result scope {#iso19115-3.2018-elem-mdq-resultScope-2d26c490e11930de1c49ad7e9dc5bab4} + +Name + +: + +> mdq:resultScope + +Description + +: + +### Result spatial representation {#iso19115-3.2018-elem-mdq-resultSpatialRepresentation-8bb7067999f2aa15977e1691d088afcc} + +Name + +: + +> mdq:resultSpatialRepresentation + +Description + +: + +### Scope {#iso19115-3.2018-elem-mdq-scope-a680ca4acf1fa0c4c2678a51709f9320} + +Name + +: + +> mdq:scope + +Description + +: + +```{=html} +The specific data to which the data quality information + applies +``` +``` xml + + + + + + + +``` + +### Spatial representation type {#iso19115-3.2018-elem-mdq-spatialRepresentationType-dc1790616f61278197b4dbd1cf1869bc} + +Name + +: + +> mdq:spatialRepresentationType + +Description + +: + +### Specification {#iso19115-3.2018-elem-mdq-specification-17ccfa051d8e7f1a633444b084c1ae5f} + +Name + +: + +> mdq:specification + +Description + +: + +``` xml + + + + COMMISSION REGULATION (EU) No 1089/2010 of 23 November 2010 implementing Directive 2007/2/EC of the European Parliament and of the Council as regards interoperability of spatial data sets and services + + + + + 2010-12-08 + + + + + + + + +``` + +### Standalone quality report {#iso19115-3.2018-elem-mdq-standaloneQualityReport-fd51848c91b175b598e66e34c0a7150c} + +Name + +: + +> mdq:standaloneQualityReport + +Description + +: + +### Standalone quality report details {#iso19115-3.2018-elem-mdq-standaloneQualityReportDetails-6a45bb0b8ba6ca15eda12e640cfa2a59} + +Name + +: + +> mdq:standaloneQualityReportDetails + +Description + +: + +### Statement {#iso19115-3.2018-elem-mdq-statement-66bfc04c451426e281bd6db312d7ff6a} + +Name + +: + +> mdq:statement + +Description + +: + +### Value {#iso19115-3.2018-elem-mdq-value-/mdb-MD_Metadata/mdb-dataQualityInfo/mdq-DQ_DataQuality/mdq-report/mdq-DQ_DomainConsistency/mdq-result/mdq-DQ_QuantitativeResult/mdq-value-dc03de6f70ba85162fea01c985e91d4e} + +Name + +: + +> mdq:value + +Context + +: + +> /mdb:MD_Metadata/mdb:dataQualityInfo/mdq:DQ_DataQuality/mdq:report/mdq:DQ_DomainConsistency/mdq:result/mdq:DQ_QuantitativeResult/mdq:value + +Description + +: + +```{=html} +Quantitative value or values, content determined by the evaluation procedure + used +``` + +Condition + +: + +> mandatory + +### Value {#iso19115-3.2018-elem-mdq-value-306d79adb03863fa4fe88c5160249035} + +Name + +: + +> mdq:value + +Description + +: + +### Value type {#iso19115-3.2018-elem-mdq-valueRecordType-39d1e11f86d5166ef7e04d464662590c} + +Name + +: + +> mdq:valueRecordType + +Description + +: + +```{=html} +Quantitative conformance quality level value or range of + values +``` +Recommended values + +| code | label | +|---------------------------------|---------------------------------| +| Boolean | Boolean | +| Real | Real | +| Integer | Integer | +| Ratio | Ratio | +| Percentage | Percentage | +| Measure(s) (value(s) + unit(s)) | Measure(s) (value(s) + unit(s)) | + +### Value unit {#iso19115-3.2018-elem-mdq-valueUnit-edcdbdc8d0e58c8764d5e6cd8088857e} + +Name + +: + +> mdq:valueUnit + +Description + +: + +```{=html} +Value unit for reporting a data quality result +``` + +Condition + +: + +> mandatory + +### Contact {#iso19115-3.2018-elem-mmi-contact-mmi-MD_MaintenanceInformation-67461bcb2fdc653d5dfe4b63a3cbdd5e} + +Name + +: + +> mmi:contact + +Context + +: + +> mmi:MD_MaintenanceInformation + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) + and + organization(s) with responsibility for maintaining the metadata +``` +### Maintenance and update frequency {#iso19115-3.2018-elem-mmi-maintenanceAndUpdateFrequency-a9f8c3b3ffff1868396b8be05b51b2ed} + +Name + +: + +> mmi:maintenanceAndUpdateFrequency + +Description + +: + +```{=html} +Frequency with which changes and additions are made to the + resource after the + initial resource is completed +``` + +Condition + +: + +> mandatory + +``` xml + + + +``` + +### Maintenance date {#iso19115-3.2018-elem-mmi-maintenanceDate-mmi-MD_MaintenanceInformation-f2d466937a8038b63f448b433b6b639a} + +Name + +: + +> mmi:maintenanceDate + +Context + +: + +> mmi:MD_MaintenanceInformation + +Description + +: + +```{=html} +Date information associated with maintenance of + resource +``` +### Maintenance note {#iso19115-3.2018-elem-mmi-maintenanceNote-c1095367f28dea87bbedf6ac07490607} + +Name + +: + +> mmi:maintenanceNote + +Description + +: + +```{=html} +Information regarding specific requirements for maintaining the + resource +``` +### Maintenance scopes {#iso19115-3.2018-elem-mmi-maintenanceScope-mmi-MD_MaintenanceInformation-41e944366902a5e666515d56d075014f} + +Name + +: + +> mmi:maintenanceScope + +Context + +: + +> mmi:MD_MaintenanceInformation + +Description + +: + +```{=html} +Type of resource and/or extent to which the + maintenance information applies +``` +### Maintenance Frequency {#iso19115-3.2018-elem-mmi-MD_MaintenanceFrequencyCode-2d1d3634943b4db7ca283424e745bc0e} + +Name + +: + +> mmi:MD_MaintenanceFrequencyCode + +Description + +: + +### Standard codelists Maintenance Frequency (mmi:MD_MaintenanceFrequencyCode) + +| code | label | description | +|-------------|--------------|----------------------------------------------------------| +| continual | Continual | Data is repeatedly and frequently updated | +| daily | Daily | Data is updated each day | +| weekly | Weekly | Data is updated on a weekly basis | +| fortnightly | Fortnightly | Data is updated every two weeks | +| monthly | Monthly | Data is updated each month | +| quarterly | Quarterly | Data is updated every three months | +| biannually | Biannually | Data is updated twice each year | +| annually | Annually | Data is updated every year | +| asNeeded | As needed | Data is updated as deemed necessary | +| irregular | Irregular | Data is updated in intervals that are uneven in duration | +| notPlanned | Not planned | There are no plans to update the data | +| unknown | Unknown | Frequency of maintenance for the data is not known | +| periodic | Periodic | Resource is updated at regular intervals | +| semimonthly | Semi-monthly | Resource updated twice monthly | +| biennially | Biennially | Resource is updated every 2 years | + +``` xml + +``` + +### Maintenance information {#iso19115-3.2018-elem-mmi-MD_MaintenanceInformation-98062b270bf3eb9ad460147bad01d2f7} + +Name + +: + +> mmi:MD_MaintenanceInformation + +Description + +: + +```{=html} +Information about the scope and frequency of updating +``` +``` xml + + + + + +``` + +### User defined maintenance frequency {#iso19115-3.2018-elem-mmi-userDefinedMaintenanceFrequency-cde10206b5d1414f49a995a98246b323} + +Name + +: + +> mmi:userDefinedMaintenanceFrequency + +Description + +: + +```{=html} +Maintenance period other than those defined +``` +### Portrayal catalogue reference {#iso19115-3.2018-elem-mpc-MD_PortrayalCatalogueReference-b60bb4ca1d31a379f47c40d06b9454d5} + +Name + +: + +> mpc:MD_PortrayalCatalogueReference + +Description + +: + +```{=html} +Information identifying the portrayal catalogue used +``` +### Portrayal catalogue citation {#iso19115-3.2018-elem-mpc-portrayalCatalogueCitation-d3ffb8ae720f87fb4ff0772f33219cfc} + +Name + +: + +> mpc:portrayalCatalogueCitation + +Description + +: + +```{=html} +Bibliographic reference to the portrayal catalogue cited +``` + +Condition + +: + +> mandatory + +### Attribute {#iso19115-3.2018-elem-mrc-attribute-dea7af5d2034cfa9e7a5a77fc87bf546} + +Name + +: + +> mrc:attribute + +Description + +: + +```{=html} +Information on an attribute of the resource +``` + +Condition + +: + +> optional + +### Attribute description {#iso19115-3.2018-elem-mrc-attributeDescription-37aaaca60c0cd43bf62d310ba147ef43} + +Name + +: + +> mrc:attributeDescription + +Description + +: + +```{=html} +Description of the attribute described by the measurement + value +``` + +Condition + +: + +> mandatory + +### Attribute group {#iso19115-3.2018-elem-mrc-attributeGroup-488906be5d4ea5fbfe94380ba5371d51} + +Name + +: + +> mrc:attributeGroup + +Description + +: + +```{=html} +Information on groups(s) of related attributes of + the resource with the same type +``` +### Bits per value {#iso19115-3.2018-elem-mrc-bitsPerValue-ea78a51caceb3feb5a8d573e937f1e26} + +Name + +: + +> mrc:bitsPerValue + +Description + +: + +```{=html} +Maximum number of significant bits in the uncompressed + representation for the + value in each band of each pixel +``` +### Bound max {#iso19115-3.2018-elem-mrc-boundMax-1016b54ba16d0ffde91fc11a1666047d} + +Name + +: + +> mrc:boundMax + +Description + +: + +```{=html} +Longest wavelength that the sensor is capable of + collecting within a designated band +``` + +Condition + +: + +> optional + +### Bound min {#iso19115-3.2018-elem-mrc-boundMin-2b69a646b72ab2f1d87f527fed1bcdde} + +Name + +: + +> mrc:boundMin + +Description + +: + +```{=html} +Shortest wavelength that the sensor is capable of + collecting within a designated band +``` + +Condition + +: + +> optional + +### Bound unit {#iso19115-3.2018-elem-mrc-boundUnits-4ad2b13f1b186a494053714d4cbc9886} + +Name + +: + +> mrc:boundUnits + +Description + +: + +```{=html} +Units in which sensor wavelengths are expressed +``` + +Condition + +: + +> optional + +### Camera calibration information availability {#iso19115-3.2018-elem-mrc-cameraCalibrationInformationAvailability-bbc9b002677f5c123fd1f9c935bd1d2c} + +Name + +: + +> mrc:cameraCalibrationInformationAvailability + +Description + +: + +```{=html} +Indication of whether or not constants are available which + allow for camera + calibration corrections +``` +### Cloud cover percentage {#iso19115-3.2018-elem-mrc-cloudCoverPercentage-703ebfc5d930f35ccecba7d9ba6d983a} + +Name + +: + +> mrc:cloudCoverPercentage + +Description + +: + +```{=html} +Area of the dataset obscured by clouds, expressed as a + percentage of the + spatial extent +``` +### Compliance code {#iso19115-3.2018-elem-mrc-complianceCode-085f3d1351953db360d964bb7bab6366} + +Name + +: + +> mrc:complianceCode + +Description + +: + +```{=html} +Indication of whether or not the cited feature catalogue + complies with ISO + 19110 +``` +### Content type {#iso19115-3.2018-elem-mrc-contentType-b3b7e695f74a74466893e19a20849596} + +Name + +: + +> mrc:contentType + +Description + +: + +```{=html} +Type of information represented by the cell value +``` + +Condition + +: + +> mandatory + +### Definition {#iso19115-3.2018-elem-mrc-definition-29b676d7a94fb93a2fa58282483a4692} + +Name + +: + +> mrc:definition + +Description + +: + +```{=html} +Designation associated with a set of range elements. eg. "Indicates the sample storage method used." +``` +### Description {#iso19115-3.2018-elem-mrc-description-74b8844c2a5832541e186bdf3a41a726} + +Name + +: + +> mrc:description + +Description + +: + +```{=html} +Description of the attribute +``` + +Condition + +: + +> optional + +### Feature catalogue {#iso19115-3.2018-elem-mrc-featureCatalogue-f1f508ee82724f13567d3975f1c70c3e} + +Name + +: + +> mrc:featureCatalogue + +Description + +: + +```{=html} +The catalogue of feature types, attribution, + operations, and relationships used by the resource +``` + +Condition + +: + +> mandatory + +### Feature catalogue citation {#iso19115-3.2018-elem-mrc-featureCatalogueCitation-beae05b407350c4ce10932b35a6947cc} + +Name + +: + +> mrc:featureCatalogueCitation + +Description + +: + +```{=html} +Complete bibliographic reference to one or more external feature catalogues +``` + +Condition + +: + +> mandatory + +### Feature instance count {#iso19115-3.2018-elem-mrc-featureInstanceCount-7b2fb0b426132c4080181e86e40321b5} + +Name + +: + +> mrc:featureInstanceCount + +Description + +: + +```{=html} +Number of occurrence of feature instances for this + feature type +``` + +Condition + +: + +> optional + +### Feature type name {#iso19115-3.2018-elem-mrc-featureTypeName-acf13aeabc8218359b85e1c5c16d32b9} + +Name + +: + +> mrc:featureTypeName + +Description + +: + +```{=html} +name of the feature type +``` + +Condition + +: + +> mandatory + +### Feature types {#iso19115-3.2018-elem-mrc-featureTypes-13f71555be371c5cc82c6cafa4e33211} + +Name + +: + +> mrc:featureTypes + +Description + +: + +```{=html} +Subset of feature types from cited feature catalogue occurring + in + data +``` +### Film distortion information availability {#iso19115-3.2018-elem-mrc-filmDistortionInformationAvailability-23e3979145822c8293c502656ce444de} + +Name + +: + +> mrc:filmDistortionInformationAvailability + +Description + +: + +```{=html} +Indication of whether or not Calibration Reseau information is + available +``` +### Illumination azimuth angle {#iso19115-3.2018-elem-mrc-illuminationAzimuthAngle-68703c8ec1b434991369ad110842f0d5} + +Name + +: + +> mrc:illuminationAzimuthAngle + +Description + +: + +```{=html} +Illumination azimuth measured in degrees clockwise from true + north at the time + the image is taken. For images from a scanning device, refer to the centre + pixel of the + image +``` +### Illumination elevation angle {#iso19115-3.2018-elem-mrc-illuminationElevationAngle-4942fcb50fa1ba386468663a170f4515} + +Name + +: + +> mrc:illuminationElevationAngle + +Description + +: + +```{=html} +Illumination elevation measured in degrees clockwise from the + target plane at + intersection of the optical line of sight with the Earth_s surface. For + images from a + scanning device, refer to the centre pixel of the image +``` +### Image quality code {#iso19115-3.2018-elem-mrc-imageQualityCode-d76c432bcf49e1705efa580424294b6d} + +Name + +: + +> mrc:imageQualityCode + +Description + +: + +```{=html} +Specifies the image quality +``` +```{=html} +specifies the image quality +``` +### Imaging condition {#iso19115-3.2018-elem-mrc-imagingCondition-138415b371cbe7c705db6c3858d9c19a} + +Name + +: + +> mrc:imagingCondition + +Description + +: + +```{=html} +Conditions affected the image +``` +### Included with dataset {#iso19115-3.2018-elem-mrc-includedWithDataset-406a9a329b292776ade8c8b32d3fdfd5} + +Name + +: + +> mrc:includedWithDataset + +Description + +: + +```{=html} +Indication of whether or not the feature catalogue + is included with the resource +``` +### Language {#iso19115-3.2018-elem-mrc-language-mrc-MD_FeatureCatalogueDescription-b823b546a702df52e72c3d763a33a1e0} + +Name + +: + +> mrc:language + +Context + +: + +> mrc:MD_FeatureCatalogueDescription + +Description + +: + +```{=html} +Language(s) used within the catalogue +``` +### Lens distortion information availability {#iso19115-3.2018-elem-mrc-lensDistortionInformationAvailability-b4bcaa5a49e2e331bce3130b001528ba} + +Name + +: + +> mrc:lensDistortionInformationAvailability + +Description + +: + +```{=html} +Indication of whether or not lens aberration correction + information is + available +``` +### Other language {#iso19115-3.2018-elem-mrc-locale-d66cfb23e274f1b932595edae8291687} + +Name + +: + +> mrc:locale + +Description + +: + +```{=html} +Use this section to define other metadata language + (multilingual metadata). +``` +### Maximum value {#iso19115-3.2018-elem-mrc-maxValue-f4d6b07e0627d3dad6327a88e0fb7645} + +Name + +: + +> mrc:maxValue + +Description + +: + +```{=html} +Longest wavelength that the sensor is capable of collecting + within a designated + band +``` +### Attribute group {#iso19115-3.2018-elem-mrc-MD_AttributeGroup-fde4af4efe67a27c7eb38f18e55a7bfa} + +Name + +: + +> mrc:MD_AttributeGroup + +Description + +: + +```{=html} +Class of information about contentType for groups of + attributes for a specific MD_RangeDimension +``` +### Band {#iso19115-3.2018-elem-mrc-MD_Band-b11f77f7425007bf07d4fa479295fc57} + +Name + +: + +> mrc:MD_Band + +Description + +: + +```{=html} +Range of wavelengths in the electromagnetic spectrum +``` +```{=html} +range of wavelengths in the electromagnetic spectrum +``` +### Coverage content {#iso19115-3.2018-elem-mrc-MD_CoverageContentTypeCode-b7fd2aef2e8871ea509a92f553d14c52} + +Name + +: + +> mrc:MD_CoverageContentTypeCode + +Description + +: + +### Standard codelists Coverage content (mrc:MD_CoverageContentTypeCode) + +| code | label | description | +|------------------------|-------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| image | Image | Meaningful numerical representation of a physical parameter that is not the actual value of the physical parameter | +| thematicClassification | Thematic classification | Code value with no quantitative meaning, used to represent a physical quantity | +| physicalMeasurement | Physical measurement | Value in physical units of the quantity being measured | +| auxillaryInformation | Auxillary Information | Data, usually a physical measurement, used to support the calculation of the primary physicalMeasurement coverages in the dataset. EXAMPLE: Grid of aerosol optical thickness used in the calculation of a sea surface temperature product | +| qualityInformation | Quality Information | Data used to characterize the quality of the physicalMeasurement coverages in the dataset. NOTE: Typically included in a gmi:QE_CoverageResult | +| referenceInformation | Reference Information | Data used to characterize the quality of the physicalMeasurement coverages in the dataset. NOTE: Typically included in a gmi:QE_CoverageResult | +| modelResult | Model Result | Resources with values that are calculated using a model rather than being observed or calculated from observations | +| coordinate | Coordinate | Data used to provide coordinate axis values | + +### Coverage description {#iso19115-3.2018-elem-mrc-MD_CoverageDescription-20da3d15d7d2d5b9fe25c271bf685b2f} + +Name + +: + +> mrc:MD_CoverageDescription + +Description + +: + +```{=html} +Information about the content of a grid data cell +``` +### Feature catalogue {#iso19115-3.2018-elem-mrc-MD_FeatureCatalogue-bbbf11cbc612ed2caa46922976d76c6e} + +Name + +: + +> mrc:MD_FeatureCatalogue + +Description + +: + +```{=html} +A catalogue of feature types +``` +### Feature catalogue description {#iso19115-3.2018-elem-mrc-MD_FeatureCatalogueDescription-25544385dc037d9d72c849835f4600d9} + +Name + +: + +> mrc:MD_FeatureCatalogueDescription + +Description + +: + +```{=html} +Information identifying the feature catalogue or the conceptual + schema +``` +### Feature type info {#iso19115-3.2018-elem-mrc-MD_FeatureTypeInfo-62a86318a6a5fa1493616ea4e0703f1b} + +Name + +: + +> mrc:MD_FeatureTypeInfo + +Description + +: + +```{=html} +Information about the occurring feature type +``` +### Image description {#iso19115-3.2018-elem-mrc-MD_ImageDescription-593f7c8841d10f6d890cb7c653b68304} + +Name + +: + +> mrc:MD_ImageDescription + +Description + +: + +```{=html} +Information about an image's suitability for use +``` +### Range dimension {#iso19115-3.2018-elem-mrc-MD_RangeDimension-5d6ee7c06f95d6a0873f9d3e73f9f806} + +Name + +: + +> mrc:MD_RangeDimension + +Description + +: + +```{=html} +Information on the range of each dimension of a cell + measurement + value +``` +### Sample dimension {#iso19115-3.2018-elem-mrc-MD_SampleDimension-d144bfef885aeb0a9646d264f6bac3a4} + +Name + +: + +> mrc:MD_SampleDimension + +Description + +: + +```{=html} +Class of information about characteristics of each + dimension (layer) included in the resource +``` +### Mean value {#iso19115-3.2018-elem-mrc-meanValue-dca986b28aac66bb498a06cc8bd63de2} + +Name + +: + +> mrc:meanValue + +Description + +: + +```{=html} +Mean value of data values in each dimension included + in the resource +``` + +Condition + +: + +> optional + +### Coverage description (with range elements) {#iso19115-3.2018-elem-mrc-MI_CoverageDescription-f1c665c83cb4c58187c8267e58693137} + +Name + +: + +> mrc:MI_CoverageDescription + +Description + +: + +```{=html} +information about the content of a coverage, including the description of specific range elements +``` +### Range element description {#iso19115-3.2018-elem-mrc-MI_RangeElementDescription-3ea08f39e0b95158ed36f0a1d95f32b2} + +Name + +: + +> mrc:MI_RangeElementDescription + +Description + +: + +```{=html} +eg. storage_meth +``` +### Minimum value {#iso19115-3.2018-elem-mrc-minValue-6c115fdd9335853f2ed4d501c55d0cd3} + +Name + +: + +> mrc:minValue + +Description + +: + +```{=html} +Shortest wavelength that the sensor is capable of collecting + within a + designated band +``` +### Name {#iso19115-3.2018-elem-mrc-name-b10ecd5c969f4405e4432a10ce4c987a} + +Name + +: + +> mrc:name + +Description + +: + +```{=html} +Identifiers for each attribute included in the resource. NOTE + These identifiers can be used to provide names for the attribute from a + standard set of names. +``` +### Number of values {#iso19115-3.2018-elem-mrc-numberOfValues-7523788807eb16fb4c28f3cc87695fea} + +Name + +: + +> mrc:numberOfValues + +Description + +: + +```{=html} +The number of values used in a + thematic-Classification resource. Example The number of classes in a Land + Cover Type coverage or the number of cells with data in other types of + coverages. +``` + +Condition + +: + +> optional + +### Offset {#iso19115-3.2018-elem-mrc-offset-cbfe08793cf284c302b1a3ff5279fd2b} + +Name + +: + +> mrc:offset + +Description + +: + +```{=html} +The physical value corresponding to a cell value of zero +``` +### Other property {#iso19115-3.2018-elem-mrc-otherProperty-2b07e124713e224f44f3f16c558d07a4} + +Name + +: + +> mrc:otherProperty + +Description + +: + +```{=html} +Instance of otherAttributeType that defines + attributes not explicitly included in MD_CoverageType +``` + +Condition + +: + +> optional + +### Other property type {#iso19115-3.2018-elem-mrc-otherPropertyType-3c86efa51e730535417cf07c9d0e46b7} + +Name + +: + +> mrc:otherPropertyType + +Description + +: + +```{=html} +Type of other attribute description (i.e. + netcdf/variable in ncml.xsd) +``` + +Condition + +: + +> optional + +### Peak response {#iso19115-3.2018-elem-mrc-peakResponse-3de9d3d87866575d11d2843ecfaf3f14} + +Name + +: + +> mrc:peakResponse + +Description + +: + +```{=html} +Wavelength at which the response is the highest +``` +### Processing level code {#iso19115-3.2018-elem-mrc-processingLevelCode-6b9cbec9c2e7653417fe4085fa2f518e} + +Name + +: + +> mrc:processingLevelCode + +Description + +: + +```{=html} +Image distributor_s code that identifies the level of + radiometric and geometric + processing that has been applied +``` +### Radiometric calibration data availability {#iso19115-3.2018-elem-mrc-radiometricCalibrationDataAvailability-cd03f7e1aa8805ed7f2629c4d71f9ab0} + +Name + +: + +> mrc:radiometricCalibrationDataAvailability + +Description + +: + +```{=html} +Indication of whether or not the radiometric calibration + information for + generating the radiometrically calibrated standard data product is + available +``` +### Range element {#iso19115-3.2018-elem-mrc-rangeElement-c2ca16217781d20936083b76e758a5b6} + +Name + +: + +> mrc:rangeElement + +Description + +: + +```{=html} +Specific range elements, i.e. range elements associated with a name and their definition. eg. "frozen: Samples are kept frozen.", "room temperature, dry: Samples are kept at room temperature, unsealed." +``` +### Range element description {#iso19115-3.2018-elem-mrc-rangeElementDescription-0d1cc78e663f1eccce73c39c905e8606} + +Name + +: + +> mrc:rangeElementDescription + +Description + +: + +### Scale factor {#iso19115-3.2018-elem-mrc-scaleFactor-d0c127708af77d60471931d015e154da} + +Name + +: + +> mrc:scaleFactor + +Description + +: + +```{=html} +Scale factor which has been applied to the cell value +``` +### Sequence identifier {#iso19115-3.2018-elem-mrc-sequenceIdentifier-9985f58f70c92c442461a95ff7a2387e} + +Name + +: + +> mrc:sequenceIdentifier + +Description + +: + +```{=html} +Number that uniquely identifies instances of bands of + wavelengths on which a + sensor operates +``` +### Standard deviation {#iso19115-3.2018-elem-mrc-standardDeviation-46d51bf39f4256ce781ba724ce7a4678} + +Name + +: + +> mrc:standardDeviation + +Description + +: + +```{=html} +Standard deviation of data values in each dimension + included in the resource +``` + +Condition + +: + +> optional + +### Tone gradation {#iso19115-3.2018-elem-mrc-toneGradation-00522b18a25c437874134ff1507233ee} + +Name + +: + +> mrc:toneGradation + +Description + +: + +```{=html} +Number of discrete numerical values in the grid data +``` +### Triangulation indicator {#iso19115-3.2018-elem-mrc-triangulationIndicator-766a13c1a0f5c40aeeea98ea964584ac} + +Name + +: + +> mrc:triangulationIndicator + +Description + +: + +```{=html} +Indication of whether or not triangulation has been performed + upon the + image +``` +### Value unit {#iso19115-3.2018-elem-mrc-units-beb1f3c6a128f74d575f87e6e7ea46b4} + +Name + +: + +> mrc:units + +Description + +: + +```{=html} +Units in which sensor wavelengths are expressed +``` +### Amendment number {#iso19115-3.2018-elem-mrd-amendmentNumber-6f1c8cb20613ad2e309e5bb98c2cbdc6} + +Name + +: + +> mrd:amendmentNumber + +Description + +: + +```{=html} +Amendment number of the format version +``` +### Density {#iso19115-3.2018-elem-mrd-density-1dd26b1967b18ff25f8427f5ded195b0} + +Name + +: + +> mrd:density + +Description + +: + +```{=html} +Density at which the data is recorded +``` +### Density units {#iso19115-3.2018-elem-mrd-densityUnits-e82aa4195b9434d3a68263bcffdba896} + +Name + +: + +> mrd:densityUnits + +Description + +: + +```{=html} +Units of measure for the recording density +``` + +Condition + +: + +> conditional + +### Description {#iso19115-3.2018-elem-mrd-description-mrd-MD_Distribution-4776d7962b0a05ccef02ea6322033b31} + +Name + +: + +> mrd:description + +Context + +: + +> mrd:MD_Distribution + +Description + +: + +```{=html} +Brief description of a set of distribution options +``` + +Condition + +: + +> optional + +### Distribution format {#iso19115-3.2018-elem-mrd-distributionFormat-ab2a7aa7307b337b55fd0813ee4164be} + +Name + +: + +> mrd:distributionFormat + +Description + +: + +```{=html} +Provides a description of the format of the data to be + distributed +``` + +Condition + +: + +> mandatory + +``` xml + + + + + + ESRI Shapefile + + + + 1.0 + + + + + +``` + +### Distribution / Order Process {#iso19115-3.2018-elem-mrd-distributionOrderProcess-9d9c84da23cda2ebdfd2df84ed8c8238} + +Name + +: + +> mrd:distributionOrderProcess + +Description + +: + +```{=html} +Provides information about how the resource may be obtained, + and related + instructions and fee information +``` +### Distributor {#iso19115-3.2018-elem-mrd-distributor-ded9d0279d2a2b1d04058bcfe0cdadd3} + +Name + +: + +> mrd:distributor + +Description + +: + +```{=html} +Provides information about the distributor +``` +### Distributor contact {#iso19115-3.2018-elem-mrd-distributorContact-c291667f416ad3edb6e9ba3c7ce6e6d2} + +Name + +: + +> mrd:distributorContact + +Description + +: + +```{=html} +Party from whom the resource may be obtained. This list need + not be + exhaustive +``` + +Condition + +: + +> mandatory + +### Distributor format {#iso19115-3.2018-elem-mrd-distributorFormat-385b3a3cdc414ef818b29eead21ed7e6} + +Name + +: + +> mrd:distributorFormat + +Description + +: + +```{=html} +Provides information about the format used by the distributor +``` + +Condition + +: + +> conditional + +### Distributor transfer options {#iso19115-3.2018-elem-mrd-distributorTransferOptions-fed28aa32a0ff7ee645473414c10fd93} + +Name + +: + +> mrd:distributorTransferOptions + +Description + +: + +```{=html} +Provides information about the technical means and media used + by the + distributor +``` +### Fees {#iso19115-3.2018-elem-mrd-fees-a89d56e0d6fad26e33792138077cf724} + +Name + +: + +> mrd:fees + +Description + +: + +```{=html} +Fees and terms for retrieving the resource. Include monetary + units (as + specified in ISO 4217) +``` +### File decompression technique {#iso19115-3.2018-elem-mrd-fileDecompressionTechnique-79a96bbb2fc4a7cfacb6cb50f79ac39a} + +Name + +: + +> mrd:fileDecompressionTechnique + +Description + +: + +```{=html} +Recommendations of algorithms or processes that can be applied + to read or + expand resources to which compression techniques have been applied +``` +### Format distributor {#iso19115-3.2018-elem-mrd-formatDistributor-76fa4371c29fb34aeaa312f75b331eb0} + +Name + +: + +> mrd:formatDistributor + +Description + +: + +```{=html} +Provides information about the distributor’s format +``` +### Format specification citation {#iso19115-3.2018-elem-mrd-formatSpecificationCitation-8857c3b7bb4601e89bcc1459881dce96} + +Name + +: + +> mrd:formatSpecificationCitation + +Description + +: + +```{=html} +citation/URL of the specification for the format +``` + +Condition + +: + +> mandatory + +``` xml + + + + ESRI Shapefile + + + + 1.0 + + + +``` + +### Identifier {#iso19115-3.2018-elem-mrd-identifier-mrd-MD_Medium-b4ad5d7dfbc8331c8b46a58b5e2074f4} + +Name + +: + +> mrd:identifier + +Context + +: + +> mrd:MD_Medium + +Description + +: + +```{=html} +Unique identifier for an instance of the MD_Medium +``` + +Condition + +: + +> optional + +### Digital transfer options {#iso19115-3.2018-elem-mrd-MD_DigitalTransferOptions-c26594fe5b1a54f2778851719f742143} + +Name + +: + +> mrd:MD_DigitalTransferOptions + +Description + +: + +```{=html} +Technical means and media by which a resource is obtained from + the + distributor +``` +``` xml + + + + + https://geoservices.wallonie.be/inspire/atom/PS_Service.xml + + + atom:feed + + + Service de téléchargement ATOM Feed - Inspire + + + Ce service de téléchargement ATOM Feed permet de télécharger la série de couches de + données conforme au thème INSPIRE "Sites protégés". Cliquez sur le lien correspondant aux couches de + données Natura 2000 pour télécharger les informations relatives à ce mécanisme de désignation. + + + + + + + +``` + +### Distribution {#iso19115-3.2018-elem-mrd-MD_Distribution-0aca2560647689db7ebf415baf443815} + +Name + +: + +> mrd:MD_Distribution + +Description + +: + +```{=html} +Information about the distributor of and options for obtaining + the + resource +``` +``` xml + + + + + + + ESRI Shapefile + + + + 1.0 + + + + + + + + + + + https://geoservices.wallonie.be/inspire/atom/PS_Service.xml + + + atom:feed + + + Service de téléchargement ATOM Feed - Inspire + + + Ce service de téléchargement ATOM Feed permet de télécharger la série de couches de + données conforme au thème INSPIRE "Sites protégés". Cliquez sur le lien correspondant aux couches de + données Natura 2000 pour télécharger les informations relatives à ce mécanisme de désignation. + + + + + + + + + +``` + +### Distributor {#iso19115-3.2018-elem-mrd-MD_Distributor-d38062afe33f6acc7dd0874610344056} + +Name + +: + +> mrd:MD_Distributor + +Description + +: + +```{=html} +Information about the distributor +``` +### Format {#iso19115-3.2018-elem-mrd-MD_Format-cf79bdb2251ece19f8f9a2efa0080e17} + +Name + +: + +> mrd:MD_Format + +Description + +: + +```{=html} +Description of the computer language construct that specifies + the + representation of data objects in a record, file, message, storage device + or + transmission channel +``` +``` xml + + + + + ESRI Shapefile + + + + 1.0 + + + + +``` + +### Medium {#iso19115-3.2018-elem-mrd-MD_Medium-47c4ae7fb9c00a03bc19f6684356ccd3} + +Name + +: + +> mrd:MD_Medium + +Description + +: + +```{=html} +Information about the media on which the resource can be + distributed +``` +### Standard order process {#iso19115-3.2018-elem-mrd-MD_StandardOrderProcess-bbf8a6d49b7ccfe336ae772581224a5c} + +Name + +: + +> mrd:MD_StandardOrderProcess + +Description + +: + +```{=html} +Common ways in which the resource may be obtained or received, + and related + instructions and fee information +``` +### Medium {#iso19115-3.2018-elem-mrd-medium-2da5ffeab982f345f690536effef17c3} + +Name + +: + +> mrd:medium + +Description + +: + +```{=html} +Medium used by the format +``` +### Medium format {#iso19115-3.2018-elem-mrd-mediumFormat-ead4f2e742d591857767ef2599762f33} + +Name + +: + +> mrd:mediumFormat + +Description + +: + +```{=html} +Method used to write to the medium +``` +### Medium note {#iso19115-3.2018-elem-mrd-mediumNote-18fe569d2e175e458cdba96d642973ed} + +Name + +: + +> mrd:mediumNote + +Description + +: + +```{=html} +Description of other limitations or requirements for using the + medium +``` +### Name {#iso19115-3.2018-elem-mrd-name-mrd-MD_Medium-6b32246dbc4ce932f20d5faa5622c8cb} + +Name + +: + +> mrd:name + +Context + +: + +> mrd:MD_Medium + +Description + +: + +```{=html} +Name of the medium on which the resource can be received +``` + +Condition + +: + +> optional + +### Offline {#iso19115-3.2018-elem-mrd-offLine-48c66fab18ef14981a5e4fae104c6f97} + +Name + +: + +> mrd:offLine + +Description + +: + +```{=html} +Information about offline media on which the resource can be + obtained +``` +### OnLine resource {#iso19115-3.2018-elem-mrd-onLine-b258f26a552d7bdb353a9ed8602955f9} + +Name + +: + +> mrd:onLine + +Description + +: + +```{=html} +Information about online sources from which the resource can be + obtained +``` +``` xml + + + + https://geoservices.wallonie.be/inspire/atom/PS_Service.xml + + + atom:feed + + + Service de téléchargement ATOM Feed - Inspire + + + Ce service de téléchargement ATOM Feed permet de télécharger la série de couches de + données conforme au thème INSPIRE "Sites protégés". Cliquez sur le lien correspondant aux couches de + données Natura 2000 pour télécharger les informations relatives à ce mécanisme de désignation. + + + + + + +``` + +### Ordering instructions {#iso19115-3.2018-elem-mrd-orderingInstructions-697dea5f51a3bc14b9261c199646b2e5} + +Name + +: + +> mrd:orderingInstructions + +Description + +: + +```{=html} +General instructions, terms and services provided by the + distributor +``` +### Request/Purchase choices {#iso19115-3.2018-elem-mrd-orderOptions-77c57136b3bbf368b7ce40dc320e0f10} + +Name + +: + +> mrd:orderOptions + +Description + +: + +### Order options type {#iso19115-3.2018-elem-mrd-orderOptionsType-3fa15edfa3acc92ebf7095a49192991f} + +Name + +: + +> mrd:orderOptionsType + +Description + +: + +```{=html} +Description of the order options record +``` +### Planned available datetime {#iso19115-3.2018-elem-mrd-plannedAvailableDateTime-58431a14cc32a4038ddbce9871023820} + +Name + +: + +> mrd:plannedAvailableDateTime + +Description + +: + +```{=html} +Date and time when the dataset will be available + (CCYY-MM-DDThh:mm:ss) +``` +### Transfer frequency {#iso19115-3.2018-elem-mrd-transferFrequency-734c97eb43b31196d37e306d4a55c64f} + +Name + +: + +> mrd:transferFrequency + +Description + +: + +```{=html} +Rate of occurrence of distribution +``` +### Transfer options {#iso19115-3.2018-elem-mrd-transferOptions-406dce14c80f3ab2bab25cbcb045148b} + +Name + +: + +> mrd:transferOptions + +Description + +: + +```{=html} +Provides information about technical means and media by which a + resource is + obtained from the distributor +``` +``` xml + + + + + + https://geoservices.wallonie.be/inspire/atom/PS_Service.xml + + + atom:feed + + + Service de téléchargement ATOM Feed - Inspire + + + Ce service de téléchargement ATOM Feed permet de télécharger la série de couches de + données conforme au thème INSPIRE "Sites protégés". Cliquez sur le lien correspondant aux couches de + données Natura 2000 pour télécharger les informations relatives à ce mécanisme de désignation. + + + + + + + + +``` + +### Transfer size {#iso19115-3.2018-elem-mrd-transferSize-18c1e66604b41b220a25872a4e4392b3} + +Name + +: + +> mrd:transferSize + +Description + +: + +```{=html} +Estimated size of a unit in the specified transfer format, + expressed in + megabytes. The transfer size is > 0.0 +``` +### Turnaround {#iso19115-3.2018-elem-mrd-turnaround-428b1bfcefbc1a5350d5e910d0a49941} + +Name + +: + +> mrd:turnaround + +Description + +: + +```{=html} +Typical turnaround time for the filling of an order +``` +### Units of distribution {#iso19115-3.2018-elem-mrd-unitsOfDistribution-bfd51096d182fdfed936fe30f646b048} + +Name + +: + +> mrd:unitsOfDistribution + +Description + +: + +```{=html} +Tiles, layers, geographic areas, etc., in which data is + available +``` +### Volumes {#iso19115-3.2018-elem-mrd-volumes-8fbc4cdb71c04f0d9d7a81fd69811a6f} + +Name + +: + +> mrd:volumes + +Description + +: + +```{=html} +Number of items in the media identified +``` +### Abstract {#iso19115-3.2018-elem-mri-abstract-b1bed9a6d2c9c70eb6b29dc5f23b5b99} + +Name + +: + +> mri:abstract + +Description + +: + +```{=html} +Brief narrative summary of the content of the resource(s) +``` + +Condition + +: + +> mandatory + +``` xml + + Description du jeu de données + +``` + +### Additional documentation {#iso19115-3.2018-elem-mri-additionalDocumentation-085f02b75f646444bac3a4e64e1902ab} + +Name + +: + +> mri:additionalDocumentation + +Description + +: + +```{=html} +Publications that describe usage of data +``` +### Address {#iso19115-3.2018-elem-mri-address-mri-CI_ResponsibleParty-cdfa0ffe58b9f168d74204ba97e5c255} + +Name + +: + +> mri:address + +Context + +: + +> mri:CI_ResponsibleParty + +Description + +: + +```{=html} +Address of the responsible party +``` +### Aggregate Datasetindentifier {#iso19115-3.2018-elem-mri-aggregateDataSetIdentifier-80a8130a9c7c9d5c351a30f6d3b19922} + +Name + +: + +> mri:aggregateDataSetIdentifier + +Description + +: + +```{=html} +Identification information about aggregate dataset +``` +### Aggregate Datasetname {#iso19115-3.2018-elem-mri-aggregateDataSetName-008e770be965e057181c9ba67f7744aa} + +Name + +: + +> mri:aggregateDataSetName + +Description + +: + +```{=html} +Citation information about the aggregate dataset +``` +### Aggregation Information {#iso19115-3.2018-elem-mri-aggregationInfo-05a21c978da37347b2374194e023b8c3} + +Name + +: + +> mri:aggregationInfo + +Description + +: + +```{=html} +Provides aggregate dataset information +``` +### Angular sampling measure {#iso19115-3.2018-elem-mri-angularDistance-ca774f3cfa2db619366fd4746b5feb0b} + +Name + +: + +> mri:angularDistance + +Description + +: + +```{=html} +Angular sampling measure +``` +### Associated resource {#iso19115-3.2018-elem-mri-associatedResource-4687e155ff36c1fced9bb0a5a55a34fa} + +Name + +: + +> mri:associatedResource + +Description + +: + +```{=html} +Associated resource information +``` +### Association Type {#iso19115-3.2018-elem-mri-associationType-50002af61552cfafa00e8158d1e86dd4} + +Name + +: + +> mri:associationType + +Description + +: + +```{=html} +Association type of the aggregate dataset +``` + +Condition + +: + +> mandatory + +### Axis Dimensions Properties {#iso19115-3.2018-elem-mri-axisDimensionProperties-843437604cfe1e16ceda396764927b8c} + +Name + +: + +> mri:axisDimensionProperties + +Description + +: + +```{=html} +Information about spatial-temporal axis properties +``` +### Cell geometry {#iso19115-3.2018-elem-mri-cellGeometry-f970f9e6a0c45f74441de613b704305e} + +Name + +: + +> mri:cellGeometry + +Description + +: + +```{=html} +Identification of grid data as point or cell +``` + +Condition + +: + +> mandatory + +### Center point {#iso19115-3.2018-elem-mri-centerPoint-cb30d24a90d23a1948cd9db74bfe6149} + +Name + +: + +> mri:centerPoint + +Description + +: + +```{=html} +Earth location in the coordinate system defined by the Spatial + Reference System + and the grid coordinate of the cell halfway between opposite ends of the + grid in the + spatial dimensions +``` +### Character set {#iso19115-3.2018-elem-mri-characterSet-mri-MD_Metadata-fbb8af54487af62f6d4dd9bbcbd5e4ab} + +Name + +: + +> mri:characterSet + +Context + +: + +> mri:MD_Metadata + +Description + +: + +```{=html} +Full name of the character coding standard used for the + metadata + set +``` + +Condition + +: + +> conditional + +### Character set {#iso19115-3.2018-elem-mri-characterSet-mri-MD_DataIdentification-670c14eea2290ec02febe561bb9dc317} + +Name + +: + +> mri:characterSet + +Context + +: + +> mri:MD_DataIdentification + +Description + +: + +```{=html} +Full name of the character coding standard used for the + dataset +``` +### Character set {#iso19115-3.2018-elem-mri-characterSet-e5dcdb278033ab3d5b29b1d3adffbeeb} + +Name + +: + +> mri:characterSet + +Description + +: + +```{=html} +Full name of the character coding standard used for the + metadata + set +``` + +Condition + +: + +> conditional + +### Checkpoint Availability {#iso19115-3.2018-elem-mri-checkPointAvailability-0d6de599f9bd32d29175051a4ae24928} + +Name + +: + +> mri:checkPointAvailability + +Description + +: + +```{=html} +Indication of whether or not geographic position points are + available to test + the accuracy of the georeferenced grid data +``` + +Condition + +: + +> mandatory + +### Checkpoint Description {#iso19115-3.2018-elem-mri-checkPointDescription-555aba53a5c04b8cb05befe68bcf8524} + +Name + +: + +> mri:checkPointDescription + +Description + +: + +```{=html} +Description of geographic position points used to test the + accuracy of the + georeferenced grid data +``` + +Condition + +: + +> conditional + +### Responsible party {#iso19115-3.2018-elem-mri-CI_ResponsibleParty-dc40d258bd15a7fb52433fbb269d409e} + +Name + +: + +> mri:CI_ResponsibleParty + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) + and organizations + associated with the dataset +``` +### Role code {#iso19115-3.2018-elem-mri-CI_RoleCode-831e2b39ab9b602c6becdbf79b4f0443} + +Name + +: + +> mri:CI_RoleCode + +Description + +: + +### Series {#iso19115-3.2018-elem-mri-CI_Series-6a7b9c3a3ef0733a8f9b4180070cef1f} + +Name + +: + +> mri:CI_Series + +Description + +: + +```{=html} +Information about the series, or aggregate dataset, to which a + dataset + belongs +``` +### Citation {#iso19115-3.2018-elem-mri-citation-mri-MD_Identification-a2fcf35af33b9a01b7c462115da464dd} + +Name + +: + +> mri:citation + +Context + +: + +> mri:MD_Identification + +Description + +: + +```{=html} +Citation data for the resource(s) +``` +``` xml + + + + INSPIRE - TG2 - Template + + + + + 2019-10-01 + + + + + + + + + + 48c6f2bb-4828-46eb-a2cc-d5bcb94340dc + + + https://registry.organisation.fr/datasets + + + + + +``` + +### Citation {#iso19115-3.2018-elem-mri-citation-mri-MD_Authority-eaa69cd35eb9afb1096bad7358353672} + +Name + +: + +> mri:citation + +Context + +: + +> mri:MD_Authority + +Description + +: + +```{=html} +Citation which belongs to the authority +``` +``` xml + + + + INSPIRE - TG2 - Template + + + + + 2019-10-01 + + + + + + + + + + 48c6f2bb-4828-46eb-a2cc-d5bcb94340dc + + + https://registry.organisation.fr/datasets + + + + + +``` + +### Citation {#iso19115-3.2018-elem-mri-citation-mri-MD_Thesaurus-b6bb9eeb1a510d12d52677ed2bc11d8f} + +Name + +: + +> mri:citation + +Context + +: + +> mri:MD_Thesaurus + +Description + +: + +```{=html} +Citation of the thesaurus +``` +``` xml + + + + INSPIRE - TG2 - Template + + + + + 2019-10-01 + + + + + + + + + + 48c6f2bb-4828-46eb-a2cc-d5bcb94340dc + + + https://registry.organisation.fr/datasets + + + + + +``` + +### Citation {#iso19115-3.2018-elem-mri-citation-c0c64fab562a266e6c2ed433b3aa4648} + +Name + +: + +> mri:citation + +Description + +: + +```{=html} +Citation data for the resource(s) +``` +``` xml + + + + INSPIRE - TG2 - Template + + + + + 2019-10-01 + + + + + + + + + + 48c6f2bb-4828-46eb-a2cc-d5bcb94340dc + + + https://registry.organisation.fr/datasets + + + + + +``` + +### Class name {#iso19115-3.2018-elem-mri-className-04b5dd0e3097cde916ca0c5a4cfa35e1} + +Name + +: + +> mri:className + +Description + +: + +```{=html} +Character string to label the keyword category in natural + language +``` +### Unique resource identifier {#iso19115-3.2018-elem-mri-code-mri-RS_Identifier-c455cad07e7765deb05b6635b4fd9690} + +Name + +: + +> mri:code + +Context + +: + +> mri:RS_Identifier + +Description + +: + +```{=html} +Alphanumeric value identifying an instance in the namespace +``` + +Condition + +: + +> mandatory + +### Code {#iso19115-3.2018-elem-mri-code-mri-MD_CodeValue-28d6cd273cf6fbf5bb1aacf1d1a4baa9} + +Name + +: + +> mri:code + +Context + +: + +> mri:MD_CodeValue + +Description + +: + +```{=html} +Value code +``` +```{=html} +Value code (i.e. numeric) +``` +### Collective title {#iso19115-3.2018-elem-mri-collectiveTitle-f256578a9a2233009afc61772d6a7f33} + +Name + +: + +> mri:collectiveTitle + +Description + +: + +```{=html} +Common title with holdings note. NOTE title identifies elements + of a series + collectively, combined with information about what volumes are available + at the source + cited +``` +```{=html} +This field is used to name the Basic Geodata as defined in the GeoIV + Annex I, as it is possible that there are more than 1 "physical" datasets + assigned to 1 legal entry. E.g.: Entry no. 47 "Geophysikalisches + Kartenwerk" consists of 3 datasets "Geophysikalische Karten 1:500000", + "Geophysikalische Spezialkarten" and "Gravimetrischer Atlas 1:100000" +``` +### ComposedOf {#iso19115-3.2018-elem-mri-composedOf-f92227eb3a814aba43b51e3d34cd42e5} + +Name + +: + +> mri:composedOf + +Description + +: + +```{=html} +ComposedOf +``` +### Compression generation quantity {#iso19115-3.2018-elem-mri-compressionGenerationQuantity-d160638acebb019ed7a920807bdbf1ab} + +Name + +: + +> mri:compressionGenerationQuantity + +Description + +: + +```{=html} +Count of the number of lossy compression cycles + performed on the + image +``` +### Concept Identifier {#iso19115-3.2018-elem-mri-conceptIdentifier-b98afc41c1dfd685b2c144a974df26f9} + +Name + +: + +> mri:conceptIdentifier + +Description + +: + +```{=html} +URI of concept in the ontology specified by the next + element (ontology) and labelled by the previous element (className) +``` +### Condition {#iso19115-3.2018-elem-mri-condition-d09f5c29e8fc98d775e2441859741fcd} + +Name + +: + +> mri:condition + +Description + +: + +```{=html} +Condition under which the extended element is mandatory +``` +### Metadata author {#iso19115-3.2018-elem-mri-contact-bacc2742e5169472e4f906ecdbe619aa} + +Name + +: + +> mri:contact + +Description + +: + +```{=html} +Party responsible for the metadata information +``` + +Condition + +: + +> mandatory + +### Controlpoint Availability {#iso19115-3.2018-elem-mri-controlPointAvailability-c8b4921fc9ebea36af87be3c0bf06a4b} + +Name + +: + +> mri:controlPointAvailability + +Description + +: + +```{=html} +Indication of whether or not control point(s) exists +``` + +Condition + +: + +> mandatory + +### Corner points {#iso19115-3.2018-elem-mri-cornerPoints-32f0d2d110abed4a81576c25d2428903} + +Name + +: + +> mri:cornerPoints + +Description + +: + +```{=html} +Earth location in the coordinate system defined by the Spatial + Reference System + and the grid coordinate of the cells at opposite ends of grid coverage + along two + diagonals in the grid spatial dimensions. There are four corner points in + a georectified + grid; at least two corner points along one diagonal are required +``` + +Condition + +: + +> mandatory + +### Country {#iso19115-3.2018-elem-mri-country-mri-MD_Legislation-3b41c7104c5243085e9a8075d454b1a6} + +Name + +: + +> mri:country + +Context + +: + +> mri:MD_Legislation + +Description + +: + +```{=html} +Country in which the law was issued +``` +### Country {#iso19115-3.2018-elem-mri-country-PT_Group-5cc39a3f362fc6adbbb8ca2cc466b38b} + +Name + +: + +> mri:country + +Context + +: + +> PT_Group + +Description + +: + +```{=html} +Country of language used for documenting a plain text +``` +### Credit {#iso19115-3.2018-elem-mri-credit-f6c38ebd90277f0c08097e3db4cd7334} + +Name + +: + +> mri:credit + +Description + +: + +```{=html} +Recognition of those who contributed to the resource(s) +``` +### Dataset URI {#iso19115-3.2018-elem-mri-dataSetURI-3094b958d87ee68d3f1eb876b6645c15} + +Name + +: + +> mri:dataSetURI + +Description + +: + +```{=html} +Uniformed Resource Identifier (URI) of the dataset to which the + metadata + applies +``` +```{=html} +Uniformed Resource Identifier (URI) of the dataset to which the + metadata applies. This + link refers direct to the machine-readable dataset. +``` +### Data type {#iso19115-3.2018-elem-mri-dataType-04da587951dce6d554e42c1695bdd525} + +Name + +: + +> mri:dataType + +Description + +: + +```{=html} +Code which identifies the kind of valueprovidedeprovided in the + extended + element +``` + +Condition + +: + +> mandatory + +### Date {#iso19115-3.2018-elem-mri-date-6a55cc1dfd056e73aa1b4c012ce4574f} + +Name + +: + +> mri:date + +Description + +: + +```{=html} +Reference date for the cited resource (YYYY-MM-DD) +``` + +Condition + +: + +> mandatory + +### Date of last update {#iso19115-3.2018-elem-mri-date-mri-MD_Revision-729c81a65123dc90b3a9e9e306ac0694} + +Name + +: + +> mri:date + +Context + +: + +> mri:MD_Revision + +Description + +: + +```{=html} +Date of last update +``` +### Date of next update {#iso19115-3.2018-elem-mri-date-mri-MD_MaintenanceInformation-30e9e24621af992aa138556c1736c8a1} + +Name + +: + +> mri:date + +Context + +: + +> mri:MD_MaintenanceInformation + +Description + +: + +```{=html} +Scheduled revision date for resource +``` +### Date of next update {#iso19115-3.2018-elem-mri-dateOfNextUpdate-22828f5e6b6f62144cf28bca8e708bb0} + +Name + +: + +> mri:dateOfNextUpdate + +Description + +: + +```{=html} +Scheduled revision date for resource (YYYY-MM-DD) +``` +### Date stamp {#iso19115-3.2018-elem-mri-dateStamp-daf76a0c4f3ff93e20644dd6ab31181c} + +Name + +: + +> mri:dateStamp + +Description + +: + +```{=html} +Date that the metadata was created (YYYY-MM-DDThh:mm:ss) +``` + +Condition + +: + +> mandatory + +### Date / Time {#iso19115-3.2018-elem-mri-dateTime-d2271d115f2a482a92c2e1a1dd3459eb} + +Name + +: + +> mri:dateTime + +Description + +: + +```{=html} +Date and time or range of date and time on or over which the + process step + occurred (YYYY-MM-DDThh:mm:ss) +``` +### Date / Time {#iso19115-3.2018-elem-mri-dateTime-LI_ProcessStep-3ad03f294b10052ffc357100eaa260ae} + +Name + +: + +> mri:dateTime + +Context + +: + +> LI_ProcessStep + +Description + +: + +```{=html} +Date and time or range of date and time on or over which the + process step + occurred (YYYY-MM-DDThh:mm:ss) +``` +### Date / Time {#iso19115-3.2018-elem-mri-dateTime-mri-DQ_Element-ff109aefe881cf309cad57b5773e87a8} + +Name + +: + +> mri:dateTime + +Context + +: + +> mri:DQ_Element + +Description + +: + +```{=html} +Date or range of dates on which a data quality measure was + applied +``` +### Default locale {#iso19115-3.2018-elem-mri-defaultLocale-354b26c7ab4ca62c4ea66a28a2d85ba7} + +Name + +: + +> mri:defaultLocale + +Description + +: + +```{=html} +Language and character set used within the + resource +``` +``` xml + + + + + + + + + + +``` + +### Definition {#iso19115-3.2018-elem-mri-definition-bf5edfffdd3034ef755376dafcfb4726} + +Name + +: + +> mri:definition + +Description + +: + +```{=html} +Definition of the extended element +``` + +Condition + +: + +> mandatory + +### Denominator {#iso19115-3.2018-elem-mri-denominator-edd990de0c40bd27204fea0f87cb2c83} + +Name + +: + +> mri:denominator + +Description + +: + +```{=html} +The number below the line in a vulgar fraction +``` + +Condition + +: + +> add either a denominator or a distance + +Recommended values + +| code | label | +|---------|-------------| +| 5000 | 1:5´000 | +| 10000 | 1:10´000 | +| 25000 | 1:25´000 | +| 50000 | 1:50´000 | +| 100000 | 1:100´000 | +| 200000 | 1:200´000 | +| 300000 | 1:300´000 | +| 500000 | 1:500´000 | +| 1000000 | 1:1´000´000 | + +``` xml + + 25000 + +``` + +### Describes {#iso19115-3.2018-elem-mri-describes-47ece431d0767368e0126222741e51e3} + +Name + +: + +> mri:describes + +Description + +: + +```{=html} +Describes +``` +### Description {#iso19115-3.2018-elem-mri-description-dae99f8d3d2cea097c94167ab45d1141} + +Name + +: + +> mri:description + +Description + +: + +```{=html} +Description of the event, including related parameters or + tolerances +``` +### Description {#iso19115-3.2018-elem-mri-description-mri-MD_AbstractClass-4257d154e3ae528bdad656f043f167b3} + +Name + +: + +> mri:description + +Context + +: + +> mri:MD_AbstractClass + +Description + +: + +```{=html} +Description +``` +### Description {#iso19115-3.2018-elem-mri-description-LI_ProcessStep-3e394cb8d22507d6341ba875fff94ad5} + +Name + +: + +> mri:description + +Context + +: + +> LI_ProcessStep + +Description + +: + +```{=html} +Description of the event, including related parameters or + tolerances +``` + +Condition + +: + +> mandatory + +### Description {#iso19115-3.2018-elem-mri-description-mri-MD_CodeDomain-a073652c24dc830d64f1a571e5a5d398} + +Name + +: + +> mri:description + +Context + +: + +> mri:MD_CodeDomain + +Description + +: + +```{=html} +Description of the code domain +``` +### Value description {#iso19115-3.2018-elem-mri-description-mri-MD_CodeValue-c4f9744373b4f7ee492f3e74deec4e90} + +Name + +: + +> mri:description + +Context + +: + +> mri:MD_CodeValue + +Description + +: + +```{=html} +Description of the value +``` +### Description {#iso19115-3.2018-elem-mri-description-mri-MD_Attribute-0cf58a01b569955380601f5c96a58d6f} + +Name + +: + +> mri:description + +Context + +: + +> mri:MD_Attribute + +Description + +: + +```{=html} +Attribute description +``` +### Description {#iso19115-3.2018-elem-mri-description-mri-MD_Role-0424c25c947e4c293301c06364d797c2} + +Name + +: + +> mri:description + +Context + +: + +> mri:MD_Role + +Description + +: + +```{=html} +Role description +``` +### Descriptive keywords {#iso19115-3.2018-elem-mri-descriptiveKeywords-3bbdaa8489a36cab45781306bdf7418c} + +Name + +: + +> mri:descriptiveKeywords + +Description + +: + +```{=html} +Provides category keywords, their type, and reference source +``` +### Descriptor {#iso19115-3.2018-elem-mri-descriptor-d03fecc7145f034b0e41d44613397ed4} + +Name + +: + +> mri:descriptor + +Description + +: + +```{=html} +Description of the range of a cell measurement value +``` +### Dimension {#iso19115-3.2018-elem-mri-dimension-53c837bdd73cb3e453d4bd6f3e1055f3} + +Name + +: + +> mri:dimension + +Description + +: + +```{=html} +Information on the dimensions of the cell measurement value +``` +### Dimension name {#iso19115-3.2018-elem-mri-dimensionName-3b4bcb3ee8f0f2a3f0a32e19e7932bcc} + +Name + +: + +> mri:dimensionName + +Description + +: + +```{=html} +Name of the axis +``` + +Condition + +: + +> mandatory + +### Dimension size {#iso19115-3.2018-elem-mri-dimensionSize-56ea1ddf2c206136a267554acc5d1c0e} + +Name + +: + +> mri:dimensionSize + +Description + +: + +```{=html} +Number of elements along the axis +``` + +Condition + +: + +> mandatory + +### Spatial resolution {#iso19115-3.2018-elem-mri-distance-3928324dc7cf53182407dbe43a21ccfd} + +Name + +: + +> mri:distance + +Description + +: + +```{=html} +Ground sample distance +``` + +Condition + +: + +> Provide a distance if no equivalent Scale is documented + +Recommended values + +| code | label | +|------|-------| +| 0.10 | 10 cm | +| 0.25 | 25 cm | +| 0.50 | 50 cm | +| 1 | 1 m | +| 30 | 30 m | +| 100 | 100 m | + +### Domain code {#iso19115-3.2018-elem-mri-domainCode-04aff018af98f2c97ba5e4889daea229} + +Name + +: + +> mri:domainCode + +Description + +: + +```{=html} +Three digit code assigned to the extended element +``` +### Domain of validity {#iso19115-3.2018-elem-mri-domainOfValidity-51dfb463c5bc44fb8ed66fa8bc54c46e} + +Name + +: + +> mri:domainOfValidity + +Description + +: + +```{=html} +Range which is valid for the referencesystem +``` +### Domain value {#iso19115-3.2018-elem-mri-domainValue-05bccd10b5fc9843957e6c93022f8e1d} + +Name + +: + +> mri:domainValue + +Description + +: + +```{=html} +Valid values that can be assigned to the extended element +``` +### Conformance result {#iso19115-3.2018-elem-mri-DQ_ConformanceResult-6fa2196468e3afbaa5831ce5af398ae6} + +Name + +: + +> mri:DQ_ConformanceResult + +Description + +: + +```{=html} +Information about the outcome of evaluating the obtained value + (or set of + values) against a specified acceptable conformance quality level +``` +### Scope {#iso19115-3.2018-elem-mri-DQ_Scope-5db3160e69e03b2221e538d816192372} + +Name + +: + +> mri:DQ_Scope + +Description + +: + +```{=html} +Description of the data specified by the scope +``` +```{=html} +extent of characteristic(s) of the data for which quality information + is + reported +``` +### DS_Association {#iso19115-3.2018-elem-mri-DS_Association-625caa34f37621855b1adc979fdf5ecf} + +Name + +: + +> mri:DS_Association + +Description + +: + +```{=html} +DS_Association +``` +### DS_DataSet {#iso19115-3.2018-elem-mri-DS_DataSet-b5e6c1fc90906663f44d86998594b001} + +Name + +: + +> mri:DS_DataSet + +Description + +: + +```{=html} +DS_DataSet +``` +### DS_Initiative {#iso19115-3.2018-elem-mri-DS_Initiative-f5b135d1832358421374540b97006ef2} + +Name + +: + +> mri:DS_Initiative + +Description + +: + +```{=html} +DS_Initiative +``` +### DS_OtherAggregate {#iso19115-3.2018-elem-mri-DS_OtherAggregate-2d9d8e81109c16a488a15dea67edbe24} + +Name + +: + +> mri:DS_OtherAggregate + +Description + +: + +```{=html} +DS_OtherAggregate +``` +### DS_Platform {#iso19115-3.2018-elem-mri-DS_Platform-395f7c4d1717e416dcf564d4062adefe} + +Name + +: + +> mri:DS_Platform + +Description + +: + +```{=html} +DS_Platform +``` +### DS_ProductionSeries {#iso19115-3.2018-elem-mri-DS_ProductionSeries-5921b13217f1a54a7fe5be17bb100ba3} + +Name + +: + +> mri:DS_ProductionSeries + +Description + +: + +```{=html} +DS_ProductionSeries +``` +### DS_Sensor {#iso19115-3.2018-elem-mri-DS_Sensor-c627d0348b2116c3948d2028e1d7dbe5} + +Name + +: + +> mri:DS_Sensor + +Description + +: + +```{=html} +DS_Sensor +``` +### DS_Series {#iso19115-3.2018-elem-mri-DS_Series-c84ca9870459bc2c905b3625036ced17} + +Name + +: + +> mri:DS_Series + +Description + +: + +```{=html} +DS_Series +``` +### DS_StereoMate {#iso19115-3.2018-elem-mri-DS_StereoMate-8fc4ee2a9b8c90412129e6a8f0e94931} + +Name + +: + +> mri:DS_StereoMate + +Description + +: + +```{=html} +DS_StereoMate +``` +### East bound {#iso19115-3.2018-elem-mri-eastBoundLongitude-1b0c554db3391725ff40fd4b3f7d4d4d} + +Name + +: + +> mri:eastBoundLongitude + +Description + +: + +```{=html} +Eastern-most coordinate of the limit of the dataset extent, + expressed in + longitude in decimal degrees (positive east) +``` + +Condition + +: + +> mandatory + +### Environment description {#iso19115-3.2018-elem-mri-environmentDescription-ac2adb30f1402078f5b6f707c3d9c2f1} + +Name + +: + +> mri:environmentDescription + +Description + +: + +```{=html} +Description of the dataset in the producer_s processing + environment, including + items such as the software, the computer operating system, file name, and + the dataset + size +``` +### Equivalent scale {#iso19115-3.2018-elem-mri-equivalentScale-2fd017e8c8cd6e6663fe128196d0be07} + +Name + +: + +> mri:equivalentScale + +Description + +: + +```{=html} +Level of detail expressed as the scale of a comparable hardcopy + map or + chart +``` +``` xml + + + + 25000 + + + +``` + +### Error statistic {#iso19115-3.2018-elem-mri-errorStatistic-df112e02728fdfa199b3c136c6ff11fd} + +Name + +: + +> mri:errorStatistic + +Description + +: + +```{=html} +Statistical method used to determine the value +``` +### Evaluation method description {#iso19115-3.2018-elem-mri-evaluationMethodDescription-ee3bd83356c3eafce1900c161d09c14a} + +Name + +: + +> mri:evaluationMethodDescription + +Description + +: + +```{=html} +Description of the evaluation method +``` +### Evaluation Method {#iso19115-3.2018-elem-mri-evaluationMethodType-ad6e089dfe9c39eaa2e5f6cf3e7dbf9c} + +Name + +: + +> mri:evaluationMethodType + +Description + +: + +```{=html} +Type of method used to evaluate quality of the dataset +``` +### Evaluation procedure {#iso19115-3.2018-elem-mri-evaluationProcedure-dd1d15f51eea1fc725ba6dc3dca04024} + +Name + +: + +> mri:evaluationProcedure + +Description + +: + +```{=html} +Reference to the procedure information +``` +### Explanation {#iso19115-3.2018-elem-mri-explanation-4a7325eb479000c4bf97ced8d8f40d22} + +Name + +: + +> mri:explanation + +Description + +: + +```{=html} +Explanation of the meaning of conformance for this result +``` + +Condition + +: + +> mandatory + +### Extended element information {#iso19115-3.2018-elem-mri-extendedElementInformation-41146f06b4994ea88616e35991861c17} + +Name + +: + +> mri:extendedElementInformation + +Description + +: + +```{=html} +Provides information about a new metadata element, not found in + ISO 19115, which is required to describe geographic data +``` +### Extension Online resource {#iso19115-3.2018-elem-mri-extensionOnLineResource-7c1d5fd25b64912f01f87f3b3575b621} + +Name + +: + +> mri:extensionOnLineResource + +Description + +: + +```{=html} +Information about on-line sources containing the community + profile name and the extended metadata elements. Information for all new metadata elements +``` +### Extent {#iso19115-3.2018-elem-mri-extent-2265c394538ef47049b9d39e1431a5b1} + +Name + +: + +> mri:extent + +Description + +: + +```{=html} +Extent information including the bounding polygon, vertical, + and temporal extent of the dataset +``` +``` xml + + + + + + 2.78 + + + 6.41 + + + 49.46 + + + 50.85 + + + + + +``` + +### Facsimile {#iso19115-3.2018-elem-mri-facsimile-ed44306eda27fbc251eb4cb8d042c12e} + +Name + +: + +> mri:facsimile + +Description + +: + +```{=html} +Telephone number of a facsimile machine for the responsible organization or individual +``` +### Feature attribute {#iso19115-3.2018-elem-mri-featureAttribute-c9379b1b5ddea9c2098fb5eb5d473c07} + +Name + +: + +> mri:featureAttribute + +Description + +: + +### Feature type {#iso19115-3.2018-elem-mri-featureType-affc938534ba82ccfad753e3de66f4dc} + +Name + +: + +> mri:featureType + +Description + +: + +```{=html} +Subset of feature types from cited feature catalogue occurring + in + data +``` +### Geometric object count {#iso19115-3.2018-elem-mri-geometricObjectCount-3db26814a8c8452828933028c75dc10b} + +Name + +: + +> mri:geometricObjectCount + +Description + +: + +```{=html} +Total number of the point or vector object type occurring in + the + dataset +``` +### Geometric objects {#iso19115-3.2018-elem-mri-geometricObjects-29d1b872c8bcf5d90e3e3ea7155c59b3} + +Name + +: + +> mri:geometricObjects + +Description + +: + +```{=html} +Information about the geometric objects used in the dataset +``` +### Geometric object type {#iso19115-3.2018-elem-mri-geometricObjectType-13b5366ea59d71264a65d4238c788e41} + +Name + +: + +> mri:geometricObjectType + +Description + +: + +```{=html} +Name of point and vector spatial objects used to locate zero-, + one-, and + two-dimensional spatial locations in the dataset +``` + +Condition + +: + +> mandatory + +### GeoreferencedParameters {#iso19115-3.2018-elem-mri-georeferencedParameters-028b4f1108628c33bb915234d2324ab5} + +Name + +: + +> mri:georeferencedParameters + +Description + +: + +```{=html} +GeoreferencedParameters +``` +### Graphic overview {#iso19115-3.2018-elem-mri-graphicOverview-8640aa6248a384d60f83fa2c32942577} + +Name + +: + +> mri:graphicOverview + +Description + +: + +```{=html} +Provides a graphic that illustrates the resource(s) (should + include a legend + for the graphic) +``` +### Has {#iso19115-3.2018-elem-mri-has-a62a70d8d758396c952ad3c7a7090571} + +Name + +: + +> mri:has + +Description + +: + +```{=html} +Has +``` +### Hierarchy level {#iso19115-3.2018-elem-mri-hierarchyLevel-1ba3e3235eedebc22f7ff178c66f25c6} + +Name + +: + +> mri:hierarchyLevel + +Description + +: + +```{=html} +Scope to which the metadata applies (see annex H for more + information about + metadata hierarchy levels) +``` +### Hierarchy level name {#iso19115-3.2018-elem-mri-hierarchyLevelName-55cf15d0f210413ac816ec9e8abce9ac} + +Name + +: + +> mri:hierarchyLevelName + +Description + +: + +```{=html} +Name of the hierarchy levels for which the metadata is + provided +``` +### Identified issues {#iso19115-3.2018-elem-mri-identifiedIssues-ee073e37cce74aaabfd1c7d230c349ab} + +Name + +: + +> mri:identifiedIssues + +Description + +: + +```{=html} +Citation of a description of known issues associated + with the resource along with proposed solutions if available +``` +### Identifier {#iso19115-3.2018-elem-mri-identifier-a2ed8fa00e68521846e3c515084cb9f9} + +Name + +: + +> mri:identifier + +Description + +: + +```{=html} +Unique identifier for the resource. EXAMPLE: Universal Product + Code (UPC), + National Stock Number (NSN) +``` +### Identifier {#iso19115-3.2018-elem-mri-identifier-mri-MD_Authority-14f0abc5b645685e06a83445d163dfae} + +Name + +: + +> mri:identifier + +Context + +: + +> mri:MD_Authority + +Description + +: + +```{=html} +Identifier which belongs to the authority +``` +### Included with dataset {#iso19115-3.2018-elem-mri-includedWithDataset-5f9bc1136b461cdfc172fc42fc0419be} + +Name + +: + +> mri:includedWithDataset + +Description + +: + +```{=html} +Indication of whether or not the feature catalogue is included + with the + dataset +``` + +Condition + +: + +> mandatory + +### Initiative Type {#iso19115-3.2018-elem-mri-initiativeType-1004a8e07ee24afe674aeaa8e59e230e} + +Name + +: + +> mri:initiativeType + +Description + +: + +```{=html} +Type of initiative under which the aggregate dataset was + produced +``` +### Keyword {#iso19115-3.2018-elem-mri-keyword-71c3570eaf518f78a536bb606c93f359} + +Name + +: + +> mri:keyword + +Description + +: + +```{=html} +Commonly used word(s) or formalised word(s) or phrase(s) used + to describe the + subject +``` +### Keyword class {#iso19115-3.2018-elem-mri-keywordClass-8bcc88fad14d5de58ebe26e47303657a} + +Name + +: + +> mri:keywordClass + +Description + +: + +```{=html} +association of a MD_Keywords instance with a + MD_KeywordClass to provide user-defined categorization of groups of + keywords that extend or are orthogonal to the standardized + KeywordTypeCodes and are associated with an ontology that allows + additional semantic query processing NOTE The thesaurus citation specifies + a collection of instances from some ontology, but is not an ontology. It + might be a list of places that include rivers, mountains, counties and + cities. There might be a Laconte county, the city of Laconte, the Laconte + River, and Mt. Laconte; when searching it is useful for the user to be + able to restrict the search to only rivers. +``` +### Metadata language {#iso19115-3.2018-elem-mri-language-mri-MD_Metadata-35e24f579bcdd8eb6b3a4afd1fb07d75} + +Name + +: + +> mri:language + +Context + +: + +> mri:MD_Metadata + +Description + +: + +```{=html} +Language used for documenting metadata +``` + +Condition + +: + +> conditional + +### Language {#iso19115-3.2018-elem-mri-language-mri-MD_DataIdentification-1a91b7a90b04ad15f6d973265b70dc48} + +Name + +: + +> mri:language + +Context + +: + +> mri:MD_DataIdentification + +Description + +: + +```{=html} +Language(s) used within the dataset +``` +```{=html} +language(s) used within the dataset +``` +### Language {#iso19115-3.2018-elem-mri-languageCode-305fbc461b78dd7b5659ea8a28a96cdf} + +Name + +: + +> mri:languageCode + +Description + +: + +```{=html} +Language code +``` +### ISO Language code {#iso19115-3.2018-elem-mri-LanguageCode-440e7030d461f7a681b67af921c79bfb} + +Name + +: + +> mri:LanguageCode + +Description + +: + +```{=html} +Language code +``` +### Level of detail {#iso19115-3.2018-elem-mri-levelOfDetail-401a945f53a61c9289d6a8e0d372cf99} + +Name + +: + +> mri:levelOfDetail + +Description + +: + +```{=html} +Brief textual description of the spatial resolution of the + resource +``` +### Process step {#iso19115-3.2018-elem-mri-LI_ProcessStep-2e909c9f21434501914535cfcaf75997} + +Name + +: + +> mri:LI_ProcessStep + +Description + +: + +```{=html} +Information about an event in the creation process for the data + specified by + the scope +``` +```{=html} +information about an event or transformation in the life of a dataset + including the + process used to maintain the dataset +``` +### Source {#iso19115-3.2018-elem-mri-LI_Source-5cd1e641a7cfe7cc97c848bce1a49475} + +Name + +: + +> mri:LI_Source + +Description + +: + +```{=html} +Information about the source data used in creating the data + specified by the + scope +``` +### Lineage {#iso19115-3.2018-elem-mri-lineage-4a5e3f33503eddf336b5c8fb9a0dec13} + +Name + +: + +> mri:lineage + +Description + +: + +```{=html} +Non-quantitative quality information about the lineage of the + data specified by + the scope +``` +### Maximum occurrence {#iso19115-3.2018-elem-mri-maximumOccurrence-08133a89b21a5fea01ca6a8f80fa0386} + +Name + +: + +> mri:maximumOccurrence + +Description + +: + +```{=html} +Maximum occurrence of the extended element +``` +### Aggregate Information {#iso19115-3.2018-elem-mri-MD_AggregateInformation-140ed169bbe03a66caa26f1a81cc4dc5} + +Name + +: + +> mri:MD_AggregateInformation + +Description + +: + +```{=html} +Aggregate dataset information +``` +### Associated resource {#iso19115-3.2018-elem-mri-MD_AssociatedResource-4741c31756de110640d3751ef259b610} + +Name + +: + +> mri:MD_AssociatedResource + +Description + +: + +```{=html} +Associated resource information +``` +### Data identification {#iso19115-3.2018-elem-mri-MD_DataIdentification-45539414c34262f719bd1a9cb65d5c34} + +Name + +: + +> mri:MD_DataIdentification + +Description + +: + +```{=html} +Information required to identify a dataset +``` +``` xml + + + + + INSPIRE - TG2 - Template + + + + + 2019-10-01 + + + + + + + + + + 48c6f2bb-4828-46eb-a2cc-d5bcb94340dc + + + https://registry.organisation.fr/datasets + + + + + + + Description du jeu de données + + + + + + + + + + + + + Organisation + + + + + + + mail@organisation.org + + + + + + + + + + + + + + + + + + 25000 + + + + + + + biota + + + environment + + + + + + + 2.78 + + + 6.41 + + + 49.46 + + + 50.85 + + + + + + + + + + + + + + + + Protected site + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GEMET themes + + + + + 2009-09-22 + + + + + + + + + + + + + + + + + + + + + Natura 2000 sites (Birds Directive) + + + + + + + + INSPIRE priority data set + + + + + 2018-04-24 + + + + + + + + + + + + + + + + + + + + + + + + No + limitations to public access + + + + + + + Conditions d'accès et d'utilisation + + + + + + Description des autres contraintes (eg. CGI, Licence) + + + + + + + + + + + + + + +``` + +### Dimension {#iso19115-3.2018-elem-mri-MD_Dimension-4247609a5b17f0635f0771ccf8f1d7c6} + +Name + +: + +> mri:MD_Dimension + +Description + +: + +```{=html} +Axis properties +``` +### Extended Element Information {#iso19115-3.2018-elem-mri-MD_ExtendedElementInformation-b44873eaadd8ccde9aedba5fb0f6378d} + +Name + +: + +> mri:MD_ExtendedElementInformation + +Description + +: + +```{=html} +New metadata element, not found in ISO 19115, which is required + to describe + geographic data +``` +### Geometric objects {#iso19115-3.2018-elem-mri-MD_GeometricObjects-701be4ade2337a169cdd7437341bdfd8} + +Name + +: + +> mri:MD_GeometricObjects + +Description + +: + +```{=html} +Number of objects, listed by geometric object type, used in the + dataset +``` +### Georectified {#iso19115-3.2018-elem-mri-MD_Georectified-9cd3df419c9405e05aa22437fd8f44b8} + +Name + +: + +> mri:MD_Georectified + +Description + +: + +```{=html} +Grid whose cells are regularly spaced in a geographic (i.e., + lat / long) or map + coordinate system defined in the Spatial Referencing System (SRS) so that + any cell in + the grid can be geolocated given its grid coordinate and the grid origin, + cell spacing, + and orientation +``` +### Georeferenceable {#iso19115-3.2018-elem-mri-MD_Georeferenceable-6f861dc9dcd05001b271619beb2a0b02} + +Name + +: + +> mri:MD_Georeferenceable + +Description + +: + +```{=html} +Grid with cells irregularly spaced in any given geographic/map + projection + coordinate system, whose individual cells can be geolocated using + geolocation + information supplied with the data but cannot be geolocated from the grid + properties + alone +``` +### Grid spatial representation {#iso19115-3.2018-elem-mri-MD_GridSpatialRepresentation-704f579a18d1e383740b32a1c40f4025} + +Name + +: + +> mri:MD_GridSpatialRepresentation + +Description + +: + +```{=html} +Information about grid spatial objects in the dataset +``` +### Keyword class {#iso19115-3.2018-elem-mri-MD_KeywordClass-e8da816d8a2be293339b5591c5b31709} + +Name + +: + +> mri:MD_KeywordClass + +Description + +: + +```{=html} +Specification of a class to categorize keywords in a + domain-specific vocabulary that has a binding to a formal ontology +``` +### Keywords {#iso19115-3.2018-elem-mri-MD_Keywords-c8844255cb6b1346e604a53d830e6697} + +Name + +: + +> mri:MD_Keywords + +Description + +: + +```{=html} +Keywords, their type and reference source +``` +### Metadata Extension Information {#iso19115-3.2018-elem-mri-MD_MetadataExtensionInformation-0d852a81587a640b13d910e246bda49f} + +Name + +: + +> mri:MD_MetadataExtensionInformation + +Description + +: + +```{=html} +Information describing metadata extensions +``` +### Obligation code {#iso19115-3.2018-elem-mri-MD_ObligationCode-0457c04f99f950848fce2bed3f4ef83b} + +Name + +: + +> mri:MD_ObligationCode + +Description + +: + +```{=html} +Obligation of the element or entity +``` +### Representative fraction {#iso19115-3.2018-elem-mri-MD_RepresentativeFraction-af8f6be9f23e0d14630082d51a310384} + +Name + +: + +> mri:MD_RepresentativeFraction + +Description + +: + +```{=html} +Derived from Scale where MD_RepresentativeFraction.denominator + = 1 / + Scale.measure And Scale.targetUnits = Scale.sourceUnits +``` +``` xml + + + 25000 + + +``` + +### Resolution {#iso19115-3.2018-elem-mri-MD_Resolution-e0b4cae62a188c5bc322edb64b2d26b0} + +Name + +: + +> mri:MD_Resolution + +Description + +: + +```{=html} +Level of detail expressed as a scale factor or a ground + distance +``` +``` xml + + + + + 25000 + + + + +``` + +### Resolution type {#iso19115-3.2018-elem-mri-MD_Resolution_Type-de6a074ca31faa71c5dc3549bb2ade22} + +Name + +: + +> mri:MD_Resolution_Type + +Description + +: + +### Scope code {#iso19115-3.2018-elem-mri-MD_ScopeCode-836acd6fc05e96ec03dca7f9e6cef9e9} + +Name + +: + +> mri:MD_ScopeCode + +Description + +: + +```{=html} +Class of information to which the referencing entity applies +``` +### Service Identification {#iso19115-3.2018-elem-mri-MD_ServiceIdentification-ae78ae27b9261dcfde913c0f1780d1fe} + +Name + +: + +> mri:MD_ServiceIdentification + +Description + +: + +```{=html} +Identification of capabilities which a service provider makes + available to a + service user through a set of interfaces that define a behaviour - See ISO + 19119 - + Services for further information +``` +### Topic category code {#iso19115-3.2018-elem-mri-MD_TopicCategoryCode-809913fe5286f1b06f3cef490e3eb204} + +Name + +: + +> mri:MD_TopicCategoryCode + +Description + +: + +```{=html} +High-level geographic data thematic classification to assist in + the grouping + and search of available geographic data sets. Can be used to group + keywords as well. + Listed examples are not exhaustive. NOTE It is understood there are + overlaps between + general categories and the user is encouraged to select the one most + appropriate. +``` +### Standard codelists Topic category code (mri:MD_TopicCategoryCode) + +| code | label | description | +|----------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| farming | Farming | Rearing of animals and/or cultivation of plants. Examples: agriculture, irrigation, aquaculture, plantations, herding, pests and diseases affecting crops and livestock | +| biota | Biota | Flora and/or fauna in natural environment. Examples: wildlife, vegetation, biological sciences, ecology, wilderness, sealife, wetlands, habitat | +| boundaries | Boundaries | Legal land descriptions. Examples: political and administrative boundaries | +| climatologyMeteorologyAtmosphere | Climatology, meteorology, atmosphere | Processes and phenomena of the atmosphere. Examples: cloud cover, weather, climate, atmospheric conditions, climate change, precipitation | +| economy | Economy | Economic activities, conditions and employment. Examples: production, labour, revenue, commerce, industry, tourism and ecotourism, forestry, fisheries, commercial or subsistence hunting, exploration and exploitation of resources such as minerals, oil and gas | +| elevation | Elevation | Height above or below sea level. Examples: altitude, bathymetry, digital elevation models, slope, derived products | +| environment | Environment | Environmental resources, protection and conservation. Examples: environmental pollution, waste storage and treatment, environmental impact assessment, monitoring environmental risk, nature reserves, landscape | +| geoscientificInformation | Geoscientific information | Information pertaining to earth sciences. Examples: geophysical features and processes, geology, minerals, sciences dealing with the composition, structure and origin of the earth s rocks, risks of earthquakes, volcanic activity, landslides, gravity information, soils, permafrost, hydrogeology, erosion | +| health | Health | Health, health services, human ecology, and safety. Examples: disease and illness, factors affecting health, hygiene, substance abuse, mental and physical health, health services | +| imageryBaseMapsEarthCover | Imagery base maps earth cover | Base maps. Examples: land cover, topographic maps, imagery, unclassified images, annotations | +| intelligenceMilitary | Intelligence military | Military bases, structures, activities. Examples: barracks, training grounds, military transportation, information collection | +| inlandWaters | Inland waters | Inland water features, drainage systems and their characteristics. Examples: rivers and glaciers, salt lakes, water utilization plans, dams, currents, floods, water quality, hydrographic charts | +| location | Location | Positional information and services. Examples: addresses, geodetic networks, control points, postal zones and services, place names | +| oceans | Oceans | Features and characteristics of salt water bodies (excluding inland waters). Examples: tides, tidal waves, coastal information, reefs | +| planningCadastre | Planning cadastre | Information used for appropriate actions for future use of the land. Examples: land use maps, zoning maps, cadastral surveys, land ownership | +| society | Society | Characteristics of society and cultures. Examples: settlements, anthropology, archaeology, education, traditional beliefs, manners and customs, demographic data, recreational areas and activities, social impact assessments, crime and justice, census information | +| structure | Structure | Man-made construction. Examples: buildings, museums, churches, factories, housing, monuments, shops, towers | +| transportation | Transportation | Means and aids for conveying persons and/or goods. Examples: roads, airports/airstrips, shipping routes, tunnels, nautical charts, vehicle or vessel location, aeronautical charts, railways | +| utilitiesCommunication | Utilities communication | Energy, water and waste systems and communications infrastructure andservices. Examples: hydroelectricity, geothermal, solar and nuclear sources of energy, water purification and distribution, sewage collection and disposal, electricity and gas distribution, data communication, telecommunication, radio, communication networks | +| extraTerrestrial | Extra Terrestrial | Region more than 100 km above the surface of the Earth | +| disaster | Disaster | Information related to disasters EXAMPLES: Site of the disaster, evacuation zone, disaster-prevention facility, disaster relief activities | + +### Usage {#iso19115-3.2018-elem-mri-MD_Usage-28b7ff49f2495cc919db1dfdb5504d4a} + +Name + +: + +> mri:MD_Usage + +Description + +: + +```{=html} +Brief description of ways in which the resource(s) is/are + currently + used +``` +### Vector spatial representation {#iso19115-3.2018-elem-mri-MD_VectorSpatialRepresentation-1fa2cede09489f2fe243fa7e91a26c94} + +Name + +: + +> mri:MD_VectorSpatialRepresentation + +Description + +: + +```{=html} +Information about the vector spatial objects in the dataset +``` +### Measure description {#iso19115-3.2018-elem-mri-measureDescription-20a5a3fe84e0b24da0dc627dde2ba323} + +Name + +: + +> mri:measureDescription + +Description + +: + +```{=html} +Description of the measure being determined +``` +### Measure identification {#iso19115-3.2018-elem-mri-measureIdentification-5d7fb93ef9082c314e8c8f7245a54d93} + +Name + +: + +> mri:measureIdentification + +Description + +: + +```{=html} +Code identifying a registered standard procedure +``` +### Metadata Reference {#iso19115-3.2018-elem-mri-metadataReference-10650eae9154c3c351793de92fffaf31} + +Name + +: + +> mri:metadataReference + +Description + +: + +```{=html} +Reference to the metadata of the associated + resource +``` +### Metadata standard name {#iso19115-3.2018-elem-mri-metadataStandardName-f03bf900f90b2510635c8fe4b33a13d2} + +Name + +: + +> mri:metadataStandardName + +Description + +: + +```{=html} +Name of the metadata standard (including profile name) used +``` +### Metadata standard version {#iso19115-3.2018-elem-mri-metadataStandardVersion-d38c2f3d2a6d13013d6ea511e584b610} + +Name + +: + +> mri:metadataStandardVersion + +Description + +: + +```{=html} +Version (profile) of the metadata standard used +``` +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_AbstractClass-9877241cc220793ccba8ca14dcc1b384} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_AbstractClass + +Description + +: + +```{=html} +Name +``` +### Name {#iso19115-3.2018-elem-mri-name-mri-RS_ReferenceSystem-c677cc018d021b59efd4d4877cc8b127} + +Name + +: + +> mri:name + +Context + +: + +> mri:RS_ReferenceSystem + +Description + +: + +```{=html} +Name of reference system used +``` + +Condition + +: + +> mandatory + +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_Format-8ba2d3536f54f8f338f96ee1c631fb7a} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_Format + +Description + +: + +```{=html} +Name of the data transfer format(s) +``` +```{=html} +name of the data transfer format(s) +``` + +Condition + +: + +> mandatory + +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_ExtendedElementInformation-71da9b45b9a805e89bdb4ebb0e589286} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_ExtendedElementInformation + +Description + +: + +```{=html} +Name of the extended metadata element +``` + +Condition + +: + +> mandatory + +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_AssociatedResource-592c1a294a5f5e20abb8a2eb4ff9fd5d} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_AssociatedResource + +Description + +: + +```{=html} +To be provided if no metadata reference provided +``` +### Name {#iso19115-3.2018-elem-mri-name-4ced2246372284fb55369904f44d6a96} + +Name + +: + +> mri:name + +Description + +: + +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_CodeDomain-7e463975608cc25196e1a6e9331330b6} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_CodeDomain + +Description + +: + +```{=html} +Name of the code domain +``` +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_CodeValue-2e8d7c21f7913f12492cecdfdafd9f87} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_CodeValue + +Description + +: + +```{=html} +Value name +``` +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_Attribute-34776ed0db644231645dbea5da7a6d41} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_Attribute + +Description + +: + +```{=html} +Attribute name +``` +### Name {#iso19115-3.2018-elem-mri-name-mri-MD_Role-dbac7d81940bece1b2bd05ee942e0f1a} + +Name + +: + +> mri:name + +Context + +: + +> mri:MD_Role + +Description + +: + +```{=html} +Role name +``` +### Name of measure {#iso19115-3.2018-elem-mri-nameOfMeasure-339a7390bc51c94a8cd698950f14e00a} + +Name + +: + +> mri:nameOfMeasure + +Description + +: + +```{=html} +Name of the test applied to the data +``` +Recommended values + +| code | label | +|-----------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------| +| | -- Completeness -- | +| Excess item | Excess item | +| Number of excess items | Number of excess items | +| Rate of excess items | Rate of excess items | +| Number of duplicate feature instances | Number of duplicate feature instances | +| Missing item | Missing item | +| Number of missing items | Number of missing items | +| Rate of missing items | Rate of missing items -- Logical consistency / Conceptual consistency -- | +| Conceptual schema noncompliance | Conceptual schema noncompliance | +| Conceptual schema compliance | Conceptual schema compliance | +| Number of items noncompliant to the rules of the conceptual schema | Number of items noncompliant to the rules of the conceptual schema | +| Number of invalid overlaps of surfaces | Number of invalid overlaps of surfaces | +| Non-compliance rate with respect to the rules of the conceptual schema | Non-compliance rate with respect to the rules of the conceptual schema | +| Compliance rate with the rules of the conceptual schema | Compliance rate with the rules of the conceptual schema -- Logical consistency / Domain consistency -- | +| Value domain non-conformance | Value domain non-conformance | +| Value domain conformance | Value domain conformance | +| Number of items not in conformance with their value domain | Number of items not in conformance with their value domain | +| Value domain conformance rate | Value domain conformance rate | +| Value domain non-conformance rate | Value domain non-conformance rate | +| Physical structure conflicts | Physical structure conflicts | +| Physical structure conflict rate | Physical structure conflict rate -- Logical consistency / Topological consistency -- | +| Number of faulty point-curve connections | Number of faulty point-curve connections | +| Rate of faulty point-curve connections | Rate of faulty point-curve connections | +| Number of missing connection due to undershoots | Number of missing connection due to undershoots | +| Number of missing connections due to overshoots | Number of missing connections due to overshoots | +| Number of invalid slivers | Number of invalid slivers | +| Number of invalid self intersect errors | Number of invalid self intersect errors | +| Number of invalid self overlap errors | Number of invalid self overlap errors -- Positional accuracy / Absolute or external accuracy / General measures -- | +| Mean value of positional uncertainties | Mean value of positional uncertainties | +| Mean value of positional uncertainties excluding outliers | Mean value of positional uncertainties excluding outliers | +| Number of positional uncertainties above a given threshold | Number of positional uncertainties above a given threshold | +| Rate of positional errors above a given threshold | Rate of positional errors above a given threshold | +| Covariance matrix | Covariance matrix -- Positional accuracy / Absolute or external accuracy / Vertical -- | +| Linear error probable | Linear error probable | +| Standard linear error | Standard linear error | +| Linear map accuracy at 90% significance level | Linear map accuracy at 90% significance level | +| Linear map accuracy at 95% significance level | Linear map accuracy at 95% significance level | +| Linear map accuracy at 99% significance level | Linear map accuracy at 99% significance level | +| Near certainty linear error | Near certainty linear error | +| Root mean square error | Root mean square error | +| Absolute linear error at 90% significance level of biased vertical data (Alternative 1) | Absolute linear error at 90% significance level of biased vertical data (Alternative 1) | +| Absolute linear error at 90% significance level of biased vertical data | Absolute linear error at 90% significance level of biased vertical data -- Positional accuracy / Absolute or external accuracy / Horizontal -- | +| Circular standard deviation | Circular standard deviation | +| Circular error probable | Circular error probable | +| Circular map accuracy standard | Circular map accuracy standard | +| Circular error at 95% significance level | Circular error at 95% significance level | +| Circular near certainty error | Circular near certainty error | +| Root mean square error of planimetry | Root mean square error of planimetry | +| Absolute circular error at 90% significance level of biased data (Alternative 2) | Absolute circular error at 90% significance level of biased data (Alternative 2) | +| Absolute circular error at 90% significance level of biased data | Absolute circular error at 90% significance level of biased data | +| Uncertainty ellipse | Uncertainty ellipse | +| Confidence ellipse | Confidence ellipse -- Positional accuracy / Relative or internal accuracy -- | +| Relative vertical error | Relative vertical error | +| Relative horizontal error | Relative horizontal error -- Temporal accuracy / Accuracy of a time measurement -- | +| Time accuracy at 68.3% significance level | Time accuracy at 68.3% significance level | +| Time accuracy at 50% significance level | Time accuracy at 50% significance level | +| Time accuracy at 90% significance level | Time accuracy at 90% significance level | +| Time accuracy at 95% significance level | Time accuracy at 95% significance level | +| Time accuracy at 99% significance level | Time accuracy at 99% significance level | +| Time accuracy at 99.8% significance level | Time accuracy at 99.8% significance level -- Thematic accuracy / Classification correctness -- | +| Number of incorrectly classified features | Number of incorrectly classified features | +| Misclassification rate | Misclassification rate | +| Misclassification matrix | Misclassification matrix | +| Relative misclassification matrix | Relative misclassification matrix | +| Kappa coefficient | Kappa coefficient -- Thematic accuracy / Non-quantitative attribute correctness -- | +| Number of incorrect attribute values | Number of incorrect attribute values | +| Rate of correct attribute values | Rate of correct attribute values | +| Rate of incorrect attribute values | Rate of incorrect attribute values -- Thematic accuracy / Quantitative attribute accuracy -- | +| Attribute value uncertainty at 68.3% significance level | Attribute value uncertainty at 68.3% significance level | +| Attribute value uncertainty at 50% significance level | Attribute value uncertainty at 50% significance level | +| Attribute value uncertainty at 90% significance level | Attribute value uncertainty at 90% significance level | +| Attribute value uncertainty at 95% significance level | Attribute value uncertainty at 95% significance level | +| Attribute value uncertainty at 99% significance level | Attribute value uncertainty at 99% significance level | +| Attribute value uncertainty at 99.8% significance level | Attribute value uncertainty at 99.8% significance level | + +### North bound {#iso19115-3.2018-elem-mri-northBoundLatitude-e07339e2d468c1051d7560ef6225ef2e} + +Name + +: + +> mri:northBoundLatitude + +Description + +: + +```{=html} +Northern-most, coordinate of the limit of the dataset extent + expressed in + latitude in decimal degrees (positive north) +``` + +Condition + +: + +> mandatory + +### Number of dimensions {#iso19115-3.2018-elem-mri-numberOfDimensions-cf4fa5a9e3934a3c2c4d4a6b08321edb} + +Name + +: + +> mri:numberOfDimensions + +Description + +: + +```{=html} +Number of independent spatial-temporal axes +``` + +Condition + +: + +> mandatory + +### Obligation {#iso19115-3.2018-elem-mri-obligation-b03e941988d111c06fc0a685a14b79fb} + +Name + +: + +> mri:obligation + +Description + +: + +```{=html} +Obligation of the extended element +``` +### Ontology {#iso19115-3.2018-elem-mri-ontology-413f6aac4db11311fc78f9a029912c9a} + +Name + +: + +> mri:ontology + +Description + +: + +```{=html} +Reference that binds the keyword class to a formal + conceptualization of a knowledge domain for use in semantic processing + NOTE Keywords in the associated MD_Keywords keyword list must be within + the scope of this ontology. +``` +### Orientation parameter availability {#iso19115-3.2018-elem-mri-orientationParameterAvailability-1d8cbe1a4b5d406ef7721d68bbcec95d} + +Name + +: + +> mri:orientationParameterAvailability + +Description + +: + +```{=html} +Indication of whether or not orientation parameters are + available +``` + +Condition + +: + +> mandatory + +### Orientation parameter description {#iso19115-3.2018-elem-mri-orientationParameterDescription-fbbc85950d68d2de1919b38ba893120f} + +Name + +: + +> mri:orientationParameterDescription + +Description + +: + +```{=html} +Description of parameters used to describe sensor orientation +``` +### Other locale {#iso19115-3.2018-elem-mri-otherLocale-bfdf11aeefc7ffb0ac1f8ae02ae7d875} + +Name + +: + +> mri:otherLocale + +Description + +: + +```{=html} +Alternate localised language(s) and character set + (s) used within the resource +``` +### Parameter citation {#iso19115-3.2018-elem-mri-parameterCitation-9ef2b2fc7df47c492bb9a19fce4ba6e8} + +Name + +: + +> mri:parameterCitation + +Description + +: + +```{=html} +Reference providing description of the parameters +``` +### Parent entity {#iso19115-3.2018-elem-mri-parentEntity-0b202b298ce60d1717e5d04b88c83e4e} + +Name + +: + +> mri:parentEntity + +Description + +: + +```{=html} +Name of the metadata entity(s) under which this extended + metadata element may + appear. The name(s) may be standard metadata element(s) or other extended + metadata + element(s). +``` + +Condition + +: + +> mandatory + +### Parent identifier {#iso19115-3.2018-elem-mri-parentIdentifier-5f0e8c7441e5779b27d133eba76fbbad} + +Name + +: + +> mri:parentIdentifier + +Description + +: + +```{=html} +File identifier of the metadata to which this metadata is a + subset + (child) +``` +### PartOf {#iso19115-3.2018-elem-mri-partOf-1567d8c5a5040af4fb70a2a728ec3d00} + +Name + +: + +> mri:partOf + +Description + +: + +```{=html} +PartOf +``` +### Pass {#iso19115-3.2018-elem-mri-pass-80f8d49ddc3e9855c783a6eca671a20d} + +Name + +: + +> mri:pass + +Description + +: + +```{=html} +Indication of the conformance result where 0 = fail and 1 = + pass +``` + +Condition + +: + +> mandatory + +### Phone {#iso19115-3.2018-elem-mri-phone-60b8622d9cf4ed86cab44b6ec6dda2a5} + +Name + +: + +> mri:phone + +Description + +: + +```{=html} +Telephone numbers at which the organization or individual may + be + contacted +``` +### Point in Pixel {#iso19115-3.2018-elem-mri-pointInPixel-2c8b52f284ca32d399381131e41a4305} + +Name + +: + +> mri:pointInPixel + +Description + +: + +```{=html} +Point in a pixel corresponding to the Earth location of the + pixel +``` + +Condition + +: + +> mandatory + +### Point of contact {#iso19115-3.2018-elem-mri-pointOfContact-0a191d0435894206a844cde68a5bc873} + +Name + +: + +> mri:pointOfContact + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) + and + organizations(s) associated with the resource(s) +``` +``` xml + + + + + + + + + Organisation + + + + + + + mail@organisation.org + + + + + + + + + +``` + +### Presentation form {#iso19115-3.2018-elem-mri-presentationForm-c60bbfde21396f943e6032fca7b69550} + +Name + +: + +> mri:presentationForm + +Description + +: + +```{=html} +Mode in which the resource is represented +``` +### Processing level {#iso19115-3.2018-elem-mri-processingLevel-92beb3a40f398b02520cb6da80890df9} + +Name + +: + +> mri:processingLevel + +Description + +: + +```{=html} +Code that identifies the level of processing in the + producers coding system of a resource. Example NOAA level 1B. +``` +### PropertyType {#iso19115-3.2018-elem-mri-propertyType-e9212239d95c65d827b824b048de51a6} + +Name + +: + +> mri:propertyType + +Description + +: + +```{=html} +PropertyType +``` +### Free text {#iso19115-3.2018-elem-mri-PT_FreeText-6219dda1e26c4d314689c8bc49ddfb63} + +Name + +: + +> mri:PT_FreeText + +Description + +: + +```{=html} +Description of a multi-language free text metadata element +``` +### Purpose {#iso19115-3.2018-elem-mri-purpose-f010699f7244e7c9797817d3a9a78c8d} + +Name + +: + +> mri:purpose + +Description + +: + +```{=html} +Summary of the intentions with which the resource(s) was + developed +``` +### Rationale {#iso19115-3.2018-elem-mri-rationale-mri-MD_ExtendedElementInformation-b1f26013fe0ce1e4f6018873aa1f0e5b} + +Name + +: + +> mri:rationale + +Context + +: + +> mri:MD_ExtendedElementInformation + +Description + +: + +```{=html} +Reason for creating the extended element +``` +### Resource constraints {#iso19115-3.2018-elem-mri-resourceConstraints-22849b1b8ec64c231cd8eda0547a553a} + +Name + +: + +> mri:resourceConstraints + +Description + +: + +```{=html} +Provides information about constraints which apply to the + resource(s) +``` +### Resource format {#iso19115-3.2018-elem-mri-resourceFormat-713c10529cd9a1b05d0e0d70cf37fa08} + +Name + +: + +> mri:resourceFormat + +Description + +: + +```{=html} +Provides a description of the format of the resource(s) +``` +### Resource maintenance {#iso19115-3.2018-elem-mri-resourceMaintenance-9aabbe5ce70e511c06bf7decde6ba3ac} + +Name + +: + +> mri:resourceMaintenance + +Description + +: + +```{=html} +Provides information about the frequency of resource updates, + and the scope of + those updates +``` +``` xml + + + + + + + +``` + +### Resource specific usage {#iso19115-3.2018-elem-mri-resourceSpecificUsage-16894db96c1cd1836b2b8838b3a7ad30} + +Name + +: + +> mri:resourceSpecificUsage + +Description + +: + +```{=html} +Provides basic information about specific application(s) for + which the + resource(s) has/have been or is being used by different users +``` +### Response {#iso19115-3.2018-elem-mri-response-5c7415e8bb679a4645e53f1bca4888c1} + +Name + +: + +> mri:response + +Description + +: + +```{=html} +Response to the user-determined limitations. Example + “This has been fixed in version x.” +``` +### Result {#iso19115-3.2018-elem-mri-result-cf813985cacbefc1455b60255c9aacd0} + +Name + +: + +> mri:result + +Description + +: + +```{=html} +Value (or set of values) obtained from applying a data quality + measure or the + out come of evaluating the obtained value (or set of values) against a + specified + acceptable conformance quality level +``` + +Condition + +: + +> mandatory + +### Identifier {#iso19115-3.2018-elem-mri-RS_Identifier-0ff1b8f7f7961d3b04637810bc4bbc95} + +Name + +: + +> mri:RS_Identifier + +Description + +: + +```{=html} +Identifier used for reference systems +``` +### Rule {#iso19115-3.2018-elem-mri-rule-4724b8d466dc221ef079c5a9c07ad554} + +Name + +: + +> mri:rule + +Description + +: + +```{=html} +Specifies how the extended element relates to other existing + elements and + entities +``` + +Condition + +: + +> mandatory + +### Scale Denominator {#iso19115-3.2018-elem-mri-scaleDenominator-dac4fe9262fc158c1184fa0969bef7ae} + +Name + +: + +> mri:scaleDenominator + +Description + +: + +```{=html} +Denominator of the representative fraction on a source map +``` +### Series {#iso19115-3.2018-elem-mri-series-00c09e9ddd3edc0274c60cf72e66966b} + +Name + +: + +> mri:series + +Description + +: + +```{=html} +Information about the series, or aggregate dataset, of which + the dataset is a + part +``` +### SeriesMetadata {#iso19115-3.2018-elem-mri-seriesMetadata-983451ad1bc581791b639c841965fc41} + +Name + +: + +> mri:seriesMetadata + +Description + +: + +```{=html} +SeriesMetadata +``` +### Short name {#iso19115-3.2018-elem-mri-shortName-d6f9ddc078149cfd4ae0fff6efe14041} + +Name + +: + +> mri:shortName + +Description + +: + +```{=html} +Short form suitable for use in an implementation method such as + XML or SGML. + NOTE other methods may be used +``` +### Source {#iso19115-3.2018-elem-mri-source-mri-MD_ExtendedElementInformation-69dc34a4ad2af38b82c4651fed59231c} + +Name + +: + +> mri:source + +Context + +: + +> mri:MD_ExtendedElementInformation + +Description + +: + +```{=html} +Name of the person or organization creating the extended + element +``` + +Condition + +: + +> mandatory + +### Source extent {#iso19115-3.2018-elem-mri-sourceExtent-3c6ed438e292db496d6517c3534f17a7} + +Name + +: + +> mri:sourceExtent + +Description + +: + +```{=html} +Information about the spatial, vertical and temporal extent of + the source + data +``` + +Condition + +: + +> conditional + +### South bound {#iso19115-3.2018-elem-mri-southBoundLatitude-4ddecaaf6237fcc1c5d40358875edf7c} + +Name + +: + +> mri:southBoundLatitude + +Description + +: + +```{=html} +Southern-most coordinate of the limit of the dataset extent, + expressed in + latitude in decimal degrees (positive north) +``` + +Condition + +: + +> mandatory + +### Spatial representation type {#iso19115-3.2018-elem-mri-spatialRepresentationType-e3208e8cd1381b9fc68b3aeea9b717bc} + +Name + +: + +> mri:spatialRepresentationType + +Description + +: + +```{=html} +Method used to spatially represent geographic information +``` +``` xml + + + +``` + +### Spatial resolution {#iso19115-3.2018-elem-mri-spatialResolution-21e177ffd817c0d4ab98dbb85f2023f4} + +Name + +: + +> mri:spatialResolution + +Description + +: + +```{=html} +Factor which provides a general understanding of the density of + spatial data in + the dataset +``` +``` xml + + + + + + 25000 + + + + + +``` + +### Specification {#iso19115-3.2018-elem-mri-specification-mri-DQ_ConformanceResult-b7cc00be1811025bfd6d444339699780} + +Name + +: + +> mri:specification + +Context + +: + +> mri:DQ_ConformanceResult + +Description + +: + +```{=html} +Citation of product specification or user requirement against + which data is + being evaluated +``` + +Condition + +: + +> mandatory + +### Specification {#iso19115-3.2018-elem-mri-specification-mri-MD_Format-7df5c14f28cb23cf5b04ecb8bc52a50d} + +Name + +: + +> mri:specification + +Context + +: + +> mri:MD_Format + +Description + +: + +```{=html} +Name of a subset, profile, or product specification of the + format +``` +### Specification {#iso19115-3.2018-elem-mri-specification-da131cbaabfe65e6342437511b16716f} + +Name + +: + +> mri:specification + +Description + +: + +### Specific usage {#iso19115-3.2018-elem-mri-specificUsage-e10bbb146f9122f24b86bd27cd582a0b} + +Name + +: + +> mri:specificUsage + +Description + +: + +```{=html} +Brief description of the resource and/or resource series + usage +``` + +Condition + +: + +> mandatory + +### Status {#iso19115-3.2018-elem-mri-status-cc6f58a635c230364c21dcd8822e7ebd} + +Name + +: + +> mri:status + +Description + +: + +```{=html} +Status of the resource(s) +``` +``` xml + + + +``` + +### Subset {#iso19115-3.2018-elem-mri-subset-e094e68292e2fa9500f0d6380981f185} + +Name + +: + +> mri:subset + +Description + +: + +```{=html} +Subset +``` +### Superset {#iso19115-3.2018-elem-mri-superset-786873bc68f8c3a000a3fd54ece6fb6f} + +Name + +: + +> mri:superset + +Description + +: + +```{=html} +Superset +``` +### Supplemental Information {#iso19115-3.2018-elem-mri-supplementalInformation-84665de001cb75c50eb593b3a9366f70} + +Name + +: + +> mri:supplementalInformation + +Description + +: + +```{=html} +Any other descriptive information about the dataset +``` +### Temporal resolution {#iso19115-3.2018-elem-mri-temporalResolution-50d263b81d8636c123eea3bcb704872d} + +Name + +: + +> mri:temporalResolution + +Description + +: + +```{=html} +Smallest resolvable temporal period in a resource +``` +### TextGroup {#iso19115-3.2018-elem-mri-textGroup-f5fee81a35f938add5c2959da2e0944a} + +Name + +: + +> mri:textGroup + +Description + +: + +```{=html} +TextGroup +``` +### Thesaurus name {#iso19115-3.2018-elem-mri-thesaurusName-fdfd987e5e74c33c17af7d710026a114} + +Name + +: + +> mri:thesaurusName + +Description + +: + +```{=html} +Name of the formally registered thesaurus or a similar + authoritative source of + keywords +``` +### Title {#iso19115-3.2018-elem-mri-title-mri-MD_Legislation-87bbb0dc3d29b30cec5bdf043159fec3} + +Name + +: + +> mri:title + +Context + +: + +> mri:MD_Legislation + +Description + +: + +```{=html} +Reference to legal title +``` +### Topic category {#iso19115-3.2018-elem-mri-topicCategory-3384f3f2b46b6851db1e3c2ac2404477} + +Name + +: + +> mri:topicCategory + +Description + +: + +```{=html} +Main theme(s) of the dataset +``` + +Condition + +: + +> mandatory + +### Topology level {#iso19115-3.2018-elem-mri-topologyLevel-c192e149d637dd11a6735e4ab2793cce} + +Name + +: + +> mri:topologyLevel + +Description + +: + +```{=html} +Code which identifies the degree of complexity of the spatial + relationships +``` +### Transformation dimension description {#iso19115-3.2018-elem-mri-transformationDimensionDescription-7817f43a4aedff49f2770b81155bd879} + +Name + +: + +> mri:transformationDimensionDescription + +Description + +: + +```{=html} +Description of the information about which grid dimensions are + the spatial + dimensions +``` +### Transformation dimension mapping {#iso19115-3.2018-elem-mri-transformationDimensionMapping-af6c96c0b976aae72d391badb572d556} + +Name + +: + +> mri:transformationDimensionMapping + +Description + +: + +```{=html} +Information about which grid dimensions are the spatial + dimensions +``` +### Transformation parameter availability {#iso19115-3.2018-elem-mri-transformationParameterAvailability-00ae4b9f58a82c8747c05290206e073c} + +Name + +: + +> mri:transformationParameterAvailability + +Description + +: + +```{=html} +Indication of whether or not parameters for transformation + between image + coordinates and geographic or map coordinates exist (are available) +``` + +Condition + +: + +> mandatory + +### Type {#iso19115-3.2018-elem-mri-type-c713af5b3e37409f862f317150418a43} + +Name + +: + +> mri:type + +Description + +: + +```{=html} +Subject matter used to group similar keywords +``` +### Type {#iso19115-3.2018-elem-mri-type-mri-MD_CodeDomain-f36524bc9b2bcff08dc13b26a6f1c412} + +Name + +: + +> mri:type + +Context + +: + +> mri:MD_CodeDomain + +Description + +: + +```{=html} +Datatype of the code domain +``` +### Type definition {#iso19115-3.2018-elem-mri-type-mri-MD_Type-509a3b36cee46d21f76032143452c3df} + +Name + +: + +> mri:type + +Context + +: + +> mri:MD_Type + +Description + +: + +```{=html} +Data type definition +``` +```{=html} +Data type definition, formal of informal (i.e. Text12, Line) +``` +### Update scope {#iso19115-3.2018-elem-mri-updateScope-2f6505dc9e21679f55889d5d3dab55f0} + +Name + +: + +> mri:updateScope + +Description + +: + +```{=html} +Scope of data to which maintenance is applied +``` +### Update scope description {#iso19115-3.2018-elem-mri-updateScopeDescription-4ed2c444d7ad67f7d337a115667d00f4} + +Name + +: + +> mri:updateScopeDescription + +Description + +: + +```{=html} +Additional information about the range or extent of the + resource +``` +### URL {#iso19115-3.2018-elem-mri-URL-ade84020707f315475cd2242c01dd25a} + +Name + +: + +> mri:URL + +Description + +: + +```{=html} +URL +``` +### Usage datetime {#iso19115-3.2018-elem-mri-usageDateTime-cb7d2c81941c09afc3a52bfc79bf71fb} + +Name + +: + +> mri:usageDateTime + +Description + +: + +```{=html} +Date and time of the first use or range of uses of the resource + and/or resource + series (YYYY-MM-DDThh:mm:ss) +``` +### User contact info {#iso19115-3.2018-elem-mri-userContactInfo-a2ba616281c1660c5480ee85e959ee52} + +Name + +: + +> mri:userContactInfo + +Description + +: + +```{=html} +Identification of and means of communicating with person(s) and + organization(s) + using the resource(s) +``` + +Condition + +: + +> mandatory + +### User determined limitations {#iso19115-3.2018-elem-mri-userDeterminedLimitations-cbd92baf556f2b19980a621ce6c02254} + +Name + +: + +> mri:userDeterminedLimitations + +Description + +: + +```{=html} +Applications, determined by the user for which the resource + and/or resource + series is not suitable +``` +### Version {#iso19115-3.2018-elem-mri-version-mri-RS_Identifier-21131c5f6a0db9532cc8ee120d605769} + +Name + +: + +> mri:version + +Context + +: + +> mri:RS_Identifier + +Description + +: + +```{=html} +Version identifier for the namespace +``` +### Version {#iso19115-3.2018-elem-mri-version-37b307063b9e962d1848882bb4e6cfbd} + +Name + +: + +> mri:version + +Description + +: + +```{=html} +Version of the format (date, number, etc.) +``` + +Condition + +: + +> mandatory + +### Vertical sampling distance {#iso19115-3.2018-elem-mri-vertical-43bcad35797e8b97a17410d5045328f0} + +Name + +: + +> mri:vertical + +Description + +: + +```{=html} +Vertical sampling distance +``` +### Voice {#iso19115-3.2018-elem-mri-voice-8b6d31c838c1369223d55ee98798ca8f} + +Name + +: + +> mri:voice + +Description + +: + +```{=html} +Telephone number by which individuals can speak to the + responsible organization + or individual +``` +### West bound {#iso19115-3.2018-elem-mri-westBoundLongitude-ce82ae6636f5b594044aada5c51913ac} + +Name + +: + +> mri:westBoundLongitude + +Description + +: + +```{=html} +Western-most coordinate of the limit of the dataset extent, + expressed in + longitude in decimal degrees (positive east) +``` + +Condition + +: + +> mandatory + +### Additional doc. {#iso19115-3.2018-elem-mrl-additionalDocumentation-f113e2c0288a07cf4fe6882d11069fad} + +Name + +: + +> mrl:additionalDocumentation + +Description + +: + +### Description {#iso19115-3.2018-elem-mrl-description-a45016f67dc027509d26734d33ba598c} + +Name + +: + +> mrl:description + +Description + +: + +### Description {#iso19115-3.2018-elem-mrl-description-mrl-LI_Source-3f37e9df548dbad7ccfc5a97b569f6bb} + +Name + +: + +> mrl:description + +Context + +: + +> mrl:LI_Source + +Description + +: + +```{=html} +Detailed description of the level of the source data +``` +### File type {#iso19115-3.2018-elem-mrl-fileType-34ce7f3d07796298fa2fd3be3ca9f725} + +Name + +: + +> mrl:fileType + +Description + +: + +### Process step {#iso19115-3.2018-elem-mrl-LE_ProcessStep-34c17a1d181ee4939772d7207becf6ee} + +Name + +: + +> mrl:LE_ProcessStep + +Description + +: + +### Process step report {#iso19115-3.2018-elem-mrl-LE_ProcessStepReport-7f36ac19621de69c869f50fffa5888f6} + +Name + +: + +> mrl:LE_ProcessStepReport + +Description + +: + +### Source (imagery) {#iso19115-3.2018-elem-mrl-LE_Source-966e475433745f44485a80b7d3d67a5b} + +Name + +: + +> mrl:LE_Source + +Description + +: + +### Lineage {#iso19115-3.2018-elem-mrl-LI_Lineage-f498f5aafe17748455864fd3fb332568} + +Name + +: + +> mrl:LI_Lineage + +Description + +: + +```{=html} +Information about the events or source data used in + constructing the data + specified by the scope or lack of knowledge about lineage +``` +``` xml + + + Généalogie du jeu de données + + + + + + + + + +``` + +### Process step (imagery) {#iso19115-3.2018-elem-mrl-LI_ProcessStep-523fb797e15543dcd78820cf7da6a353} + +Name + +: + +> mrl:LI_ProcessStep + +Description + +: + +### Source {#iso19115-3.2018-elem-mrl-LI_Source-516cbe9c5aee24a2298148e192b1b430} + +Name + +: + +> mrl:LI_Source + +Description + +: + +### Name {#iso19115-3.2018-elem-mrl-name-c3ddefc350a7df82d699cd21db3265bb} + +Name + +: + +> mrl:name + +Description + +: + +### Output {#iso19115-3.2018-elem-mrl-output-7b92f6eed5c27bf127bcd1b00ba02bd2} + +Name + +: + +> mrl:output + +Description + +: + +### Processed level {#iso19115-3.2018-elem-mrl-processedLevel-a16a0921791d25b12c661d6b523823fd} + +Name + +: + +> mrl:processedLevel + +Description + +: + +### Information sur le processus {#iso19115-3.2018-elem-mrl-processingInformation-43dcf9a95a6b46ecd38081b26ad4405c} + +Name + +: + +> mrl:processingInformation + +Description + +: + +### Processor {#iso19115-3.2018-elem-mrl-processor-d25f51596af7f766fb5e2e2d235b8d38} + +Name + +: + +> mrl:processor + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) + and + organization(s) associated with the process step +``` +### Process step {#iso19115-3.2018-elem-mrl-processStep-b30816d20fac90a8f4714473ce039ab6} + +Name + +: + +> mrl:processStep + +Description + +: + +```{=html} +Information about an event in the creation process for the data + specified by + the scope +``` + +Condition + +: + +> conditional + +### Rationale {#iso19115-3.2018-elem-mrl-rationale-80f6a85b661cb0e1343a18c85fef1c6a} + +Name + +: + +> mrl:rationale + +Description + +: + +```{=html} +Requirement or purpose for the process step +``` +### Reference {#iso19115-3.2018-elem-mrl-reference-f0e0b120539f104664b10ed341d78e1c} + +Name + +: + +> mrl:reference + +Description + +: + +### Report {#iso19115-3.2018-elem-mrl-report-a6ace6224eaf1048b4fa5a64e3ed3c8d} + +Name + +: + +> mrl:report + +Description + +: + +### Resolution {#iso19115-3.2018-elem-mrl-resolution-4a197894c21de3f79a1db7fd8cdef215} + +Name + +: + +> mrl:resolution + +Description + +: + +```{=html} +Degree of detail in the grid dataset +``` +### Scope {#iso19115-3.2018-elem-mrl-scope-6d6d5c1accac2c5584b8d24677b8e466} + +Name + +: + +> mrl:scope + +Description + +: + +```{=html} +Type of resource and/or extent to which the lineage + information applies +``` +``` xml + + + + + + + +``` + +### Source {#iso19115-3.2018-elem-mrl-source-f9e07e326a4d78299bfa20d20350d4e5} + +Name + +: + +> mrl:source + +Description + +: + +```{=html} +Information about the source data used in creating the data + specified by the + scope +``` + +Condition + +: + +> mandatory + +### Source citation {#iso19115-3.2018-elem-mrl-sourceCitation-493609aa2a1f745385660e829fa9dfb4} + +Name + +: + +> mrl:sourceCitation + +Description + +: + +```{=html} +Recommended reference to be used for the source data +``` +### Source Metadata {#iso19115-3.2018-elem-mrl-sourceMetadata-e2c32177f459ed654ad740ae7a82c89a} + +Name + +: + +> mrl:sourceMetadata + +Description + +: + +```{=html} +Reference to metadata for the source +``` + +Condition + +: + +> optional + +### Source reference system {#iso19115-3.2018-elem-mrl-sourceReferenceSystem-1037d7bf6f0b485f262e4322cb9e37cf} + +Name + +: + +> mrl:sourceReferenceSystem + +Description + +: + +```{=html} +Spatial reference system used by the source data +``` +### Source spatial resolution {#iso19115-3.2018-elem-mrl-sourceSpatialResolution-cf018c59a91f5566c1b1783f2acbd27d} + +Name + +: + +> mrl:sourceSpatialResolution + +Description + +: + +```{=html} +spatial resolution expressed as a scale factor, a distance, an + angle or a level of detail +``` + +Condition + +: + +> optional + +### Source step {#iso19115-3.2018-elem-mrl-sourceStep-mrl-LI_Source-df0d740b9f8a72af86d6f0c7adee8c72} + +Name + +: + +> mrl:sourceStep + +Context + +: + +> mrl:LI_Source + +Description + +: + +```{=html} +Information about a process step in which this source was + used +``` + +Condition + +: + +> optional + +### Source step {#iso19115-3.2018-elem-mrl-sourceStep-7a3ac763c9a58974ba992b5b15f42c8e} + +Name + +: + +> mrl:sourceStep + +Description + +: + +```{=html} +Information about an event in the creation process for the + source + data +``` +### Statement {#iso19115-3.2018-elem-mrl-statement-889c16bd4aae51af718de1e5d417231b} + +Name + +: + +> mrl:statement + +Description + +: + +```{=html} +General explanation of the data producer_s knowledge about the + lineage of a + dataset +``` + +Condition + +: + +> conditional + +``` xml + + Généalogie du jeu de données + +``` + +### Step date time {#iso19115-3.2018-elem-mrl-stepDateTime-ff4d18ce2643f44151f2edb998f6d42d} + +Name + +: + +> mrl:stepDateTime + +Description + +: + +### Reference system {#iso19115-3.2018-elem-mrs-MD_ReferenceSystem-75f781a6e44f220db44fb9f797143583} + +Name + +: + +> mrs:MD_ReferenceSystem + +Description + +: + +```{=html} +Information about the reference system. +``` +```{=html} +information about the reference system +``` +``` xml + + + + + http://www.opengis.net/def/crs/EPSG/0/3035 + + + + +``` + +### Reference system identifier {#iso19115-3.2018-elem-mrs-referenceSystemIdentifier-c940c3e9ba051b44e2041d768ac777c8} + +Name + +: + +> mrs:referenceSystemIdentifier + +Description + +: + +```{=html} +Name of reference system +``` + +Condition + +: + +> conditional + +``` xml + + + + http://www.opengis.net/def/crs/EPSG/0/3035 + + + +``` + +### Reference system type {#iso19115-3.2018-elem-mrs-referenceSystemType-9165956812eecd1c7858dd599ce31ca8} + +Name + +: + +> mrs:referenceSystemType + +Description + +: + +```{=html} +Type of reference system used Example + compoundGeographic2DParametric +``` +### Axis dimension properties {#iso19115-3.2018-elem-msr-axisDimensionProperties-073ec35418d10c4f0c137378a6134493} + +Name + +: + +> msr:axisDimensionProperties + +Description + +: + +```{=html} +Information about spatial-temporal axis properties +``` + +Condition + +: + +> mandatory + +### Cell geometry {#iso19115-3.2018-elem-msr-cellGeometry-3a6cc41f54ba7d4c75eee03be5598318} + +Name + +: + +> msr:cellGeometry + +Description + +: + +```{=html} +Identification of grid data as point or cell +``` + +Condition + +: + +> mandatory + +### Point central {#iso19115-3.2018-elem-msr-centrePoint-f92f835c824050de5f3fbf6f008870a8} + +Name + +: + +> msr:centrePoint + +Description + +: + +```{=html} +Position terrestre dans le système de coordonnées + définie par le système de références spatiales et la coordonnée dans la + grille de la cellule située à mi-chemin entre les extrémités opposées de + la grille selon les dimensions spatiales. +``` + +Condition + +: + +> optional + +### Check point availability {#iso19115-3.2018-elem-msr-checkPointAvailability-eede9501cd9cc8710550fe01f8fe1cee} + +Name + +: + +> msr:checkPointAvailability + +Description + +: + +```{=html} +Indication of whether or not geographic position + points are available to test the accuracy of the georeferenced grid data +``` + +Condition + +: + +> mandatory + +### Check point description {#iso19115-3.2018-elem-msr-checkPointDescription-226168985a0798a955267fbc21aacab4} + +Name + +: + +> msr:checkPointDescription + +Description + +: + +```{=html} +Description of geographic position points used to + test the accuracy of the georeferenced grid data +``` +### Compliance code {#iso19115-3.2018-elem-msr-complianceCode-f13f2f65f47a827bb9bbea5e092edad1} + +Name + +: + +> msr:complianceCode + +Description + +: + +```{=html} +Indication of whether or not the cited feature + catalogue complies with ISO 191109110 +``` + +Condition + +: + +> optional + +### Control point availability {#iso19115-3.2018-elem-msr-controlPointAvailability-c7d5efb26ca7e4ef90f8ad058e99ae88} + +Name + +: + +> msr:controlPointAvailability + +Description + +: + +```{=html} +Indication of whether or not control point(s) + existse existent +``` + +Condition + +: + +> mandatory + +### Corner points {#iso19115-3.2018-elem-msr-cornerPoints-3c2edbd5ef81dec63afd53ca43db0765} + +Name + +: + +> msr:cornerPoints + +Description + +: + +```{=html} +Earth location in the coordinate system defined by + the Spatial Reference System and the grid coordinate of the cells at + opposite ends of grid coverage along two diagonals in the grid spatial + dimensions NOTE There are four corner points in a georectified grid; at + least two corner points along one diagonal are required. The first corner + point corresponds to the origin of the grid.. +``` + +Condition + +: + +> optional + +### Dimension description {#iso19115-3.2018-elem-msr-dimensionDescription-069e485d9f5957e96240c0b98bc04124} + +Name + +: + +> msr:dimensionDescription + +Description + +: + +```{=html} +Description of the axis +``` + +Condition + +: + +> optional + +### Dimension name {#iso19115-3.2018-elem-msr-dimensionName-c36a4acbeab1e6196344534c31664de1} + +Name + +: + +> msr:dimensionName + +Description + +: + +```{=html} +Name of the axis +``` + +Condition + +: + +> mandatory + +### Dimension size {#iso19115-3.2018-elem-msr-dimensionSize-9f8a6d21785fddccf25ed28f463ff82c} + +Name + +: + +> msr:dimensionSize + +Description + +: + +```{=html} +Number of elements along the axis +``` + +Condition + +: + +> mandatory + +### Dimension title {#iso19115-3.2018-elem-msr-dimensionTitle-cfbbd35244998db6fedc70383d0b1a4f} + +Name + +: + +> msr:dimensionTitle + +Description + +: + +```{=html} +enhancement/modifier of the dimension name. EXAMPLE + dimensionName = “column” dimensionTitle = “Longitude” +``` + +Condition + +: + +> optional + +### Feature catalogue citation {#iso19115-3.2018-elem-msr-featureCatalogueCitation-86dcf88571deb3bc83ffd96f17063b0c} + +Name + +: + +> msr:featureCatalogueCitation + +Description + +: + +```{=html} +complete bibliographic reference to one or more + external feature catalogues +``` +### Feature types {#iso19115-3.2018-elem-msr-featureTypes-4eff89188c1d3db76667047f6cf6badc} + +Name + +: + +> msr:featureTypes + +Description + +: + +```{=html} +Subset of feature types from cited feature catalogue + occurring in resource and count of feature instances +``` + +Condition + +: + +> optional + +### Geometric object count {#iso19115-3.2018-elem-msr-geometricObjectCount-c1286bf556b766a23d0f4f8dc8876b1b} + +Name + +: + +> msr:geometricObjectCount + +Description + +: + +```{=html} +Total number of the point or vector object type + occurring in the dataset +``` + +Condition + +: + +> optional + +### Geometric objects {#iso19115-3.2018-elem-msr-geometricObjects-a372c8a09516b77dbe0b8670c1022008} + +Name + +: + +> msr:geometricObjects + +Description + +: + +```{=html} +Information about the geometric objects used in the + resource +``` + +Condition + +: + +> optional + +### Geometric object type {#iso19115-3.2018-elem-msr-geometricObjectType-c9165f96bf9fa94f81beca9336981531} + +Name + +: + +> msr:geometricObjectType + +Description + +: + +```{=html} +Name of point or vector objects used to locate + zero-, one-, two-, or three-dimensional spatial locations in the resource +``` + +Condition + +: + +> mandatory + +### Georeferenced parameters {#iso19115-3.2018-elem-msr-georeferencedParameters-c9d8550ed978763e23072bb01554fefa} + +Name + +: + +> msr:georeferencedParameters + +Description + +: + +```{=html} +Terms which support grid data georeferencing +``` + +Condition + +: + +> mandatory + +### Included with dataset {#iso19115-3.2018-elem-msr-includedWithDataset-595a7c08cab2d676de4bdce06cbac54e} + +Name + +: + +> msr:includedWithDataset + +Description + +: + +```{=html} +Indication of whether or not the feature catalogue + is included with the resource +``` + +Condition + +: + +> optional + +### Locale {#iso19115-3.2018-elem-msr-locale-f20a8851d10c4ed34e8953c641b28abd} + +Name + +: + +> msr:locale + +Description + +: + +```{=html} +Language(s) and character set(s) used within the + catalogue +``` + +Condition + +: + +> optional + +### ContentInformation {#iso19115-3.2018-elem-msr-MD_ContentInformation-dc1f6d0dc9b01792c811602b6b31fd6d} + +Name + +: + +> msr:MD_ContentInformation + +Description + +: + +```{=html} +description of the content of a resource +``` +### Dimension {#iso19115-3.2018-elem-msr-MD_Dimension-87ab48f712228b93b6951a4260df02c6} + +Name + +: + +> msr:MD_Dimension + +Description + +: + +```{=html} +Axis properties +``` +### Name {#iso19115-3.2018-elem-msr-MD_DimensionNameTypeCode-37d039177e852fd253d6c21c02fe5ae7} + +Name + +: + +> msr:MD_DimensionNameTypeCode + +Description + +: + +### Standard codelists Name (msr:MD_DimensionNameTypeCode) + +| code | label | description | +|------------|-------------|------------------------------------------------------------| +| row | Row | Ordinate (y) axis | +| column | Column | Abscissa (x) axis | +| vertical | Vertical | Vertical (z) axis | +| track | Track | Along the direction of motion of the scan point | +| crossTrack | Cross track | Perpendicular to the direction of motion of the scan point | +| line | Line | Scan line of a sensor | +| sample | Sample | Element along a scan line | +| time | Time | Duration | + +### Feature catalogue description {#iso19115-3.2018-elem-msr-MD_FeatureCatalogueDescription-19307415e31a221cf4c2a6153a0eb8b8} + +Name + +: + +> msr:MD_FeatureCatalogueDescription + +Description + +: + +```{=html} +Information identifying the feature catalogue or the + conceptual schema +``` +### Geometric objects {#iso19115-3.2018-elem-msr-MD_GeometricObjects-75921e796523b0c5e9e75e059ce2373d} + +Name + +: + +> msr:MD_GeometricObjects + +Description + +: + +```{=html} +Number of objects, listed by geometric object type, + used in the resource +``` +### Georectified {#iso19115-3.2018-elem-msr-MD_Georectified-cb54f6a4733d966162a4d43f454cd92b} + +Name + +: + +> msr:MD_Georectified + +Description + +: + +```{=html} +Grid whose cells are regularly spaced in a + geographic (i.e., lat / long) or map coordinate system defined in the + Spatial Referencing System (SRS) so that any cell in the grid can be + geolocated given its grid coordinate and the grid origin, cell spacing, + and orientation +``` +### Georeferenceable {#iso19115-3.2018-elem-msr-MD_Georeferenceable-858db82597d26c7495c70c557fae1a4a} + +Name + +: + +> msr:MD_Georeferenceable + +Description + +: + +```{=html} +Grid with cells irregularly spaced in any given + geographic/map projection coordinate system, whose individual cells can be + eolocated using geolocation information supplied with the data but cannot + be geolocated from the grid properties alone +``` +### Grid spatial representation {#iso19115-3.2018-elem-msr-MD_GridSpatialRepresentation-a05d8ac70cdbde9496a5c63a5dc94f3d} + +Name + +: + +> msr:MD_GridSpatialRepresentation + +Description + +: + +```{=html} +Information about grid spatial objects in the + resource +``` +### Pixel orientation code {#iso19115-3.2018-elem-msr-MD_PixelOrientationCode-70d12e70676ab7a22eaf4b94d24fdc11} + +Name + +: + +> msr:MD_PixelOrientationCode + +Description + +: + +```{=html} +Point in a pixel corresponding to the Earth location of the + pixel +``` +### Standard codelists Pixel orientation code (msr:MD_PixelOrientationCode) + +| code | label | description | +|------------|-------------|----------------------------------------------------------------------------------------------------------------------------------------------| +| center | Center | Point halfway between the lower left and the upper right of the pixel | +| lowerLeft | Lower left | The corner in the pixel closest to the origin of the SRS; if two are at the same distance from the origin, the one with the smallest x-value | +| lowerRight | Lower right | Next corner counterclockwise from the lower left | +| upperRight | Upper right | Next corner counterclockwise from the lower right | +| upperLeft | Upper left | Next corner counterclockwise from the upper right | + +### Reference system {#iso19115-3.2018-elem-msr-MD_ReferenceSystem-050bc2ad30ca0aa0877ac3c39ead49a6} + +Name + +: + +> msr:MD_ReferenceSystem + +Description + +: + +```{=html} +Information about the reference system +``` +### Vector spatial sepresentation {#iso19115-3.2018-elem-msr-MD_VectorSpatialRepresentation-995972e18071d37f9476492d224d6186} + +Name + +: + +> msr:MD_VectorSpatialRepresentation + +Description + +: + +```{=html} +Information about the vector spatial objects in the + resource +``` +### Number of dimensions {#iso19115-3.2018-elem-msr-numberOfDimensions-e13eac032aba12c4d1306effd633cd91} + +Name + +: + +> msr:numberOfDimensions + +Description + +: + +```{=html} +Number of independent spatial-temporal axes +``` + +Condition + +: + +> mandatory + +### Orientation parameter availability {#iso19115-3.2018-elem-msr-orientationParameterAvailability-69856b25d667d8d93e60b54298dc7321} + +Name + +: + +> msr:orientationParameterAvailability + +Description + +: + +```{=html} +Indication of whether or not orientation parameters + are available +``` + +Condition + +: + +> mandatory + +### Orientation parameter description {#iso19115-3.2018-elem-msr-orientationParameterDescription-73c93e809e439a9e74b59660193a9e5b} + +Name + +: + +> msr:orientationParameterDescription + +Description + +: + +```{=html} +Description of parameters used to describe sensor + orientation +``` + +Condition + +: + +> optional + +### Parameter citation {#iso19115-3.2018-elem-msr-parameterCitation-f73ae3a2b90e81efc9580944ce22b2ac} + +Name + +: + +> msr:parameterCitation + +Description + +: + +```{=html} +reference providing description of the parameters +``` + +Condition + +: + +> optional + +### Point in pixel {#iso19115-3.2018-elem-msr-pointInPixel-0af6deb11128e3f4a2ff8b0977992bfa} + +Name + +: + +> msr:pointInPixel + +Description + +: + +```{=html} +earth location in the coordinate system defined by + the Spatial Reference System and the grid coordinate of the cell halfway + between opposite ends of the grid in the spatial dimensions +``` + +Condition + +: + +> mandatory + +### Reference system identifier {#iso19115-3.2018-elem-msr-referenceSystemIdentifier-09e68463a6d485661dea8c8ee60f200c} + +Name + +: + +> msr:referenceSystemIdentifier + +Description + +: + +```{=html} +identifier and codespace for reference system.: NOTE + Refer to SC_CRS in ISO 19111 and ISO 19111-2 when coordinate reference + system information is not given through reference system identifier. + EXAMPLE EPSG::4326 +``` + +Condition + +: + +> optional + +### Reference system type {#iso19115-3.2018-elem-msr-referenceSystemType-ceb046628f892e9275b16576075da590} + +Name + +: + +> msr:referenceSystemType + +Description + +: + +```{=html} +Type of reference system used. EXAMPLE + compoundGeographic2DParametric +``` + +Condition + +: + +> optional + +### Resolution {#iso19115-3.2018-elem-msr-resolution-8c31d92119d27e90a500ba143ebba523} + +Name + +: + +> msr:resolution + +Description + +: + +```{=html} +Degree of detail in the grid dataset +``` + +Condition + +: + +> optional + +Recommended values + +| code | label | +|------|---------| +| 1 | seconds | +| 1 | minutes | +| 1 | hours | +| 1 | days | +| 1 | months | +| 1 | years | + +### Scope {#iso19115-3.2018-elem-msr-scope-09241cd1dbd4fe44de5bfc2286fbf809} + +Name + +: + +> msr:scope + +Description + +: + +### Topology level {#iso19115-3.2018-elem-msr-topologyLevel-be67871bdfef340e4c64d23ce720309f} + +Name + +: + +> msr:topologyLevel + +Description + +: + +```{=html} +Code which identifies the degree of complexity of + the spatial relationships +``` + +Condition + +: + +> optional + +### Transformation dimension description {#iso19115-3.2018-elem-msr-transformationDimensionDescription-d8267d48e06a28d23995f4d15632df06} + +Name + +: + +> msr:transformationDimensionDescription + +Description + +: + +```{=html} +General description of the transformation +``` + +Condition + +: + +> optional + +### Transformation dimension mapping {#iso19115-3.2018-elem-msr-transformationDimensionMapping-096dd7aa9d987551a7fc05916ab175e5} + +Name + +: + +> msr:transformationDimensionMapping + +Description + +: + +```{=html} +information about which grid axes are the spatial + (map) axes +``` + +Condition + +: + +> optional + +### Transformation parameter availability {#iso19115-3.2018-elem-msr-transformationParameterAvailability-6b1938c019c8c19dfd766adb28ac8ad2} + +Name + +: + +> msr:transformationParameterAvailability + +Description + +: + +```{=html} +Indication of whether or not parameters for + transformation between image coordinates and geographic or map coordinates + exist (are available) +``` + +Condition + +: + +> mandatory + +### Owns {#iso19115-3.2018-elem-owns-07532653d8de43dc6b0895600811d193} + +Name + +: + +> owns + +Description + +: + +### Radix {#iso19115-3.2018-elem-radix-d838eab62c3144df803ddaa55d6095bc} + +Name + +: + +> radix + +Description + +: + +### Amendment Type {#iso19115-3.2018-elem-reg-RE_AmendmentType-bc6ddbef5ca2d044bee06fd1e05fb752} + +Name + +: + +> reg:RE_AmendmentType + +Description + +: + +### Standard codelists Amendment Type (reg:RE_AmendmentType) + +| code | label | description | +|-------------------------|-------------------------|-------------| +| supersession retirement | Supersession Retirement | | + +### Decision status {#iso19115-3.2018-elem-reg-RE_DecisionStatus-66fa1c01ac218aa9877e8385d9191958} + +Name + +: + +> reg:RE_DecisionStatus + +Description + +: + +### Standard codelists Decision status (reg:RE_DecisionStatus) + +| code | label | description | +|-------------------------|-------------------------|-------------| +| pending tentative final | Pending Tentative Final | | + +### Disposition {#iso19115-3.2018-elem-reg-RE_Disposition-a0b74f296840fca012ef83c90e5652f1} + +Name + +: + +> reg:RE_Disposition + +Description + +: + +### Standard codelists Disposition (reg:RE_Disposition) + +| code | label | description | +|--------------------------------|---------------------------------|-------------| +| withdrawn accepted notAccepted | Withdrawn Accepted Not Accepted | | + +### Item status {#iso19115-3.2018-elem-reg-RE_ItemStatus-89ad94dd47ec1c6aee8e600828b872d9} + +Name + +: + +> reg:RE_ItemStatus + +Description + +: + +### Standard codelists Item status (reg:RE_ItemStatus) + +| code | label | description | +|-----------------------------------|------------------------------------|-------------| +| notValid valid superseded retired | Not Valid Valid Superseded Retired | | + +### Relative position {#iso19115-3.2018-elem-relativePosition-9b7022d59a1a04be5c97e5183ed0dad1} + +Name + +: + +> relativePosition + +Description + +: + +### Source URL {#iso19115-3.2018-elem-src-3f3e4b17ba622503c28a6c57e4bf00ed} + +Name + +: + +> src + +Description + +: + +```{=html} +URL of the document. +``` +### Access Properties {#iso19115-3.2018-elem-srv-accessProperties-1dcd3beb74b9676cd785381643761876} + +Name + +: + +> srv:accessProperties + +Description + +: + +```{=html} +Information about the availability of the service eg. fees, + availability, + oredering instructions +``` +### Connect Point {#iso19115-3.2018-elem-srv-connectPoint-7c5cf627952a324e2bfe7d4b61a8ad43} + +Name + +: + +> srv:connectPoint + +Description + +: + +```{=html} +Handle for accessing the service interface +``` +### Contains chain {#iso19115-3.2018-elem-srv-containsChain-27a1d0df5e650777f8e743e2f2467942} + +Name + +: + +> srv:containsChain + +Description + +: + +```{=html} +Provide information about the chain applied by the service +``` +### Contains Operations {#iso19115-3.2018-elem-srv-containsOperations-2eecc0ef056aa77980cf2310cbbf0c61} + +Name + +: + +> srv:containsOperations + +Description + +: + +```{=html} +Provides information about the operations that comprise the + service +``` +### Coupled Resource {#iso19115-3.2018-elem-srv-coupledResource-100ccf0b66cb2f607621adb7e3fc9faa} + +Name + +: + +> srv:coupledResource + +Description + +: + +```{=html} +Details of services coupled with this one +``` +### Coupling Type {#iso19115-3.2018-elem-srv-couplingType-d0122b98967eda4ad7f6dc04f2696288} + +Name + +: + +> srv:couplingType + +Description + +: + +```{=html} +Type of Coupling +``` +### Distributed Computing Platforms {#iso19115-3.2018-elem-srv-DCP-998f113aa8f9c2233a5eaabf47816383} + +Name + +: + +> srv:DCP + +Description + +: + +```{=html} +Distributed computing platforms on which the operation has been + implemented +``` +### Distributed Computing Platforms list {#iso19115-3.2018-elem-srv-DCPList-c62e5d011b03b39b745537e308630f03} + +Name + +: + +> srv:DCPList + +Description + +: + +### Standard codelists Distributed Computing Platforms list (srv:DCPList) + ++-------------+-------------+--------------------+ +| code | label | description | ++=============+=============+====================+ +| XML | XML | DCP is XML | ++-------------+-------------+--------------------+ +| CORBA | CORBA | DCP is CORBA | ++-------------+-------------+--------------------+ +| JAVA | JAVA | DCP is JAVA | ++-------------+-------------+--------------------+ +| COM | COM | DCP is COM | ++-------------+-------------+--------------------+ +| SQL | DCP is SQL | > SQL | ++-------------+-------------+--------------------+ +| SOAP | SOAP | DCP is SOAP | ++-------------+-------------+--------------------+ +| Z3950 | Z3950 | DCP is Z3950 | ++-------------+-------------+--------------------+ +| HTTP | HTTP | DCP is HTTP | ++-------------+-------------+--------------------+ +| FTP | FTP | DCP is FTP | ++-------------+-------------+--------------------+ +| WebServices | WebServices | DCP is WebServices | ++-------------+-------------+--------------------+ + +### Depends On {#iso19115-3.2018-elem-srv-dependsOn-1332fa3f646ce374f71ce340e90a89c8} + +Name + +: + +> srv:dependsOn + +Description + +: + +```{=html} +List of operations that must be completed immediately before + current operation + is invoked, structured as a list for capturing alternate predecessor paths + and sets for + capturing parallel predecessor paths +``` +### Description {#iso19115-3.2018-elem-srv-description-89c6b5fc52f0f104cffb29ff89a72125} + +Name + +: + +> srv:description + +Description + +: + +```{=html} +Narrative explanation of the services in the chain and + resulting output or role + of the parameter +``` +### Direction {#iso19115-3.2018-elem-srv-direction-56def65b903590f672385be14b20d5fd} + +Name + +: + +> srv:direction + +Description + +: + +### Distributed computing platform (DCP) {#iso19115-3.2018-elem-srv-distributedComputingPlatform-2d5874d202fafb73f06538a78607a586} + +Name + +: + +> srv:distributedComputingPlatform + +Description + +: + +```{=html} +DCP on which the operation has been implemented +``` +### Identifier {#iso19115-3.2018-elem-srv-identifier-cb2268470326162da9519dae784ee639} + +Name + +: + +> srv:identifier + +Description + +: + +```{=html} +Identifier of resource to which the operation applies +``` +### Invocation Name {#iso19115-3.2018-elem-srv-invocationName-f632c6f1011da90346f900f7839a33a8} + +Name + +: + +> srv:invocationName + +Description + +: + +```{=html} +The name used to invoke this interface within the context of + the DCP. The name + is identical for all DCPs +``` +### Keywords {#iso19115-3.2018-elem-srv-keywords-cb9fb095a7a8472109439348ed146d7f} + +Name + +: + +> srv:keywords + +Description + +: + +```{=html} +Keywords describing service +``` +### Name {#iso19115-3.2018-elem-srv-name-8213033a4a5d36c4b7a7a21e51058844} + +Name + +: + +> srv:name + +Description + +: + +```{=html} +The name, as used by the service for this chain or parameter +``` +### Operated dataset {#iso19115-3.2018-elem-srv-operatedDataset-feeb6f24e1ef2b2c5f23d1aaaa1ac0d1} + +Name + +: + +> srv:operatedDataset + +Description + +: + +```{=html} +Provides a reference to the resource on which the service operates. Note: For one resource either operated dataset or operates on may be used (not both). +``` +### Operates On {#iso19115-3.2018-elem-srv-operatesOn-2690cd62eaa299d9d24d44103a7c6f1d} + +Name + +: + +> srv:operatesOn + +Description + +: + +```{=html} +Provides information on the datasets that the service operates + on +``` +### Operation Description {#iso19115-3.2018-elem-srv-operationDescription-4bf280cc494e9e2d0ccbbcc1e6213185} + +Name + +: + +> srv:operationDescription + +Description + +: + +```{=html} +Free text description of the intent of the operation and the + results of the + operation +``` +### Operation Name {#iso19115-3.2018-elem-srv-operationName-ae64b692aa02e2fccc8081aae5d6fd08} + +Name + +: + +> srv:operationName + +Description + +: + +```{=html} +A unique identifier for this interface +``` +### Optionality {#iso19115-3.2018-elem-srv-optionality-62aca8e868833c95f16a1c5d9fc41ce8} + +Name + +: + +> srv:optionality + +Description + +: + +```{=html} +Indication if the parameter is required +``` +### Parameter {#iso19115-3.2018-elem-srv-parameter-efeaa89fa390b7c869522baf94cb3421} + +Name + +: + +> srv:parameter + +Description + +: + +### Parameters {#iso19115-3.2018-elem-srv-parameters-2b38d36e3a0bef6c49fff8b983deb47e} + +Name + +: + +> srv:parameters + +Description + +: + +```{=html} +The parameters that are required for this interface +``` +### Profile {#iso19115-3.2018-elem-srv-profile-8a095529da8795ed9becd1b15d1cdb6d} + +Name + +: + +> srv:profile + +Description + +: + +```{=html} +Profile to which the service adheres +``` +### Provider Name {#iso19115-3.2018-elem-srv-providerName-30341d7e33c9b0622f5fe1c7e33bf449} + +Name + +: + +> srv:providerName + +Description + +: + +```{=html} +A unique identifier for this organization +``` +### Repeatability {#iso19115-3.2018-elem-srv-repeatability-88dc3b9d192faab07e37d1aaf1b98440} + +Name + +: + +> srv:repeatability + +Description + +: + +```{=html} +Indication if more than one value of the parameter may be + provided +``` +### Restrictions {#iso19115-3.2018-elem-srv-restrictions-640e586d60c54c786ca65fa870eb7e46} + +Name + +: + +> srv:restrictions + +Description + +: + +```{=html} +Legal and security constraints on accessing the service and + distributing data + generated by the service +``` +### Service Contact {#iso19115-3.2018-elem-srv-serviceContact-ec85c67af1aecbd4739b76567523edb1} + +Name + +: + +> srv:serviceContact + +Description + +: + +```{=html} +Information for contacting the service provider +``` +### Service standard {#iso19115-3.2018-elem-srv-serviceStandard-97e92f2223295fea76badfd3355952c9} + +Name + +: + +> srv:serviceStandard + +Description + +: + +```{=html} +Standard to which the service adheres +``` +### Service Type {#iso19115-3.2018-elem-srv-serviceType-2234736c4656254dd3186e40b24d9acf} + +Name + +: + +> srv:serviceType + +Description + +: + +```{=html} +Service type name from a registry of services. For example, the + values of the + nameSpace and name attributes of GeneralName may be 'OGC' and 'catalogue' +``` +Recommended values + +| code | label | +|-----------|----------------------------| +| OGC:WMS | OGC Web Map Service | +| OGC:WMTS | OGC Web Map Tile Service | +| OGC:WFS | OGC Web Feature Service | +| OGC:WCS | OGC Web Coverage Service | +| OGC:WPS | OGC Web Processing Service | +| atom:feed | ATOM feed | + +### Service Version {#iso19115-3.2018-elem-srv-serviceTypeVersion-d13d77b6c3c1085c84121099f3e977b9} + +Name + +: + +> srv:serviceTypeVersion + +Description + +: + +```{=html} +Provides for searching based on the version of serviceType. For + example, we may + only be interested in OGC Catalogue V1.1 services. If version is + maintained as a + separate attribute, users can easily search for all services of a type + regardless of the + version +``` +### Coupled Resource {#iso19115-3.2018-elem-srv-SV_CoupledResource-58b1bb08fb2ff8e0c70e6ee5f9b5a151} + +Name + +: + +> srv:SV_CoupledResource + +Description + +: + +```{=html} +Details of services coupled with this one +``` +### Operation {#iso19115-3.2018-elem-srv-SV_OperationMetadata-3267aa3513feb299599031dd1cf78c96} + +Name + +: + +> srv:SV_OperationMetadata + +Description + +: + +```{=html} +Operation Metadata +``` +### Parameter {#iso19115-3.2018-elem-srv-SV_Parameter-6f238c83d2a447d7ff4fc3f2e7af0e88} + +Name + +: + +> srv:SV_Parameter + +Description + +: + +```{=html} +The parameters that are required for this interface +``` +### Parameter direction {#iso19115-3.2018-elem-srv-SV_ParameterDirection-7bd1f85c0b44fa0fee670d93cc089089} + +Name + +: + +> srv:SV_ParameterDirection + +Description + +: + +### Standard codelists Parameter direction (srv:SV_ParameterDirection) + +| code | label | description | +|--------|--------------|-----------------------------------------------------------------------------| +| in | Input | The parameter is an input parameter to the service instance | +| out | Output | The parameter is an output parameter to the service instance | +| in/out | Input/output | The parameter is both an input and output parameter to the service instance | + +### Service Identification {#iso19115-3.2018-elem-srv-SV_ServiceIdentification-fc7ece2ea3d136f031fb0392e774dee6} + +Name + +: + +> srv:SV_ServiceIdentification + +Description + +: + +```{=html} +Service identification section +``` +### Value type {#iso19115-3.2018-elem-srv-valueType-e15acf0ffbb059ee6c8bd9516d8d4b0c} + +Name + +: + +> srv:valueType + +Description + +: + +### Unit {#iso19115-3.2018-elem-unit-272387d5556a648743e54ae5e2dba3af} + +Name + +: + +> unit + +Description + +: + +### Units of measure {#iso19115-3.2018-elem-uom-e10669ccd649478676b9c5fafba3f843} + +Name + +: + +> uom + +Description + +: + +Recommended values + +| code | label | +|------|--------| +| m | meters | + +### Metadata uuid {#iso19115-3.2018-elem-uuidref-11480fcd74a341f26892dff0229f85c3} + +Name + +: + +> uuidref + +Description + +: + +```{=html} +Unique identifier +``` +### Link href {#iso19115-3.2018-elem-xlink-href-3546192ce8d22ae0019a3b6c851328e5} + +Name + +: + +> xlink:href + +Description + +: + +```{=html} +Supplies the data that allows an XLink application to find a + remote resource (or resource fragment) [W3C XLINK] +``` +### Type of link {#iso19115-3.2018-elem-xlink-type-bb34ecc5adb016fbd170f488e20511ca} + +Name + +: + +> xlink:type + +Description + +: + +### Nil {#iso19115-3.2018-elem-xsi-nil-6e33165974e6ce03896d82c4465e9a29} + +Name + +: + +> xsi:nil + +Description + +: + +```{=html} +Indicates that a certain element does not have a value or that the value is unknown. +``` +## Standard codelists + +List of all codelists available in the standard. + +### Standard codelists (cit:CI_TelephoneTypeCode) {#iso19115-3.2018-cl-cit-CI_TelephoneTypeCode} + +| code | label | description | +|------------|-----------|--------------------------------------| +| voice | Voice | Telephone provides voice service | +| facsimilie | Facsimile | Telephone provides facsimile service | +| sms | SMS | Telephone provides sms service | + +### Standard codelists (cit:CI_DateTypeCode) {#iso19115-3.2018-cl-cit-CI_DateTypeCode} + +| code | label | description | +|-----------------|------------------|---------------------------------------------------------------------------------------| +| creation | Creation | Date identifies when the resource was brought into existence | +| publication | Publication | Date identifies when the resource was issued | +| revision | Revision | Date identifies when the resource was examined or re-examined and improved or amended | +| expiry | Expiry | Date identifies when the resource expires | +| lastUpdate | Last Update | Date identifies when the resource was last updated | +| lastRevision | Last Revision | Date identifies when the resource was last reviewed | +| nextUpdate | Next Update | Date identifies when the resource will be next updated | +| unavailable | Unavailable | Date identifies when the resource became not available or obtainable | +| inForce | In Force | Date identifies when the resource became in force | +| adopted | Adopted | Date identifies when the resource was adopted | +| deprecated | Deprecated | Date identifies when the resource was deprecated | +| superseded | Superseded | Date identifies when the resource was superseded or replaced by another resource | +| validityBegins | Validity Begins | Date identifies when the resource is considered to be valid | +| validityExpires | Validity Expires | Date identifies when the resource is no longer considered to be valid | +| released | Released | Date identifies when the resource shall be released for public access | +| distribution | Distribution | Date identifies when an instance of the resource was distributed | + +### Standard codelists (cit:CI_OnLineFunctionCode) {#iso19115-3.2018-cl-cit-CI_OnLineFunctionCode} + +| code | label | description | +|----------------------|---------------------------------------------------|----------------------------------------------------------------------------------------| +| download | Download | Online instructions for transferring data from one storage device or system to another | +| information | Information | Online information about the resource | +| offlineAccess | Offline access | Online instructions for requesting the resource from the provider | +| order | Order | Online order process for obtening the resource | +| search | Search | Online search interface for seeking out information about the resource | +| completeMetadata doi | Complete Metadata Digital Object Identifier (DOI) | Complete metadata provided | +| browseGraphic | Browse Graphic | Browse Graphic provided | +| upload | Upload | Upload service provided | +| emailService | Email Service | Email service provided | +| browsing | Browsing | Online browsing provided | +| fileAccess | Access File | Online file access provided | + +### Standard codelists (cit:CI_PresentationFormCode) {#iso19115-3.2018-cl-cit-CI_PresentationFormCode} + +| code | label | description | +|--------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| documentDigital | Digital document | Digital representation of a primarily textual item (can contain illustrations also) | +| imageDigital | Digital image | Likeness of natural or man-made features, objects, and activities acquired through the sensing of visual or any other segment of the electromagnetic spectrum by sensors, such as thermal infrared, and high resolution radar and stored in digital format | +| documentHardcopy | Hardcopy document | Representation of a primarily textual item (can contain illustrations also) on paper, photographic material, or other media | +| imageHardcopy | Hardcopy image | Likeness of natural or man-made features, objects, and activities acquired through the sensing of visual or any other segment of the electromagnetic spectrum by sensors, such as thermal infrared, and high resolution radar and reproduced on paper, photographic material, or other media for use directly by the human user | +| mapDigital | Digital map | Map represented in raster or vector form | +| mapHardcopy | Hardcopy map | Map printed on paper, photographic material, or other media for use directly by the human user | +| modelDigital | Digital model | Multi-dimensional digital representation of a feature, process, etc. | +| modelHardcopy | Hardcopy model | 3-dimensional, physical model | +| profileDigital | Digital profile | Vertical cross-section in digital form | +| profileHardcopy | Hardcopy profile | Vertical cross-section printed on paper, etc. | +| tableDigital | Digital table | Digital representation of facts or figures systematically displayed, especially in columns | +| tableHardcopy | Hardcopy table | Representation of facts or figures systematically displayed, especially in columns, printed onpapers, photographic material, or other media | +| videoDigital | Digital video | Digital video recording | +| videoHardcopy | Hardcopy video | Video recording on film | +| audioDigital | Digital audio | Digital audio recording | +| audioHardcopy | Hardcopy audio | Audio recording delivered by analog media, such as magnetic tape | +| multimediaDigital | Multimedia digital | Information representation using simultaneously various digital modes for text, sound and image | +| multimediaHardcopy | Multimedia hardcopy | Information representation using simultaneously various analog modes for text, sound and image | +| physicalObject | Physical object | A physical object eg. rock or mineral sample, microscope slide | +| diagramDigital | Digital diagram | Information represented graphically by charts such as pie chart, bar chart and other type of diagrams and recorded in digital format | +| diagramHardcopy | Hardcopy diagram | Information represented graphically by charts such as pie chart, bar chart and other type of diagrams and printed on paper, photographic material, or other media | + +### Standard codelists Role code (cit:CI_RoleCode) {#iso19115-3.2018-cl-cit-CI_RoleCode} + +| code | label | description | +|-----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| resourceProvider | Resource provider | Party that supplies the resource | +| custodian | Custodian | Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource | +| owner | Owner | Party that owns the resource | +| user | User | Party who uses the resource | +| distributor | Distributor | Party who distributes the resource | +| originator | Originator | Party who created the resource | +| pointOfContact | Point of contact | Party who can be contacted for acquiring knowledge about or acquisition of the resource | +| principalInvestigator | Principal investigator | Key party responsible for gathering information and conducting research | +| processor | Processor | Party that has processed the data in a manner such that the resource has been modified | +| publisher | Publisher | Party who published the resource | +| author | Author | Party who authored the resource | +| sponsor | Sponsor | Party who speaks for the resource | +| coAuthor | Co-author | Party who jointly authors the resource | +| collaborator | Collaborator | Party who assists with the generation of the resource other than the principal investigator | +| editor | Editor | Party who reviewed or modified the resource to improve the content | +| mediator | Mediator | A class of entity that mediates access to the resource and for whom the resource is intended or useful | +| rightsHolder | Rights holder | Party owning or managing rights over the resource | +| contributor | Contributor | Party contributing to the resource | +| funder | Funder | Party providing monetary support for the resource | +| stakeholder | Stakeholder | Party who has an interest in the resource or the use of the resource | + +### Standard codelists (mdq:DQ_EvaluationMethodTypeCode) {#iso19115-3.2018-cl-mdq-DQ_EvaluationMethodTypeCode} + +| code | label | description | +|----------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| directInternal | Direct internal | Method of evaluating the quality of a dataset based on inspection of items within the dataset, where all data required is internal to the dataset being evaluated | +| directExternal | Direct external | Method of evaluating the quality of a dataset based on inspection of items within the dataset, where reference data external to the dataset being evaluated is required | +| indirect | Indirect | Method of evaluating the quality of a dataset based on external knowledge | + +### Standard codelists (mri:DS_AssociationTypeCode) {#iso19115-3.2018-cl-mri-DS_AssociationTypeCode} + +| code | label | description | +|------------------------|---------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| crossReference | Cross reference | Reference from one dataset to another | +| largerWorkCitation | Larger work citation | Reference to a master dataset of which this one is a part | +| partOfSeamlessDatabase | Part of seamless database | Part of the same structured set of data held in a computer | +| stereoMate | Stereo mate | Part of a set of imagery that when used together, provides three-dimensional images | +| isComposedOf | Is composed of | Reference to resources that are parts of this resource | +| collectiveTitle | Collective Title | Common title for a collection of resources. NOTE Title identifies elements of a series collectively, combined with information about what volumes are available at the source cite | +| series | Series | Associated through a common heritage such as produced to a common product specification | +| dependency | Dependency | Associated through a dependency | +| revisionOf | Revision Of | Resource is a revision of associated resource | + +### Standard codelists (mri:DS_InitiativeTypeCode) {#iso19115-3.2018-cl-mri-DS_InitiativeTypeCode} + +| code | label | description | +|---------------|---------------|-------------------------------------------------------------| +| campaign | Campaign | Series of organized planned actions | +| collection | Collection | Accumulation of datasets assembled for a specific purpose | +| exercise | Exercise | Specific performance of a function or group of functions | +| experiment | Experiment | Process designed to find if something is effective or valid | +| investigation | Investigation | Search or systematic inquiry | +| mission | Mission | Specific operation of a data collection system | +| sensor | Sensor | Device or piece of equipment which detects or records | +| operation | Operation | Action that is part of a series of actions | +| platform | Platform | Vehicle or other support base that holds a sensor | +| process | Process | Method of doing something involving a number of steps | +| program | Program | Specific planned activity | +| project | Project | Organized undertaking, research, or development | +| study | Study | Examination or investigation | +| task | Task | Piece of work | +| trial | Trial | Process of testing to discover or demonstrate something | + +### Standard codelists Role type (gfc:FC_RoleType) {#iso19115-3.2018-cl-gfc-FC_RoleType} + +| code | label | description | +|-------------|-------------|------------------------------------------| +| ordinary | Ordinary | Indicates an ordinary association. | +| aggregation | Aggregation | Indicates a UML aggregation (part role). | +| composition | Composition | Indicates a UML composition (part role). | + +### Standard codelists (mco:MD_ClassificationCode) {#iso19115-3.2018-cl-mco-MD_ClassificationCode} + +| code | label | description | +|---------------------|----------------------------|-----------------------------------------------------------------------------------------------------------| +| unclassified | Unclassified | Available for general disclosure | +| restricted | Restricted | Not for general disclosure | +| confidential | Confidential | Available for someone who can be entrusted with information | +| secret | Secret | Kept or meant to be kept private, unknown, or hidden from all but a select group of people | +| topSecret | Top secret | Of the highest secrecy | +| SBU | Sensitive But Unclassified | Although unclassified, requires strict controls over its distribution | +| forOfficialUseOnly | For Official Use Only | Unclassified information that is to be used only for official purposes determined by the designating body | +| protected | Protected | Compromise of the information could cause damage | +| limitedDistribution | Limited Distribution | Dissemination limited by designating body | + +### Standard codelists Coverage content (mrc:MD_CoverageContentTypeCode) {#iso19115-3.2018-cl-mrc-MD_CoverageContentTypeCode} + +| code | label | description | +|------------------------|-------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| image | Image | Meaningful numerical representation of a physical parameter that is not the actual value of the physical parameter | +| thematicClassification | Thematic classification | Code value with no quantitative meaning, used to represent a physical quantity | +| physicalMeasurement | Physical measurement | Value in physical units of the quantity being measured | +| auxillaryInformation | Auxillary Information | Data, usually a physical measurement, used to support the calculation of the primary physicalMeasurement coverages in the dataset. EXAMPLE: Grid of aerosol optical thickness used in the calculation of a sea surface temperature product | +| qualityInformation | Quality Information | Data used to characterize the quality of the physicalMeasurement coverages in the dataset. NOTE: Typically included in a gmi:QE_CoverageResult | +| referenceInformation | Reference Information | Data used to characterize the quality of the physicalMeasurement coverages in the dataset. NOTE: Typically included in a gmi:QE_CoverageResult | +| modelResult | Model Result | Resources with values that are calculated using a model rather than being observed or calculated from observations | +| coordinate | Coordinate | Data used to provide coordinate axis values | + +### Standard codelists (mex:MD_DatatypeCode) {#iso19115-3.2018-cl-mex-MD_DatatypeCode} + +| code | label | description | +|-----------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| class | Class | Descriptor of a set of objects that share the same attributes, operations, methods, relationships, and behavior | +| codelist | Codelist | Descriptor of a set of objects that share the same attributes, operations, methods, relationships, and behavior | +| enumeration | Enumeration | Data type whose instances form a list of named literal values, not extendable | +| codelistElement | Codelist element | Permissible value for a codelist or enumeration | +| abstractClass | Abstract class | Class that cannot be directly instantiated | +| aggregateClass | Aggregate class | Class that is composed of classes it is connected to by an aggregate relationship | +| specifiedClass | Specified class | Subclass that may be substituted for its superclass | +| datatypeClass | Datatype class | Class with few or no operations whose primary purpose is to hold the abstract state of another class for transmittal, storage, encoding or persistent storage | +| interfaceClass | Interface class | Named set of operations that characterize the behavior of an element | +| unionClass | Union class | Class describing a selection of one of the specified types | +| metaClass | Meta class | Class whose instances are classes | +| typeClass | Type class | Class used for specification of a domain of instances (objects), together with the operations applicable to the objects. A type may have attributes and associations | +| characterString | Character string | Free text field | +| integer | Integer | Numerical field | +| association | Association | Semantic relationship between two classes that involves connections among their instances | + +### Standard codelists Name (msr:MD_DimensionNameTypeCode) {#iso19115-3.2018-cl-msr-MD_DimensionNameTypeCode} + +| code | label | description | +|------------|-------------|------------------------------------------------------------| +| row | Row | Ordinate (y) axis | +| column | Column | Abscissa (x) axis | +| vertical | Vertical | Vertical (z) axis | +| track | Track | Along the direction of motion of the scan point | +| crossTrack | Cross track | Perpendicular to the direction of motion of the scan point | +| line | Line | Scan line of a sensor | +| sample | Sample | Element along a scan line | +| time | Time | Duration | + +### Standard codelists (msr:MD_GeometricObjectTypeCode) {#iso19115-3.2018-cl-msr-MD_GeometricObjectTypeCode} + +| code | label | description | +|-----------|-----------|----------------------------------------------------------------------------------------------------------------| +| complex | Complex | Set of geometric primitives such that their boundaries can be represented as an union of other primitives | +| composite | Composite | Connected set of curves, solids or surfaces | +| curve | Curve | Bounded, 1-dimensional geometric primitive, representing the continuous image of a line | +| point | Point | Zero-dimensional geometric primitive, representing a position but not having an extent | +| solid | Solid | Bounded, connected 3-dimensional geometric primitive, representing the continuous image of a region of space | +| surface | Surface | Bounded, connected 2-dimensional geometric primitive, representing the continuous image of a region of a plane | + +### Standard codelists (mrc:MD_ImagingConditionCode) {#iso19115-3.2018-cl-mrc-MD_ImagingConditionCode} + +| code | label | description | +|--------------------|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| blurredImage | Blurred image | Portion of the image is blurred | +| cloud | Cloud | Portion of the image is partially obscured by cloud cover | +| degradingObliquity | Degrading obliquity | Acute angle between the plane of the ecliptic (the plane of the Earth s orbit) and the plane of the celestial equator | +| fog | Fog | Portion of the image is partially obscured by fog | +| heavySmokeOrDust | Heavy smoke or dust | Portion of the image is partially obscured by heavy smoke or dust | +| night | Night | Image was taken at night | +| rain | Rain | Image was taken during rainfall | +| semiDarkness | Semi darkness | Image was taken during semi-dark conditions -- twilight conditions | +| shadow | Shadow | Portion of the image is obscured by shadow | +| snow | Snow | Portion of the image is obscured by snow | +| terrainMasking | Terrain masking | The absence of collection data of a given point or area caused by the relative location of topographic features which obstruct the collection path between the collector(s) and the subject(s) of interest | + +### Standard codelists (mri:MD_KeywordTypeCode) {#iso19115-3.2018-cl-mri-MD_KeywordTypeCode} + +| code | label | description | +|------------------|--------------------|-----------------------------------------------------------------------------------------------------------------| +| discipline | Discipline | Keyword identifies a branch of instruction or specialized learning | +| place | Place | Keyword identifies a location | +| stratum | Stratum | Keyword identifies the layer(s) of any deposited substance | +| temporal | Temporal | Keyword identifies a time period related to the dataset | +| theme | Theme | Keyword identifies a particular subject or topic | +| dataCentre | Data centre | Keyword identifies a repository or archive that manages and distributes data | +| featureType | Feature type | Keyword identifies a resource containing or about a collection of feature instances with common characteristics | +| instrument | Instrument | Keyword identifies a device used to measure or compare physical properties | +| platform | Platform | Keyword identifies a structure upon which an instrument is mounted | +| process | Process | Keyword identifies a series of actions or natural occurrences | +| project | Project | Keyword identifies an endeavour undertaken to create or modify a product or service | +| service | Service | Keyword identifies an activity carried out by one party for the benefit of another | +| product | Product | Keyword identifies a type of product | +| subTopicCategory | Sub-Topic Category | Refinement of a topic category for the purpose of geographic data classification | +| taxon | Taxon | Keyword identifies a taxonomy of the resource | + +### Standard codelists Maintenance Frequency (mmi:MD_MaintenanceFrequencyCode) {#iso19115-3.2018-cl-mmi-MD_MaintenanceFrequencyCode} + +| code | label | description | +|-------------|--------------|----------------------------------------------------------| +| continual | Continual | Data is repeatedly and frequently updated | +| daily | Daily | Data is updated each day | +| weekly | Weekly | Data is updated on a weekly basis | +| fortnightly | Fortnightly | Data is updated every two weeks | +| monthly | Monthly | Data is updated each month | +| quarterly | Quarterly | Data is updated every three months | +| biannually | Biannually | Data is updated twice each year | +| annually | Annually | Data is updated every year | +| asNeeded | As needed | Data is updated as deemed necessary | +| irregular | Irregular | Data is updated in intervals that are uneven in duration | +| notPlanned | Not planned | There are no plans to update the data | +| unknown | Unknown | Frequency of maintenance for the data is not known | +| periodic | Periodic | Resource is updated at regular intervals | +| semimonthly | Semi-monthly | Resource updated twice monthly | +| biennially | Biennially | Resource is updated every 2 years | + +### Standard codelists (mrd:MD_MediumFormatCode) {#iso19115-3.2018-cl-mrd-MD_MediumFormatCode} + +| code | label | description | +|------------------|--------------------|------------------------------------------------------------| +| cpio | CPIO | CoPy In / Out (UNIX file format and command) | +| tar | TAR | Tape ARchive | +| highSierra | High sierra | High sierra file system | +| iso9660 | ISO9660 | Information processing volume and file structure of CD-ROM | +| iso9660RockRidge | ISO9660 Rock Ridge | Rock ridge interchange protocol (UNIX) | +| iso9660AppleHFS | ISO9660 Apple HFS | Hierarchical file system (Macintosh) | +| udf | UDF | Universal Disk Format | + +### Standard codelists (mex:MD_ObligationCode) {#iso19115-3.2018-cl-mex-MD_ObligationCode} + +| code | label | description | +|-------------|-------------|------------------------------------------------------| +| mandatory | Mandatory | Element is always required | +| optional | Optional | Element is not required | +| conditional | Conditional | Element is required when a specific condition is met | + +### Standard codelists Pixel orientation code (msr:MD_PixelOrientationCode) {#iso19115-3.2018-cl-msr-MD_PixelOrientationCode} + +| code | label | description | +|------------|-------------|----------------------------------------------------------------------------------------------------------------------------------------------| +| center | Center | Point halfway between the lower left and the upper right of the pixel | +| lowerLeft | Lower left | The corner in the pixel closest to the origin of the SRS; if two are at the same distance from the origin, the one with the smallest x-value | +| lowerRight | Lower right | Next corner counterclockwise from the lower left | +| upperRight | Upper right | Next corner counterclockwise from the lower right | +| upperLeft | Upper left | Next corner counterclockwise from the upper right | + +### Standard codelists Status (mcc:MD_ProgressCode) {#iso19115-3.2018-cl-mcc-MD_ProgressCode} + +| code | label | description | +|-------------------|--------------------|--------------------------------------------------------------------------------------| +| completed | Completed | Production of the data has been completed | +| historicalArchive | Historical archive | Data has been stored in an offline storage facility | +| obsolete | Obsolete | Data is no longer relevant | +| onGoing | On going | Data is continually being updated | +| planned | Planned | Fixed date has been established upon or by which the data will be created or updated | +| required | Required | Data needs to be generated or updated | +| underDevelopment | Under development | Data is currently in the process of being created | +| final | Final | Progress concluded and no changes will be accepted | +| pending | Pending | Committed to, but not yet addressed | +| retired | Retired | Item is no longer recommended for use. It has not been superseded by another item | +| superseded | Superseded | Replaced by new item | +| tentative | Tentative | Provisional changes likely before resource becomes final or complete | +| valid | Valid | Acceptable under specific conditions | +| accepted | Accepted | Agreed to by sponsor | +| notAccepted | Not Accepted | Rejected by sponsor | +| withdrawn | Withdrawn | Withdrawn | +| proposed | Proposed | Suggested that development needs to be undertaken | +| deprecated | Deprecated | Resource superseded and will become obsolete, use only for historical purposes | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|-------------|--------------|-------------| +| notobsolete | Not obsolete | | + +### Standard codelists Access constraints (mco:MD_RestrictionCode) {#iso19115-3.2018-cl-mco-MD_RestrictionCode} + +| code | label | description | +|----------------------------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| copyright | Copyright | Exclusive right to the publication, production, or sale of the rights to a literary, dramatic, musical, or artistic work, or to the use of a commercial print or label, granted by law for a specified period of time to an author, composer, artist, distributor | +| patent | Patent | Government has granted exclusive right to make, sell, use or license an invention or discovery | +| patentPending | Pending patent | Produced or sold information awaiting a patent | +| trademark | Trademark | A name, symbol, or other device identifying a product, officially registered and legally restricted to the use of the owner or manufacturer | +| license | License | Formal permission to do something | +| intellectualPropertyRights | Intellectual property rights | Rights to financial benefit from and control of distribution of non-tangible property that is a result of creativity | +| restricted | Restricted | Withheld from general circulation or disclosure | +| otherRestrictions | Other restrictions | Limitation not listed | +| unrestricted | Unrestricted | No constraints exist | +| licenceUnrestricted | Licence Unrestricted | formal permission not required to use the resource | +| licenceEndUser | Licence End User | Formal permission required for a person or an entity to use the resource and that may differ from the person that orders or purchases it | +| licenceDistributor | Licence Distributor | Formal permission required for a person or an entity to commercialize or distribute the resource | +| private | Private | Protects rights of individual or organisations from observation, intrusion, or attention of others | +| statutory | Statutory | Prescribed by law | +| confidential | Confidential | Not available to the public. NOTE: Contains information that could be prejudicial to a commercial, industrial, or national interest | +| SBU | Sensitive But Unclassified | Although unclassified, requires strict controls over its distribution | +| in-confidence | In-Confidence | With trust | + +### Standard codelists Scope code (mcc:MD_ScopeCode) {#iso19115-3.2018-cl-mcc-MD_ScopeCode} + +| code | label | description | +|----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| attribute | Attribute | Information applies to the attribute class | +| attributeType | Attribute type | Information applies to the characteristic of a feature | +| collectionHardware | Collection hardware | Information applies to the collection hardware class | +| collectionSession | Collection session | Information applies to the collection session | +| dataset | Dataset | Information applies to the dataset | +| series | Series | Information applies to the series | +| nonGeographicDataset | Non geographic dataset | Information applies to non-geographic data | +| dimensionGroup | Dimension group | Information applies to a dimension group | +| feature | Feature | Information applies to a feature | +| featureType | Feature type | Information applies to a feature type | +| propertyType | Property type | Information applies to a property type | +| fieldSession | Field session | Information applies to a field session | +| software | Software | Information applies to a computer program or routine | +| service | 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 behaviour, such as a use case | +| model | Model | Information applies to a copy or imitation of an existing or hypothetical object | +| tile | Tile | Information applies to a tile, a spatial subset of geographic data | +| metadata | Metadata | Information applies to metadata | +| initiative | Initiative | Information applies to an initiative | +| sample | Sample | Information applies to a sample | +| document | Document | Information applies to a document | +| repository | Repository | Information applies to a repository | +| aggregate | Aggregate | Information applies to an aggregate resource | +| product | Product | Metadata describing an ISO 19131 data product specification | +| collection | Collection | Information applies to an unstructured set | +| coverage | Coverage | Information applies to a coverage | +| application | Application | Information resource hosted on a specific set of hardware and accessible over a network | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|------------------------------|--------------------------------|-------------| +| map staticMap interactiveMap | Map Static map Interactive map | | + +### Standard codelists Spatial Representation Type (mcc:MD_SpatialRepresentationTypeCode) {#iso19115-3.2018-cl-mcc-MD_SpatialRepresentationTypeCode} + +| code | label | description | +|-------------|--------------|----------------------------------------------------------------------------------------------------| +| vector | Vector | Vector data is used to represent geographic data | +| grid | Grid | Grid data is used to represent geographic data | +| textTable | Text, table | Textual or tabular data is used to represent geographic data | +| tin | TIN | Triangulated irregular network | +| stereoModel | Stereo model | Three-dimensional view formed by the intersecting homologous rays of an overlapping pair of images | +| video | Video | Scene from a video recording | + +### Standard codelists Topic category code (mri:MD_TopicCategoryCode) {#iso19115-3.2018-cl-mri-MD_TopicCategoryCode} + +| code | label | description | +|----------------------------------|--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| farming | Farming | Rearing of animals and/or cultivation of plants. Examples: agriculture, irrigation, aquaculture, plantations, herding, pests and diseases affecting crops and livestock | +| biota | Biota | Flora and/or fauna in natural environment. Examples: wildlife, vegetation, biological sciences, ecology, wilderness, sealife, wetlands, habitat | +| boundaries | Boundaries | Legal land descriptions. Examples: political and administrative boundaries | +| climatologyMeteorologyAtmosphere | Climatology, meteorology, atmosphere | Processes and phenomena of the atmosphere. Examples: cloud cover, weather, climate, atmospheric conditions, climate change, precipitation | +| economy | Economy | Economic activities, conditions and employment. Examples: production, labour, revenue, commerce, industry, tourism and ecotourism, forestry, fisheries, commercial or subsistence hunting, exploration and exploitation of resources such as minerals, oil and gas | +| elevation | Elevation | Height above or below sea level. Examples: altitude, bathymetry, digital elevation models, slope, derived products | +| environment | Environment | Environmental resources, protection and conservation. Examples: environmental pollution, waste storage and treatment, environmental impact assessment, monitoring environmental risk, nature reserves, landscape | +| geoscientificInformation | Geoscientific information | Information pertaining to earth sciences. Examples: geophysical features and processes, geology, minerals, sciences dealing with the composition, structure and origin of the earth s rocks, risks of earthquakes, volcanic activity, landslides, gravity information, soils, permafrost, hydrogeology, erosion | +| health | Health | Health, health services, human ecology, and safety. Examples: disease and illness, factors affecting health, hygiene, substance abuse, mental and physical health, health services | +| imageryBaseMapsEarthCover | Imagery base maps earth cover | Base maps. Examples: land cover, topographic maps, imagery, unclassified images, annotations | +| intelligenceMilitary | Intelligence military | Military bases, structures, activities. Examples: barracks, training grounds, military transportation, information collection | +| inlandWaters | Inland waters | Inland water features, drainage systems and their characteristics. Examples: rivers and glaciers, salt lakes, water utilization plans, dams, currents, floods, water quality, hydrographic charts | +| location | Location | Positional information and services. Examples: addresses, geodetic networks, control points, postal zones and services, place names | +| oceans | Oceans | Features and characteristics of salt water bodies (excluding inland waters). Examples: tides, tidal waves, coastal information, reefs | +| planningCadastre | Planning cadastre | Information used for appropriate actions for future use of the land. Examples: land use maps, zoning maps, cadastral surveys, land ownership | +| society | Society | Characteristics of society and cultures. Examples: settlements, anthropology, archaeology, education, traditional beliefs, manners and customs, demographic data, recreational areas and activities, social impact assessments, crime and justice, census information | +| structure | Structure | Man-made construction. Examples: buildings, museums, churches, factories, housing, monuments, shops, towers | +| transportation | Transportation | Means and aids for conveying persons and/or goods. Examples: roads, airports/airstrips, shipping routes, tunnels, nautical charts, vehicle or vessel location, aeronautical charts, railways | +| utilitiesCommunication | Utilities communication | Energy, water and waste systems and communications infrastructure andservices. Examples: hydroelectricity, geothermal, solar and nuclear sources of energy, water purification and distribution, sewage collection and disposal, electricity and gas distribution, data communication, telecommunication, radio, communication networks | +| extraTerrestrial | Extra Terrestrial | Region more than 100 km above the surface of the Earth | +| disaster | Disaster | Information related to disasters EXAMPLES: Site of the disaster, evacuation zone, disaster-prevention facility, disaster relief activities | + +### Standard codelists (msr:MD_TopologyLevelCode) {#iso19115-3.2018-cl-msr-MD_TopologyLevelCode} + +| code | label | description | +|------------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| geometryOnly | Geometry only | Geometry objects without any additional structure which describes topology | +| topology1D | Topology 1D | 1-dimensional topological complex -- commonly called chain-node topology | +| planarGraph | Planar graph | 1-dimensional topological complex that is planar. (A planar graph is a graph that can be drawn in a plane in such a way that no two edges intersect except at a vertex.) | +| fullPlanarGraph | Full planar graph | 2-dimensional topological complex that is planar. (A 2-dimensional topological complex is commonly called full topology in a cartographic 2D environment.) | +| surfaceGraph | Surface graph | 1-dimensional topological complex that is isomorphic to a subset of a surface. (A geometric complex is isomorphic to a topological complex if their elements are in a one-to-one, dimensional-and boundry-preserving correspondence to one another.) | +| fullSurfaceGraph | Full surface graph | 2-dimensional topological complex that is isomorphic to a subset of a surface | +| topology3D | Topology 3D | 3-dimensional topological complex. (A topological complex is a collection of topological primitives that are closed under the boundary operations.) | +| fullTopology3D | Full topology 3D | Complete coverage of a 3D Euclidean coordinate space | +| abstract | Abstract | Topological complex without any specified geometric realisation | + +### Standard codelists (mrc:MI_BandDefinition) {#iso19115-3.2018-cl-mrc-MI_BandDefinition} + +| code | label | description | +|-----------------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------| +| 3db | 3db | TBD | +| halfMaximum | Half Maximum | Description: width of a distribution equal to the distance between the outer two points on the distribution having power level half of that at the peak | +| fiftyPercent | Fifty Percent | Description: wavelength difference between the upper and lower bounds at the 50% (-3db) points of the sensor spectral response | +| oneOverE | One Over E | TBD | +| equivalentWidth | Equivalent Width | TBD | + +### Standard codelists (mac:MI_ContextCode) {#iso19115-3.2018-cl-mac-MI_ContextCode} + +| code | label | description | +|-------------|-------------|----------------------------------------| +| acquisition | Acquisition | Event related to a specific collection | +| pass | Pass | Event related to general collection | +| wayPoint | Way Point | Event related to general collection | + +### Standard codelists (mac:MI_GeometryTypeCode) {#iso19115-3.2018-cl-mac-MI_GeometryTypeCode} + +| code | label | description | +|--------------------|--------------------|-----------------------------------------------------------------| +| areal | Areal | Collection of a geographic area defined by a polygon (coverage) | +| strip linear point | Strip Linear Point | Series of linear collections grouped by way points | + +### Standard codelists (mac:MI_ObjectiveTypeCode) {#iso19115-3.2018-cl-mac-MI_ObjectiveTypeCode} + +| code | label | description | +|-------------------------|--------------------------|----------------------------------| +| instantaneousCollection | Instantaneous Collection | Single instance of collection | +| persistentView | Persistent View | Multiple instances of collection | +| survey | Survey | Comparative collection | + +### Standard codelists (mac:MI_OperationTypeCode) {#iso19115-3.2018-cl-mac-MI_OperationTypeCode} + +| code | label | description | +|--------------------------|--------------------------|-------------| +| real simulated synthetic | Real Simulated Synthetic | | + +### Standard codelists (mrc:MI_PolarisationOrientationCode) {#iso19115-3.2018-cl-mrc-MI_PolarisationOrientationCode} + +| code | label | description | +|----------------------------------------------------------|------------------------------------------------------------|-------------| +| horizontal vertical leftCircular rightCircular theta phi | Horizontal Vertical Left Circular Right Circular Theta Phi | | + +### Standard codelists (mac:MI_PriorityCode) {#iso19115-3.2018-cl-mac-MI_PriorityCode} + +| code | label | description | +|-------------------------|--------------------------|----------------------------------------------| +| critical | Critical | Decisive importance | +| highImportance | High Importance | Requires resources to be made available | +| mediumImportance | Medium Importance | Normal operation priority | +| lowImportance theta phi | Low Importance theta phi | To be completed when resources are available | + +### Standard codelists (mac:MI_SequenceCode) {#iso19115-3.2018-cl-mac-MI_SequenceCode} + +| code | label | description | +|---------------|---------------|-------------------------------------------| +| start | Start | Beginning of a collection | +| end | End | End of a collection | +| instantaneous | Instantaneous | Collection without a significant duration | + +### Standard codelists (mrc:MI_TransferFunctionTypeCode) {#iso19115-3.2018-cl-mrc-MI_TransferFunctionTypeCode} + +| code | label | description | +|--------------------------------|--------------------------------|-------------| +| linear logarithmic exponential | Linear Logarithmic Exponential | | + +### Standard codelists (mac:MI_TriggerCode) {#iso19115-3.2018-cl-mac-MI_TriggerCode} + +| code | label | description | +|---------------|---------------|-------------------------------------| +| automatic | Automatic | Event due to external stimuli | +| manual | Manual | Event manually instigated | +| preProgrammed | PreProgrammed | Event instigated by planned stimuli | + +### Standard codelists Amendment Type (reg:RE_AmendmentType) {#iso19115-3.2018-cl-reg-RE_AmendmentType} + +| code | label | description | +|-------------------------|-------------------------|-------------| +| supersession retirement | Supersession Retirement | | + +### Standard codelists Decision status (reg:RE_DecisionStatus) {#iso19115-3.2018-cl-reg-RE_DecisionStatus} + +| code | label | description | +|-------------------------|-------------------------|-------------| +| pending tentative final | Pending Tentative Final | | + +### Standard codelists Disposition (reg:RE_Disposition) {#iso19115-3.2018-cl-reg-RE_Disposition} + +| code | label | description | +|--------------------------------|---------------------------------|-------------| +| withdrawn accepted notAccepted | Withdrawn Accepted Not Accepted | | + +### Standard codelists Item status (reg:RE_ItemStatus) {#iso19115-3.2018-cl-reg-RE_ItemStatus} + +| code | label | description | +|-----------------------------------|------------------------------------|-------------| +| notValid valid superseded retired | Not Valid Valid Superseded Retired | | + +### Standard codelists Parameter direction (srv:SV_ParameterDirection) {#iso19115-3.2018-cl-srv-SV_ParameterDirection} + +| code | label | description | +|--------|--------------|-----------------------------------------------------------------------------| +| in | Input | The parameter is an input parameter to the service instance | +| out | Output | The parameter is an output parameter to the service instance | +| in/out | Input/output | The parameter is both an input and output parameter to the service instance | + +### Standard codelists (mrs:MD_ReferenceSystemTypeCode) {#iso19115-3.2018-cl-mrs-MD_ReferenceSystemTypeCode} + +| code | label | description | +|----------------------------------------|--------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| compoundEngineeringParametric | Compound Engineering Parametric | Compound spatio-parametric coordinate reference system containing an engineering coordinate reference system and a parametric reference system EXAMPLE: [local] x, y, pressure | +| compoundEngineeringParametricTemporal | Compound Engineering Parametric Temporal | Compound spatio-parametric-temporal coordinate reference system containing an engineering, a parametric, and a temporal coordinate reference system EXAMPLE: [local] x, y, pressure, time | +| compoundEngineeringTemporal | Compound Engineering Temporal | Compound spatio-temporal coordinate reference system containing an engineering and a temporal coordinate reference system EXAMPLE: [local] x, y, time | +| compoundEngineeringVertical | Compound Engineering Vertical | Compound spatial reference system containing a horizontal engineering coordinate reference system and a vertical coordinate reference system EXAMPLE: [local] x, y, height | +| compoundEngineeringVerticalTemporal | Compound Engineering Vertical Temporal | Compound spatio-temporal coordinate reference system containing an engineering, a vertical, and a temporal coordinate reference system EXAMPLE: [local] x, y, height, time | +| compoundGeographic2DParametric | Compound Geographic 2D Parametric | Compound spatio-parametric coordinate reference system containing a 2 dimensional geographic horizontal coordinate reference system and a parametric reference system EXAMPLE: latitude, longitude, pressure | +| compoundGeographic2DParametricTemporal | Compound Geographic 2D Parametric Temporal | Compound spatio-parametric-temporal coordinate reference system containing a 2 dimensional geographic horizontal, a parametric and a temporal coordinate reference system EXAMPLE: latitude, longitude, pressure, time | +| compoundGeographic2DTemporal | Compound Geographic 2D Temporal | Compound spatio-temporal coordinate reference system containing a 2 dimensional geographic horizontal coordinate reference system and a temporal reference system EXAMPLE: latitude, longitude, time | +| compoundGeographic2DVertical | Compound Geographic 2D Vertical | Compound coordinate reference system in which one constituent coordinate reference system is a horizontal geodetic coordinate reference system and one is a vertical coordinate reference system EXAMPLE: latitude, longitude, [gravity-related] height or depth | +| compoundGeographic2DVerticalTemporal | Compound Geographic 2D Vertical Temporal | Compound spatio-temporal coordinate reference system containing a 2 dimensional geographic horizontal, a vertical, and a temporal coordinate reference system EXAMPLE: latitude, longitude, height, time | +| compoundGeographic3DTemporal | Compound Geographic 3D Temporal | Compound spatio-temporal coordinate reference system containing a 3 dimensional geographic and a temporal coordinate reference system EXAMPLE latitude, longitude, ellipsoidal height, time | +| compoundProjected2DParametric | Compound Projected 2D Parametric | Compound spatio-parametric coordinate reference system containing a projected horizontal coordinate reference system and a parametric reference system EXAMPLE: easting, northing, density | +| compoundProjected2DParametricTemporal | Compound Projected 2D Parametric Temporal | Compound spatio-parametric-temporal coordinate reference system containing a projected horizontal, a parametric, and a temporal coordinate reference system EXAMPLE: easting, northing, density, time | +| compoundProjectedTemporal | Compound Projected Temporal | Compound spatio-temporal coordinate reference system containing a projected horizontal and a temporal coordinate reference system EXAMPLE: easting, northing, time | +| compoundProjectedVertical | Compound Projected Vertical | Compound spatial reference system containing a horizontal projected coordinate reference system and a vertical coordinate reference system EXAMPLE easting, northing, [gravity-related] height or depth | +| compoundProjectedVerticalTemporal | Compound Projected Vertical Temporal | Compound spatio-temporal coordinate reference system containing a projected horizontal, a vertical, and a temporal coordinate reference system EXAMPLE: easting, northing, height, time | +| engineering | Engineering | Coordinate reference system based on an engineering datum (datum describing the relationship of a coordinate system to a local reference) EXAMPLE: [local] x,y | +| engineeringDesign | Engineering Design | Engineering coordinate reference system in which the base representation of a moving object is specified EXAMPLE: [local] x,y | +| engineeringImage | Engineering Image | Coordinate reference system based on an image datum (engineering datum which defines the relationship of a coordinate system to an image) EXAMPLE: row, column | +| geodeticGeocentric | Geodetic Geocentric | Geodetic CRS having a Cartesian 3D coordinate system EXAMPLE: [geocentric] X,Y,Z | +| geodeticGeographic2D | Geodetic Geographic 2D | Geodetic CRS having an ellipsoidal 2D coordinate system EXAMPLE: latitude, longitude | +| geodeticGeographic3D | Geodetic Geographic 3D | Geodetic CRS having an ellipsoidal 3D coordinate system EXAMPLE: latitude, longitude, ellipsoidal height | +| geographicIdentifier | Geographic Identifier | Spatial reference in the form of a label or code that identifies a location EXAMPLE: post code | +| linear | Linear | Reference system that identifies a location by reference to a segment of a linear geographic feature and distance along that segment from a given point EXAMPLE: x km along road | +| parametric | Parametric | Coordinate reference system based on a parametric datum (datum describing the relationship of a parametric coordinate system to an object) EXAMPLE: pressure | +| projected | Projected | Coordinate reference system derived from a two-dimensional geodetic coordinate reference system by applying a map projection EXAMPLE: easting, northing | +| temporal | Temporal | Reference system against which time is measured EXAMPLE: time | +| vertical | Vertical | One-dimensional coordinate reference system based on a vertical datum (datum describing the relation of gravity-related heights or depths to the Earth) EXAMPLE: [gravity-related] height or depth | + +### Standard codelists (msr:MD_CellGeometryCode) {#iso19115-3.2018-cl-msr-MD_CellGeometryCode} + +| code | label | description | +|---------|---------|--------------------------------------------------------------------------------------------| +| point | Point | Each cell represents a point | +| area | Area | Each cell represents an area | +| voxel | Voxel | Each cell represents a volumetric measurement on a regular grid in three dimensional space | +| stratum | Stratum | Height range for a single point vertical profile | + +### Standard codelists Character set code (lan:MD_CharacterSetCode) {#iso19115-3.2018-cl-lan-MD_CharacterSetCode} + +| code | label | description | +|------------|--------------|-----------------------------------------------------------------------------------------------------------------------------------| +| ucs2 | UCS2 | 16-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| ucs4 | UCS4 | 32-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| utf7 | UTF7 | 7-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf8 | UTF8 | 8-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf16 | UTF16 | 16-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| 8859part1 | 8859 Part 1 | ISO/IEC 8859-1, Information technology - 8-bit single byte coded graphic character sets - Part 1 : Latin alphabet No.1 | +| 8859part2 | 8859 Part 2 | ISO/IEC 8859-2, Information technology - 8-bit single byte coded graphic character sets - Part 2 : Latin alphabet No.2 | +| 8859part3 | 8859 Part 3 | ISO/IEC 8859-3, Information technology - 8-bit single byte coded graphic character sets - Part 3 : Latin alphabet No.3 | +| 8859part4 | 8859 Part 4 | ISO/IEC 8859-4, Information technology - 8-bit single byte coded graphic character sets - Part 4 : Latin alphabet No.4 | +| 8859part5 | 8859 Part 5 | ISO/IEC 8859-5, Information technology - 8-bit single byte coded graphic character sets - Part 5 : Latin/Cyrillic alphabet | +| 8859part6 | 8859 Part 6 | ISO/IEC 8859-6, Information technology - 8-bit single byte coded graphic character sets - Part 6 : Latin/Arabic alphabet | +| 8859part7 | 8859 Part 7 | ISO/IEC 8859-7, Information technology - 8-bit single byte coded graphic character sets - Part 7 : Latin/Greek alphabet | +| 8859part8 | 8859 Part 8 | ISO/IEC 8859-8, Information technology - 8-bit single byte coded graphic character sets - Part 8 : Latin/Hebrew alphabet | +| 8859part9 | 8859 Part 9 | ISO/IEC 8859-9, Information technology - 8-bit single byte coded graphic character sets - Part 9 : Latin alphabet No.5 | +| 8859part10 | 8859 Part 10 | ISO/IEC 8859-10, Information technology - 8-bit single byte coded graphic character sets - Part 10 : Latin alphabet No.6 | +| 8859part11 | 8859 Part 11 | ISO/IEC 8859-11, Information technology - 8-bit single byte coded graphic character sets - Part 11 : Latin/Thai alphabet | +| 8859part13 | 8859 Part 13 | ISO/IEC 8859-13, Information technology - 8-bit single byte coded graphic character sets - Part 13 : Latin alphabet No.7 | +| 8859part14 | 8859 Part 14 | ISO/IEC 8859-14, Information technology - 8-bit single byte coded graphic character sets - Part 14 : Latin alphabet No.8 (Celtic) | +| 8859part15 | 8859 Part 15 | ISO/IEC 8859-15, Information technology - 8-bit single byte coded graphic character sets - Part 15 : Latin alphabet No.9 | +| 8859part16 | 8859 Part 16 | ISO/IEC 8859-16, Information technology - 8-bit single byte coded graphic character sets - Part 16 : Latin alphabet No.10 | +| jis | JIS | Japanese code set used for electronic transmission | +| shiftJIS | Shift JIS | Japanese code set used on MS-DOS machines | +| eucJP | EUC JP | Japanese code set used on UNIX based machines | +| usAscii | US ASCII | United States ASCII code set (ISO 646 US) | +| ebcdic | EBCDIC | IBM mainframe code set | +| eucKR | EUC KR | Korean code set | +| big5 | Big 5 | Traditional Chinese code set used in Taiwan, Hong Kong of China and other areas | +| GB2312 | GB2312 | Simplified Chinese code set | + +### Standard codelists (mrd:MD_MediumNameCode) {#iso19115-3.2018-cl-mrd-MD_MediumNameCode} + +| code | label | description | +|---------------------------|-------------------------------|----------------------------------------------------| +| cdRom | CDROM | Read-only optical disk | +| dvd | DVD | Digital versatile disk | +| dvdRom | DVDROM | Digital versatile disk, read only | +| 3halfInchFloppy | 3 Half Inch Floppy | 3,5 inch magnetic disk | +| 5quarterInchFloppy | 5 Quarter Inch Floppy | 5,25 inch magnetic disk | +| 7trackTape | 7 Track tape | 7 track magnetic tape | +| 9trackTape | 9 track tape | 9 track magnetic tape | +| 3480Cartridge | 3480 Cartridge | 3480 cartridge tape drive | +| 3490Cartridge | 3490 Cartridge | 3490 cartridge tape drive | +| 3580Cartridge | 3580 Cartridge | 3580 cartridge tape drive | +| 4mmCartridgeTape | 4 mm Cartridge tape | 4 millimetre magnetic tape | +| 8mmCartridgeTape | 8 mm Cartridge tape | 8 millimetre magnetic tape | +| 1quarterInchCartridgeTape | 1 Quarter inch cartridge tape | 0,25 inch magnetic tape | +| digitalLinearTap | Digital linear tape | Half inch cartridge streaming tape drive | +| onLine | Online | Direct computer linkage | +| satellite | Satellite | Linkage through a satellite communication system | +| telephoneLink | Telephone link | Communication through a telephone network | +| hardcopy | Hardcopy | Pamphlet or leaflet giving descriptive information | + +### Standard codelists Distributed Computing Platforms list (srv:DCPList) {#iso19115-3.2018-cl-srv-DCPList} + ++-------------+-------------+--------------------+ +| code | label | description | ++=============+=============+====================+ +| XML | XML | DCP is XML | ++-------------+-------------+--------------------+ +| CORBA | CORBA | DCP is CORBA | ++-------------+-------------+--------------------+ +| JAVA | JAVA | DCP is JAVA | ++-------------+-------------+--------------------+ +| COM | COM | DCP is COM | ++-------------+-------------+--------------------+ +| SQL | DCP is SQL | > SQL | ++-------------+-------------+--------------------+ +| SOAP | SOAP | DCP is SOAP | ++-------------+-------------+--------------------+ +| Z3950 | Z3950 | DCP is Z3950 | ++-------------+-------------+--------------------+ +| HTTP | HTTP | DCP is HTTP | ++-------------+-------------+--------------------+ +| FTP | FTP | DCP is FTP | ++-------------+-------------+--------------------+ +| WebServices | WebServices | DCP is WebServices | ++-------------+-------------+--------------------+ + +### Standard codelists (srv:SV_CouplingType) {#iso19115-3.2018-cl-srv-SV_CouplingType} + +| code | label | description | +|-------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| loose | Loose | service instance is loosely coupled with a data instance, i.e. no MD_DataIdentification class has to be described | +| mixed | Mixed | Service instance is mixed coupled with a data instance, i.e. MD_DataIdentification describes the associated data instance and additionally the service instance might work with other external data instances | +| tight | Tight | Service instance is tightly coupled with a data instance, i.e. MD_DataIdentification class MUST be described | + +### Standard codelists Indeterminate position (indeterminatePosition) {#iso19115-3.2018-cl-indeterminatePosition} + +| code | label | +|---------|---------| +| after | After | +| before | Before | +| now | Now | +| unknown | Unknown | diff --git a/docs/manual/docs/annexes/standards/iso19139.md b/docs/manual/docs/annexes/standards/iso19139.md new file mode 100644 index 0000000000..ceb1ef656c --- /dev/null +++ b/docs/manual/docs/annexes/standards/iso19139.md @@ -0,0 +1,17594 @@ +# Geographic information -- Metadata (iso19139:2007) (iso19139) {#iso19139} + +ISO 19115 defines the schema required for describing geographic information and services by means of metadata. It provides information about the identification, the extent, the quality, the spatial and temporal aspects, the content, the spatial reference, the portrayal, distribution, and other properties of digital geographic data and services. + +ISO 19115 is applicable to: + +- the cataloguing of all types of resources, clearinghouse activities, and the full description of datasets and services; +- geographic services, geographic datasets, dataset series, and individual geographic features and feature properties. + +ISO 19115 defines: + +- mandatory and conditional metadata sections, metadata entities, and metadata elements; +- the minimum set of metadata required to serve most metadata applications (data discovery, determining data fitness for use, data access, data transfer, and use of digital data and services); +- optional metadata elements to allow for a more extensive standard description of resources, if required; +- a method for extending metadata to fit specialized needs. + +Though ISO 19115 is applicable to digital data and services, its principles can be extended to many other types of resources such as maps, charts, and textual documents as well as non-geographic data. Certain conditional metadata elements might not apply to these other forms of data. + +More details: + +## Metadata editor + +This standard can be encoded using 4 view(s). + +- [View: INSPIRE (inspire)](iso19139.md#iso19139-view-inspire) +- [View: Simple (default)](iso19139.md#iso19139-view-default) +- [View: Full (advanced)](iso19139.md#iso19139-view-advanced) +- [View: XML (xml)](iso19139.md#iso19139-view-xml) + +### View: INSPIRE (inspire) {#iso19139-view-inspire} + +This view is composed of2tab(s). + +- [Tab: INSPIRE (inspire)](iso19139.md#iso19139-tab-inspire) +- [Tab: SDS (inspire_sds)](iso19139.md#iso19139-tab-inspire_sds) + +This view also allows to add the following element even if not in the current record: + +- Contains Operations (srv:containsOperations) +- Operation (srv:SV_OperationMetadata) +- Parameters (srv:parameters) + +#### Tab: INSPIRE (inspire) {#iso19139-tab-inspire} + +![](img/iso19139-tab-inspire.png) + +This tab display elements from the XML metadata record. + +##### Section: Identification + +##### File identifier + +```{=html} +Unique identifier for this metadata file +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:fileIdentifier + +See [File identifier](iso19139.md#iso19139-elem-gmd-fileIdentifier-353be7794d17e5435ce2fe57d91966ba) + +##### Title + +```{=html} +Name by which the cited resource is known +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/gmd:title + +See [Title](iso19139.md#iso19139-elem-gmd-title-cc3002a2d81bcdbc5bf4c8735faf6980) + +##### Abstract + +```{=html} +Brief narrative summary of the content of the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract + +See [Abstract](iso19139.md#iso19139-elem-gmd-abstract-cacfcd3bd6bbd44733f828dd2903ecd8) + +##### Abstract + +```{=html} +Brief narrative summary of the content of the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:abstract + +See [Abstract](iso19139.md#iso19139-elem-gmd-abstract-cacfcd3bd6bbd44733f828dd2903ecd8) + +##### Hierarchy level + +```{=html} +Scope to which the metadata applies (see annex H for more information about metadata hierarchy levels) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:hierarchyLevel + +See [Hierarchy level](iso19139.md#iso19139-elem-gmd-hierarchyLevel-2b6d53b433d8f9c0cc58606d27eecc17) + +Name + +: + +> Hierarchy level + +Name + +: + +> Hierarchy level + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) = 0 + +``` xml + + + +``` + +Name + +: + +> Hierarchy level + +Name + +: + +> Hierarchy level + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + + + +``` + +##### Online resource + +##### OnLine resource + +```{=html} +Information about online sources from which the resource can be obtained +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions /gmd:MD_DigitalTransferOptions/gmd:onLine + +See [OnLine resource](iso19139.md#iso19139-elem-gmd-onLine-c0b191c96e7e4d7dfc2a4ba2fd8946f4) + +Name + +: + +> Online resource + +Name + +: + +> Online resource + +Type + +: + +> add + +``` xml + + + + + + + + + + +``` + +##### Resource identifier + +##### Citation identifier + +```{=html} +Identifier of the citation +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier + +See [Identifier](iso19139.md#iso19139-elem-gmd-identifier-c4f31fd808ee0eaa1e5525c5ff0edd23) + +Name + +: + +> Resource identifier + +Name + +: + +> Resource identifier + +Type + +: + +> add + +``` xml + + + + + + + +``` + +Type + +: + +> process + +Displayed only if + +: + +> (count(gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification) + count(gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/ gmd:identifier[ends-with(gmd:MD_Identifier/gmd:code/gco:CharacterString, //gmd:MD_Metadata/gmd:fileIdentifier/gco:CharacterString)])) = 1 + +##### Language + +```{=html} +Language(s) used within the dataset +``` +```{=html} +language(s) used within the dataset +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:language + +See [Metadata language](iso19139.md#iso19139-elem-gmd-language-98a1fec5ea30c100ef63f1ca4bd6dbdb) + +##### Spatial representation type + +```{=html} +Method used to spatially represent geographic information +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:spatialRepresentationType + +See [Spatial representation type](iso19139.md#iso19139-elem-gmd-spatialRepresentationType-1617a07231ac2246d0844778962d4ca0) + +Name + +: + +> Spatial representation type + +Name + +: + +> Spatial representation type + +Type + +: + +> add + +``` xml + + + +``` + +##### Encoding + +##### Distribution format + +```{=html} +Provides a description of the format of the data to be distributed +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat + +See [Distribution format](iso19139.md#iso19139-elem-gmd-distributionFormat-5cad81c9a7af3991db918a5e8fc0c596) + +Name + +: + +> Encoding + +Name + +: + +> Encoding + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) = 0 + +``` xml + + + + + + + + + + + + + +``` + +##### Projection + +##### Reference system identifier + +```{=html} +Name of reference system +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier + +See [Reference system identifier](iso19139.md#iso19139-elem-gmd-referenceSystemIdentifier-5393a29789a4b6def1795d5a9e70f665) + +Name + +: + +> Projection + +Name + +: + +> Ref. system + +Type + +: + +> add + +``` xml + + + + + + http://www.opengis.net/def/crs/EPSG/0/4936 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/4937 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/4258 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3035 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3034 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3038 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3039 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3040 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3041 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3042 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3043 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3044 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3045 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3046 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3047 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3048 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3049 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3050 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/3051 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/5730 + + + + + + + + + + + + + http://www.opengis.net/def/crs/EPSG/0/7409 + + + + + +``` + +##### Section: Classification of data and services + +##### Topic category + +```{=html} +Main theme(s) of the dataset +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory + +See [Topic category](iso19139.md#iso19139-elem-gmd-topicCategory-beb19f9aa38425d24bc8c438657fff74) + +Name + +: + +> Topic category code + +Name + +: + +> Topic category code + +Type + +: + +> add + +``` xml + + + +``` + +##### Section: Classification of data and services + +##### Service Type + +```{=html} +Service type name from a registry of services. For example, the values of the nameSpace and name attributes of GeneralName may be 'OGC' and 'catalogue' +``` +Recommended values + +| code | label | +|-------------------|-------------------------------------------------| +| OGC:WMS | OGC Web Map Service (OGC:WMS) | +| OGC:WFS | OGC Web Feature Service (OGC:WFS) | +| OGC:WCS | OGC Web Coverage Service (OGC:WCS) | +| W3C:HTML:DOWNLOAD | Download (W3C:HTML:DOWNLOAD) | +| W3C:HTML:LINK | Information (W3C:HTML:LINK) | +| discovery | INSPIRE Discovery Service (discovery) | +| view | INSPIRE View Service (view) | +| download | INSPIRE Download Service (download) | +| transformation | INSPIRE Transformation Service (transformation) | +| other | INSPIRE Other Services (other) | + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceType + +See [Service Type](iso19139.md#iso19139-elem-srv-serviceType-31230933e2a7436c80955195b74bc0a0) + +##### Coupling Type + +```{=html} +Type of Coupling +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:couplingType + +See [Coupling Type](iso19139.md#iso19139-elem-srv-couplingType-bc1606dff717a83807e97a1a3789e30a) + +##### Section: Coupled resource + +##### Coupled resource + +##### Operates On + +```{=html} +Provides information on the datasets that the service operates on +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:operatesOn + +See [Operates On](iso19139.md#iso19139-elem-srv-operatesOn-fc0165e60dcb452c05c9f1d95416b89a) + +Name + +: + +> Coupled resource + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + +``` + +##### Section: Coupled resource + +##### Coupled resource + +##### Operates On + +```{=html} +Provides information on the datasets that the service operates on +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:operatesOn + +See [Operates On](iso19139.md#iso19139-elem-srv-operatesOn-fc0165e60dcb452c05c9f1d95416b89a) + +Name + +: + +> Coupled resource + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + +``` + +##### Section: Classification of data and services + +##### Service Type + +```{=html} +Service type name from a registry of services. For example, the values of the nameSpace and name attributes of GeneralName may be 'OGC' and 'catalogue' +``` +Recommended values + +| code | label | +|-------------------|-------------------------------------------------| +| OGC:WMS | OGC Web Map Service (OGC:WMS) | +| OGC:WFS | OGC Web Feature Service (OGC:WFS) | +| OGC:WCS | OGC Web Coverage Service (OGC:WCS) | +| W3C:HTML:DOWNLOAD | Download (W3C:HTML:DOWNLOAD) | +| W3C:HTML:LINK | Information (W3C:HTML:LINK) | +| discovery | INSPIRE Discovery Service (discovery) | +| view | INSPIRE View Service (view) | +| download | INSPIRE Download Service (download) | +| transformation | INSPIRE Transformation Service (transformation) | +| other | INSPIRE Other Services (other) | + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceType + +See [Service Type](iso19139.md#iso19139-elem-srv-serviceType-31230933e2a7436c80955195b74bc0a0) + +##### Coupling Type + +```{=html} +Type of Coupling +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:couplingType + +See [Coupling Type](iso19139.md#iso19139-elem-srv-couplingType-bc1606dff717a83807e97a1a3789e30a) + +##### Section: Coupled resource + +##### Coupled resource + +##### Operates On + +```{=html} +Provides information on the datasets that the service operates on +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:operatesOn + +See [Operates On](iso19139.md#iso19139-elem-srv-operatesOn-fc0165e60dcb452c05c9f1d95416b89a) + +Name + +: + +> Coupled resource + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + +``` + +##### Section: Coupled resource + +##### Coupled resource + +##### Operates On + +```{=html} +Provides information on the datasets that the service operates on +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:operatesOn + +See [Operates On](iso19139.md#iso19139-elem-srv-operatesOn-fc0165e60dcb452c05c9f1d95416b89a) + +Name + +: + +> Coupled resource + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + +``` + +##### Section: Keywords + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/ gmd:descriptiveKeywords [gmd:MD_Keywords/gmd:thesaurusName/gmd:CI_Citation/gmd:title/gco:CharacterString = 'INSPIRE Service taxonomy'] + +See [Descriptive keywords](iso19139.md#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3) + +Name + +: + +> INSPIRE Service Taxonomy + +Name + +: + +> INSPIRE Service Taxonomy + +Type + +: + +> add + +Displayed only if + +: + +> (count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/ gmd:descriptiveKeywords[ contains(gmd:MD_Keywords/gmd:thesaurusName/ gmd:CI_Citation/gmd:title/gco:CharacterString, 'INSPIRE Service taxonomy')]) + count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification)) = 1 + +``` xml + + + + + + + + + + + + INSPIRE Service taxonomy + + + + + 2010-04-22 + + + + + + + + + + + geonetwork.thesaurus.external.theme.inspire-service-taxonomy + + + + + + + +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/*/ gmd:descriptiveKeywords [contains(gmd:MD_Keywords/gmd:thesaurusName/gmd:CI_Citation/gmd:title/*[name() = 'gco:CharacterString' or name() = 'gmx:Anchor']/text(), 'INSPIRE themes')] + +See [Descriptive keywords](iso19139.md#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3) + +Name + +: + +> INSPIRE themes + +Name + +: + +> INSPIRE themes + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/*/ gmd:descriptiveKeywords[ contains(gmd:MD_Keywords/gmd:thesaurusName/ gmd:CI_Citation/gmd:title/*[name() = 'gco:CharacterString' or name() = 'gmx:Anchor']/text(), 'INSPIRE themes')]) = 0 + +``` xml + + + + + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + + geonetwork.thesaurus.external.theme.httpinspireeceuropaeutheme-theme + + + + + + + + +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/*/ gmd:descriptiveKeywords [count(gmd:MD_Keywords/gmd:thesaurusName) > 0 and not(contains(gmd:MD_Keywords/gmd:thesaurusName/gmd:CI_Citation/gmd:title/*[name() = 'gco:CharacterString' or name() = 'gmx:Anchor']/text(), 'INSPIRE themes'))] + +See [Descriptive keywords](iso19139.md#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3) + +##### Section: Other keywords + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/ gmd:descriptiveKeywords[not(gmd:MD_Keywords/gmd:thesaurusName)] + +See [Descriptive keywords](iso19139.md#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3) + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/ gmd:descriptiveKeywords[not(gmd:MD_Keywords/gmd:thesaurusName)] + +See [Descriptive keywords](iso19139.md#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3) + +##### Section: Other keywords + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/ gmd:descriptiveKeywords[not(gmd:MD_Keywords/gmd:thesaurusName)] + +See [Descriptive keywords](iso19139.md#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3) + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/ gmd:descriptiveKeywords[not(gmd:MD_Keywords/gmd:thesaurusName)] + +See [Descriptive keywords](iso19139.md#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3) + +##### Section: Geographic coverage + +##### Geographic bounding box + +```{=html} +Geographic position of the dataset +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/ srv:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox + +See [Geographic bounding box](iso19139.md#iso19139-elem-gmd-EX_GeographicBoundingBox-317fd5425b55f40c235ada8a89ee0519) + +##### Geographic bounding box + +```{=html} +Geographic position of the dataset +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/ gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox + +See [Geographic bounding box](iso19139.md#iso19139-elem-gmd-EX_GeographicBoundingBox-317fd5425b55f40c235ada8a89ee0519) + +Name + +: + +> Geographic bounding box + +Name + +: + +> Geographic bounding box + +Type + +: + +> add + +``` xml + + + + + + + + + + + + + + + + + + + + +``` + +Name + +: + +> Geographic bounding box + +Name + +: + +> Geographic bounding box + +Type + +: + +> add + +``` xml + + + + + + + + + + + + + + + + + + + + +``` + +##### Section: Temporal reference + +##### Temporal extent + +##### Temporal element + +```{=html} +Provides temporal component of the extent of the referring object +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement + +See [Temporal element](iso19139.md#iso19139-elem-gmd-temporalElement-98c13f1732cd7f7c06320d907eec27ce) + +Name + +: + +> Geographic bounding box + +Name + +: + +> Temporal extent + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement) = 0 + +``` xml + + + + + + + + + + + + + + +``` + +##### Temporal extent + +##### Temporal element + +```{=html} +Provides temporal component of the extent of the referring object +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:extent/gmd:EX_Extent/gmd:temporalElement + +See [Temporal element](iso19139.md#iso19139-elem-gmd-temporalElement-98c13f1732cd7f7c06320d907eec27ce) + +Name + +: + +> Geographic bounding box + +Name + +: + +> Temporal extent + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:extent/gmd:EX_Extent/gmd:temporalElement) = 0 + +``` xml + + + + + + + + + + + + + + +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/*/gmd:citation/gmd:CI_Citation/ gmd:date + +See [Date](iso19139.md#iso19139-elem-gmd-date-ebb509445b6cf496cbf813a8b01a2362) + +Name + +: + +> Temporal information + +Name + +: + +> Temporal information + +Type + +: + +> add + +``` xml + + + + + + + + + + +``` + +##### Section: Quality and validity + +##### Lineage + +##### Statement + +```{=html} +General explanation of the data producer_s knowledge about the lineage of a dataset +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage/gmd:statement + +See [Statement](iso19139.md#iso19139-elem-gmd-statement-593ac58687a7831e3112879ec00a306e) + +Name + +: + +> Lineage + +Name + +: + +> Lineage + +Type + +: + +> add + +``` xml + + + +``` + +Name + +: + +> Lineage + +Name + +: + +> Lineage + +Type + +: + +> add + +``` xml + + + + + + + +``` + +##### Denominator + +```{=html} +The number below the line in a vulgar fraction +``` +Recommended values + +| code | label | +|---------|-------------| +| 5000 | 1:5´000 | +| 10000 | 1:10´000 | +| 25000 | 1:25´000 | +| 50000 | 1:50´000 | +| 100000 | 1:100´000 | +| 200000 | 1:200´000 | +| 300000 | 1:300´000 | +| 500000 | 1:500´000 | +| 1000000 | 1:1´000´000 | + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/ */gmd:spatialResolution/ */gmd:equivalentScale/*/gmd:denominator + +See [Denominator](iso19139.md#iso19139-elem-gmd-denominator-e807028ba183b3decd6aa631d0ca1ca3) + +Name + +: + +> Spatial resolution (scale) + +Type + +: + +> add + +``` xml + + + + + + + + + + + +``` + +##### Distance + +```{=html} +Ground sample distance +``` +Recommended values + +| code | label | +|------|-------| +| 0.10 | 10 cm | +| 0.25 | 25 cm | +| 0.50 | 50 cm | +| 1 | 1 m | +| 30 | 30 m | +| 100 | 100 m | + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/ */gmd:spatialResolution/*/gmd:distance + +See [Distance](iso19139.md#iso19139-elem-gmd-distance-7b7fc9e19c5ebb9644dc51880d95a12d) + +Name + +: + +> Spatial resolution (distance) + +Type + +: + +> add + +``` xml + + + + + + + +``` + +##### Section: Conformity + +##### Conformity + +##### Result + +```{=html} +Value (or set of values) obtained from applying a data quality measure or the out come of evaluating the obtained value (or set of values) against a specified acceptable conformance quality level +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/ gmd:report/gmd:DQ_DomainConsistency/gmd:result[count(gmd:DQ_ConformanceResult/gmd:specification/ gmd:CI_Citation/gmd:title/gmx:Anchor) > 0] + +See [Result](iso19139.md#iso19139-elem-gmd-result-83539788e54d2fc7d166ac779dc43f0b) + +##### Conformity + +##### Result + +```{=html} +Value (or set of values) obtained from applying a data quality measure or the out come of evaluating the obtained value (or set of values) against a specified acceptable conformance quality level +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/ gmd:report/gmd:DQ_DomainConsistency/gmd:result[count(gmd:DQ_ConformanceResult/gmd:specification/ gmd:CI_Citation/gmd:title/gco:CharacterString) > 0] + +See [Result](iso19139.md#iso19139-elem-gmd-result-83539788e54d2fc7d166ac779dc43f0b) + +Name + +: + +> Conformity + +Name + +: + +> Conformity + +Type + +: + +> add + +``` xml + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + +``` + +##### Section: Conformity + +##### Conformity + +##### Result + +```{=html} +Value (or set of values) obtained from applying a data quality measure or the out come of evaluating the obtained value (or set of values) against a specified acceptable conformance quality level +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/ gmd:report/gmd:DQ_DomainConsistency/gmd:result[count(gmd:DQ_ConformanceResult/gmd:specification/ gmd:CI_Citation/gmd:title/gmx:Anchor) > 0] + +See [Result](iso19139.md#iso19139-elem-gmd-result-83539788e54d2fc7d166ac779dc43f0b) + +##### Conformity + +##### Result + +```{=html} +Value (or set of values) obtained from applying a data quality measure or the out come of evaluating the obtained value (or set of values) against a specified acceptable conformance quality level +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/ gmd:report/gmd:DQ_DomainConsistency/gmd:result[count(gmd:DQ_ConformanceResult/gmd:specification/ gmd:CI_Citation/gmd:title/gco:CharacterString) > 0] + +See [Result](iso19139.md#iso19139-elem-gmd-result-83539788e54d2fc7d166ac779dc43f0b) + +Name + +: + +> Conformity + +Name + +: + +> Conformity + +Type + +: + +> add + +``` xml + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + +``` + +##### Section: Restrictions on access and use + +##### Use limitation + +```{=html} +Limitation affecting the fitness for use of the resource. Example, _not to be used for navigation_ +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/ gmd:resourceConstraints/gmd:MD_Constraints/gmd:useLimitation + +See [Use limitation](iso19139.md#iso19139-elem-gmd-useLimitation-07252e81be8d86aea4553aa3df807d8b) + +Name + +: + +> Use limitation + +Name + +: + +> Use limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification) > 0 + +``` xml + + + + + + + +``` + +##### Access constraints + +##### Other constraints + +```{=html} +Other restrictions and legal prerequisites for accessing and using the resource +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/ gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:otherConstraints + +See [Other constraints](iso19139.md#iso19139-elem-gmd-otherConstraints-696de5ef421a230cf560f7566a3c5028) + +Name + +: + +> Access constraints + +Name + +: + +> Access constraints + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification) > 0 + +``` xml + + + + + + + + + + + +``` + +##### Section: Restrictions on access and use + +##### Use limitation + +```{=html} +Limitation affecting the fitness for use of the resource. Example, _not to be used for navigation_ +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/ gmd:resourceConstraints/gmd:MD_Constraints/gmd:useLimitation + +See [Use limitation](iso19139.md#iso19139-elem-gmd-useLimitation-07252e81be8d86aea4553aa3df807d8b) + +Name + +: + +> Use limitation + +Name + +: + +> Use limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + + + + + + + +``` + +##### Access constraints + +##### Other constraints + +```{=html} +Other restrictions and legal prerequisites for accessing and using the resource +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/ gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:otherConstraints + +See [Other constraints](iso19139.md#iso19139-elem-gmd-otherConstraints-696de5ef421a230cf560f7566a3c5028) + +Name + +: + +> Other constraints + +Name + +: + +> Access constraints + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + + + + + + + + + + + +``` + +##### Section: Responsible organization (s) + +##### Contact for the resource + +##### Point of contact + +```{=html} +Identification of, and means of communication with, person(s) and organizations(s) associated with the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact + +See [Point of contact](iso19139.md#iso19139-elem-gmd-pointOfContact-2a38035f4c8b63a35a4e6c44e6f4b624) + +Name + +: + +> Contact for the resource + +Type + +: + +> add + +``` xml + + + + + + + + + + + + + + + + + + + + + +``` + +##### Section: Responsible organization (s) + +##### Contact for the resource + +##### Point of contact + +```{=html} +Identification of, and means of communication with, person(s) and organizations(s) associated with the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact + +See [Point of contact](iso19139.md#iso19139-elem-gmd-pointOfContact-2a38035f4c8b63a35a4e6c44e6f4b624) + +Name + +: + +> Contact for the resource + +Type + +: + +> add + +``` xml + + + + + + + + + + + + + + + + + + + + + +``` + +##### Section: Metadata information + +##### Contact for the metadata + +##### Contact + +```{=html} +Party responsible for the metadata information +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:contact + +See [Metadata author](iso19139.md#iso19139-elem-gmd-contact-1a17bee429a4ae3c87f4026bd2da8005) + +Name + +: + +> Contact for the metadata + +Type + +: + +> add + +``` xml + + + + + + + + + + + + + + + + + + + + + +``` + +##### Date stamp + +```{=html} +Date that the metadata was created (YYYY-MM-DDThh:mm:ss) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dateStamp + +See [Date stamp](iso19139.md#iso19139-elem-gmd-dateStamp-ee89eb65741d89aef14d153887f60948) + +##### Metadata language + +```{=html} +Language used for documenting metadata +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:language + +See [Metadata language](iso19139.md#iso19139-elem-gmd-language-98a1fec5ea30c100ef63f1ca4bd6dbdb) + +Name + +: + +> Metadata language + +Name + +: + +Type + +: + +> add + +``` xml + + + +``` + +##### Character set + +```{=html} +Full name of the character coding standard used for the dataset +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:characterSet + +See [Character set](iso19139.md#iso19139-elem-gmd-characterSet-351330c9787387f916fed1143727215b) + +#### Tab: SDS (inspire_sds) {#iso19139-tab-inspire_sds} + +This tab display elements from the XML metadata record. + +##### Section: Conformance class 1: invocable + +Type + +: + +> process + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service'])=0 + +Type + +: + +> process + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_DomainConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:specification/gmd:CI_Citation/gmd:title/gco:CharacterString)>0 + +##### Category + +##### Data quality + +```{=html} +Quality information for the data specified by a data quality scope +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_DomainConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:specification/gmd:CI_Citation/gmd:title + +See [Data quality](iso19139.md#iso19139-elem-gmd-DQ_DataQuality-16d17a37284f157b42d492a5960b5171) + +##### Data quality + +```{=html} +Quality information for the data specified by a data quality scope +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_DomainConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:pass + +See [Data quality](iso19139.md#iso19139-elem-gmd-DQ_DataQuality-16d17a37284f157b42d492a5960b5171) + +Name + +: + +> Add pass element + +Type + +: + +> add + +``` xml + + true + +``` + +##### Access Point URL + +##### OnLine resource + +```{=html} +Information about online sources from which the resource can be obtained +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution//gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine[gmd:CI_OnlineResource/gmd:description/gmx:Anchor/text() = 'accessPoint'] + +See [OnLine resource](iso19139.md#iso19139-elem-gmd-onLine-c0b191c96e7e4d7dfc2a4ba2fd8946f4) + +Name + +: + +> Add Access Point + +Type + +: + +> add + +``` xml + + + + http://accesspoint.url + + + + accessPoint + + + + + + + +``` + +##### Endpoint URL + +##### OnLine resource + +```{=html} +Information about online sources from which the resource can be obtained +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution//gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine[gmd:CI_OnlineResource/gmd:description/gmx:Anchor/text() = 'endPoint'] + +See [OnLine resource](iso19139.md#iso19139-elem-gmd-onLine-c0b191c96e7e4d7dfc2a4ba2fd8946f4) + +Name + +: + +> Add Endpoint + +Type + +: + +> add + +``` xml + + + + http://endpoint.url + + + + endPoint + + + + + + + +``` + +##### Technical specification + +##### Data quality + +```{=html} +Quality information for the data specified by a data quality scope +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_DomainConsistency/gmd:result + +See [Data quality](iso19139.md#iso19139-elem-gmd-DQ_DataQuality-16d17a37284f157b42d492a5960b5171) + +Name + +: + +> Add a technical specification + +Type + +: + +> add + +``` xml + + + + + + + + + Description of technical specification + + + + + + 2014-12-11 + + + + + + + + + + Conformant to the cited specifications. + + + + true + + + + + +``` + +##### Section: Conformance class 2: interoperable + +##### Section: Coordinate reference system + +##### Anchor + +```{=html} +Supports hyper-linking capabilities and ensures a web-like implementation of CharacterStrings +``` + +XPath + +: + +> gmd:MD_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code/gmx:Anchor + +See [Anchor](iso19139.md#iso19139-elem-gmx-Anchor-d0ccf7ef89bd129a31fe766fae38f1df) + +Name + +: + +> Projection + +Type + +: + +> add + +``` xml + + + + + + {{code}} + + + + + + +``` + +##### Section: Quality of Service + +Type + +: + +> process + +Displayed only if + +: + +> (count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service'])>0 and (count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_ConceptualConsistency/gmd:nameOfMeasure/gmx:Anchor[text()='availability'])=0 or count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_ConceptualConsistency/gmd:nameOfMeasure/gmx:Anchor[text()='performance'])=0 or count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_ConceptualConsistency/gmd:nameOfMeasure/gmx:Anchor[text()='capacity'])=0 )) + +##### Conceptual consistency + +```{=html} +Adherence to rules of the conceptual schema +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_ConceptualConsistency + +See [Conceptual consistency](iso19139.md#iso19139-elem-gmd-DQ_ConceptualConsistency-d42ad4a3a30578c7431606e8c1df4df8) + +##### Section: Access constraints + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:accessConstraints]/gmd:otherConstraints/gmx:Anchor] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +##### Limitation + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:accessConstraints]/gmd:otherConstraints[gco:CharacterString]] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +Name + +: + +> No Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:accessConstraints]) = 0 + +``` xml + + + + + + + + No Conditions Apply + + + + +``` + +Name + +: + +> Unknown Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:accessConstraints]) = 0 + +``` xml + + + + + + + + Conditions Unknown + + + + +``` + +Name + +: + +> Customizable constraints + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:accessConstraints]) = 0 + +``` xml + + + + + + + + + + +``` + +##### Section: Use constraints + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:useConstraints]/gmd:otherConstraints/gmx:Anchor] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +##### Limitation + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:useConstraints]/gmd:otherConstraints[gco:CharacterString]] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +Name + +: + +> No Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:useConstraints]) = 0 + +``` xml + + + + + + + + No Conditions Apply + + + + +``` + +Name + +: + +> Unknown Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:useConstraints]) = 0 + +``` xml + + + + + + + + Conditions Unknown + + + + +``` + +Name + +: + +> Customizable constraints + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:useConstraints]) = 0 + +``` xml + + + + + + + + + + +``` + +##### Section: Responsible custodian + +##### Contact for the resource + +##### Point of contact + +```{=html} +Identification of, and means of communication with, person(s) and organizations(s) associated with the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:pointOfContact[gmd:CI_ResponsibleParty/gmd:role/gmd:='custodian'] + +See [Point of contact](iso19139.md#iso19139-elem-gmd-pointOfContact-2a38035f4c8b63a35a4e6c44e6f4b624) + +Name + +: + +> Contact for the resource + +Type + +: + +> add + +##### Section: Coordinate reference system + +##### Anchor + +```{=html} +Supports hyper-linking capabilities and ensures a web-like implementation of CharacterStrings +``` + +XPath + +: + +> gmd:MD_Metadata/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code/gmx:Anchor + +See [Anchor](iso19139.md#iso19139-elem-gmx-Anchor-d0ccf7ef89bd129a31fe766fae38f1df) + +Name + +: + +> Projection + +Type + +: + +> add + +``` xml + + + + + + {{code}} + + + + + + +``` + +##### Section: Quality of Service + +Type + +: + +> process + +Displayed only if + +: + +> (count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service'])>0 and (count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_ConceptualConsistency/gmd:nameOfMeasure/gmx:Anchor[text()='availability'])=0 or count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_ConceptualConsistency/gmd:nameOfMeasure/gmx:Anchor[text()='performance'])=0 or count(gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality[gmd:scope/gmd:DQ_Scope/gmd:level/gmd:='service']/gmd:report/gmd:DQ_ConceptualConsistency/gmd:nameOfMeasure/gmx:Anchor[text()='capacity'])=0 )) + +##### Conceptual consistency + +```{=html} +Adherence to rules of the conceptual schema +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_ConceptualConsistency + +See [Conceptual consistency](iso19139.md#iso19139-elem-gmd-DQ_ConceptualConsistency-d42ad4a3a30578c7431606e8c1df4df8) + +##### Section: Access constraints + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:accessConstraints]/gmd:otherConstraints/gmx:Anchor] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +##### Limitation + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:accessConstraints]/gmd:otherConstraints[gco:CharacterString]] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +Name + +: + +> No Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:accessConstraints]) = 0 + +``` xml + + + + + + + + No Conditions Apply + + + + +``` + +Name + +: + +> Unknown Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:accessConstraints]) = 0 + +``` xml + + + + + + + + Conditions Unknown + + + + +``` + +Name + +: + +> Customizable constraints + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:accessConstraints]) = 0 + +``` xml + + + + + + + + + + +``` + +##### Section: Use constraints + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:useConstraints]/gmd:otherConstraints/gmx:Anchor] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +##### Limitation + +##### Resource constraints + +```{=html} +Provides information about constraints which apply to the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints[gmd:MD_LegalConstraints[gmd:useConstraints]/gmd:otherConstraints[gco:CharacterString]] + +See [Resource constraints](iso19139.md#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad) + +Name + +: + +> No Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:useConstraints]) = 0 + +``` xml + + + + + + + + No Conditions Apply + + + + +``` + +Name + +: + +> Unknown Limitation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:useConstraints]) = 0 + +``` xml + + + + + + + + Conditions Unknown + + + + +``` + +Name + +: + +> Customizable constraints + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints[gmd:useConstraints]) = 0 + +``` xml + + + + + + + + + + +``` + +##### Section: Responsible custodian + +##### Contact for the resource + +##### Point of contact + +```{=html} +Identification of, and means of communication with, person(s) and organizations(s) associated with the resource(s) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:pointOfContact[gmd:CI_ResponsibleParty/gmd:role/gmd:='custodian'] + +See [Point of contact](iso19139.md#iso19139-elem-gmd-pointOfContact-2a38035f4c8b63a35a4e6c44e6f4b624) + +Name + +: + +> Contact for the resource + +Type + +: + +> add + +##### Section: Conformance class 3: harmonized + +##### Contains Operations + +```{=html} +Provides information about the operations that comprise the service +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:containsOperations + +See [Contains Operations](iso19139.md#iso19139-elem-srv-containsOperations-5765a967aadd33b5ba92cde03c9ce30e) + +Name + +: + +> Add Operation + +Type + +: + +> add + +Displayed only if + +: + +> count(gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification) > 0 + +``` xml + + + + + + + Web services + + + + + + http:// + + + + + +``` + +### View: Simple (default) {#iso19139-view-default} + +This view is composed of1tab(s). + +- [Tab: Simple (default)](iso19139.md#iso19139-tab-default) + +This view also allows to add the following element even if not in the current record: + +- Descriptive keywords (gmd:descriptiveKeywords) +- Keyword (gmd:keyword) +- Name (gmd:name) +- Spatial resolution (gmd:spatialResolution) +- Point of contact (gmd:pointOfContact) +- Distributor (gmd:distributor) +- Distribution format (gmd:distributionFormat) +- Contact (gmd:contact) +- Processor (gmd:processor) +- Topic category (gmd:topicCategory) +- Parameters (srv:parameters) + +#### Tab: Simple (default) {#iso19139-tab-default} + +![](img/iso19139-tab-default.png) + +This tab display elements from the XML metadata record. + +Instruction + +: + +##### Linkage + +```{=html} +Location (address) for on-line access using a Uniform Resource Locator address or similar addressing scheme such as http://www.statkart.no/isotc211 +``` + +XPath + +: + +> */gmd:linkage + +See [Linkage](iso19139.md#iso19139-elem-gmd-linkage-ddec55285da8318007d8ba8df6febcb5) + +##### Name + +XPath + +: + +> */gmd:name + +See [Name](iso19139.md#iso19139-elem-gmd-name-9796db4d1cab411f64fa97871fd1dd7e) + +Instruction + +: + +##### Linkage + +```{=html} +Location (address) for on-line access using a Uniform Resource Locator address or similar addressing scheme such as http://www.statkart.no/isotc211 +``` + +XPath + +: + +> */gmd:linkage + +See [Linkage](iso19139.md#iso19139-elem-gmd-linkage-ddec55285da8318007d8ba8df6febcb5) + +##### Name + +XPath + +: + +> */gmd:name + +See [Name](iso19139.md#iso19139-elem-gmd-name-9796db4d1cab411f64fa97871fd1dd7e) + +##### Section: Content Information + +```{=html} +Provides information about the feature catalogue and describes the coverage and image data characteristics +``` +See [Content Information](iso19139.md#iso19139-elem-gmd-contentInfo-da18cd6a5e91bae67187adc15ff47622) + +##### Included with dataset + +```{=html} +Indication of whether or not the feature catalogue is included with the dataset +``` + +XPath + +: + +> gmd:MD_FeatureCatalogueDescription/gmd:includedWithDataset + +See [Included with dataset](iso19139.md#iso19139-elem-gmd-includedWithDataset-0148507e25f25653e843ec66cf6cb878) + +##### Feature catalogue citation + +```{=html} +Complete bibliographic reference to one or more external feature catalogues +``` +See [Feature catalogue citation](iso19139.md#iso19139-elem-gmd-featureCatalogueCitation-0d490aca236a02c867c265dc0656143b) + +XPath + +: + +> . + +##### Feature catalogue citation + +```{=html} +Complete bibliographic reference to one or more external feature catalogues +``` +See [Feature catalogue citation](iso19139.md#iso19139-elem-gmd-featureCatalogueCitation-0d490aca236a02c867c265dc0656143b) + +XPath + +: + +> . + +Name + +: + +Type + +: + +> add + +``` xml + + + + true + + + + +``` + +### View: Full (advanced) {#iso19139-view-advanced} + +This view is composed of11tab(s). + +- [Tab: Identification (identificationInfo)](iso19139.md#iso19139-tab-identificationInfo) +- [Tab: Distribution (distributionInfo)](iso19139.md#iso19139-tab-distributionInfo) +- [Tab: Quality (dataQualityInfo)](iso19139.md#iso19139-tab-dataQualityInfo) +- [Tab: Spatial rep. (spatialRepresentationInfo)](iso19139.md#iso19139-tab-spatialRepresentationInfo) +- [Tab: Ref. system (referenceSystemInfo)](iso19139.md#iso19139-tab-referenceSystemInfo) +- [Tab: Content (contentInfo)](iso19139.md#iso19139-tab-contentInfo) +- [Tab: Portrayal (portrayalCatalogueInfo)](iso19139.md#iso19139-tab-portrayalCatalogueInfo) +- [Tab: Metadata (metadata)](iso19139.md#iso19139-tab-metadata) +- [Tab: Md. constraints (metadataConstraints)](iso19139.md#iso19139-tab-metadataConstraints) +- [Tab: Md. maintenance (metadataMaintenance)](iso19139.md#iso19139-tab-metadataMaintenance) +- [Tab: Schema info (applicationSchemaInfo)](iso19139.md#iso19139-tab-applicationSchemaInfo) + +#### Tab: Identification (identificationInfo) {#iso19139-tab-identificationInfo} + +![](img/iso19139-tab-identificationInfo.png) + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Identification info + +```{=html} +Basic information about the resource(s) to which the metadata applies +``` +See [Identification info](iso19139.md#iso19139-elem-gmd-identificationInfo-4fe68a205ff13feeccf0b58e08f39472) + +#### Tab: Distribution (distributionInfo) {#iso19139-tab-distributionInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Distribution Information + +```{=html} +Provides information about the distributor of and options for obtaining the resource(s) +``` +See [Distribution Information](iso19139.md#iso19139-elem-gmd-distributionInfo-3bddab6fda29c9ebd6f0ece68843fcff) + +#### Tab: Quality (dataQualityInfo) {#iso19139-tab-dataQualityInfo} + +![](img/iso19139-tab-dataQualityInfo.png) + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Data quality info + +```{=html} +Provides overall assessment of quality of a resource(s) +``` +See [Data quality info](iso19139.md#iso19139-elem-gmd-dataQualityInfo-9a53c25e2dacf5a7ab0aa1d155efc3dc) + +#### Tab: Spatial rep. (spatialRepresentationInfo) {#iso19139-tab-spatialRepresentationInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Spatial representation info + +```{=html} +Digital representation of spatial information in the dataset +``` +See [Spatial representation info](iso19139.md#iso19139-elem-gmd-spatialRepresentationInfo-f93705d4877ccd4c41819cc79677d6f2) + +#### Tab: Ref. system (referenceSystemInfo) {#iso19139-tab-referenceSystemInfo} + +![](img/iso19139-tab-referenceSystemInfo.png) + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Reference System Information + +```{=html} +Description of the spatial and temporal reference systems used in the dataset +``` +See [Reference System Information](iso19139.md#iso19139-elem-gmd-referenceSystemInfo-c7702a2e8ac03097e306ab3a02406765) + +#### Tab: Content (contentInfo) {#iso19139-tab-contentInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Content Information + +```{=html} +Provides information about the feature catalogue and describes the coverage and image data characteristics +``` +See [Content Information](iso19139.md#iso19139-elem-gmd-contentInfo-da18cd6a5e91bae67187adc15ff47622) + +#### Tab: Portrayal (portrayalCatalogueInfo) {#iso19139-tab-portrayalCatalogueInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Portrayal catalogue info + +```{=html} +Provides information about the catalogue of rules defined for the portrayal of a resource(s) +``` +See [Portrayal catalogue info](iso19139.md#iso19139-elem-gmd-portrayalCatalogueInfo-0a09defe8c7ca8431460b5690da9a52d) + +#### Tab: Metadata (metadata) {#iso19139-tab-metadata} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Metadata + +##### File identifier + +```{=html} +Unique identifier for this metadata file +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:fileIdentifier + +See [File identifier](iso19139.md#iso19139-elem-gmd-fileIdentifier-353be7794d17e5435ce2fe57d91966ba) + +##### Metadata language + +```{=html} +Language used for documenting metadata +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:language + +See [Metadata language](iso19139.md#iso19139-elem-gmd-language-98a1fec5ea30c100ef63f1ca4bd6dbdb) + +##### Other language + +```{=html} +Use this section to define other metadata language (multilingual metadata). +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:locale + +See [Other language](iso19139.md#iso19139-elem-gmd-locale-826113f1d130f65f95c78f6b16227c4b) + +##### Character set + +```{=html} +Full name of the character coding standard used for the metadata set +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:characterSet + +See [Character set](iso19139.md#iso19139-elem-gmd-characterSet-351330c9787387f916fed1143727215b) + +##### Parent identifier + +```{=html} +File identifier of the metadata to which this metadata is a subset (child) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:parentIdentifier + +See [Parent identifier](iso19139.md#iso19139-elem-gmd-parentIdentifier-e660d48fcd79782e330d99a6eee272bc) + +##### Hierarchy level + +```{=html} +Scope to which the metadata applies (see annex H for more information about metadata hierarchy levels) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:hierarchyLevel + +See [Hierarchy level](iso19139.md#iso19139-elem-gmd-hierarchyLevel-2b6d53b433d8f9c0cc58606d27eecc17) + +##### Hierarchy level name + +```{=html} +Name of the hierarchy levels for which the metadata is provided +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:hierarchyLevelName + +See [Hierarchy level name](iso19139.md#iso19139-elem-gmd-hierarchyLevelName-1c79276b0501d07055d7480b292899f0) + +##### Date stamp + +```{=html} +Date that the metadata was created (YYYY-MM-DDThh:mm:ss) +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dateStamp + +See [Date stamp](iso19139.md#iso19139-elem-gmd-dateStamp-ee89eb65741d89aef14d153887f60948) + +##### Metadata standard name + +```{=html} +Name of the metadata standard (including profile name) used +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:metadataStandardName + +See [Metadata standard name](iso19139.md#iso19139-elem-gmd-metadataStandardName-1e8d324f913f2da08b656d26e73e994d) + +##### Metadata standard version + +```{=html} +Version (profile) of the metadata standard used +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:metadataStandardVersion + +See [Metadata standard version](iso19139.md#iso19139-elem-gmd-metadataStandardVersion-ab0dd515a6ca9c890bc32d3615cd427f) + +##### Contact + +```{=html} +Party responsible for the metadata information +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:contact + +See [Metadata author](iso19139.md#iso19139-elem-gmd-contact-1a17bee429a4ae3c87f4026bd2da8005) + +##### Dataset URI + +```{=html} +Uniformed Resource Identifier (URI) of the dataset to which the metadata applies +``` +```{=html} +Uniformed Resource Identifier (URI) of the dataset to which the metadata applies. This link refers direct to the machine-readable dataset. +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:dataSetURI + +See [Dataset URI](iso19139.md#iso19139-elem-gmd-dataSetURI-8e14b3e6d98f92a9356ba2f3ba1ee982) + +##### Series + +```{=html} +Information about the series, or aggregate dataset, of which the dataset is a part +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:series + +See [Series](iso19139.md#iso19139-elem-gmd-series-98524248b047e1a31966f4fc05c765fb) + +##### Describes + +```{=html} +Describes +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:describes + +See [Describes](iso19139.md#iso19139-elem-gmd-describes-ea7ef755fceda2ec8b1bf4486f5572bf) + +##### PropertyType + +```{=html} +PropertyType +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:propertyType + +See [PropertyType](iso19139.md#iso19139-elem-gmd-propertyType-12fff0b8b43529f0300c32a5e13c9f89) + +##### Feature type + +```{=html} +Subset of feature types from cited feature catalogue occurring in data +``` + +XPath + +: + +> /gmd:MD_Metadata/gmd:featureType + +See [Feature type](iso19139.md#iso19139-elem-gmd-featureType-1a7ddaf6d70b2bca513bbb097769f7a5) + +##### Feature attribute + +XPath + +: + +> /gmd:MD_Metadata/gmd:featureAttribute + +See [Feature attribute](iso19139.md#iso19139-elem-gmd-featureAttribute-ed65880b0d966b5862d0d434b26fd36b) + +#### Tab: Md. constraints (metadataConstraints) {#iso19139-tab-metadataConstraints} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Metadata constraints + +```{=html} +Provides restrictions on the access and use of metadata +``` +See [Metadata constraints](iso19139.md#iso19139-elem-gmd-metadataConstraints-0547cb4265a8d2f9663d558a9ac72d43) + +#### Tab: Md. maintenance (metadataMaintenance) {#iso19139-tab-metadataMaintenance} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Metadata maintenance + +```{=html} +Provides information about the frequency of metadata updates, and the scope of those updates +``` +See [Metadata maintenance](iso19139.md#iso19139-elem-gmd-metadataMaintenance-2af9bf1fc8f71819e7361e5d6987358c) + +#### Tab: Schema info (applicationSchemaInfo) {#iso19139-tab-applicationSchemaInfo} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +##### Section: Application schema info + +```{=html} +Provides information about the conceptual schema of a dataset +``` +See [Application schema info](iso19139.md#iso19139-elem-gmd-applicationSchemaInfo-45e55618bc13cc73f4ede49af591b9cb) + +### View: XML (xml) {#iso19139-view-xml} + +This view is composed of1tab(s). + +- [Tab: XML (xml)](iso19139.md#iso19139-tab-xml) + +#### Tab: XML (xml) {#iso19139-tab-xml} + +This tab display elements from the XML metadata record and also provide controls to add all elements defined in the schema (XSD). + +## Schema technical details + +Standard identifier + +: + +> iso19139 + +Version + +: + +> 1.0 + +Schema location + +: + +> + +Schema namespaces + +: + +- +- +- +- +- + +Schema detection mode + +: + +> elements (root) + +Schema detection elements + +: + +- gmd:CI_ResponsibleParty +- gmd:DQ_DomainConsistency +- gmd:EX_Extent +- gmd:MD_Format +- gmd:MD_Metadata + +## Standard elements + +List of all elements available in the standard. + +### Name of the calendar era {#iso19139-elem-calendarEraName-f6992f57e0b42d0d298ceab6163baa24} + +Name + +: + +> calendarEraName + +Description + +: + +### Code {#iso19139-elem-code-gmd-MD_Identifier-b9e23155977b220811ee241a27dec71c} + +Name + +: + +> code + +Context + +: + +> gmd:MD_Identifier + +Description + +: + +```{=html} +Alphanumeric value identifying an instance in the namespace +``` +```{=html} +alphanumeric value identifying an instance in the namespace +``` +### System code {#iso19139-elem-code-34002ba7723581d2ef06d2611cab31af} + +Name + +: + +> code + +Description + +: + +```{=html} +Code. i.e. EPSG code. +``` +### Code {#iso19139-elem-code-gmd-MD_CodeValue-1315454a3efd07503687cfc5628f2cf1} + +Name + +: + +> code + +Context + +: + +> gmd:MD_CodeValue + +Description + +: + +```{=html} +Value code +``` +```{=html} +Value code (i.e. numeric) +``` +### Reference Authority {#iso19139-elem-codeSpace-0e8f09aab4d7c2a27305e0cc2a489acc} + +Name + +: + +> codeSpace + +Description + +: + +```{=html} +Authority responsible for codification. i.e. EPSG +``` +### Direct projection system (for geographical resources) {#iso19139-elem-DirectReferenceSystem-d28cd37e0c2b9a86305c20c194bf5f79} + +Name + +: + +> DirectReferenceSystem + +Description + +: + +```{=html} +ReferenceSystem derived / specify that it is a direct + reference +``` +### Factor {#iso19139-elem-factor-7e34666ca11658e04e31d3a614685b15} + +Name + +: + +> factor + +Description + +: + +### Frame {#iso19139-elem-frame-4aefbf304b03d93af57daba6b7c1fa8d} + +Name + +: + +> frame + +Description + +: + +```{=html} +Frame attribute provides a URI reference that identifies a description of the + reference system +``` +### Name {#iso19139-elem-gco-aName-39d38a0515ba733c328d5bd1c57e7e5e} + +Name + +: + +> gco:aName + +Description + +: + +### Type name {#iso19139-elem-gco-aName-gco-TypeName-b5751c296623f4c8529273aaf3caa587} + +Name + +: + +> gco:aName + +Context + +: + +> gco:TypeName + +Description + +: + +Recommended values + +| code | label | +|-----------|-----------| +| BOOLEAN | BOOLEAN | +| BYTE | BYTE | +| CHARACTER | CHARACTER | +| DATE | DATE | +| DATETIME | DATETIME | +| DOUBLE | DOUBLE | +| FLOAT | FLOAT | +| INTEGER | INTEGER | +| NUMERIC | NUMERIC | +| REAL | REAL | +| SERIAL | SERIAL | +| VARCHAR | VARCHAR | +| TEXT | TEXT | + +### Angle {#iso19139-elem-gco-Angle-3593960aae71b8b1bdfe5ebf0f35d2c9} + +Name + +: + +> gco:Angle + +Description + +: + +### Attribute type {#iso19139-elem-gco-attributeType-0b903ede9f187704365df4f997921127} + +Name + +: + +> gco:attributeType + +Description + +: + +### Binary {#iso19139-elem-gco-Binary-a22b5d55570c2130700e110981a19fc0} + +Name + +: + +> gco:Binary + +Description + +: + +### Text {#iso19139-elem-gco-CharacterString-3c4a83cea72b8088a49c2cdafdcaf1c1} + +Name + +: + +> gco:CharacterString + +Description + +: + +### Edition Date {#iso19139-elem-gco-Date-gmd-CI_Citation-ca5259e4b2838d1c0558671de588f0df} + +Name + +: + +> gco:Date + +Context + +: + +> gmd:CI_Citation + +Description + +: + +```{=html} +Date of the edition +``` +### Date {#iso19139-elem-gco-Date-c5ab2c208539dd2f12e12861e602dc91} + +Name + +: + +> gco:Date + +Description + +: + +```{=html} +Formatted as 2007-09-12 (YYYY-MM-DD) +``` +```{=html} +reference date and event used to describe it +``` +### Usage Date / Time {#iso19139-elem-gco-DateTime-gmd-MD_Usage-5932999d2f9d3461e5820eade7175b5b} + +Name + +: + +> gco:DateTime + +Context + +: + +> gmd:MD_Usage + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +```{=html} +date and time of the first use or range of uses of the resource and/or resource + series +``` +``` xml +2016-01-15T16:57:35 +``` + +### Planned Available Date / Time {#iso19139-elem-gco-DateTime-gmd-MD_StandardOrderProcess-c7c418ca6afb419b0c0f7978f0f70bd5} + +Name + +: + +> gco:DateTime + +Context + +: + +> gmd:MD_StandardOrderProcess + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +```{=html} +date and time when theresource will be available +``` +``` xml +2016-01-15T16:57:35 +``` + +### Date and time {#iso19139-elem-gco-DateTime-32c0a3056194945a06e26342a31c4abe} + +Name + +: + +> gco:DateTime + +Description + +: + +```{=html} +Date and time or range of date and time on or over which the process step occurred + (YYYY-MM-DDThh:mm:ss) +``` +``` xml +2016-01-15T16:57:35 +``` + +### Distance {#iso19139-elem-gco-Distance-97e7c5e41f65464cfde4bdcbd0987611} + +Name + +: + +> gco:Distance + +Description + +: + +``` xml +100 +``` + +### Length {#iso19139-elem-gco-Length-caf3c113efd04589ae6f255714b3cfb5} + +Name + +: + +> gco:Length + +Description + +: + +### Name {#iso19139-elem-gco-localName-d5d8fd10758516aba7e3e61dca6a3d06} + +Name + +: + +> gco:localName + +Description + +: + +### Local name {#iso19139-elem-gco-LocalName-eab12ae644d752a8b1eff54b0477039a} + +Name + +: + +> gco:LocalName + +Description + +: + +### Lower cardinality {#iso19139-elem-gco-lower-2cae58bb16663bb430a5756705195313} + +Name + +: + +> gco:lower + +Description + +: + +```{=html} +Lower cardinality +``` +### Name of Measure {#iso19139-elem-gco-Measure-gmd-DQ_Element-6560606f315eea7246848f93ddc3d967} + +Name + +: + +> gco:Measure + +Context + +: + +> gmd:DQ_Element + +Description + +: + +```{=html} +Name of the test applied to the data +``` +### Unit of Measure {#iso19139-elem-gco-Measure-gmd-EX_VerticalExtent-89983ecdbd1cba38f291e34bee6c223f} + +Name + +: + +> gco:Measure + +Context + +: + +> gmd:EX_VerticalExtent + +Description + +: + +```{=html} +Vertical units used for vertical extent information Examples: metres, feet, + millimetres, hectopascals +``` +### Measure {#iso19139-elem-gco-Measure-462aeec614da812d758659486be00b47} + +Name + +: + +> gco:Measure + +Description + +: + +### Member name {#iso19139-elem-gco-MemberName-b60b50f5b87b148b6615393b823e6a3b} + +Name + +: + +> gco:MemberName + +Description + +: + +### Nil reason {#iso19139-elem-gco-nilReason-fab8a57f0e69d3ca1699fa818c483698} + +Name + +: + +> gco:nilReason + +Description + +: + +### Standard codelists Nil reason (gco:nilReason) + +| code | label | +|--------------|--------------| +| missing | Missing | +| inapplicable | Inapplicable | +| template | Template | +| unknown | Unknown | +| withheld | Withheld | + +### Record {#iso19139-elem-gco-Record-6d9e28990789e830931b4d2ba9766597} + +Name + +: + +> gco:Record + +Description + +: + +### Scale {#iso19139-elem-gco-Scale-be644ab22ff8340a59eb1ea346d70bae} + +Name + +: + +> gco:Scale + +Description + +: + +### Scoped name {#iso19139-elem-gco-ScopedName-fa518f7fd322d0dc580364a3bdd0d0ba} + +Name + +: + +> gco:ScopedName + +Description + +: + +### Type name {#iso19139-elem-gco-TypeName-ca6ce43198031eafc2870fd56a3cca80} + +Name + +: + +> gco:TypeName + +Description + +: + +### Upper cardinality {#iso19139-elem-gco-upper-bb37e0d692d0d0dd4557b3b31c16d35c} + +Name + +: + +> gco:upper + +Description + +: + +```{=html} +Upper cardinality +``` +### Abstract {#iso19139-elem-gmd-abstract-cacfcd3bd6bbd44733f828dd2903ecd8} + +Name + +: + +> gmd:abstract + +Description + +: + +```{=html} +Brief narrative summary of the content of the resource(s) +``` + +Condition + +: + +> mandatory + +``` xml + + The data set combines the Corine based MAES (Mapping and Assessment of + Ecosystems and their Services) ecosystem classes with the non-spatial EUNIS habitat + classification (LEVEL 1) for a better biological characterization of ecosystems across + Europe (EEA-39). As such it represents probabilities of EUNIS habitat presence for each + MAES ecosystem type. + + The data set aims to combine spatially explicit land cover information with non-spatially + referenced habitat information to improve our knowledge about ecosystems and their + distribution across Europe. The work supports the MAES process, Target 2 Action 5 of the + implementation of the EU Biodiversity Strategy to 2020, established to achieve the Aichi + targets of the Convention of Biological Diversity (CBD). + + The objective of the ecosystem data set produced by EEA and its Topic Centre ETC/SIA was + to improve the biological description of land cover based ecosystem types. It represents + probabilities of EUNIS habitat presence in ecosystem types at European level. Since it is + not based on spatial explicit mapping the spatial and thematic accuracy is not of same + quality as delineated maps. + + The MAES ecosystem typology differentiates three levels: whereas the level 2 of the MAES + proposal follows closely the EUNIS level 1, the third level of the MAES typology + corresponds to the EUNIS level 2. This level will be the base for the mapping approach. + + +``` + +### Access constraints {#iso19139-elem-gmd-accessConstraints-37a2c49e23691aae70811fa8493a9501} + +Name + +: + +> gmd:accessConstraints + +Description + +: + +```{=html} +Access constraints applied to assure the protection of privacy or intellectual + property, and any special restrictions or limitations on obtaining the + resource +``` +``` xml + + + +``` + +### Address {#iso19139-elem-gmd-address-gmd-CI_ResponsibleParty-f03654d869b99fc91ee4abcff33fd45a} + +Name + +: + +> gmd:address + +Context + +: + +> gmd:CI_ResponsibleParty + +Description + +: + +```{=html} +Address of the responsible party +``` +### Address {#iso19139-elem-gmd-address-7526bc750039dec29eb9d0d886b5b895} + +Name + +: + +> gmd:address + +Description + +: + +```{=html} +Physical and email address at which the organization or individual may be + contacted +``` +### Administrative area {#iso19139-elem-gmd-administrativeArea-7e04a671c8b9220833d4bf8cbdc92040} + +Name + +: + +> gmd:administrativeArea + +Description + +: + +```{=html} +State, province of the location +``` +### Aggregate Datasetindentifier {#iso19139-elem-gmd-aggregateDataSetIdentifier-f9f0932f51fb5f976d14dc7a9b9d27eb} + +Name + +: + +> gmd:aggregateDataSetIdentifier + +Description + +: + +```{=html} +Identification information about aggregate dataset +``` +### Aggregate Datasetname {#iso19139-elem-gmd-aggregateDataSetName-59f3c71bb683851f84e8495e4cbf6753} + +Name + +: + +> gmd:aggregateDataSetName + +Description + +: + +```{=html} +Citation information about the aggregate dataset +``` +### Aggregation Information {#iso19139-elem-gmd-aggregationInfo-5f7895f7021de881e9a8eeb5f3cf954f} + +Name + +: + +> gmd:aggregationInfo + +Description + +: + +```{=html} +Provides aggregate dataset information +``` +### Alternate title {#iso19139-elem-gmd-alternateTitle-a6ad7cbd770ba390dd40d40adc3767f7} + +Name + +: + +> gmd:alternateTitle + +Description + +: + +```{=html} +Short name or other language name by which the cited information is known. + Example: "DCW" as an alternative title for "Digital Chart of the World +``` +### Amendment number {#iso19139-elem-gmd-amendmentNumber-9baa9c155f39c7359de9d01c15841366} + +Name + +: + +> gmd:amendmentNumber + +Description + +: + +```{=html} +Amendment number of the format version +``` +### Application profile {#iso19139-elem-gmd-applicationProfile-5705b47df6b8e82c11958958b15914a1} + +Name + +: + +> gmd:applicationProfile + +Description + +: + +```{=html} +Name of an application profile that can be used with the online + resource +``` +### Application schema info {#iso19139-elem-gmd-applicationSchemaInfo-45e55618bc13cc73f4ede49af591b9cb} + +Name + +: + +> gmd:applicationSchemaInfo + +Description + +: + +```{=html} +Provides information about the conceptual schema of a dataset +``` +### Association Type {#iso19139-elem-gmd-associationType-e943c0b17dfbb55713da9617c4b8f82d} + +Name + +: + +> gmd:associationType + +Description + +: + +```{=html} +Association type of the aggregate dataset +``` + +Condition + +: + +> mandatory + +### Attribute description {#iso19139-elem-gmd-attributeDescription-00769a0e138b43e364425bc2024f59a7} + +Name + +: + +> gmd:attributeDescription + +Description + +: + +```{=html} +Description of the attribute described by the measurement value +``` + +Condition + +: + +> mandatory + +### Attribute instances {#iso19139-elem-gmd-attributeInstances-d2471a047af6b59087ff645bd19192cf} + +Name + +: + +> gmd:attributeInstances + +Description + +: + +```{=html} +Attribute instances to which the information applies +``` +### Attributes {#iso19139-elem-gmd-attributes-649c8af5decae1033a93a033cc949221} + +Name + +: + +> gmd:attributes + +Description + +: + +```{=html} +Attributes to which the information applies +``` +### Authority {#iso19139-elem-gmd-authority-8906bfad81e05c31f72e1ea5fc426c79} + +Name + +: + +> gmd:authority + +Description + +: + +```{=html} +Person or party responsible for maintenance of the namespace +``` +### Axis Dimensions Properties {#iso19139-elem-gmd-axisDimensionProperties-0bb4895a894113bc668ea60ab4d65b7b} + +Name + +: + +> gmd:axisDimensionProperties + +Description + +: + +```{=html} +Information about spatial-temporal axis properties +``` +### Bits per value {#iso19139-elem-gmd-bitsPerValue-c821e4cbb21edf31325b2502030f1b4a} + +Name + +: + +> gmd:bitsPerValue + +Description + +: + +```{=html} +Maximum number of significant bits in the uncompressed representation for the + value in each band of each pixel +``` +### Camera calibration information availability {#iso19139-elem-gmd-cameraCalibrationInformationAvailability-a7b5dfec3c788d338536cb889d5a9aea} + +Name + +: + +> gmd:cameraCalibrationInformationAvailability + +Description + +: + +```{=html} +Indication of whether or not constants are available which allow for camera + calibration corrections +``` +### Cell geometry {#iso19139-elem-gmd-cellGeometry-890a25e7df81597ba59f0485b15e434f} + +Name + +: + +> gmd:cellGeometry + +Description + +: + +```{=html} +Identification of grid data as point or cell +``` + +Condition + +: + +> mandatory + +### Center point {#iso19139-elem-gmd-centerPoint-c69510c5e9aaea576a6ec9a4d2216a1d} + +Name + +: + +> gmd:centerPoint + +Description + +: + +```{=html} +Earth location in the coordinate system defined by the Spatial Reference System + and the grid coordinate of the cell halfway between opposite ends of the grid in the + spatial dimensions +``` +### Character encoding {#iso19139-elem-gmd-characterEncoding-7c26199d236a428b73baf1a730615e56} + +Name + +: + +> gmd:characterEncoding + +Description + +: + +```{=html} +CharacterEncoding +``` +### Character set {#iso19139-elem-gmd-characterSet-gmd-MD_Metadata-754de1196395a6e9833e813ecf4adaa3} + +Name + +: + +> gmd:characterSet + +Context + +: + +> gmd:MD_Metadata + +Description + +: + +```{=html} +Full name of the character coding standard used for the metadata + set +``` + +Condition + +: + +> conditional + +``` xml + + + +``` + +### Character set {#iso19139-elem-gmd-characterSet-gmd-MD_DataIdentification-bcb6931cff8dcf767968cfa67fd83a88} + +Name + +: + +> gmd:characterSet + +Context + +: + +> gmd:MD_DataIdentification + +Description + +: + +```{=html} +Full name of the character coding standard used for the dataset +``` +``` xml + + + +``` + +### Character set {#iso19139-elem-gmd-characterSet-351330c9787387f916fed1143727215b} + +Name + +: + +> gmd:characterSet + +Description + +: + +```{=html} +Full name of the character coding standard used for the metadata + set +``` + +Condition + +: + +> conditional + +``` xml + + + +``` + +### Checkpoint Availability {#iso19139-elem-gmd-checkPointAvailability-72ce5f12e30b81e5dc63f0585a98bd8a} + +Name + +: + +> gmd:checkPointAvailability + +Description + +: + +```{=html} +Indication of whether or not geographic position points are available to test + the accuracy of the georeferenced grid data +``` + +Condition + +: + +> mandatory + +### Checkpoint Description {#iso19139-elem-gmd-checkPointDescription-cdfe4f08433f7ba8c78498f65aec1099} + +Name + +: + +> gmd:checkPointDescription + +Description + +: + +```{=html} +Description of geographic position points used to test the accuracy of the + georeferenced grid data +``` + +Condition + +: + +> conditional + +### Address {#iso19139-elem-gmd-CI_Address-1d6106250b28fc5d97a0cf1a34c00ef8} + +Name + +: + +> gmd:CI_Address + +Description + +: + +```{=html} +Location of the responsible individual or organization +``` +### Citation {#iso19139-elem-gmd-CI_Citation-1b27899fdd70634298035b26812c0e67} + +Name + +: + +> gmd:CI_Citation + +Description + +: + +```{=html} +Standardised resource reference +``` +### Contact {#iso19139-elem-gmd-CI_Contact-087be944cc5050234e102c0d8eb3cc3d} + +Name + +: + +> gmd:CI_Contact + +Description + +: + +```{=html} +Information required to enable contact with the responsible person and/or + organization +``` +### Date {#iso19139-elem-gmd-CI_Date-7703f686b3d66a527500403e9e888c5d} + +Name + +: + +> gmd:CI_Date + +Description + +: + +```{=html} +Reference date and event used to describe it (YYYY-MM-DD) +``` +### Date type code {#iso19139-elem-gmd-CI_DateTypeCode-beb19798d5fb72e1e08905a0196a7d1a} + +Name + +: + +> gmd:CI_DateTypeCode + +Description + +: + +### Standard codelists Date type code (gmd:CI_DateTypeCode) + +| code | label | description | +|-------------|-------------|---------------------------------------------------------------------------------------| +| creation | Creation | Date identifies when the resource was brought into existence | +| publication | Publication | Date identifies when the resource was issued | +| revision | Revision | Date identifies when the resource was examined or re-examined and improved or amended | + +### OnLine function code {#iso19139-elem-gmd-CI_OnLineFunctionCode-6fe7732b8773444ae385d33f3e3e7ce0} + +Name + +: + +> gmd:CI_OnLineFunctionCode + +Description + +: + +### Standard codelists OnLine function code (gmd:CI_OnLineFunctionCode) + +| code | label | description | +|---------------|----------------|----------------------------------------------------------------------------------------| +| download | Download | Online instructions for transferring data from one storage device or system to another | +| information | Information | Online information about the resource | +| offlineAccess | Offline access | Online instructions for requesting the resource from the provider | +| order | Order | Online order process for obtening the resource | +| search | Search | Online search interface for seeking out information about the resource | + +### OnLine resource {#iso19139-elem-gmd-CI_OnlineResource-213bee17108ab0feab5f62eb0cb7d7ae} + +Name + +: + +> gmd:CI_OnlineResource + +Description + +: + +```{=html} +Information about on-line sources from which the dataset, specification, or + community profile name and extended metadata elements can be obtained +``` +### Presentatiewijze code {#iso19139-elem-gmd-CI_PresentationFormCode-65627a7048d5ce0c224f1836c65ea95f} + +Name + +: + +> gmd:CI_PresentationFormCode + +Description + +: + +### Standard codelists Presentatiewijze code (gmd:CI_PresentationFormCode) + +| code | label | description | +|------------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| documentDigital | Digital document | Digital representation of a primarily textual item (can contain illustrations also) | +| imageDigital | Digital image | Likeness of natural or man-made features, objects, and activities acquired through the sensing of visual or any other segment of the electromagnetic spectrum by sensors, such as thermal infrared, and high resolution radar and stored in digital format | +| documentHardcopy | Hardcopy document | Representation of a primarily textual item (can contain illustrations also) on paper, photographic material, or other media | +| imageHardcopy | Hardcopy image | Likeness of natural or man-made features, objects, and activities acquired through the sensing of visual or any other segment of the electromagnetic spectrum by sensors, such as thermal infrared, and high resolution radar and reproduced on paper, photographic material, or other media for use directly by the human user | +| mapDigital | Digital map | Map represented in raster or vector form | +| mapHardcopy | Hardcopy map | Map printed on paper, photographic material, or other media for use directly by the human user | +| modelDigital | Digital model | Multi-dimensional digital representation of a feature, process, etc. | +| modelHardcopy | Hardcopy model | 3-dimensional, physical model | +| profileDigital | Digital profile | Vertical cross-section in digital form | +| profileHardcopy | Hardcopy profile | Vertical cross-section printed on paper, etc. | +| tableDigital | Digital table | Digital representation of facts or figures systematically displayed, especially in columns | +| tableHardcopy | Hardcopy table | Representation of facts or figures systematically displayed, especially in columns, printed onpapers, photographic material, or other media | +| videoDigital | Digital video | Digital video recording | +| videoHardcopy | Hardcopy video | Video recording on film | + +### Responsible party {#iso19139-elem-gmd-CI_ResponsibleParty-3c64649ce322328d00e5c999aeceef06} + +Name + +: + +> gmd:CI_ResponsibleParty + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) and organizations + associated with the dataset +``` +### Role code {#iso19139-elem-gmd-CI_RoleCode-5979017c743ab287cf7d4188dc561d4e} + +Name + +: + +> gmd:CI_RoleCode + +Description + +: + +### Standard codelists Role code (gmd:CI_RoleCode) + +| code | label | description | +|-----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| resourceProvider | Resource provider | Party that supplies the resource | +| custodian | Custodian | Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource | +| owner | Owner | Party that owns the resource | +| user | User | Party who uses the resource | +| distributor | Distributor | Party who distributes the resource | +| originator | Originator | Party who created the resource | +| pointOfContact | Point of contact | Party who can be contacted for acquiring knowledge about or acquisition of the resource | +| principalInvestigator | Principal investigator | Key party responsible for gathering information and conducting research | +| processor | Processor | Party that has processed the data in a manner such that the resource has been modified | +| publisher | Publisher | Party who published the resource | +| author | Author | Party who authored the resource | + +### Series {#iso19139-elem-gmd-CI_Series-ceedc6d470330f24379e7dd4263132c9} + +Name + +: + +> gmd:CI_Series + +Description + +: + +```{=html} +Information about the series, or aggregate dataset, to which a dataset + belongs +``` +### Telephone {#iso19139-elem-gmd-CI_Telephone-a8a5286743a9be34bb502ffd91756c35} + +Name + +: + +> gmd:CI_Telephone + +Description + +: + +```{=html} +Telephone numbers for contacting the responsible individual or + organization +``` +### Citation {#iso19139-elem-gmd-citation-gmd-MD_Identification-4d43482062eba4f4d96d8c274ebd935c} + +Name + +: + +> gmd:citation + +Context + +: + +> gmd:MD_Identification + +Description + +: + +```{=html} +Citation data for the resource(s) +``` +``` xml + + + + Ecosystem types of Europe based on EUNIS level 1 (raster 100m) - + version 2.1, Dec. 2015 + + + + + + 2015-12-08 + + + + + + + + + + 2015-12-08 + + + + + + + + 2.1 + + + + + eea_r_3035_100_m_ecosystem-types-l1_2006_rev2-1 + + + + + + +``` + +### Citation {#iso19139-elem-gmd-citation-gmd-MD_Authority-c23fa4c41db4a321e376f2625a5b0bf9} + +Name + +: + +> gmd:citation + +Context + +: + +> gmd:MD_Authority + +Description + +: + +```{=html} +Citation which belongs to the authority +``` +``` xml + + + + Ecosystem types of Europe based on EUNIS level 1 (raster 100m) - + version 2.1, Dec. 2015 + + + + + + 2015-12-08 + + + + + + + + + + 2015-12-08 + + + + + + + + 2.1 + + + + + eea_r_3035_100_m_ecosystem-types-l1_2006_rev2-1 + + + + + + +``` + +### Citation {#iso19139-elem-gmd-citation-gmd-MD_Thesaurus-2de9a1c0b4ce344cc8452dceb1eb1f6d} + +Name + +: + +> gmd:citation + +Context + +: + +> gmd:MD_Thesaurus + +Description + +: + +```{=html} +Citation of the thesaurus +``` +``` xml + + + + Ecosystem types of Europe based on EUNIS level 1 (raster 100m) - + version 2.1, Dec. 2015 + + + + + + 2015-12-08 + + + + + + + + + + 2015-12-08 + + + + + + + + 2.1 + + + + + eea_r_3035_100_m_ecosystem-types-l1_2006_rev2-1 + + + + + + +``` + +### Citation {#iso19139-elem-gmd-citation-db812fc78bb9e3e6e756d4aeeed129fa} + +Name + +: + +> gmd:citation + +Description + +: + +```{=html} +Citation data for the resource(s) +``` +``` xml + + + + Ecosystem types of Europe based on EUNIS level 1 (raster 100m) - + version 2.1, Dec. 2015 + + + + + + 2015-12-08 + + + + + + + + + + 2015-12-08 + + + + + + + + 2.1 + + + + + eea_r_3035_100_m_ecosystem-types-l1_2006_rev2-1 + + + + + + +``` + +### Cited responsible party {#iso19139-elem-gmd-citedResponsibleParty-4995fda6b735448d4aaae3ba4568cd90} + +Name + +: + +> gmd:citedResponsibleParty + +Description + +: + +```{=html} +Name and position information for an individual or organization that is + responsible for the resource +``` +### City {#iso19139-elem-gmd-city-f40cb44555bb1278990e5f3799435366} + +Name + +: + +> gmd:city + +Description + +: + +```{=html} +City of the location +``` +### Classification {#iso19139-elem-gmd-classification-6718026907e4b1aead3cfd241f9b4d50} + +Name + +: + +> gmd:classification + +Description + +: + +```{=html} +Name of the handling restrictions on the resource or metadata +``` + +Condition + +: + +> mandatory + +### Classification system {#iso19139-elem-gmd-classificationSystem-010b22c4ad8a62f8521acbbbe6ff3398} + +Name + +: + +> gmd:classificationSystem + +Description + +: + +```{=html} +Name of the classification system +``` +### Cloud cover percentage {#iso19139-elem-gmd-cloudCoverPercentage-413e7fc75782e9add871c76f54773c87} + +Name + +: + +> gmd:cloudCoverPercentage + +Description + +: + +```{=html} +Area of the dataset obscured by clouds, expressed as a percentage of the + spatial extent +``` +### Unique resource identifier {#iso19139-elem-gmd-code-gmd-RS_Identifier-02da3b1f8d1566c861440d9a19132ad6} + +Name + +: + +> gmd:code + +Context + +: + +> gmd:RS_Identifier + +Description + +: + +```{=html} +Alphanumeric value identifying an instance in the namespace +``` + +Condition + +: + +> mandatory + +### Code {#iso19139-elem-gmd-code-gmd-MD_Identifier-41ff66cafe2cad1503b9d38a2447d249} + +Name + +: + +> gmd:code + +Context + +: + +> gmd:MD_Identifier + +Description + +: + +```{=html} +Alphanumeric value identifying an instance in the namespace +``` + +Condition + +: + +> mandatory + +### Code {#iso19139-elem-gmd-code-gmd-MD_CodeValue-d16c67ed008c738facc264888ac97356} + +Name + +: + +> gmd:code + +Context + +: + +> gmd:MD_CodeValue + +Description + +: + +```{=html} +Value code +``` +```{=html} +Value code (i.e. numeric) +``` +### Codespace {#iso19139-elem-gmd-codeSpace-02f6245083ede2af10bb3e9028ca4a7c} + +Name + +: + +> gmd:codeSpace + +Description + +: + +```{=html} +Name or identifier of the person or organization responsible for + namespace +``` +Recommended values + +| code | label | +|------|-------| +| EPSG | EPSG | + +``` xml + + OGP Surveying & Positioning Committee + +``` + +### Collective title {#iso19139-elem-gmd-collectiveTitle-0bc5974850084906d55ce76bb6787867} + +Name + +: + +> gmd:collectiveTitle + +Description + +: + +```{=html} +Common title with holdings note. NOTE title identifies elements of a series + collectively, combined with information about what volumes are available at the source + cited +``` +```{=html} +This field is used to name the Basic Geodata as defined in the GeoIV Annex I, as it is + possible that there are more than 1 "physical" datasets assigned to 1 legal entry. E.g.: Entry + no. 47 "Geophysikalisches Kartenwerk" consists of 3 datasets "Geophysikalische Karten + 1:500000", "Geophysikalische Spezialkarten" and "Gravimetrischer Atlas 1:100000" +``` +### Compliance code {#iso19139-elem-gmd-complianceCode-b796c3767c8744c392e3f2313329b30b} + +Name + +: + +> gmd:complianceCode + +Description + +: + +```{=html} +Indication of whether or not the cited feature catalogue complies with ISO + 19110 +``` +### ComposedOf {#iso19139-elem-gmd-composedOf-6f05d3ac23259e9892032b2da31de58c} + +Name + +: + +> gmd:composedOf + +Description + +: + +```{=html} +ComposedOf +``` +### Compression generation quantity {#iso19139-elem-gmd-compressionGenerationQuantity-8848b37883d12c673e2e9b280c7991ce} + +Name + +: + +> gmd:compressionGenerationQuantity + +Description + +: + +```{=html} +Count of the number of lossy compression cycles performed on the + image +``` +### Condition {#iso19139-elem-gmd-condition-9eb82cddebe8042afaa4010e913d0c79} + +Name + +: + +> gmd:condition + +Description + +: + +```{=html} +Condition under which the extended element is mandatory +``` +### Constraint language {#iso19139-elem-gmd-constraintLanguage-b9baafd989bb2bd8772ac36dc55e333d} + +Name + +: + +> gmd:constraintLanguage + +Description + +: + +```{=html} +Formal language used in Application Schema +``` + +Condition + +: + +> mandatory + +### Contact {#iso19139-elem-gmd-contact-gmd-MD_Metadata-2294585374798aea84d2876a5e8e7ade} + +Name + +: + +> gmd:contact + +Context + +: + +> gmd:MD_Metadata + +Description + +: + +```{=html} +Party responsible for the metadata information +``` + +Condition + +: + +> mandatory + +``` xml + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + + + + +``` + +### Contact {#iso19139-elem-gmd-contact-gmd-MD_MaintenanceInformation-0e2bd3597e71a41f1f85eed23ebb2005} + +Name + +: + +> gmd:contact + +Context + +: + +> gmd:MD_MaintenanceInformation + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) and + organization(s) with responsibility for maintaining the metadata +``` +``` xml + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + + + + +``` + +### Metadata author {#iso19139-elem-gmd-contact-1a17bee429a4ae3c87f4026bd2da8005} + +Name + +: + +> gmd:contact + +Description + +: + +```{=html} +Party responsible for the metadata information +``` + +Condition + +: + +> mandatory + +``` xml + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + + + + +``` + +### Contact Information {#iso19139-elem-gmd-contactInfo-3ae0765a28247f062c63bdc8eb973f50} + +Name + +: + +> gmd:contactInfo + +Description + +: + +```{=html} +Address of the responsible party +``` +### Contact instructions {#iso19139-elem-gmd-contactInstructions-794f3bd38398fc8ae39cce7c984087f0} + +Name + +: + +> gmd:contactInstructions + +Description + +: + +```{=html} +Supplemental instructions on how or when to contact the individual or + organization +``` +### Content Information {#iso19139-elem-gmd-contentInfo-da18cd6a5e91bae67187adc15ff47622} + +Name + +: + +> gmd:contentInfo + +Description + +: + +```{=html} +Provides information about the feature catalogue and describes the coverage and + image data characteristics +``` +``` xml + + + + false + + + + +``` + +### Content type {#iso19139-elem-gmd-contentType-f9d07b4b0ceec04f18bce420c5291a5e} + +Name + +: + +> gmd:contentType + +Description + +: + +```{=html} +Type of information represented by the cell value +``` + +Condition + +: + +> mandatory + +### Controlpoint Availability {#iso19139-elem-gmd-controlPointAvailability-f87c554dde9c2a5bc1413de637c47e2d} + +Name + +: + +> gmd:controlPointAvailability + +Description + +: + +```{=html} +Indication of whether or not control point(s) exists +``` + +Condition + +: + +> mandatory + +### Corner points {#iso19139-elem-gmd-cornerPoints-b92ddc8c05fd3950d850515164e26c5c} + +Name + +: + +> gmd:cornerPoints + +Description + +: + +```{=html} +Earth location in the coordinate system defined by the Spatial Reference System + and the grid coordinate of the cells at opposite ends of grid coverage along two + diagonals in the grid spatial dimensions. There are four corner points in a georectified + grid; at least two corner points along one diagonal are required +``` + +Condition + +: + +> mandatory + +### Country {#iso19139-elem-gmd-country-7819215af574621eb7dd1e63f32e1e19} + +Name + +: + +> gmd:country + +Description + +: + +```{=html} +Country of the physical address +``` +### Country {#iso19139-elem-gmd-country-gmd-MD_Legislation-84c810ce3efbda031bc28f55683d23a5} + +Name + +: + +> gmd:country + +Context + +: + +> gmd:MD_Legislation + +Description + +: + +```{=html} +Country in which the law was issued +``` +### Country {#iso19139-elem-gmd-country-PT_Group-c87df35752363f7e2f20c8a68953c0a6} + +Name + +: + +> gmd:country + +Context + +: + +> PT_Group + +Description + +: + +```{=html} +Country of language used for documenting a plain text +``` +### Credit {#iso19139-elem-gmd-credit-0b272311ef39699d6c413fe246ea5326} + +Name + +: + +> gmd:credit + +Description + +: + +```{=html} +Recognition of those who contributed to the resource(s) +``` +### Data quality info {#iso19139-elem-gmd-dataQualityInfo-9a53c25e2dacf5a7ab0aa1d155efc3dc} + +Name + +: + +> gmd:dataQualityInfo + +Description + +: + +```{=html} +Provides overall assessment of quality of a resource(s) +``` +``` xml + + + + + + + + + + + + + The data set production implied 2 steps. First re-classification of + CORINE Land Cover 2006 and bathymetry data using the 7 terrestrial (urban, cropland, + grassland, woodland and forest, heathland and shrub, sparsely vegetated land, + wetland), 1 freshwater (river and lakes), and 4 marine (marine inlets and transitional + waters, coastal, shelf, open ocean) classes of the MAES ecosystem typology (Maes et + al., 2013). The classes also provide links to major policy lines such as agriculture, + forestry, territorial cohesion, water and marine related policies. The second step + comprised refinement of the ecosystem types by attributing EUNIS habitat information + to each ecosystem type (see http://eunis.eea.europa.eu/habitats.jsp). The refinement + process used reference data such as potential natural vegetation, elevation, slope, + aspect, soil, geology, environmental regions and other spatial referenced information + which allowed attribution of the EUNIS habitat characteristics to the spatial mapping + units of the MAES ecosystem types. The geometric and thematic accuracy of EUNIS class + presence was also estimated and mapped. The method is described in the EEA Technical + Report 06/2015: European Ecosystem Assessment – Concept, Data, and Implementation. + The basis for the update was CORINE land cover 2006 (CLC 2006). It includes Albania, + Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czech Republic, + Denmark, Estonia, Finland, France, Germany, Hungary, Iceland, Ireland, Italy, Kosovo + (under UNSCR 1244/99), Latvia, Liechtenstein, Lithuania, Luxembourg, the former + Yugoslavian Republic of Macedonia, Malta, Montenegro, the Netherlands, Norway, Poland, + Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and + the United Kingdom. For Greece that has not participated in the CLC 2006 activity the + CLC 2000 data was used instead. + + + + + + + +``` + +### Dataset {#iso19139-elem-gmd-dataset-5262692d36cca930e0c50a2ae131301a} + +Name + +: + +> gmd:dataset + +Description + +: + +```{=html} +Dataset to which the information applies +``` +### Dataset URI {#iso19139-elem-gmd-dataSetURI-8e14b3e6d98f92a9356ba2f3ba1ee982} + +Name + +: + +> gmd:dataSetURI + +Description + +: + +```{=html} +Uniformed Resource Identifier (URI) of the dataset to which the metadata + applies +``` +```{=html} +Uniformed Resource Identifier (URI) of the dataset to which the metadata applies. This + link refers direct to the machine-readable dataset. +``` +### Data type {#iso19139-elem-gmd-dataType-8e2f4cdbb24b536e5df6aaee70047601} + +Name + +: + +> gmd:dataType + +Description + +: + +```{=html} +Code which identifies the kind of valueprovidedeprovided in the extended + element +``` + +Condition + +: + +> mandatory + +### Date {#iso19139-elem-gmd-date-ebb509445b6cf496cbf813a8b01a2362} + +Name + +: + +> gmd:date + +Description + +: + +```{=html} +Reference date for the cited resource (YYYY-MM-DD) +``` + +Condition + +: + +> mandatory + +### Date of last update {#iso19139-elem-gmd-date-gmd-MD_Revision-285564fda444a3437d34594df33c890e} + +Name + +: + +> gmd:date + +Context + +: + +> gmd:MD_Revision + +Description + +: + +```{=html} +Date of last update +``` +### Date of next update {#iso19139-elem-gmd-date-gmd-MD_MaintenanceInformation-9a98fdd70f046e77f1556ed865f56d0b} + +Name + +: + +> gmd:date + +Context + +: + +> gmd:MD_MaintenanceInformation + +Description + +: + +```{=html} +Scheduled revision date for resource +``` +### Date {#iso19139-elem-gmd-date-gmd-CI_Citation-478aeda64d149a8df6810bf35c93f39f} + +Name + +: + +> gmd:date + +Context + +: + +> gmd:CI_Citation + +Description + +: + +```{=html} +Reference date for the cited resource +``` + +Condition + +: + +> mandatory + +### Date {#iso19139-elem-gmd-date-gmd-CI_Date-6c9c8f825ef4f9c73ed94df2741d9ff5} + +Name + +: + +> gmd:date + +Context + +: + +> gmd:CI_Date + +Description + +: + +```{=html} +Reference date for the cited resource +``` + +Condition + +: + +> mandatory + +### Date of next update {#iso19139-elem-gmd-dateOfNextUpdate-efa132e2522617da74a9f2b6cac7f884} + +Name + +: + +> gmd:dateOfNextUpdate + +Description + +: + +```{=html} +Scheduled revision date for resource (YYYY-MM-DD) +``` +### Date stamp {#iso19139-elem-gmd-dateStamp-ee89eb65741d89aef14d153887f60948} + +Name + +: + +> gmd:dateStamp + +Description + +: + +```{=html} +Date that the metadata was created (YYYY-MM-DDThh:mm:ss) +``` + +Condition + +: + +> mandatory + +``` xml + + 2016-01-15T16:57:35 + +``` + +### Date / Time {#iso19139-elem-gmd-dateTime-f2e7c016069fc9e8b93cacb30bc5c30f} + +Name + +: + +> gmd:dateTime + +Description + +: + +```{=html} +Date and time or range of date and time on or over which the process step + occurred (YYYY-MM-DDThh:mm:ss) +``` +### Date / Time {#iso19139-elem-gmd-dateTime-LI_ProcessStep-0aea67a7cf3150b81bec5e552be93a4e} + +Name + +: + +> gmd:dateTime + +Context + +: + +> LI_ProcessStep + +Description + +: + +```{=html} +Date and time or range of date and time on or over which the process step + occurred (YYYY-MM-DDThh:mm:ss) +``` +### Date / Time {#iso19139-elem-gmd-dateTime-gmd-DQ_Element-a5f46c00ce539dddadc06ba486322a5b} + +Name + +: + +> gmd:dateTime + +Context + +: + +> gmd:DQ_Element + +Description + +: + +```{=html} +Date or range of dates on which a data quality measure was + applied +``` +### Date type {#iso19139-elem-gmd-dateType-7d228e2ac6b4932f0e011cc2521acccb} + +Name + +: + +> gmd:dateType + +Description + +: + +```{=html} +Event used for reference date +``` + +Condition + +: + +> mandatory + +### Definition {#iso19139-elem-gmd-definition-f8069fba68fd297eeca2c4a772339bab} + +Name + +: + +> gmd:definition + +Description + +: + +```{=html} +Definition of the extended element +``` + +Condition + +: + +> mandatory + +### Delivery point {#iso19139-elem-gmd-deliveryPoint-4d1627af441e956ac873875949365c46} + +Name + +: + +> gmd:deliveryPoint + +Description + +: + +```{=html} +Address line for the location (as described in ISO 11180, annex + A) +``` +### Denominator {#iso19139-elem-gmd-denominator-e807028ba183b3decd6aa631d0ca1ca3} + +Name + +: + +> gmd:denominator + +Description + +: + +```{=html} +The number below the line in a vulgar fraction +``` + +Condition + +: + +> add either a denominator or a distance + +Recommended values + +| code | label | +|---------|-------------| +| 5000 | 1:5´000 | +| 10000 | 1:10´000 | +| 25000 | 1:25´000 | +| 50000 | 1:50´000 | +| 100000 | 1:100´000 | +| 200000 | 1:200´000 | +| 300000 | 1:300´000 | +| 500000 | 1:500´000 | +| 1000000 | 1:1´000´000 | + +### Density {#iso19139-elem-gmd-density-91b875707b7dd43cd669efc4974331e4} + +Name + +: + +> gmd:density + +Description + +: + +```{=html} +Density at which the data is recorded +``` +### Density units {#iso19139-elem-gmd-densityUnits-8ce9ed433e80ccefc11d3af968194b20} + +Name + +: + +> gmd:densityUnits + +Description + +: + +```{=html} +Units of measure for the recording density +``` + +Condition + +: + +> conditional + +### Describes {#iso19139-elem-gmd-describes-ea7ef755fceda2ec8b1bf4486f5572bf} + +Name + +: + +> gmd:describes + +Description + +: + +```{=html} +Describes +``` +### Description {#iso19139-elem-gmd-description-eaa9ebfedd88eeab4424b4a0ede4ce7d} + +Name + +: + +> gmd:description + +Description + +: + +```{=html} +Description of the event, including related parameters or + tolerances +``` +### Description {#iso19139-elem-gmd-description-gmd-MD_AbstractClass-34fc68cb0bdaee5b3d63b2326c7869b3} + +Name + +: + +> gmd:description + +Context + +: + +> gmd:MD_AbstractClass + +Description + +: + +```{=html} +Description +``` +### Description {#iso19139-elem-gmd-description-LI_ProcessStep-f1b053819d7813cf9bd105eadd7570bf} + +Name + +: + +> gmd:description + +Context + +: + +> LI_ProcessStep + +Description + +: + +```{=html} +Description of the event, including related parameters or + tolerances +``` + +Condition + +: + +> mandatory + +### Description {#iso19139-elem-gmd-description-LI_Source-3e33abacd589d6d2d76d05d70e90613b} + +Name + +: + +> gmd:description + +Context + +: + +> LI_Source + +Description + +: + +```{=html} +Detailed description of the level of the source data +``` +### Description {#iso19139-elem-gmd-description-gmd-EX_Extent-5b2d427d98a833b825066fc5d95dbcb9} + +Name + +: + +> gmd:description + +Context + +: + +> gmd:EX_Extent + +Description + +: + +```{=html} +Spatial and temporal extent for the referring object +``` +### Description {#iso19139-elem-gmd-description-gmd-CI_OnlineResource-7b3dd389b32eff7af6fc0ce939edd2f7} + +Name + +: + +> gmd:description + +Context + +: + +> gmd:CI_OnlineResource + +Description + +: + +```{=html} +Detailed text description of what the online resource is/does +``` +Recommended values + +| code | label | +|-----------------------------------------------|---------------------------------------------------------------------------------| +| | ETRS89 / LAEA Europe | +| | Belge 1972 / Belgian Lambert 72 | +| | ETRS89-XYZ: 3D Cartesian in ETRS89 | +| | ETRS89-GRS80h: 3D geodetic in ETRS89 on GRS80 | +| | ETRS89-GRS802D: geodetic in ETRS89 on GRS80 | +| | ETRS89-LAEA2D: LAEA projection in ETRS89 on GRS80 | +| | ETRS89-LCC2D: LCC projection in ETRS89 on GRS80 | +| | ETRS89-TM26N2D: TM projection in ETRS89 on GRS80, zone 26N (30°W to 24°W) | +| | ETRS89-TM27N2D: TM projection in ETRS89 on GRS80, zone 27N (24°W to 18°W) | +| | ETRS89-TM28N: 2D TM projection in ETRS89 on GRS80, zone 28N (18°W to 12°W) | +| | ETRS89-TM29N: 2D TM projection in ETRS89 on GRS80, zone 29N (12°W to 6°W) | +| | ETRS89-TM30N: 2D TM projection in ETRS89 on GRS80, zone 30N (6°W to 0°) | +| | ETRS89-TM31N: 2D TM projection in ETRS89 on GRS80, zone 31N (0° to 6°E) | +| | ETRS89-TM32N: 2D TM projection in ETRS89 on GRS80, zone 32N (6°E to 12°E) | +| | ETRS89-TM33N: 2D TM projection in ETRS89 on GRS80, zone 33N (12°E to 18°E) | +| | ETRS89-TM34N: 2D TM projection in ETRS89 on GRS80, zone 34N (18°E to 24°E) | +| | ETRS89-TM35N: 2D TM projection in ETRS89 on GRS80, zone 35N (24°E to 30°E) | +| | ETRS89-TM36N: 2D TM projection in ETRS89 on GRS80, zone 36N (30°E to 36°E) | +| | ETRS89-TM37N: 2D TM projection in ETRS89 on GRS80, zone 37N (36°E to 42°E) | +| | ETRS89-TM38N: 2D TM projection in ETRS89 on GRS80, zone 38N (42°E to 48°E) | +| | ETRS89-TM39N: 2D TM projection in ETRS89 on GRS80, zone 39N (48°E to 54°E) | +| | EVRS: Height in EVRS | +| | ETRS89-GRS80-EVRS: 3D compound: 2D geodetic in ETRS89 on GRS80, and EVRS height | +| | RGF93 / Lambert-93 | +| | WGS 84 / UTM zone 20N | +| | RGFG95 / UTM zone 22N | +| | RGR92 / UTM zone 40S | +| | RGSPM06 / UTM zone 21N | +| | RGM04 / UTM zone 38S | + +### Description {#iso19139-elem-gmd-description-gmd-MD_CodeDomain-8103324c89de45c11315a8d351053359} + +Name + +: + +> gmd:description + +Context + +: + +> gmd:MD_CodeDomain + +Description + +: + +```{=html} +Description of the code domain +``` +### Value description {#iso19139-elem-gmd-description-gmd-MD_CodeValue-77dfb024af10e6d862075b803cc20dbf} + +Name + +: + +> gmd:description + +Context + +: + +> gmd:MD_CodeValue + +Description + +: + +```{=html} +Description of the value +``` +### Description {#iso19139-elem-gmd-description-gmd-MD_Attribute-75d5033891a8a34341d31ef9309f59b4} + +Name + +: + +> gmd:description + +Context + +: + +> gmd:MD_Attribute + +Description + +: + +```{=html} +Attribute description +``` +### Description {#iso19139-elem-gmd-description-gmd-MD_Role-c9f409ac11c4188ce914585f8c21e5c9} + +Name + +: + +> gmd:description + +Context + +: + +> gmd:MD_Role + +Description + +: + +```{=html} +Role description +``` +### Descriptive keywords {#iso19139-elem-gmd-descriptiveKeywords-d9044aa0856cf55d016da575dc037fa3} + +Name + +: + +> gmd:descriptiveKeywords + +Description + +: + +```{=html} +Provides category keywords, their type, and reference source +``` +### Descriptor {#iso19139-elem-gmd-descriptor-3b92c037212e359ee64699ddc5187d64} + +Name + +: + +> gmd:descriptor + +Description + +: + +```{=html} +Description of the range of a cell measurement value +``` +### Dimension {#iso19139-elem-gmd-dimension-21ead8c88a2cce69c91c967de032bb13} + +Name + +: + +> gmd:dimension + +Description + +: + +```{=html} +Information on the dimensions of the cell measurement value +``` +### Dimension name {#iso19139-elem-gmd-dimensionName-db894579835c31371c0bf5b98ec194dc} + +Name + +: + +> gmd:dimensionName + +Description + +: + +```{=html} +Name of the axis +``` + +Condition + +: + +> mandatory + +### Dimension size {#iso19139-elem-gmd-dimensionSize-6d8bbb1333af97b4020cd56044998ea9} + +Name + +: + +> gmd:dimensionSize + +Description + +: + +```{=html} +Number of elements along the axis +``` + +Condition + +: + +> mandatory + +### Distance {#iso19139-elem-gmd-distance-7b7fc9e19c5ebb9644dc51880d95a12d} + +Name + +: + +> gmd:distance + +Description + +: + +```{=html} +Ground sample distance +``` + +Condition + +: + +> Provide a distance if no equivalent Scale is documented + +Recommended values + +| code | label | +|------|-------| +| 0.10 | 10 cm | +| 0.25 | 25 cm | +| 0.50 | 50 cm | +| 1 | 1 m | +| 30 | 30 m | +| 100 | 100 m | + +``` xml + + 100 + +``` + +### Distribution format {#iso19139-elem-gmd-distributionFormat-5cad81c9a7af3991db918a5e8fc0c596} + +Name + +: + +> gmd:distributionFormat + +Description + +: + +```{=html} +Provides a description of the format of the data to be + distributed +``` + +Condition + +: + +> mandatory + +``` xml + + + + GTiff + + + + + + +``` + +### Distribution Information {#iso19139-elem-gmd-distributionInfo-3bddab6fda29c9ebd6f0ece68843fcff} + +Name + +: + +> gmd:distributionInfo + +Description + +: + +```{=html} +Provides information about the distributor of and options for obtaining the + resource(s) +``` +``` xml + + + + + + GTiff + + + + + + + + + + + + + http://www.eea.europa.eu/data-and-maps/data/ds_resolveuid/d851e1b7f678468b8f0b1b98930ba3e1 + + + + WWW:LINK-1.0-http--link + + + + + + + + + + +``` + +### Distribution / Order Process {#iso19139-elem-gmd-distributionOrderProcess-621478a21f4e3c305dc87af00248e875} + +Name + +: + +> gmd:distributionOrderProcess + +Description + +: + +```{=html} +Provides information about how the resource may be obtained, and related + instructions and fee information +``` +### Distributor {#iso19139-elem-gmd-distributor-b64067d4aecef8f15cc5a182fd00b195} + +Name + +: + +> gmd:distributor + +Description + +: + +```{=html} +Provides information about the distributor +``` +### Distributor contact {#iso19139-elem-gmd-distributorContact-57afbc495ed57e4d90c77442277e6961} + +Name + +: + +> gmd:distributorContact + +Description + +: + +```{=html} +Party from whom the resource may be obtained. This list need not be + exhaustive +``` + +Condition + +: + +> mandatory + +### Distributor format {#iso19139-elem-gmd-distributorFormat-d5712aab561d34322dd8328ad9362df6} + +Name + +: + +> gmd:distributorFormat + +Description + +: + +```{=html} +Provides information about the format used by the distributor +``` + +Condition + +: + +> conditional + +### Distributor transfer options {#iso19139-elem-gmd-distributorTransferOptions-6149d8c29d10ec5cf30b596582015a41} + +Name + +: + +> gmd:distributorTransferOptions + +Description + +: + +```{=html} +Provides information about the technical means and media used by the + distributor +``` +### Domain code {#iso19139-elem-gmd-domainCode-7ab4da558ea7aa9973cc9bb4514b14fe} + +Name + +: + +> gmd:domainCode + +Description + +: + +```{=html} +Three digit code assigned to the extended element +``` +### Domain of validity {#iso19139-elem-gmd-domainOfValidity-3b8814768dfd794c8bf6114e32bd5464} + +Name + +: + +> gmd:domainOfValidity + +Description + +: + +```{=html} +Range which is valid for the referencesystem +``` +### Domain value {#iso19139-elem-gmd-domainValue-d43089dafdacd9f762bfcebf7d39f850} + +Name + +: + +> gmd:domainValue + +Description + +: + +```{=html} +Valid values that can be assigned to the extended element +``` +### Absolute external positional accuracy {#iso19139-elem-gmd-DQ_AbsoluteExternalPositionalAccuracy-2d3004ba04cb5440553a71f72784b835} + +Name + +: + +> gmd:DQ_AbsoluteExternalPositionalAccuracy + +Description + +: + +```{=html} +Closeness of reported coordinate values to values accepted as or being + true +``` +### Accuracy of time measurement {#iso19139-elem-gmd-DQ_AccuracyOfATimeMeasurement-350c5e543ca98de6c417b2dfcec11ad2} + +Name + +: + +> gmd:DQ_AccuracyOfATimeMeasurement + +Description + +: + +```{=html} +Correctness of the temporal references of an item (reporting of error in time + measurement) +``` +### Completeness commission {#iso19139-elem-gmd-DQ_CompletenessCommission-3eb2187eca9bc68201978727eda4d550} + +Name + +: + +> gmd:DQ_CompletenessCommission + +Description + +: + +```{=html} +Excess data present in the dataset, as described by the scope +``` +### Completeness omission {#iso19139-elem-gmd-DQ_CompletenessOmission-0a19919745deecaf08e057f9d745bf9a} + +Name + +: + +> gmd:DQ_CompletenessOmission + +Description + +: + +```{=html} +Data absent from the dataset, as described by the scope +``` +### Conceptual consistency {#iso19139-elem-gmd-DQ_ConceptualConsistency-d42ad4a3a30578c7431606e8c1df4df8} + +Name + +: + +> gmd:DQ_ConceptualConsistency + +Description + +: + +```{=html} +Adherence to rules of the conceptual schema +``` +### Conformance result {#iso19139-elem-gmd-DQ_ConformanceResult-58ea50589a06c432ba3c0c1fc40caaf7} + +Name + +: + +> gmd:DQ_ConformanceResult + +Description + +: + +```{=html} +Information about the outcome of evaluating the obtained value (or set of + values) against a specified acceptable conformance quality level +``` +### Data quality {#iso19139-elem-gmd-DQ_DataQuality-16d17a37284f157b42d492a5960b5171} + +Name + +: + +> gmd:DQ_DataQuality + +Description + +: + +```{=html} +Quality information for the data specified by a data quality + scope +``` +``` xml + + + + + + + + + + + + The data set production implied 2 steps. First re-classification of + CORINE Land Cover 2006 and bathymetry data using the 7 terrestrial (urban, cropland, + grassland, woodland and forest, heathland and shrub, sparsely vegetated land, + wetland), 1 freshwater (river and lakes), and 4 marine (marine inlets and transitional + waters, coastal, shelf, open ocean) classes of the MAES ecosystem typology (Maes et + al., 2013). The classes also provide links to major policy lines such as agriculture, + forestry, territorial cohesion, water and marine related policies. The second step + comprised refinement of the ecosystem types by attributing EUNIS habitat information + to each ecosystem type (see http://eunis.eea.europa.eu/habitats.jsp). The refinement + process used reference data such as potential natural vegetation, elevation, slope, + aspect, soil, geology, environmental regions and other spatial referenced information + which allowed attribution of the EUNIS habitat characteristics to the spatial mapping + units of the MAES ecosystem types. The geometric and thematic accuracy of EUNIS class + presence was also estimated and mapped. The method is described in the EEA Technical + Report 06/2015: European Ecosystem Assessment – Concept, Data, and Implementation. + The basis for the update was CORINE land cover 2006 (CLC 2006). It includes Albania, + Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czech Republic, + Denmark, Estonia, Finland, France, Germany, Hungary, Iceland, Ireland, Italy, Kosovo + (under UNSCR 1244/99), Latvia, Liechtenstein, Lithuania, Luxembourg, the former + Yugoslavian Republic of Macedonia, Malta, Montenegro, the Netherlands, Norway, Poland, + Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and + the United Kingdom. For Greece that has not participated in the CLC 2006 activity the + CLC 2000 data was used instead. + + + + + + +``` + +### Domain consistency {#iso19139-elem-gmd-DQ_DomainConsistency-b77b3e42dfbc1799faaf486b19f37274} + +Name + +: + +> gmd:DQ_DomainConsistency + +Description + +: + +```{=html} +Adherence of values to the value domains +``` +### Evaluation method type code {#iso19139-elem-gmd-DQ_EvaluationMethodTypeCode-ef1611d0cbbf6e1995668d2724dee5d0} + +Name + +: + +> gmd:DQ_EvaluationMethodTypeCode + +Description + +: + +```{=html} +type of method for evaluating an identified data quality + measure +``` +### Standard codelists Evaluation method type code (gmd:DQ_EvaluationMethodTypeCode) + +| code | label | description | +|----------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| directInternal | Direct internal | Method of evaluating the quality of a dataset based on inspection of items within the dataset, where all data required is internal to the dataset being evaluated | +| directExternal | Direct external | Method of evaluating the quality of a dataset based on inspection of items within the dataset, where reference data external to the dataset being evaluated is required | +| indirect | Indirect | Method of evaluating the quality of a dataset based on external knowledge | + +### Format consistency {#iso19139-elem-gmd-DQ_FormatConsistency-19459f698decb189aed186574d4e433e} + +Name + +: + +> gmd:DQ_FormatConsistency + +Description + +: + +```{=html} +Degree to which data is stored in accordance with the physical structure of the + dataset, as described by the scope +``` +### Gridded data positional accuracy {#iso19139-elem-gmd-DQ_GriddedDataPositionalAccuracy-fc226f8ad8fedced9779bffe9d4b6db5} + +Name + +: + +> gmd:DQ_GriddedDataPositionalAccuracy + +Description + +: + +```{=html} +Closeness of gridded data position values to values accepted as or being + true +``` +### Non quantitative attribute accuracy {#iso19139-elem-gmd-DQ_NonQuantitativeAttributeAccuracy-6dd0c58c687f85dca3f14390846b4519} + +Name + +: + +> gmd:DQ_NonQuantitativeAttributeAccuracy + +Description + +: + +```{=html} +Correctness of non-quantitative attributes +``` +### Quantitative attribute accuracy {#iso19139-elem-gmd-DQ_QuantitativeAttributeAccuracy-318f4688c57ecac2edb9e81237c188f7} + +Name + +: + +> gmd:DQ_QuantitativeAttributeAccuracy + +Description + +: + +```{=html} +Accuracy of quantitative attributes +``` +### Quantitative result {#iso19139-elem-gmd-DQ_QuantitativeResult-9ff68c61fe2bfe850ba1c5da5f0475f8} + +Name + +: + +> gmd:DQ_QuantitativeResult + +Description + +: + +```{=html} +The values or information about the value(s) (or set of values) obtained from + applying a data quality measure +``` +### Relative internal positional accuracy {#iso19139-elem-gmd-DQ_RelativeInternalPositionalAccuracy-9d1661d32093ae34be463172ee4171b4} + +Name + +: + +> gmd:DQ_RelativeInternalPositionalAccuracy + +Description + +: + +```{=html} +Closeness of the relative positions of features in the scope to their + respective relative positions accepted as or being true +``` +### Scope {#iso19139-elem-gmd-DQ_Scope-bd775cb6e23ca10fa168f6837f60f149} + +Name + +: + +> gmd:DQ_Scope + +Description + +: + +```{=html} +Description of the data specified by the scope +``` +```{=html} +extent of characteristic(s) of the data for which quality information is + reported +``` +``` xml + + + + + +``` + +### Temporal consistency {#iso19139-elem-gmd-DQ_TemporalConsistency-cb9d4597a464c61d15952962479895d0} + +Name + +: + +> gmd:DQ_TemporalConsistency + +Description + +: + +```{=html} +Correctness of ordered events or sequences, if reported +``` +### Temporal validity {#iso19139-elem-gmd-DQ_TemporalValidity-fc6776c73908af8274103023abfb106c} + +Name + +: + +> gmd:DQ_TemporalValidity + +Description + +: + +```{=html} +Validity of data specified by the scope with respect to time +``` +### Thematic classification correctness {#iso19139-elem-gmd-DQ_ThematicClassificationCorrectness-bacc4f5d13c268c61ce4aaad44eacb00} + +Name + +: + +> gmd:DQ_ThematicClassificationCorrectness + +Description + +: + +```{=html} +Comparison of the classes assigned to features or their attributes to a + universe of discourse +``` +### Topological consistency {#iso19139-elem-gmd-DQ_TopologicalConsistency-14d0182e0c62de72433c7f3440489d0b} + +Name + +: + +> gmd:DQ_TopologicalConsistency + +Description + +: + +```{=html} +Correctness of the explicitly encoded topological characteristics of the + dataset as described by the scope +``` +### DS_Association {#iso19139-elem-gmd-DS_Association-ae4acbd2f543a91f8514b07a7f469222} + +Name + +: + +> gmd:DS_Association + +Description + +: + +```{=html} +DS_Association +``` +### Association Type {#iso19139-elem-gmd-DS_AssociationTypeCode-7cea96a5925a25c140f30c8577eb6813} + +Name + +: + +> gmd:DS_AssociationTypeCode + +Description + +: + +### Standard codelists Association Type (gmd:DS_AssociationTypeCode) + +| code | label | description | +|------------------------|---------------------------|-------------------------------------------------------------------------------------| +| crossReference | Cross reference | Reference from one dataset to another | +| largerWorkCitation | Larger work citation | Reference to a master dataset of which this one is a part | +| partOfSeamlessDatabase | Part of seamless database | Part of the same structured set of data held in a computer | +| source | Source | Mapping and charting information from which the dataset content originates | +| stereoMate | Stereo mate | Part of a set of imagery that when used together, provides three-dimensional images | + +### DS_DataSet {#iso19139-elem-gmd-DS_DataSet-197a02789f4acc67db14bbc70bdae13d} + +Name + +: + +> gmd:DS_DataSet + +Description + +: + +```{=html} +DS_DataSet +``` +### DS_Initiative {#iso19139-elem-gmd-DS_Initiative-99177f56cdac30c8bf8ae08807759c1e} + +Name + +: + +> gmd:DS_Initiative + +Description + +: + +```{=html} +DS_Initiative +``` +### Initiative Type {#iso19139-elem-gmd-DS_InitiativeTypeCode-1c08946c9359924c4e0560505d6ed92d} + +Name + +: + +> gmd:DS_InitiativeTypeCode + +Description + +: + +### Standard codelists Initiative Type (gmd:DS_InitiativeTypeCode) + +| code | label | description | +|---------------|---------------|-------------------------------------------------------------| +| campaign | Campaign | Series of organized planned actions | +| collection | Collection | Accumulation of datasets assembled for a specific purpose | +| exercise | Exercise | Specific performance of a function or group of functions | +| experiment | Experiment | Process designed to find if something is effective or valid | +| investigation | Investigation | Search or systematic inquiry | +| mission | Mission | Specific operation of a data collection system | +| sensor | Sensor | Device or piece of equipment which detects or records | +| operation | Operation | Action that is part of a series of actions | +| platform | Platform | Vehicle or other support base that holds a sensor | +| process | Process | Method of doing something involving a number of steps | +| program | Program | Specific planned activity | +| project | Project | Organized undertaking, research, or development | +| study | Study | Examination or investigation | +| task | Task | Piece of work | +| trial | Trial | Process of testing to discover or demonstrate something | + +### DS_OtherAggregate {#iso19139-elem-gmd-DS_OtherAggregate-d75f31e38b2c903fb77bee700fd67738} + +Name + +: + +> gmd:DS_OtherAggregate + +Description + +: + +```{=html} +DS_OtherAggregate +``` +### DS_Platform {#iso19139-elem-gmd-DS_Platform-1578fc8a9a6c1b3b001447d56dbf3be4} + +Name + +: + +> gmd:DS_Platform + +Description + +: + +```{=html} +DS_Platform +``` +### DS_ProductionSeries {#iso19139-elem-gmd-DS_ProductionSeries-dae0ba6d7c6e0c0774507987df27eddd} + +Name + +: + +> gmd:DS_ProductionSeries + +Description + +: + +```{=html} +DS_ProductionSeries +``` +### DS_Sensor {#iso19139-elem-gmd-DS_Sensor-99d8fff6c363ece657f8304d6114ae39} + +Name + +: + +> gmd:DS_Sensor + +Description + +: + +```{=html} +DS_Sensor +``` +### DS_Series {#iso19139-elem-gmd-DS_Series-fbba19e3982149ccdcca9e862ff983d3} + +Name + +: + +> gmd:DS_Series + +Description + +: + +```{=html} +DS_Series +``` +### DS_StereoMate {#iso19139-elem-gmd-DS_StereoMate-8034b71fd81debf0bc765b669a03d0d9} + +Name + +: + +> gmd:DS_StereoMate + +Description + +: + +```{=html} +DS_StereoMate +``` +### East bound {#iso19139-elem-gmd-eastBoundLongitude-d587a010e363b83d226fd0035e83d760} + +Name + +: + +> gmd:eastBoundLongitude + +Description + +: + +```{=html} +Eastern-most coordinate of the limit of the dataset extent, expressed in + longitude in decimal degrees (positive east) +``` + +Condition + +: + +> mandatory + +``` xml + + 38.1471 + +``` + +### Edition {#iso19139-elem-gmd-edition-b997ad6c7eb67deed33915d4691b4059} + +Name + +: + +> gmd:edition + +Description + +: + +```{=html} +Version of the cited resource +``` +``` xml + + 2.1 + +``` + +### Edition date {#iso19139-elem-gmd-editionDate-13359f87b19a72433b15f218e4026ee3} + +Name + +: + +> gmd:editionDate + +Description + +: + +```{=html} +Date of the edition (YYYY-MM-DD) +``` +### Electronic mail address {#iso19139-elem-gmd-electronicMailAddress-85d2f0b6b81c17b627c0640f7f49e872} + +Name + +: + +> gmd:electronicMailAddress + +Description + +: + +```{=html} +Address of the electronic mailbox of the responsible organization or + individual +``` +### Environment description {#iso19139-elem-gmd-environmentDescription-f09bfec0427a8a244e444ee494298c90} + +Name + +: + +> gmd:environmentDescription + +Description + +: + +```{=html} +Description of the dataset in the producer_s processing environment, including + items such as the software, the computer operating system, file name, and the dataset + size +``` +### Equivalent scale {#iso19139-elem-gmd-equivalentScale-450afb02a588e99273c4926c53620fb1} + +Name + +: + +> gmd:equivalentScale + +Description + +: + +```{=html} +Level of detail expressed as the scale of a comparable hardcopy map or + chart +``` +### Error statistic {#iso19139-elem-gmd-errorStatistic-29cd4bc20d224f1b99cd4cdc5f2afbc6} + +Name + +: + +> gmd:errorStatistic + +Description + +: + +```{=html} +Statistical method used to determine the value +``` +### Evaluation method description {#iso19139-elem-gmd-evaluationMethodDescription-cf7b77da8217834dc7e28ec9988dd6f7} + +Name + +: + +> gmd:evaluationMethodDescription + +Description + +: + +```{=html} +Description of the evaluation method +``` +### Evaluation Method {#iso19139-elem-gmd-evaluationMethodType-76b556cae8d468e563c04da4e16eaca8} + +Name + +: + +> gmd:evaluationMethodType + +Description + +: + +```{=html} +Type of method used to evaluate quality of the dataset +``` +### Evaluation procedure {#iso19139-elem-gmd-evaluationProcedure-2ca21440f6d62173cfe90752b85d2873} + +Name + +: + +> gmd:evaluationProcedure + +Description + +: + +```{=html} +Reference to the procedure information +``` +### Bounding Polygon {#iso19139-elem-gmd-EX_BoundingPolygon-59e3cbfd7fafe44aacd4370c5c9abf59} + +Name + +: + +> gmd:EX_BoundingPolygon + +Description + +: + +```{=html} +Boundary enclosing the dataset, expressed as the closed set of (x,y) + coordinates of the polygon (last point replicates first point) +``` +### Extent {#iso19139-elem-gmd-EX_Extent-d972ff3928d3ae0eb52e4853850e7484} + +Name + +: + +> gmd:EX_Extent + +Description + +: + +```{=html} +Information about spatial, vertical, and temporal extent +``` +### Geographic bounding box {#iso19139-elem-gmd-EX_GeographicBoundingBox-317fd5425b55f40c235ada8a89ee0519} + +Name + +: + +> gmd:EX_GeographicBoundingBox + +Description + +: + +```{=html} +Geographic position of the dataset +``` +``` xml + + + -33.90432 + + + 38.1471 + + + 26.988714 + + + 60.57849 + + +``` + +### Geographic description {#iso19139-elem-gmd-EX_GeographicDescription-edd6465b6e6b6a804db315a4f05303fb} + +Name + +: + +> gmd:EX_GeographicDescription + +Description + +: + +```{=html} +Description of the geographic area using identifiers +``` +### Spatial Temporal Extent {#iso19139-elem-gmd-EX_SpatialTemporalExtent-fb6c94e1d77ff12c5a4c7eefcca03fd0} + +Name + +: + +> gmd:EX_SpatialTemporalExtent + +Description + +: + +```{=html} +Extent with respect to date/time and spatial boundaries +``` +### Temporal Extent {#iso19139-elem-gmd-EX_TemporalExtent-49952a3862db59a39b01a7ad01337eab} + +Name + +: + +> gmd:EX_TemporalExtent + +Description + +: + +```{=html} +Time period covered by the content of the dataset +``` +``` xml + + + + 2006-01-01 + 2006-12-31 + + + +``` + +### Vertical extent {#iso19139-elem-gmd-EX_VerticalExtent-03de82207a2d25d3d8106293de357342} + +Name + +: + +> gmd:EX_VerticalExtent + +Description + +: + +```{=html} +Vertical domain of dataset +``` +### Explanation {#iso19139-elem-gmd-explanation-a2ff7a210f7f4e385b3f4bc09536eb0b} + +Name + +: + +> gmd:explanation + +Description + +: + +```{=html} +Explanation of the meaning of conformance for this result +``` + +Condition + +: + +> mandatory + +### Extended element information {#iso19139-elem-gmd-extendedElementInformation-df23e4d221faf1125b8d660000cc942d} + +Name + +: + +> gmd:extendedElementInformation + +Description + +: + +```{=html} +Provides information about a new metadata element, not found in ISO 19115, + which is required to describe geographic data +``` +### Extension Online resource {#iso19139-elem-gmd-extensionOnLineResource-f12177f44a4f70bde032489efa83c4d5} + +Name + +: + +> gmd:extensionOnLineResource + +Description + +: + +```{=html} +Information about on-line sources containing the community profile name and the + extended metadata elements. Information for all new metadata elements +``` +### Extent {#iso19139-elem-gmd-extent-gmd-MD_DataIdentification-ef6cafbbcf83a9c5f548fc0e2a6e4a67} + +Name + +: + +> gmd:extent + +Context + +: + +> gmd:MD_DataIdentification + +Description + +: + +```{=html} +Extent information including the bounding polygon, vertical, and temporal + extent of the dataset +``` +### Extent {#iso19139-elem-gmd-extent-gmd-DQ_Scope-cf877c587ba9ea326503a5f7f10db5b4} + +Name + +: + +> gmd:extent + +Context + +: + +> gmd:DQ_Scope + +Description + +: + +```{=html} +Information about the horizontal, vertical and temporal extent of the data + specified by the scope +``` +### Extent {#iso19139-elem-gmd-extent-gmd-EX_TemporalExtent-47e5bb94d809c840b870705288059fa9} + +Name + +: + +> gmd:extent + +Context + +: + +> gmd:EX_TemporalExtent + +Description + +: + +```{=html} +Date and time for the content of the dataset +``` +### Extent type code {#iso19139-elem-gmd-extentTypeCode-3ff35ceb2d2f687d2c8ce3d323884d96} + +Name + +: + +> gmd:extentTypeCode + +Description + +: + +```{=html} +Indication of whether the bounding polygon encompasses an area covered by the + data or an area where data is not present. Possible values: '1' for inclusion or '0' for + exclusion +``` +### Facsimile {#iso19139-elem-gmd-facsimile-b648543ae1d0726685e437bf567ad655} + +Name + +: + +> gmd:facsimile + +Description + +: + +```{=html} +Telephone number of a facsimile machine for the responsible organization or + individual +``` +### Feature attribute {#iso19139-elem-gmd-featureAttribute-ed65880b0d966b5862d0d434b26fd36b} + +Name + +: + +> gmd:featureAttribute + +Description + +: + +### Feature catalogue citation {#iso19139-elem-gmd-featureCatalogueCitation-0d490aca236a02c867c265dc0656143b} + +Name + +: + +> gmd:featureCatalogueCitation + +Description + +: + +```{=html} +Complete bibliographic reference to one or more external feature + catalogues +``` + +Condition + +: + +> mandatory + +``` xml + +``` + +### Feature instances {#iso19139-elem-gmd-featureInstances-2ec1ea3d86d2e7b1a0438f31d90abe5a} + +Name + +: + +> gmd:featureInstances + +Description + +: + +```{=html} +Feature instances to which the information applies +``` +### Features {#iso19139-elem-gmd-features-0649c9efc070f5cf773f06bf959cf517} + +Name + +: + +> gmd:features + +Description + +: + +```{=html} +Features to which the information applies +``` +### Feature type {#iso19139-elem-gmd-featureType-1a7ddaf6d70b2bca513bbb097769f7a5} + +Name + +: + +> gmd:featureType + +Description + +: + +```{=html} +Subset of feature types from cited feature catalogue occurring in + data +``` +### Feature types {#iso19139-elem-gmd-featureTypes-57cc98cc1ff094047cfff115a60c96e3} + +Name + +: + +> gmd:featureTypes + +Description + +: + +```{=html} +Subset of feature types from cited feature catalogue occurring in + data +``` +### Fees {#iso19139-elem-gmd-fees-f12184afc6c48c767b43b36d9044e1c9} + +Name + +: + +> gmd:fees + +Description + +: + +```{=html} +Fees and terms for retrieving the resource. Include monetary units (as + specified in ISO 4217) +``` +### File decompression technique {#iso19139-elem-gmd-fileDecompressionTechnique-e3c08caebc6eb48277ca074c5e8e547a} + +Name + +: + +> gmd:fileDecompressionTechnique + +Description + +: + +```{=html} +Recommendations of algorithms or processes that can be applied to read or + expand resources to which compression techniques have been applied +``` +### File description {#iso19139-elem-gmd-fileDescription-146f4502c53733e708c1bd8a795522d7} + +Name + +: + +> gmd:fileDescription + +Description + +: + +```{=html} +Text description of the illustration +``` +### File identifier {#iso19139-elem-gmd-fileIdentifier-353be7794d17e5435ce2fe57d91966ba} + +Name + +: + +> gmd:fileIdentifier + +Description + +: + +```{=html} +Unique identifier for this metadata file +``` +``` xml + + e8a366b7-0029-44d7-ae33-7578253179c0 + +``` + +### File name {#iso19139-elem-gmd-fileName-22a500ee0f0599f36ee1e97aff0fe087} + +Name + +: + +> gmd:fileName + +Description + +: + +```{=html} +Name of the file that contains a graphic that provides an illustration of the + dataset. It could be a public image document URL. +``` + +Condition + +: + +> mandatory + +``` xml + + + http://sdi.eea.europa.eu/public/catalogue-graphic-overview/e8a366b7-0029-44d7-ae33-7578253179c0.png + + +``` + +### File type {#iso19139-elem-gmd-fileType-b4c84bb6fe0143438998bfddb778200c} + +Name + +: + +> gmd:fileType + +Description + +: + +```{=html} +Format in which the illustration is encoded +``` +```{=html} +format in which the illustration is encoded Examples: CGM, EPS, GIF, JPEG, PBM, PS, + TIFF, XWD +``` +### Film distortion information availability {#iso19139-elem-gmd-filmDistortionInformationAvailability-a778dce0bc8a88cdba2c1315d18d0e28} + +Name + +: + +> gmd:filmDistortionInformationAvailability + +Description + +: + +```{=html} +Indication of whether or not Calibration Reseau information is + available +``` +### Format distributor {#iso19139-elem-gmd-formatDistributor-36ea0561d2f735b297700bf79e7dbe09} + +Name + +: + +> gmd:formatDistributor + +Description + +: + +```{=html} +Provides information about the distributor’s format +``` +### Function {#iso19139-elem-gmd-function-c66a8adca4499131f846c360fca82678} + +Name + +: + +> gmd:function + +Description + +: + +```{=html} +Code for function performed by the online resource +``` +### Geographic element {#iso19139-elem-gmd-geographicElement-4b7f68f3310760569dbdba10bad944c2} + +Name + +: + +> gmd:geographicElement + +Description + +: + +```{=html} +Provides geographic component of the extent of the referring + object +``` +``` xml + + + + -33.90432 + + + 38.1471 + + + 26.988714 + + + 60.57849 + + + +``` + +### Geographic identifier {#iso19139-elem-gmd-geographicIdentifier-6e21f053992dfa6b4eb02d6b91cbbe44} + +Name + +: + +> gmd:geographicIdentifier + +Description + +: + +```{=html} +Identifier used to represent a geographic area +``` + +Condition + +: + +> mandatory + +### Geometric object count {#iso19139-elem-gmd-geometricObjectCount-465f480e8e30a8c083af02492722eefc} + +Name + +: + +> gmd:geometricObjectCount + +Description + +: + +```{=html} +Total number of the point or vector object type occurring in the + dataset +``` +### Geometric objects {#iso19139-elem-gmd-geometricObjects-e10321f246589a7ed91638fa939b766b} + +Name + +: + +> gmd:geometricObjects + +Description + +: + +```{=html} +Information about the geometric objects used in the dataset +``` +### Geometric object type {#iso19139-elem-gmd-geometricObjectType-bf17aa906a7cd305707e10d6acd0e62d} + +Name + +: + +> gmd:geometricObjectType + +Description + +: + +```{=html} +Name of point and vector spatial objects used to locate zero-, one-, and + two-dimensional spatial locations in the dataset +``` + +Condition + +: + +> mandatory + +### GeoreferencedParameters {#iso19139-elem-gmd-georeferencedParameters-252d097ee7c185a35fde200a066e1c51} + +Name + +: + +> gmd:georeferencedParameters + +Description + +: + +```{=html} +GeoreferencedParameters +``` +### Graphic overview {#iso19139-elem-gmd-graphicOverview-f08bb356ded2aa6be5b6e67f15770173} + +Name + +: + +> gmd:graphicOverview + +Description + +: + +```{=html} +Provides a graphic that illustrates the resource(s) (should include a legend + for the graphic) +``` +``` xml + + + + + http://sdi.eea.europa.eu/public/catalogue-graphic-overview/e8a366b7-0029-44d7-ae33-7578253179c0.png + + + + +``` + +### Graphics file {#iso19139-elem-gmd-graphicsFile-e812a025f08ccad44b6f3a37fcc7d6c5} + +Name + +: + +> gmd:graphicsFile + +Description + +: + +```{=html} +Full application schema given as a graphics file +``` +### Handling description {#iso19139-elem-gmd-handlingDescription-0c88196efd7b0ce89bc76138514281ff} + +Name + +: + +> gmd:handlingDescription + +Description + +: + +```{=html} +Additional information about the restrictions on handling the + resource +``` +### Has {#iso19139-elem-gmd-has-f3ff1915df87b300aba1f0a17c387f0f} + +Name + +: + +> gmd:has + +Description + +: + +```{=html} +Has +``` +### Hierarchy level {#iso19139-elem-gmd-hierarchyLevel-2b6d53b433d8f9c0cc58606d27eecc17} + +Name + +: + +> gmd:hierarchyLevel + +Description + +: + +```{=html} +Scope to which the metadata applies (see annex H for more information about + metadata hierarchy levels) +``` +``` xml + + + +``` + +### Hierarchy level name {#iso19139-elem-gmd-hierarchyLevelName-1c79276b0501d07055d7480b292899f0} + +Name + +: + +> gmd:hierarchyLevelName + +Description + +: + +```{=html} +Name of the hierarchy levels for which the metadata is provided +``` +### Hours of service {#iso19139-elem-gmd-hoursOfService-52bbcc8182a0293962afd16ee768c579} + +Name + +: + +> gmd:hoursOfService + +Description + +: + +```{=html} +Time period (including time zone) when individuals can contact the organization + or individual +``` +### Identification info {#iso19139-elem-gmd-identificationInfo-4fe68a205ff13feeccf0b58e08f39472} + +Name + +: + +> gmd:identificationInfo + +Description + +: + +```{=html} +Basic information about the resource(s) to which the metadata + applies +``` + +Condition + +: + +> mandatory + +``` xml + + + + + + Ecosystem types of Europe based on EUNIS level 1 (raster 100m) - + version 2.1, Dec. 2015 + + + + + + 2015-12-08 + + + + + + + + + + 2015-12-08 + + + + + + + + 2.1 + + + + + eea_r_3035_100_m_ecosystem-types-l1_2006_rev2-1 + + + + + + + + The data set combines the Corine based MAES (Mapping and Assessment of + Ecosystems and their Services) ecosystem classes with the non-spatial EUNIS habitat + classification (LEVEL 1) for a better biological characterization of ecosystems across + Europe (EEA-39). As such it represents probabilities of EUNIS habitat presence for each + MAES ecosystem type. + + The data set aims to combine spatially explicit land cover information with non-spatially + referenced habitat information to improve our knowledge about ecosystems and their + distribution across Europe. The work supports the MAES process, Target 2 Action 5 of the + implementation of the EU Biodiversity Strategy to 2020, established to achieve the Aichi + targets of the Convention of Biological Diversity (CBD). + + The objective of the ecosystem data set produced by EEA and its Topic Centre ETC/SIA was + to improve the biological description of land cover based ecosystem types. It represents + probabilities of EUNIS habitat presence in ecosystem types at European level. Since it is + not based on spatial explicit mapping the spatial and thematic accuracy is not of same + quality as delineated maps. + + The MAES ecosystem typology differentiates three levels: whereas the level 2 of the MAES + proposal follows closely the EUNIS level 1, the third level of the MAES typology + corresponds to the EUNIS level 2. This level will be the base for the mapping approach. + + + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + http://www.eea.europa.eu + + + WWW:LINK-1.0-http--link + + + Europen Environment Agency public website + + + + + + + + + + + + + + + + + + + + + + + + + + http://sdi.eea.europa.eu/public/catalogue-graphic-overview/e8a366b7-0029-44d7-ae33-7578253179c0.png + + + + + + + + Land cover + + + Habitats and biotopes + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + + geonetwork.thesaurus.external.theme.httpinspireeceuropaeutheme-theme + + + + + + + + + + + + ecosystem + + + ecosystem type + + + land cover + + + environmental assessment + + + habitat + + + + + + + + GEMET - Concepts, version 2.4 + + + + + 2010-01-13 + + + + + + + + + + + geonetwork.thesaurus.external.theme.gemet + + + + + + + + + + + + Unless otherwise indicated, re-use of content on the EEA website + for commercial or non-commercial purposes is permitted free of charge, provided that + the source is acknowledged. The EEA re-use policy follows Directive 2003/98/EC of the + European Parliament and the Council on the re-use of public sector information + throughout the European Union and Commission Decision 2006/291/EC, Euratom on the + re-use of Commission information. The EEA accepts no responsibility or liability + whatsoever for the re-use of content accessible on its website. Any inquiries about + re-use of content on the EEA website should be addressed to Ove Caspersen, EEA, + Kongens Nytorv 6, DK-1050 Copenhagen K, Tel +45 33 36 71 00, Fax +45 33 36 71 99, + e-mail copyrights at eea.europa.eu + + + + + + + + + + + no limitations + + + + + + + + + + 100 + + + + + + + + biota + + + environment + + + + + + + -33.90432 + + + 38.1471 + + + 26.988714 + + + 60.57849 + + + + + + + + + + + + 2006-01-01 + 2006-12-31 + + + + + + + + +``` + +### Identifier {#iso19139-elem-gmd-identifier-c4f31fd808ee0eaa1e5525c5ff0edd23} + +Name + +: + +> gmd:identifier + +Description + +: + +```{=html} +Unique identifier for the resource. EXAMPLE: Universal Product Code (UPC), + National Stock Number (NSN) +``` +### Citation identifier {#iso19139-elem-gmd-identifier-gmd-CI_Citation-20221b6aedbb9cb4a515e5d396ea859e} + +Name + +: + +> gmd:identifier + +Context + +: + +> gmd:CI_Citation + +Description + +: + +```{=html} +Identifier of the citation +``` +### Identifier {#iso19139-elem-gmd-identifier-gmd-MD_Authority-85169d0c6f948867bbf79c0907e0fdfe} + +Name + +: + +> gmd:identifier + +Context + +: + +> gmd:MD_Authority + +Description + +: + +```{=html} +Identifier which belongs to the authority +``` +### Illumination azimuth angle {#iso19139-elem-gmd-illuminationAzimuthAngle-9c67704111e2bddeebc608da99ff3d92} + +Name + +: + +> gmd:illuminationAzimuthAngle + +Description + +: + +```{=html} +Illumination azimuth measured in degrees clockwise from true north at the time + the image is taken. For images from a scanning device, refer to the centre pixel of the + image +``` +### Illumination elevation angle {#iso19139-elem-gmd-illuminationElevationAngle-fadd6e99799d86a8d2817d3154e4c615} + +Name + +: + +> gmd:illuminationElevationAngle + +Description + +: + +```{=html} +Illumination elevation measured in degrees clockwise from the target plane at + intersection of the optical line of sight with the Earth_s surface. For images from a + scanning device, refer to the centre pixel of the image +``` +### Image quality code {#iso19139-elem-gmd-imageQualityCode-fc1f077f8b9f3893a031f8b27beaac71} + +Name + +: + +> gmd:imageQualityCode + +Description + +: + +```{=html} +Specifies the image quality +``` +```{=html} +specifies the image quality +``` +### Imaging condition {#iso19139-elem-gmd-imagingCondition-e9c7d7a924d3b3e2c92c646337c793d1} + +Name + +: + +> gmd:imagingCondition + +Description + +: + +```{=html} +Conditions affected the image +``` +### Included with dataset {#iso19139-elem-gmd-includedWithDataset-0148507e25f25653e843ec66cf6cb878} + +Name + +: + +> gmd:includedWithDataset + +Description + +: + +```{=html} +Indication of whether or not the feature catalogue is included with the + dataset +``` + +Condition + +: + +> mandatory + +``` xml + + false + +``` + +### Individual name {#iso19139-elem-gmd-individualName-60930dbb71e453e392be49149226d811} + +Name + +: + +> gmd:individualName + +Description + +: + +```{=html} +Name of the responsible person- surname, given name, title separated by a + delimiter +``` +### Initiative Type {#iso19139-elem-gmd-initiativeType-94726ec412440a3e8b82802d3ebffa3e} + +Name + +: + +> gmd:initiativeType + +Description + +: + +```{=html} +Type of initiative under which the aggregate dataset was produced +``` +### ISBN {#iso19139-elem-gmd-ISBN-a7253d49f82ee6bb2b5a531fb70a3820} + +Name + +: + +> gmd:ISBN + +Description + +: + +```{=html} +International Standard Book Number +``` +### ISSN {#iso19139-elem-gmd-ISSN-9bed905bb20090904f7fc371e411169b} + +Name + +: + +> gmd:ISSN + +Description + +: + +```{=html} +International Standard Serial Number +``` +### Issue identification {#iso19139-elem-gmd-issueIdentification-4722b88dd305fc8ebd00fbf712853119} + +Name + +: + +> gmd:issueIdentification + +Description + +: + +```{=html} +Information identifying the issue of the series +``` +### Keyword {#iso19139-elem-gmd-keyword-9589bb538b9fd1c10931fcfb09274b90} + +Name + +: + +> gmd:keyword + +Description + +: + +```{=html} +Commonly used word(s) or formalised word(s) or phrase(s) used to describe the + subject +``` +### Metadata language {#iso19139-elem-gmd-language-98a1fec5ea30c100ef63f1ca4bd6dbdb} + +Name + +: + +> gmd:language + +Description + +: + +```{=html} +Language used for documenting metadata +``` + +Condition + +: + +> conditional + +### Language {#iso19139-elem-gmd-language-gmd-MD_DataIdentification-beb634f41383e04b84205a263a51618b} + +Name + +: + +> gmd:language + +Context + +: + +> gmd:MD_DataIdentification + +Description + +: + +```{=html} +Language(s) used within the dataset +``` +```{=html} +language(s) used within the dataset +``` +### Language {#iso19139-elem-gmd-language-gmd-MD_FeatureCatalogueDescription-71920ebc293a169b2af5b096755545eb} + +Name + +: + +> gmd:language + +Context + +: + +> gmd:MD_FeatureCatalogueDescription + +Description + +: + +```{=html} +Language(s) used within the catalogue +``` +### Language {#iso19139-elem-gmd-languageCode-09e902b21da745d04364587ce8c4b5de} + +Name + +: + +> gmd:languageCode + +Description + +: + +```{=html} +Language code +``` +### ISO Language code {#iso19139-elem-gmd-LanguageCode-c2d8944958443fe48234c4019a990643} + +Name + +: + +> gmd:LanguageCode + +Description + +: + +```{=html} +Language code +``` +### Lens distortion information availability {#iso19139-elem-gmd-lensDistortionInformationAvailability-16305ddb1c7fe831e1d0bd2856b18441} + +Name + +: + +> gmd:lensDistortionInformationAvailability + +Description + +: + +```{=html} +Indication of whether or not lens aberration correction information is + available +``` +### Hierarchy level {#iso19139-elem-gmd-level-cb01720c4e97d12d16a28aea6ce52f8a} + +Name + +: + +> gmd:level + +Description + +: + +```{=html} +Hierarchical level of the data specified by the scope +``` + +Condition + +: + +> mandatory + +``` xml + + + +``` + +### Level description {#iso19139-elem-gmd-levelDescription-a2ac63be295342f5027433592380cbe8} + +Name + +: + +> gmd:levelDescription + +Description + +: + +```{=html} +Detailed description about the level of the data specified by the + scope +``` +### Lineage {#iso19139-elem-gmd-LI_Lineage-d8883febc8ab15d913eae9f7582b776d} + +Name + +: + +> gmd:LI_Lineage + +Description + +: + +```{=html} +Information about the events or source data used in constructing the data + specified by the scope or lack of knowledge about lineage +``` +``` xml + + + The data set production implied 2 steps. First re-classification of + CORINE Land Cover 2006 and bathymetry data using the 7 terrestrial (urban, cropland, + grassland, woodland and forest, heathland and shrub, sparsely vegetated land, + wetland), 1 freshwater (river and lakes), and 4 marine (marine inlets and transitional + waters, coastal, shelf, open ocean) classes of the MAES ecosystem typology (Maes et + al., 2013). The classes also provide links to major policy lines such as agriculture, + forestry, territorial cohesion, water and marine related policies. The second step + comprised refinement of the ecosystem types by attributing EUNIS habitat information + to each ecosystem type (see http://eunis.eea.europa.eu/habitats.jsp). The refinement + process used reference data such as potential natural vegetation, elevation, slope, + aspect, soil, geology, environmental regions and other spatial referenced information + which allowed attribution of the EUNIS habitat characteristics to the spatial mapping + units of the MAES ecosystem types. The geometric and thematic accuracy of EUNIS class + presence was also estimated and mapped. The method is described in the EEA Technical + Report 06/2015: European Ecosystem Assessment – Concept, Data, and Implementation. + The basis for the update was CORINE land cover 2006 (CLC 2006). It includes Albania, + Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czech Republic, + Denmark, Estonia, Finland, France, Germany, Hungary, Iceland, Ireland, Italy, Kosovo + (under UNSCR 1244/99), Latvia, Liechtenstein, Lithuania, Luxembourg, the former + Yugoslavian Republic of Macedonia, Malta, Montenegro, the Netherlands, Norway, Poland, + Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and + the United Kingdom. For Greece that has not participated in the CLC 2006 activity the + CLC 2000 data was used instead. + + + + +``` + +### Process step {#iso19139-elem-gmd-LI_ProcessStep-df37dc21ccbd656f4dd53e1e6e4aa42e} + +Name + +: + +> gmd:LI_ProcessStep + +Description + +: + +```{=html} +Information about an event in the creation process for the data specified by + the scope +``` +```{=html} +information about an event or transformation in the life of a dataset including the + process used to maintain the dataset +``` +### Source {#iso19139-elem-gmd-LI_Source-29725376e7b2367004e7834b84786158} + +Name + +: + +> gmd:LI_Source + +Description + +: + +```{=html} +Information about the source data used in creating the data specified by the + scope +``` +### Lineage {#iso19139-elem-gmd-lineage-7ec1911d2050ab2ba82079b8fa118182} + +Name + +: + +> gmd:lineage + +Description + +: + +```{=html} +Non-quantitative quality information about the lineage of the data specified by + the scope +``` +``` xml + + + + The data set production implied 2 steps. First re-classification of + CORINE Land Cover 2006 and bathymetry data using the 7 terrestrial (urban, cropland, + grassland, woodland and forest, heathland and shrub, sparsely vegetated land, + wetland), 1 freshwater (river and lakes), and 4 marine (marine inlets and transitional + waters, coastal, shelf, open ocean) classes of the MAES ecosystem typology (Maes et + al., 2013). The classes also provide links to major policy lines such as agriculture, + forestry, territorial cohesion, water and marine related policies. The second step + comprised refinement of the ecosystem types by attributing EUNIS habitat information + to each ecosystem type (see http://eunis.eea.europa.eu/habitats.jsp). The refinement + process used reference data such as potential natural vegetation, elevation, slope, + aspect, soil, geology, environmental regions and other spatial referenced information + which allowed attribution of the EUNIS habitat characteristics to the spatial mapping + units of the MAES ecosystem types. The geometric and thematic accuracy of EUNIS class + presence was also estimated and mapped. The method is described in the EEA Technical + Report 06/2015: European Ecosystem Assessment – Concept, Data, and Implementation. + The basis for the update was CORINE land cover 2006 (CLC 2006). It includes Albania, + Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czech Republic, + Denmark, Estonia, Finland, France, Germany, Hungary, Iceland, Ireland, Italy, Kosovo + (under UNSCR 1244/99), Latvia, Liechtenstein, Lithuania, Luxembourg, the former + Yugoslavian Republic of Macedonia, Malta, Montenegro, the Netherlands, Norway, Poland, + Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and + the United Kingdom. For Greece that has not participated in the CLC 2006 activity the + CLC 2000 data was used instead. + + + + + +``` + +### Linkage {#iso19139-elem-gmd-linkage-ddec55285da8318007d8ba8df6febcb5} + +Name + +: + +> gmd:linkage + +Description + +: + +```{=html} +Location (address) for on-line access using a Uniform Resource Locator address + or similar addressing scheme such as http://www.statkart.no/isotc211 +``` + +Condition + +: + +> mandatory + +### Other language {#iso19139-elem-gmd-locale-826113f1d130f65f95c78f6b16227c4b} + +Name + +: + +> gmd:locale + +Description + +: + +```{=html} +Use this section to define other metadata language (multilingual metadata). +``` +### Localised string {#iso19139-elem-gmd-LocalisedCharacterString-9fd46342f3b1b7c5b63898df1b997f3a} + +Name + +: + +> gmd:LocalisedCharacterString + +Description + +: + +### Localised string {#iso19139-elem-gmd-localisedString-56cb8674dae4c0ea7855baaf3d864ff3} + +Name + +: + +> gmd:localisedString + +Description + +: + +### Maintenance and update frequency {#iso19139-elem-gmd-maintenanceAndUpdateFrequency-a1048fe8ad8a58b19b4a8d93d9276069} + +Name + +: + +> gmd:maintenanceAndUpdateFrequency + +Description + +: + +```{=html} +Frequency with which changes and additions are made to the resource after the + initial resource is completed +``` + +Condition + +: + +> mandatory + +``` xml + + + +``` + +### Maintenance note {#iso19139-elem-gmd-maintenanceNote-9d819b6669d1940c147b60f1d769a43e} + +Name + +: + +> gmd:maintenanceNote + +Description + +: + +```{=html} +Information regarding specific requirements for maintaining the + resource +``` +### Maximum occurrence {#iso19139-elem-gmd-maximumOccurrence-586bc521966d29003dc6cea416d0cc02} + +Name + +: + +> gmd:maximumOccurrence + +Description + +: + +```{=html} +Maximum occurrence of the extended element +``` +### Maximum value {#iso19139-elem-gmd-maximumValue-46bb37dbbb47d975b9c88ee47687a50a} + +Name + +: + +> gmd:maximumValue + +Description + +: + +```{=html} +Highest vertical extent contained in the dataset +``` + +Condition + +: + +> mandatory + +### Maximum value {#iso19139-elem-gmd-maxValue-c5b953b90711bd9c01bc5efaeeeb51e1} + +Name + +: + +> gmd:maxValue + +Description + +: + +```{=html} +Longest wavelength that the sensor is capable of collecting within a designated + band +``` +### Aggregate Information {#iso19139-elem-gmd-MD_AggregateInformation-878370a145c71919312573e325a5657a} + +Name + +: + +> gmd:MD_AggregateInformation + +Description + +: + +```{=html} +Aggregate dataset information +``` +### Application Schema Information {#iso19139-elem-gmd-MD_ApplicationSchemaInformation-bdc5888debf009cc4d4e8527e7a46bc3} + +Name + +: + +> gmd:MD_ApplicationSchemaInformation + +Description + +: + +```{=html} +Information about the application schema used to build the + dataset +``` +### Band {#iso19139-elem-gmd-MD_Band-3997e9a8c1d5b8a25690a55dd55c107b} + +Name + +: + +> gmd:MD_Band + +Description + +: + +```{=html} +Range of wavelengths in the electromagnetic spectrum +``` +```{=html} +range of wavelengths in the electromagnetic spectrum +``` +### Browse Graphic {#iso19139-elem-gmd-MD_BrowseGraphic-bdf4d487d1e389d01ed977eb34d5fc1b} + +Name + +: + +> gmd:MD_BrowseGraphic + +Description + +: + +```{=html} +Graphic that provides an illustration of the dataset (should include a legend + for the graphic) +``` +``` xml + + + + http://sdi.eea.europa.eu/public/catalogue-graphic-overview/e8a366b7-0029-44d7-ae33-7578253179c0.png + + + +``` + +### Cell geometry code {#iso19139-elem-gmd-MD_CellGeometryCode-35ad1470fb7f4d2e62f3fe43080d5f6a} + +Name + +: + +> gmd:MD_CellGeometryCode + +Description + +: + +```{=html} +code indicating whether grid data is point or area +``` +### Standard codelists Cell geometry code (gmd:MD_CellGeometryCode) + +| code | label | description | +|-------|-------|------------------------------| +| point | Point | Each cell represents a point | +| area | Area | Each cell represents an area | + +### Characterset code {#iso19139-elem-gmd-MD_CharacterSetCode-d8a4713835858ceca74003ca966d0a21} + +Name + +: + +> gmd:MD_CharacterSetCode + +Description + +: + +```{=html} +name of the character coding standard used for the + resource +``` +### Standard codelists Characterset code (gmd:MD_CharacterSetCode) + +| code | label | description | +|------------|--------------|-----------------------------------------------------------------------------------------------------------------------------------| +| ucs2 | UCS2 | 16-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| ucs4 | UCS4 | 32-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| utf7 | UTF7 | 7-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf8 | UTF8 | 8-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf16 | UTF16 | 16-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| 8859part1 | 8859 Part 1 | ISO/IEC 8859-1, Information technology - 8-bit single byte coded graphic character sets - Part 1 : Latin alphabet No.1 | +| 8859part2 | 8859 Part 2 | ISO/IEC 8859-2, Information technology - 8-bit single byte coded graphic character sets - Part 2 : Latin alphabet No.2 | +| 8859part3 | 8859 Part 3 | ISO/IEC 8859-3, Information technology - 8-bit single byte coded graphic character sets - Part 3 : Latin alphabet No.3 | +| 8859part4 | 8859 Part 4 | ISO/IEC 8859-4, Information technology - 8-bit single byte coded graphic character sets - Part 4 : Latin alphabet No.4 | +| 8859part5 | 8859 Part 5 | ISO/IEC 8859-5, Information technology - 8-bit single byte coded graphic character sets - Part 5 : Latin/Cyrillic alphabet | +| 8859part6 | 8859 Part 6 | ISO/IEC 8859-6, Information technology - 8-bit single byte coded graphic character sets - Part 6 : Latin/Arabic alphabet | +| 8859part7 | 8859 Part 7 | ISO/IEC 8859-7, Information technology - 8-bit single byte coded graphic character sets - Part 7 : Latin/Greek alphabet | +| 8859part8 | 8859 Part 8 | ISO/IEC 8859-8, Information technology - 8-bit single byte coded graphic character sets - Part 8 : Latin/Hebrew alphabet | +| 8859part9 | 8859 Part 9 | ISO/IEC 8859-9, Information technology - 8-bit single byte coded graphic character sets - Part 9 : Latin alphabet No.5 | +| 8859part10 | 8859 Part 10 | ISO/IEC 8859-10, Information technology - 8-bit single byte coded graphic character sets - Part 10 : Latin alphabet No.6 | +| 8859part11 | 8859 Part 11 | ISO/IEC 8859-11, Information technology - 8-bit single byte coded graphic character sets - Part 11 : Latin/Thai alphabet | +| 8859part13 | 8859 Part 13 | ISO/IEC 8859-13, Information technology - 8-bit single byte coded graphic character sets - Part 13 : Latin alphabet No.7 | +| 8859part14 | 8859 Part 14 | ISO/IEC 8859-14, Information technology - 8-bit single byte coded graphic character sets - Part 14 : Latin alphabet No.8 (Celtic) | +| 8859part15 | 8859 Part 15 | ISO/IEC 8859-15, Information technology - 8-bit single byte coded graphic character sets - Part 15 : Latin alphabet No.9 | +| 8859part16 | 8859 Part 16 | ISO/IEC 8859-16, Information technology - 8-bit single byte coded graphic character sets - Part 16 : Latin alphabet No.10 | +| jis | JIS | Japanese code set used for electronic transmission | +| shiftJIS | Shift JIS | Japanese code set used on MS-DOS machines | +| eucJP | EUC JP | Japanese code set used on UNIX based machines | +| usAscii | US ASCII | United States ASCII code set (ISO 646 US) | +| ebcdic | EBCDIC | IBM mainframe code set | +| eucKR | EUC KR | Korean code set | +| big5 | Big 5 | Traditional Chinese code set used in Taiwan, Hong Kong of China and other areas | +| GB2312 | GB2312 | Simplified Chinese code set | + +``` xml + +``` + +### Classification code {#iso19139-elem-gmd-MD_ClassificationCode-f8c03303f33489e96e1e8063a4468c46} + +Name + +: + +> gmd:MD_ClassificationCode + +Description + +: + +```{=html} +Name of the handling restrictions on the dataset +``` +### Standard codelists Classification code (gmd:MD_ClassificationCode) + +| code | label | description | +|--------------|--------------|--------------------------------------------------------------------------------------------| +| unclassified | Unclassified | Available for general disclosure | +| restricted | Restricted | Not for general disclosure | +| confidential | Confidential | Available for someone who can be entrusted with information | +| secret | Secret | Kept or meant to be kept private, unknown, or hidden from all but a select group of people | +| topSecret | Top secret | Of the highest secrecy | + +### Constraints {#iso19139-elem-gmd-MD_Constraints-324782b12272766c3ea9027e10fb6b8a} + +Name + +: + +> gmd:MD_Constraints + +Description + +: + +``` xml + + + Unless otherwise indicated, re-use of content on the EEA website + for commercial or non-commercial purposes is permitted free of charge, provided that + the source is acknowledged. The EEA re-use policy follows Directive 2003/98/EC of the + European Parliament and the Council on the re-use of public sector information + throughout the European Union and Commission Decision 2006/291/EC, Euratom on the + re-use of Commission information. The EEA accepts no responsibility or liability + whatsoever for the re-use of content accessible on its website. Any inquiries about + re-use of content on the EEA website should be addressed to Ove Caspersen, EEA, + Kongens Nytorv 6, DK-1050 Copenhagen K, Tel +45 33 36 71 00, Fax +45 33 36 71 99, + e-mail copyrights at eea.europa.eu + + + +``` + +### Content type code {#iso19139-elem-gmd-MD_CoverageContentTypeCode-3a8fb87615b97ed59c74b013dfebf5fe} + +Name + +: + +> gmd:MD_CoverageContentTypeCode + +Description + +: + +```{=html} +specific type of information represented in the cell +``` +### Standard codelists Content type code (gmd:MD_CoverageContentTypeCode) + +| code | label | description | +|------------------------|-------------------------|--------------------------------------------------------------------------------------------------------------------| +| image | Image | Meaningful numerical representation of a physical parameter that is not the actual value of the physical parameter | +| thematicClassification | Thematic classification | Code value with no quantitative meaning, used to represent a physical quantity | +| physicalMeasurement | Physical measurement | Value in physical units of the quantity being measured | + +### Coverage Description {#iso19139-elem-gmd-MD_CoverageDescription-1f81296a593d08ad1a336c34877d7307} + +Name + +: + +> gmd:MD_CoverageDescription + +Description + +: + +```{=html} +information about the content of a grid data cell +``` +### Data identification {#iso19139-elem-gmd-MD_DataIdentification-f23816274b5af937b7fc035607866193} + +Name + +: + +> gmd:MD_DataIdentification + +Description + +: + +```{=html} +Information required to identify a dataset +``` +``` xml + + + + + Ecosystem types of Europe based on EUNIS level 1 (raster 100m) - + version 2.1, Dec. 2015 + + + + + + 2015-12-08 + + + + + + + + + + 2015-12-08 + + + + + + + + 2.1 + + + + + eea_r_3035_100_m_ecosystem-types-l1_2006_rev2-1 + + + + + + + + The data set combines the Corine based MAES (Mapping and Assessment of + Ecosystems and their Services) ecosystem classes with the non-spatial EUNIS habitat + classification (LEVEL 1) for a better biological characterization of ecosystems across + Europe (EEA-39). As such it represents probabilities of EUNIS habitat presence for each + MAES ecosystem type. + + The data set aims to combine spatially explicit land cover information with non-spatially + referenced habitat information to improve our knowledge about ecosystems and their + distribution across Europe. The work supports the MAES process, Target 2 Action 5 of the + implementation of the EU Biodiversity Strategy to 2020, established to achieve the Aichi + targets of the Convention of Biological Diversity (CBD). + + The objective of the ecosystem data set produced by EEA and its Topic Centre ETC/SIA was + to improve the biological description of land cover based ecosystem types. It represents + probabilities of EUNIS habitat presence in ecosystem types at European level. Since it is + not based on spatial explicit mapping the spatial and thematic accuracy is not of same + quality as delineated maps. + + The MAES ecosystem typology differentiates three levels: whereas the level 2 of the MAES + proposal follows closely the EUNIS level 1, the third level of the MAES typology + corresponds to the EUNIS level 2. This level will be the base for the mapping approach. + + + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + http://www.eea.europa.eu + + + WWW:LINK-1.0-http--link + + + Europen Environment Agency public website + + + + + + + + + + + + + + + + + + + + + + + + + + http://sdi.eea.europa.eu/public/catalogue-graphic-overview/e8a366b7-0029-44d7-ae33-7578253179c0.png + + + + + + + + Land cover + + + Habitats and biotopes + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + + geonetwork.thesaurus.external.theme.httpinspireeceuropaeutheme-theme + + + + + + + + + + + + ecosystem + + + ecosystem type + + + land cover + + + environmental assessment + + + habitat + + + + + + + + GEMET - Concepts, version 2.4 + + + + + 2010-01-13 + + + + + + + + + + + geonetwork.thesaurus.external.theme.gemet + + + + + + + + + + + + Unless otherwise indicated, re-use of content on the EEA website + for commercial or non-commercial purposes is permitted free of charge, provided that + the source is acknowledged. The EEA re-use policy follows Directive 2003/98/EC of the + European Parliament and the Council on the re-use of public sector information + throughout the European Union and Commission Decision 2006/291/EC, Euratom on the + re-use of Commission information. The EEA accepts no responsibility or liability + whatsoever for the re-use of content accessible on its website. Any inquiries about + re-use of content on the EEA website should be addressed to Ove Caspersen, EEA, + Kongens Nytorv 6, DK-1050 Copenhagen K, Tel +45 33 36 71 00, Fax +45 33 36 71 99, + e-mail copyrights at eea.europa.eu + + + + + + + + + + + no limitations + + + + + + + + + + 100 + + + + + + + + biota + + + environment + + + + + + + -33.90432 + + + 38.1471 + + + 26.988714 + + + 60.57849 + + + + + + + + + + + + 2006-01-01 + 2006-12-31 + + + + + + + +``` + +### Data type code {#iso19139-elem-gmd-MD_DatatypeCode-0bba106513fd53d5cba911355f212732} + +Name + +: + +> gmd:MD_DatatypeCode + +Description + +: + +```{=html} +datatype of element or entity +``` +### Standard codelists Data type code (gmd:MD_DatatypeCode) + +| code | label | description | +|-----------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| class | Class | Descriptor of a set of objects that share the same attributes, operations, methods, relationships, and behavior | +| codelist | Codelist | Descriptor of a set of objects that share the same attributes, operations, methods, relationships, and behavior | +| enumeration | Enumeration | Data type whose instances form a list of named literal values, not extendable | +| codelistElement | Codelist element | Permissible value for a codelist or enumeration | +| abstractClass | Abstract class | Class that cannot be directly instantiated | +| aggregateClass | Aggregate class | Class that is composed of classes it is connected to by an aggregate relationship | +| specifiedClass | Specified class | Subclass that may be substituted for its superclass | +| datatypeClass | Datatype class | Class with few or no operations whose primary purpose is to hold the abstract state of another class for transmittal, storage, encoding or persistent storage | +| interfaceClass | Interface class | Named set of operations that characterize the behavior of an element | +| unionClass | Union class | Class describing a selection of one of the specified types | +| metaClass | Meta class | Class whose instances are classes | +| typeClass | Type class | Class used for specification of a domain of instances (objects), together with the operations applicable to the objects. A type may have attributes and associations | +| characterString | Character string | Free text field | +| integer | Integer | Numerical field | +| association | Association | Semantic relationship between two classes that involves connections among their instances | + +### Digital transfer options {#iso19139-elem-gmd-MD_DigitalTransferOptions-2c4f72aed0a9f9f5330a03d767a19e18} + +Name + +: + +> gmd:MD_DigitalTransferOptions + +Description + +: + +```{=html} +Technical means and media by which a resource is obtained from the + distributor +``` +``` xml + + + + + + http://www.eea.europa.eu/data-and-maps/data/ds_resolveuid/d851e1b7f678468b8f0b1b98930ba3e1 + + + + WWW:LINK-1.0-http--link + + + + + + + +``` + +### Dimension {#iso19139-elem-gmd-MD_Dimension-bc1cce714363bca430f062ece77911bb} + +Name + +: + +> gmd:MD_Dimension + +Description + +: + +```{=html} +Axis properties +``` +### Dimension type code {#iso19139-elem-gmd-MD_DimensionNameTypeCode-18f3e8f68c2b8cfbaed2e3f76dbfa8c7} + +Name + +: + +> gmd:MD_DimensionNameTypeCode + +Description + +: + +```{=html} +name of the dimension +``` +### Standard codelists Dimension type code (gmd:MD_DimensionNameTypeCode) + +| code | label | description | +|------------|-------------|------------------------------------------------------------| +| row | Row | Ordinate (y) axis | +| column | Column | Abscissa (x) axis | +| vertical | Vertical | Vertical (z) axis | +| track | Track | Along the direction of motion of the scan point | +| crossTrack | Cross track | Perpendicular to the direction of motion of the scan point | +| line | Line | Scan line of a sensor | +| sample | Sample | Element along a scan line | +| time | Time | Duration | + +### Distribution {#iso19139-elem-gmd-MD_Distribution-54490632933db13de8c9b59dfa70abe1} + +Name + +: + +> gmd:MD_Distribution + +Description + +: + +```{=html} +Information about the distributor of and options for obtaining the + resource +``` +``` xml + + + + + GTiff + + + + + + + + + + + + + http://www.eea.europa.eu/data-and-maps/data/ds_resolveuid/d851e1b7f678468b8f0b1b98930ba3e1 + + + + WWW:LINK-1.0-http--link + + + + + + + + + +``` + +### Distribution Units {#iso19139-elem-gmd-MD_DistributionUnits-ec18c729b051ecf4cbef23146d4c6b51} + +Name + +: + +> gmd:MD_DistributionUnits + +Description + +: + +### Distributor {#iso19139-elem-gmd-MD_Distributor-d6824c3ac5e1b658b17c1547ded49dba} + +Name + +: + +> gmd:MD_Distributor + +Description + +: + +```{=html} +Information about the distributor +``` +### Extended Element Information {#iso19139-elem-gmd-MD_ExtendedElementInformation-42b92809323020ccb9cb0def9d6ba040} + +Name + +: + +> gmd:MD_ExtendedElementInformation + +Description + +: + +```{=html} +New metadata element, not found in ISO 19115, which is required to describe + geographic data +``` +### Feature catalogue description {#iso19139-elem-gmd-MD_FeatureCatalogueDescription-1b529353783b4f3bb4f593e052f37339} + +Name + +: + +> gmd:MD_FeatureCatalogueDescription + +Description + +: + +```{=html} +Information identifying the feature catalogue or the conceptual + schema +``` +``` xml + + + false + + + +``` + +### Format {#iso19139-elem-gmd-MD_Format-de100d011b7723caf6cfed1dfd2d521e} + +Name + +: + +> gmd:MD_Format + +Description + +: + +```{=html} +Description of the computer language construct that specifies the + representation of data objects in a record, file, message, storage device or + transmission channel +``` +``` xml + + + GTiff + + + + + +``` + +### Geometric objects {#iso19139-elem-gmd-MD_GeometricObjects-194ec1e062c0a1e8a95764b03ba61b2c} + +Name + +: + +> gmd:MD_GeometricObjects + +Description + +: + +```{=html} +Number of objects, listed by geometric object type, used in the + dataset +``` +### Geometric Object Type {#iso19139-elem-gmd-MD_GeometricObjectTypeCode-0343e1ce72823eeb2e13f5c1c7d8a362} + +Name + +: + +> gmd:MD_GeometricObjectTypeCode + +Description + +: + +### Standard codelists Geometric Object Type (gmd:MD_GeometricObjectTypeCode) + +| code | label | description | +|-----------|-----------|----------------------------------------------------------------------------------------------------------------| +| complex | Complex | Set of geometric primitives such that their boundaries can be represented as a union of other primitives | +| composite | Composite | Connected set of curves, solids or surfaces | +| curve | Curve | Bounded, 1-dimensional geometric primitive, representing the continuous image of a line | +| point | Point | Zero-dimensional geometric primitive, representing a position but not having an extent | +| solid | Solid | Bounded, connected 3-dimensional geometric primitive, representing the continuous image of a region of space | +| surface | Surface | Bounded, connected 2-dimensional geometric primitive, representing the continuous image of a region of a plane | + +### Georectified {#iso19139-elem-gmd-MD_Georectified-a0093e969409fbdfa09e2fbbd2d856c2} + +Name + +: + +> gmd:MD_Georectified + +Description + +: + +```{=html} +Grid whose cells are regularly spaced in a geographic (i.e., lat / long) or map + coordinate system defined in the Spatial Referencing System (SRS) so that any cell in + the grid can be geolocated given its grid coordinate and the grid origin, cell spacing, + and orientation +``` +### Georeferenceable {#iso19139-elem-gmd-MD_Georeferenceable-758d9a268ea6785de91ddd68102f643b} + +Name + +: + +> gmd:MD_Georeferenceable + +Description + +: + +```{=html} +Grid with cells irregularly spaced in any given geographic/map projection + coordinate system, whose individual cells can be geolocated using geolocation + information supplied with the data but cannot be geolocated from the grid properties + alone +``` +### Grid spatial representation {#iso19139-elem-gmd-MD_GridSpatialRepresentation-f6383abd79082f30ad3d9e0e6d582ae4} + +Name + +: + +> gmd:MD_GridSpatialRepresentation + +Description + +: + +```{=html} +Information about grid spatial objects in the dataset +``` +### Identifier {#iso19139-elem-gmd-MD_Identifier-a8075d9fcf78f296408f5a47a15f72e3} + +Name + +: + +> gmd:MD_Identifier + +Description + +: + +```{=html} +Value uniquely identifying an object within a namespace +``` +### Image description {#iso19139-elem-gmd-MD_ImageDescription-36a3b51ff28072d6b260523149eeb9bd} + +Name + +: + +> gmd:MD_ImageDescription + +Description + +: + +```{=html} +Information about an image's suitability for use +``` +### Imaging Condition Code {#iso19139-elem-gmd-MD_ImagingConditionCode-606883a4bccc60f4019ebc03e22ec7e9} + +Name + +: + +> gmd:MD_ImagingConditionCode + +Description + +: + +```{=html} +code which indicates conditions which may affect the + image +``` +### Standard codelists Imaging Condition Code (gmd:MD_ImagingConditionCode) + +| code | label | description | +|--------------------|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| blurredImage | Blurred image | Portion of the image is blurred | +| cloud | Cloud | Portion of the image is partially obscured by cloud cover | +| degradingObliquity | Degrading obliquity | Acute angle between the plane of the ecliptic (the plane of the Earth s orbit) and the plane of the celestial equator | +| fog | Fog | Portion of the image is partially obscured by fog | +| heavySmokeOrDust | Heavy smoke or dust | Portion of the image is partially obscured by heavy smoke or dust | +| night | Night | Image was taken at night | +| rain | Rain | Image was taken during rainfall | +| semiDarkness | Semi darkness | Image was taken during semi-dark conditions -- twilight conditions | +| shadow | Shadow | Portion of the image is obscured by shadow | +| snow | Snow | Portion of the image is obscured by snow | +| terrainMasking | Terrain masking | The absence of collection data of a given point or area caused by the relative location of topographic features which obstruct the collection path between the collector(s) and the subject(s) of interest | + +### Keywords {#iso19139-elem-gmd-MD_Keywords-aa987246245f8ec027b557d023a95fc4} + +Name + +: + +> gmd:MD_Keywords + +Description + +: + +```{=html} +Keywords, their type and reference source +``` +### Keyword Type Code {#iso19139-elem-gmd-MD_KeywordTypeCode-2f0c82ed31f17b806c452ec469485a6a} + +Name + +: + +> gmd:MD_KeywordTypeCode + +Description + +: + +```{=html} +methods used to group similar keywords +``` +### Standard codelists Keyword Type Code (gmd:MD_KeywordTypeCode) + +| code | label | description | +|------------|------------|--------------------------------------------------------------------| +| discipline | Discipline | Keyword identifies a branch of instruction or specialized learning | +| place | Place | Keyword identifies a location | +| stratum | Stratum | Keyword identifies the layer(s) of any deposited substance | +| temporal | Temporal | Keyword identifies a time period related to the dataset | +| theme | Theme | Keyword identifies a particular subject or topic | + +### Legal constraints {#iso19139-elem-gmd-MD_LegalConstraints-6ed172b96e894f417fd71106ceb3e0f7} + +Name + +: + +> gmd:MD_LegalConstraints + +Description + +: + +```{=html} +Restrictions and legal prerequisites for accessing and using the resource or + metadata +``` +``` xml + + + + + + no limitations + + +``` + +### Maintenance Frequency {#iso19139-elem-gmd-MD_MaintenanceFrequencyCode-2338217a3e7f51c06e6f18cca73afb6c} + +Name + +: + +> gmd:MD_MaintenanceFrequencyCode + +Description + +: + +### Standard codelists Maintenance Frequency (gmd:MD_MaintenanceFrequencyCode) + +| code | label | description | +|-------------|-------------|----------------------------------------------------------| +| continual | Continual | Data is repeatedly and frequently updated | +| daily | Daily | Data is updated each day | +| weekly | Weekly | Data is updated on a weekly basis | +| fortnightly | Fortnightly | Data is updated every two weeks | +| monthly | Monthly | Data is updated each month | +| quarterly | Quarterly | Data is updated every three months | +| biannually | Biannually | Data is updated twice each year | +| annually | Annually | Data is updated every year | +| asNeeded | As needed | Data is updated as deemed necessary | +| irregular | Irregular | Data is updated in intervals that are uneven in duration | +| notPlanned | Not planned | There are no plans to update the data | +| unknown | Unknown | Frequency of maintenance for the data is not known | + +``` xml + +``` + +### Maintenance information {#iso19139-elem-gmd-MD_MaintenanceInformation-c8cc0a8f25b6943b1df7d5a1b46f915d} + +Name + +: + +> gmd:MD_MaintenanceInformation + +Description + +: + +```{=html} +Information about the scope and frequency of updating +``` +``` xml + + + + + +``` + +### Medium {#iso19139-elem-gmd-MD_Medium-e532adb6d35b09f1dd8cc793984c3723} + +Name + +: + +> gmd:MD_Medium + +Description + +: + +```{=html} +Information about the media on which the resource can be + distributed +``` +### Medium format {#iso19139-elem-gmd-MD_MediumFormatCode-25bd3e7951957655817e6b930a2923fd} + +Name + +: + +> gmd:MD_MediumFormatCode + +Description + +: + +```{=html} +method used to write to the medium +``` +### Standard codelists Medium format (gmd:MD_MediumFormatCode) + +| code | label | description | +|------------------|--------------------|------------------------------------------------------------| +| cpio | CPIO | CoPy In / Out (UNIX file format and command) | +| tar | TAR | Tape ARchive | +| highSierra | High sierra | High sierra file system | +| iso9660 | ISO9660 | Information processing volume and file structure of CD-ROM | +| iso9660RockRidge | ISO9660 Rock Ridge | Rock ridge interchange protocol (UNIX) | +| iso9660AppleHFS | ISO9660 Apple HFS | Hierarchical file system (Macintosh) | + +### Medium name code {#iso19139-elem-gmd-MD_MediumNameCode-a9abbe36f3dcf64d224bef1bfea190e7} + +Name + +: + +> gmd:MD_MediumNameCode + +Description + +: + +```{=html} +name of the medium +``` +### Standard codelists Medium name code (gmd:MD_MediumNameCode) + +| code | label | description | +|---------------------------|-------------------------------|----------------------------------------------------| +| cdRom | CDROM | Read-only optical disk | +| dvd | DVD | Digital versatile disk | +| dvdRom | DVDROM | Digital versatile disk, read only | +| 3halfInchFloppy | 3 Half Inch Floppy | 3,5 inch magnetic disk | +| 5quarterInchFloppy | 5 Quarter Inch Floppy | 5,25 inch magnetic disk | +| 7trackTape | 7 Track tape | 7 track magnetic tape | +| 9trackTape | 9 track tape | 9 track magnetic tape | +| 3480Cartridge | 3480 Cartridge | 3480 cartridge tape drive | +| 3490Cartridge | 3490 Cartridge | 3490 cartridge tape drive | +| 3580Cartridge | 3580 Cartridge | 3580 cartridge tape drive | +| 4mmCartridgeTape | 4 mm Cartridge tape | 4 millimetre magnetic tape | +| 8mmCartridgeTape | 8 mm Cartridge tape | 8 millimetre magnetic tape | +| 1quarterInchCartridgeTape | 1 Quarter inch cartridge tape | 0,25 inch magnetic tape | +| digitalLinearTap | Digital linear tape | Half inch cartridge streaming tape drive | +| onLine | Online | Direct computer linkage | +| satellite | Satellite | Linkage through a satellite communication system | +| telephoneLink | Telephone link | Communication through a telephone network | +| hardcopy | Hardcopy | Pamphlet or leaflet giving descriptive information | + +### Metadata {#iso19139-elem-gmd-MD_Metadata-c2690d5de6984085623477c3bdc3275b} + +Name + +: + +> gmd:MD_Metadata + +Description + +: + +```{=html} +Root entity which defines metadata about a resource or resources +``` +``` xml + + + e8a366b7-0029-44d7-ae33-7578253179c0 + + + + + + + + + df69de7e-3af1-4b4d-94d4-8bebe84c80b0 + + + + + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + + + + + + 2016-01-15T16:57:35 + + + ISO 19115:2003/19139 + + + + 1.0 + + + + + + + + urn:ogc:def:crs:EPSG:7.1:3035 + + + OGP Surveying & Positioning Committee + + + + + + + + + + + Ecosystem types of Europe based on EUNIS level 1 (raster 100m) - + version 2.1, Dec. 2015 + + + + + + 2015-12-08 + + + + + + + + + + 2015-12-08 + + + + + + + + 2.1 + + + + + eea_r_3035_100_m_ecosystem-types-l1_2006_rev2-1 + + + + + + + + The data set combines the Corine based MAES (Mapping and Assessment of + Ecosystems and their Services) ecosystem classes with the non-spatial EUNIS habitat + classification (LEVEL 1) for a better biological characterization of ecosystems across + Europe (EEA-39). As such it represents probabilities of EUNIS habitat presence for each + MAES ecosystem type. + + The data set aims to combine spatially explicit land cover information with non-spatially + referenced habitat information to improve our knowledge about ecosystems and their + distribution across Europe. The work supports the MAES process, Target 2 Action 5 of the + implementation of the EU Biodiversity Strategy to 2020, established to achieve the Aichi + targets of the Convention of Biological Diversity (CBD). + + The objective of the ecosystem data set produced by EEA and its Topic Centre ETC/SIA was + to improve the biological description of land cover based ecosystem types. It represents + probabilities of EUNIS habitat presence in ecosystem types at European level. Since it is + not based on spatial explicit mapping the spatial and thematic accuracy is not of same + quality as delineated maps. + + The MAES ecosystem typology differentiates three levels: whereas the level 2 of the MAES + proposal follows closely the EUNIS level 1, the third level of the MAES typology + corresponds to the EUNIS level 2. This level will be the base for the mapping approach. + + + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + http://www.eea.europa.eu + + + WWW:LINK-1.0-http--link + + + Europen Environment Agency public website + + + + + + + + + + + + + + + + + + + + + + + + + + http://sdi.eea.europa.eu/public/catalogue-graphic-overview/e8a366b7-0029-44d7-ae33-7578253179c0.png + + + + + + + + Land cover + + + Habitats and biotopes + + + + + + + + GEMET - INSPIRE themes, version 1.0 + + + + + 2008-06-01 + + + + + + + + + + + geonetwork.thesaurus.external.theme.httpinspireeceuropaeutheme-theme + + + + + + + + + + + + ecosystem + + + ecosystem type + + + land cover + + + environmental assessment + + + habitat + + + + + + + + GEMET - Concepts, version 2.4 + + + + + 2010-01-13 + + + + + + + + + + + geonetwork.thesaurus.external.theme.gemet + + + + + + + + + + + + Unless otherwise indicated, re-use of content on the EEA website + for commercial or non-commercial purposes is permitted free of charge, provided that + the source is acknowledged. The EEA re-use policy follows Directive 2003/98/EC of the + European Parliament and the Council on the re-use of public sector information + throughout the European Union and Commission Decision 2006/291/EC, Euratom on the + re-use of Commission information. The EEA accepts no responsibility or liability + whatsoever for the re-use of content accessible on its website. Any inquiries about + re-use of content on the EEA website should be addressed to Ove Caspersen, EEA, + Kongens Nytorv 6, DK-1050 Copenhagen K, Tel +45 33 36 71 00, Fax +45 33 36 71 99, + e-mail copyrights at eea.europa.eu + + + + + + + + + + + no limitations + + + + + + + + + + 100 + + + + + + + + biota + + + environment + + + + + + + -33.90432 + + + 38.1471 + + + 26.988714 + + + 60.57849 + + + + + + + + + + + + 2006-01-01 + 2006-12-31 + + + + + + + + + + + + false + + + + + + + + + + GTiff + + + + + + + + + + + + + http://www.eea.europa.eu/data-and-maps/data/ds_resolveuid/d851e1b7f678468b8f0b1b98930ba3e1 + + + + WWW:LINK-1.0-http--link + + + + + + + + + + + + + + + + + + + + + + + The data set production implied 2 steps. First re-classification of + CORINE Land Cover 2006 and bathymetry data using the 7 terrestrial (urban, cropland, + grassland, woodland and forest, heathland and shrub, sparsely vegetated land, + wetland), 1 freshwater (river and lakes), and 4 marine (marine inlets and transitional + waters, coastal, shelf, open ocean) classes of the MAES ecosystem typology (Maes et + al., 2013). The classes also provide links to major policy lines such as agriculture, + forestry, territorial cohesion, water and marine related policies. The second step + comprised refinement of the ecosystem types by attributing EUNIS habitat information + to each ecosystem type (see http://eunis.eea.europa.eu/habitats.jsp). The refinement + process used reference data such as potential natural vegetation, elevation, slope, + aspect, soil, geology, environmental regions and other spatial referenced information + which allowed attribution of the EUNIS habitat characteristics to the spatial mapping + units of the MAES ecosystem types. The geometric and thematic accuracy of EUNIS class + presence was also estimated and mapped. The method is described in the EEA Technical + Report 06/2015: European Ecosystem Assessment – Concept, Data, and Implementation. + The basis for the update was CORINE land cover 2006 (CLC 2006). It includes Albania, + Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czech Republic, + Denmark, Estonia, Finland, France, Germany, Hungary, Iceland, Ireland, Italy, Kosovo + (under UNSCR 1244/99), Latvia, Liechtenstein, Lithuania, Luxembourg, the former + Yugoslavian Republic of Macedonia, Malta, Montenegro, the Netherlands, Norway, Poland, + Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and + the United Kingdom. For Greece that has not participated in the CLC 2006 activity the + CLC 2000 data was used instead. + + + + + + + + +``` + +### Metadata Extension Information {#iso19139-elem-gmd-MD_MetadataExtensionInformation-646aa4503013cf2231a72dc4403c14e3} + +Name + +: + +> gmd:MD_MetadataExtensionInformation + +Description + +: + +```{=html} +Information describing metadata extensions +``` +### Obligation code {#iso19139-elem-gmd-MD_ObligationCode-50bf58bf346f8ea1982cbebde314ed79} + +Name + +: + +> gmd:MD_ObligationCode + +Description + +: + +```{=html} +Obligation of the element or entity +``` +### Standard codelists Obligation code (gmd:MD_ObligationCode) + +| code | label | description | +|-------------|-------------|------------------------------------------------------| +| mandatory | Mandatory | Element is always required | +| optional | Optional | Element is not required | +| conditional | Conditional | Element is required when a specific condition is met | + +### Pixel orientation code {#iso19139-elem-gmd-MD_PixelOrientationCode-7517f9a6da0ddf97e3a3edafceff4fc9} + +Name + +: + +> gmd:MD_PixelOrientationCode + +Description + +: + +```{=html} +Point in a pixel corresponding to the Earth location of the pixel +``` +### Standard codelists Pixel orientation code (gmd:MD_PixelOrientationCode) + +| code | label | description | +|------------|-------------|----------------------------------------------------------------------------------------------------------------------------------------------| +| center | Center | Point halfway between the lower left and the upper right of the pixel | +| lowerLeft | Lower left | The corner in the pixel closest to the origin of the SRS; if two are at the same distance from the origin, the one with the smallest x-value | +| lowerRight | Lower right | Next corner counterclockwise from the lower left | +| upperRight | Upper right | Next corner counterclockwise from the lower right | +| upperLeft | Upper left | Next corner counterclockwise from the upper right | + +### Portrayal catalogue reference {#iso19139-elem-gmd-MD_PortrayalCatalogueReference-1de6d80081f48afcf87141f495b14382} + +Name + +: + +> gmd:MD_PortrayalCatalogueReference + +Description + +: + +```{=html} +Information identifying the portrayal catalogue used +``` +### Progress {#iso19139-elem-gmd-MD_ProgressCode-a705251bfb6aa840b2ddcdcb475e82ae} + +Name + +: + +> gmd:MD_ProgressCode + +Description + +: + +### Standard codelists Progress (gmd:MD_ProgressCode) + +| code | label | description | +|-------------------|--------------------|--------------------------------------------------------------------------------------| +| completed | Completed | Production of the data has been completed | +| historicalArchive | Historical archive | Data has been stored in an offline storage facility | +| obsolete | Obsolete | Data is no longer relevant | +| onGoing | On going | Data is continually being updated | +| planned | Planned | Fixed date has been established upon or by which the data will be created or updated | +| required | Required | Data needs to be generated or updated | +| underDevelopment | Under development | Data is currently in the process of being created | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|-------------|--------------|-------------| +| notobsolete | Not obsolete | | + +### Range dimension {#iso19139-elem-gmd-MD_RangeDimension-6788b233d4b9866fff4fea73bb016784} + +Name + +: + +> gmd:MD_RangeDimension + +Description + +: + +```{=html} +Information on the range of each dimension of a cell measurement + value +``` +### Reference system {#iso19139-elem-gmd-MD_ReferenceSystem-2700a53ffd47f02aee2059e4520f399f} + +Name + +: + +> gmd:MD_ReferenceSystem + +Description + +: + +```{=html} +Information about the reference system. +``` +```{=html} +information about the reference system +``` +``` xml + + + + + urn:ogc:def:crs:EPSG:7.1:3035 + + + OGP Surveying & Positioning Committee + + + + +``` + +### Representative fraction {#iso19139-elem-gmd-MD_RepresentativeFraction-66b5d251e519833e03ebd5b5b0f2d075} + +Name + +: + +> gmd:MD_RepresentativeFraction + +Description + +: + +```{=html} +Derived from Scale where MD_RepresentativeFraction.denominator = 1 / + Scale.measure And Scale.targetUnits = Scale.sourceUnits +``` +### Resolution {#iso19139-elem-gmd-MD_Resolution-b305b6f73606a0b11af969489ef2b5ac} + +Name + +: + +> gmd:MD_Resolution + +Description + +: + +```{=html} +Level of detail expressed as a scale factor or a ground distance +``` +``` xml + + + 100 + + +``` + +### Access Restriction {#iso19139-elem-gmd-MD_RestrictionCode-gmd-accessConstraints-12f24e671b178093fc3c8cf32539ce44} + +Name + +: + +> gmd:MD_RestrictionCode + +Context + +: + +> gmd:accessConstraints + +Description + +: + +### Standard codelists Access Restriction (gmd:MD_RestrictionCode) + +| code | label | description | +|----------------------------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| copyright | Copyright | Exclusive right to the publication, production, or sale of the rights to a literary, dramatic, musical, or artistic work, or to the use of a commercial print or label, granted by law for a specified period of time to an author, composer, artist, distributor | +| patent | Patent | Government has granted exclusive right to make, sell, use or license an invention or discovery | +| patentPending | Pending patent | Produced or sold information awaiting a patent | +| trademark | Trademark | A name, symbol, or other device identifying a product, officially registered and legally restricted to the use of the owner or manufacturer | +| license | License | Formal permission to do something | +| intellectualPropertyRights | Intellectual property rights | Rights to financial benefit from and control of distribution of non-tangible property that is a result of creativity | +| restricted | Restricted | Withheld from general circulation or disclosure | +| otherRestrictions | Other restrictions | Limitation not listed | + +``` xml + +``` + +### Use Restriction {#iso19139-elem-gmd-MD_RestrictionCode-gmd-useConstraints-56f57edb2ffb57e63fc7166ee5ae8350} + +Name + +: + +> gmd:MD_RestrictionCode + +Context + +: + +> gmd:useConstraints + +Description + +: + +### Standard codelists Access Restriction (gmd:MD_RestrictionCode) + +| code | label | description | +|----------------------------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| copyright | Copyright | Exclusive right to the publication, production, or sale of the rights to a literary, dramatic, musical, or artistic work, or to the use of a commercial print or label, granted by law for a specified period of time to an author, composer, artist, distributor | +| patent | Patent | Government has granted exclusive right to make, sell, use or license an invention or discovery | +| patentPending | Pending patent | Produced or sold information awaiting a patent | +| trademark | Trademark | A name, symbol, or other device identifying a product, officially registered and legally restricted to the use of the owner or manufacturer | +| license | License | Formal permission to do something | +| intellectualPropertyRights | Intellectual property rights | Rights to financial benefit from and control of distribution of non-tangible property that is a result of creativity | +| restricted | Restricted | Withheld from general circulation or disclosure | +| otherRestrictions | Other restrictions | Limitation not listed | + +``` xml + +``` + +### Scope code {#iso19139-elem-gmd-MD_ScopeCode-9ffd6fc05da3527f72a3dcae95dd221e} + +Name + +: + +> gmd:MD_ScopeCode + +Description + +: + +```{=html} +Class of information to which the referencing entity applies +``` +### Standard codelists Scope code (gmd:MD_ScopeCode) + +| code | label | description | +|----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| attribute | Attribute | Information applies to the attribute class | +| attributeType | Attribute type | Information applies to the characteristic of a feature | +| collectionHardware | Collection hardware | Information applies to the collection hardware class | +| collectionSession | Collection session | Information applies to the collection session | +| dataset | Dataset | Information applies to the dataset | +| series | Series | Information applies to the series | +| nonGeographicDataset | Non geographic dataset | Information applies to non-geographic data | +| dimensionGroup | Dimension group | Information applies to a dimension group | +| feature | Feature | Information applies to a feature | +| featureType | Feature type | Information applies to a feature type | +| propertyType | Property type | Information applies to a property type | +| fieldSession | Field session | Information applies to a field session | +| software | Software | Information applies to a computer program or routine | +| service | 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 behaviour, such as a use case | +| model | Model | Information applies to a copy or imitation of an existing or hypothetical object | +| tile | Tile | Information applies to a tile, a spatial subset of geographic data | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|---------------------------------------------|------------------------------------------------|-------------| +| map staticMap interactiveMap featureCatalog | Map Static map Interactive map Feature catalog | | + +Displayed only if + +: + +> /ancestor::node()[name()='gmd:MD_Metadata']/gmd:identificationInfo/srv:SV_ServiceIdentification + +### Standard codelists Scope code (gmd:MD_ScopeCode) + +| code | label | description | +|---------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| service | 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 behaviour, such as a use case | + +### Scope description {#iso19139-elem-gmd-MD_ScopeDescription-8c0d8bbef826207eed5daeb5852c1538} + +Name + +: + +> gmd:MD_ScopeDescription + +Description + +: + +```{=html} +Description of the class of information covered by the + information +``` + +Condition + +: + +> Either attributes, features, featureInstances, attributeInstnaces, dataset or other must be provided + +### Security constraints {#iso19139-elem-gmd-MD_SecurityConstraints-50cffe217644bdac6008fbf9f8b569c5} + +Name + +: + +> gmd:MD_SecurityConstraints + +Description + +: + +```{=html} +Handling restrictions imposed on the resource or metadata for national security + or similar security concerns +``` +### Service Identification {#iso19139-elem-gmd-MD_ServiceIdentification-fa001e116566fc975db65c9f5847bf42} + +Name + +: + +> gmd:MD_ServiceIdentification + +Description + +: + +```{=html} +Identification of capabilities which a service provider makes available to a + service user through a set of interfaces that define a behaviour - See ISO 19119 - + Services for further information +``` +### Spatial Representation Type {#iso19139-elem-gmd-MD_SpatialRepresentationTypeCode-7f5f469869ef3a8a1951b287a3494e69} + +Name + +: + +> gmd:MD_SpatialRepresentationTypeCode + +Description + +: + +### Standard codelists Spatial Representation Type (gmd:MD_SpatialRepresentationTypeCode) + +| code | label | description | +|-------------|--------------|----------------------------------------------------------------------------------------------------| +| vector | Vector | Vector data is used to represent geographic data | +| grid | Grid | Grid data is used to represent geographic data | +| textTable | Text, table | Textual or tabular data is used to represent geographic data | +| tin | TIN | Triangulated irregular network | +| stereoModel | Stereo model | Three-dimensional view formed by the intersecting homologous rays of an overlapping pair of images | +| video | Video | Scene from a video recording | + +``` xml + +``` + +### Standard order process {#iso19139-elem-gmd-MD_StandardOrderProcess-3d3f736b3cad83dea0c4232e97bb7af4} + +Name + +: + +> gmd:MD_StandardOrderProcess + +Description + +: + +```{=html} +Common ways in which the resource may be obtained or received, and related + instructions and fee information +``` +### Topic category code {#iso19139-elem-gmd-MD_TopicCategoryCode-cb06862958376a6cf77f91294821ba48} + +Name + +: + +> gmd:MD_TopicCategoryCode + +Description + +: + +```{=html} +High-level geographic data thematic classification to assist in the grouping + and search of available geographic data sets. Can be used to group keywords as well. + Listed examples are not exhaustive. NOTE It is understood there are overlaps between + general categories and the user is encouraged to select the one most + appropriate. +``` +### Standard codelists Topic category code (gmd:MD_TopicCategoryCode) + +| code | label | description | +|----------------------------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| farming | Farming | Rearing of animals and/or cultivation of plants. Examples: agriculture, irrigation, aquaculture, plantations, herding, pests and diseases affecting crops and livestock | +| biota | Biota | Flora and/or fauna in natural environment. Examples: wildlife, vegetation, biological sciences, ecology, wilderness, sealife, wetlands, habitat | +| boundaries | Boundaries | Legal land descriptions. Examples: political and administrative boundaries | +| climatologyMeteorologyAtmosphere | Climatology, meteorology, atmosphere | Processes and phenomena of the atmosphere. Examples: cloud cover, weather, climate, atmospheric conditions, climate change, precipitation | +| economy | Economy | Economic activities, conditions and employment. Examples: production, labour, revenue, commerce, industry, tourism and ecotourism, forestry, fisheries, commercial or subsistence hunting, exploration and exploitation of resources such as minerals, oil and gas | +| elevation | Elevation | Height above or below sea level. Examples: altitude, bathymetry, digital elevation models, slope, derived products | +| environment | Environment | Environmental resources, protection and conservation. Examples: environmental pollution, waste storage and treatment, environmental impact assessment, monitoring environmental risk, nature reserves, landscape | +| geoscientificInformation | Geoscientific information | Information pertaining to earth sciences. Examples: geophysical features and processes, geology, minerals, sciences dealing with the composition, structure and origin of the earth s rocks, risks of earthquakes, volcanic activity, landslides, gravity information, soils, permafrost, hydrogeology, erosion | +| health | Health | Health, health services, human ecology, and safety. Examples: disease and illness, factors affecting health, hygiene, substance abuse, mental and physical health, health services | +| imageryBaseMapsEarthCover | Imagery base maps earth cover | Base maps. Examples: land cover, topographic maps, imagery, unclassified images, annotations | +| intelligenceMilitary | Intelligence military | Military bases, structures, activities. Examples: barracks, training grounds, military transportation, information collection | +| inlandWaters | Inland waters | Inland water features, drainage systems and their characteristics. Examples: rivers and glaciers, salt lakes, water utilization plans, dams, currents, floods, water quality, hydrographic charts | +| location | Location | Positional information and services. Examples: addresses, geodetic networks, control points, postal zones and services, place names | +| oceans | Oceans | Features and characteristics of salt water bodies (excluding inland waters). Examples: tides, tidal waves, coastal information, reefs | +| planningCadastre | Planning cadastre | Information used for appropriate actions for future use of the land. Examples: land use maps, zoning maps, cadastral surveys, land ownership | +| society | Society | Characteristics of society and cultures. Examples: settlements, anthropology, archaeology, education, traditional beliefs, manners and customs, demographic data, recreational areas and activities, social impact assessments, crime and justice, census information | +| structure | Structure | Man-made construction. Examples: buildings, museums, churches, factories, housing, monuments, shops, towers | +| transportation | Transportation | Means and aids for conveying persons and/or goods. Examples: roads, airports/airstrips, shipping routes, tunnels, nautical charts, vehicle or vessel location, aeronautical charts, railways | +| utilitiesCommunication | Utilities communication | Energy, water and waste systems and communications infrastructure and services. Examples: hydroelectricity, geothermal, solar and nuclear sources of energy, water purification and distribution, sewage collection and disposal, electricity and gas distribution, data communication, telecommunication, radio, communication networks | + +### Topology Level {#iso19139-elem-gmd-MD_TopologyLevelCode-3b51519b669d9d171a75a1fd49e8f9c0} + +Name + +: + +> gmd:MD_TopologyLevelCode + +Description + +: + +### Standard codelists Topology Level (gmd:MD_TopologyLevelCode) + +| code | label | description | +|------------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| geometryOnly | Geometry only | Geometry objects without any additional structure which describes topology | +| topology1D | Topology 1D | 1-dimensional topological complex -- commonly called chain-node topology | +| planarGraph | Planar graph | 1-dimensional topological complex that is planar. (A planar graph is a graph that can be drawn in a plane in such a way that no two edges intersect except at a vertex.) | +| fullPlanarGraph | Full planar graph | 2-dimensional topological complex that is planar. (A 2-dimensional topological complex is commonly called full topology in a cartographic 2D environment.) | +| surfaceGraph | Surface graph | 1-dimensional topological complex that is isomorphic to a subset of a surface. (A geometric complex is isomorphic to a topological complex if their elements are in a one-to-one, dimensional-and boundry-preserving correspondence to one another.) | +| fullSurfaceGraph | Full surface graph | 2-dimensional topological complex that is isomorphic to a subset of a surface | +| topology3D | Topology 3D | 3-dimensional topological complex. (A topological complex is a collection of topological primitives that are closed under the boundary operations.) | +| fullTopology3D | Full topology 3D | Complete coverage of a 3D Euclidean coordinate space | +| abstract | Abstract | Topological complex without any specified geometric realisation | + +### Usage {#iso19139-elem-gmd-MD_Usage-44b9e97d1ee076443e0f48c0f7d40819} + +Name + +: + +> gmd:MD_Usage + +Description + +: + +```{=html} +Brief description of ways in which the resource(s) is/are currently + used +``` +### Vector spatial representation {#iso19139-elem-gmd-MD_VectorSpatialRepresentation-080252d44368083a0c7b0d9d9560f519} + +Name + +: + +> gmd:MD_VectorSpatialRepresentation + +Description + +: + +```{=html} +Information about the vector spatial objects in the dataset +``` +### Measure description {#iso19139-elem-gmd-measureDescription-15e866aef3e37fc22a1e5777bbf435b1} + +Name + +: + +> gmd:measureDescription + +Description + +: + +```{=html} +Description of the measure being determined +``` +### Measure identification {#iso19139-elem-gmd-measureIdentification-d039c0be36450237d6b0e484e65d9330} + +Name + +: + +> gmd:measureIdentification + +Description + +: + +```{=html} +Code identifying a registered standard procedure +``` +### Medium format {#iso19139-elem-gmd-mediumFormat-2b3a955cfb7c1a5ab43b7ce1341888be} + +Name + +: + +> gmd:mediumFormat + +Description + +: + +```{=html} +Method used to write to the medium +``` +### Medium note {#iso19139-elem-gmd-mediumNote-668533707740bae1759a882d1db591a5} + +Name + +: + +> gmd:mediumNote + +Description + +: + +```{=html} +Description of other limitations or requirements for using the + medium +``` +### Metadata constraints {#iso19139-elem-gmd-metadataConstraints-gmd-MD_Metadata-130ad5b9aa5c191c31ca2a97d2ad629b} + +Name + +: + +> gmd:metadataConstraints + +Context + +: + +> gmd:MD_Metadata + +Description + +: + +```{=html} +Provides restrictions on the access and use of metadata +``` +### Metadata constraints {#iso19139-elem-gmd-metadataConstraints-0547cb4265a8d2f9663d558a9ac72d43} + +Name + +: + +> gmd:metadataConstraints + +Description + +: + +```{=html} +Provides restrictions on the access and use of data +``` +### Metadata Extension Information {#iso19139-elem-gmd-metadataExtensionInfo-4819d91b9727143a6c12cdb9ffeef2da} + +Name + +: + +> gmd:metadataExtensionInfo + +Description + +: + +```{=html} +Information describing metadata extensions +``` +### Metadata maintenance {#iso19139-elem-gmd-metadataMaintenance-2af9bf1fc8f71819e7361e5d6987358c} + +Name + +: + +> gmd:metadataMaintenance + +Description + +: + +```{=html} +Provides information about the frequency of metadata updates, and the scope of + those updates +``` +### Metadata standard name {#iso19139-elem-gmd-metadataStandardName-1e8d324f913f2da08b656d26e73e994d} + +Name + +: + +> gmd:metadataStandardName + +Description + +: + +```{=html} +Name of the metadata standard (including profile name) used +``` +``` xml + + ISO 19115:2003/19139 + + +``` + +### Metadata standard version {#iso19139-elem-gmd-metadataStandardVersion-ab0dd515a6ca9c890bc32d3615cd427f} + +Name + +: + +> gmd:metadataStandardVersion + +Description + +: + +```{=html} +Version (profile) of the metadata standard used +``` +``` xml + + 1.0 + + +``` + +### Minimum value {#iso19139-elem-gmd-minimumValue-d7415ce6a0445916b518cbced9bf748d} + +Name + +: + +> gmd:minimumValue + +Description + +: + +```{=html} +Lowest vertical extent contained in the dataset +``` + +Condition + +: + +> mandatory + +### Minimum value {#iso19139-elem-gmd-minValue-ca30535d2283f60660d6cb8c3e06264a} + +Name + +: + +> gmd:minValue + +Description + +: + +```{=html} +Shortest wavelength that the sensor is capable of collecting within a + designated band +``` +### Name {#iso19139-elem-gmd-name-gmd-MD_AbstractClass-55c76e5e1d36308ca08192f0f34145ef} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_AbstractClass + +Description + +: + +```{=html} +Name +``` +### Name {#iso19139-elem-gmd-name-gmd-MD_Medium-5e756c272348337b91b38d9f904b491a} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_Medium + +Description + +: + +```{=html} +Name of the medium on which the resource can be received +``` +### Name {#iso19139-elem-gmd-name-gmd-RS_ReferenceSystem-02b2a8b0e707e9507d341c5d67eaaa0d} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:RS_ReferenceSystem + +Description + +: + +```{=html} +Name of reference system used +``` + +Condition + +: + +> mandatory + +### Name {#iso19139-elem-gmd-name-gmd-MD_Format-6a971c2939bcf530ff1ef0496661407f} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_Format + +Description + +: + +```{=html} +Name of the data transfer format(s) +``` +```{=html} +name of the data transfer format(s) +``` + +Condition + +: + +> mandatory + +Recommended values + +| code | label | +|-----------------|-----------------| +| Text | Text | +| ESRI Shapefile | ESRI Shapefile | +| Mapinfo MIF/MID | Mapinfo MIF/MID | +| Mapinfo TAB | Mapinfo TAB | +| KML | KML | +| GML | GML | +| GeoTIFF | GeoTIFF | +| TIFF | TIFF | +| ECW | ECW | +| JPEG2000 | JPEG2000 | +| ZIP | ZIP | +| PDF | PDF | +| PNG | PNG | +| JPEG | JPEG | +| OGC:WMC | OGC:WMC | +| OGC:OWS-C | OGC OWS Context | + +### Name {#iso19139-elem-gmd-name-gmd-MD_ExtendedElementInformation-6f3a3922c51040816e19474d667dfae0} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_ExtendedElementInformation + +Description + +: + +```{=html} +Name of the extended metadata element +``` + +Condition + +: + +> mandatory + +### Name {#iso19139-elem-gmd-name-gmd-MD_ApplicationSchemaInformation-8d1b515ce0e50b245935cd51d2c69e76} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_ApplicationSchemaInformation + +Description + +: + +```{=html} +Name of the application schema used +``` + +Condition + +: + +> mandatory + +### Name of the resource {#iso19139-elem-gmd-name-gmd-CI_OnlineResource-440837e17f2a3bf02e6188d6cf477809} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:CI_OnlineResource + +Description + +: + +```{=html} +Name of the online resource +``` +### Name {#iso19139-elem-gmd-name-gmd-CI_Series-d8b38970368c2e8adf6a26f354b4e4a9} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:CI_Series + +Description + +: + +```{=html} +Name of the series, or aggregate dataset, of which the dataset is a + part +``` +### Name {#iso19139-elem-gmd-name-gmd-MD_CodeDomain-8f86c5309156f1cc30b5d6f56f08e8ad} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_CodeDomain + +Description + +: + +```{=html} +Name of the code domain +``` +### Name {#iso19139-elem-gmd-name-gmd-MD_CodeValue-870d040c56a98b1502ead34afc6ff2c6} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_CodeValue + +Description + +: + +```{=html} +Value name +``` +### Name {#iso19139-elem-gmd-name-gmd-MD_Attribute-5c723d5a648b525de45efddc22615249} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_Attribute + +Description + +: + +```{=html} +Attribute name +``` +### Name {#iso19139-elem-gmd-name-gmd-MD_Role-5a5e776d6bb1ee8d8cb7a5d518314bef} + +Name + +: + +> gmd:name + +Context + +: + +> gmd:MD_Role + +Description + +: + +```{=html} +Role name +``` +### Name {#iso19139-elem-gmd-name-9796db4d1cab411f64fa97871fd1dd7e} + +Name + +: + +> gmd:name + +Description + +: + +### Name of measure {#iso19139-elem-gmd-nameOfMeasure-9f6986c5c2ab012a799560402287fc82} + +Name + +: + +> gmd:nameOfMeasure + +Description + +: + +```{=html} +Name of the test applied to the data +``` +Recommended values + +| code | label | +|-----------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------| +| | -- Completeness -- | +| Excess item | Excess item | +| Number of excess items | Number of excess items | +| Rate of excess items | Rate of excess items | +| Number of duplicate feature instances | Number of duplicate feature instances | +| Missing item | Missing item | +| Number of missing items | Number of missing items | +| Rate of missing items | Rate of missing items -- Logical consistency / Conceptual consistency -- | +| Conceptual schema noncompliance | Conceptual schema noncompliance | +| Conceptual schema compliance | Conceptual schema compliance | +| Number of items noncompliant to the rules of the conceptual schema | Number of items noncompliant to the rules of the conceptual schema | +| Number of invalid overlaps of surfaces | Number of invalid overlaps of surfaces | +| Non-compliance rate with respect to the rules of the conceptual schema | Non-compliance rate with respect to the rules of the conceptual schema | +| Compliance rate with the rules of the conceptual schema | Compliance rate with the rules of the conceptual schema -- Logical consistency / Domain consistency -- | +| Value domain non-conformance | Value domain non-conformance | +| Value domain conformance | Value domain conformance | +| Number of items not in conformance with their value domain | Number of items not in conformance with their value domain | +| Value domain conformance rate | Value domain conformance rate | +| Value domain non-conformance rate | Value domain non-conformance rate | +| Physical structure conflicts | Physical structure conflicts | +| Physical structure conflict rate | Physical structure conflict rate -- Logical consistency / Topological consistency -- | +| Number of faulty point-curve connections | Number of faulty point-curve connections | +| Rate of faulty point-curve connections | Rate of faulty point-curve connections | +| Number of missing connection due to undershoots | Number of missing connection due to undershoots | +| Number of missing connections due to overshoots | Number of missing connections due to overshoots | +| Number of invalid slivers | Number of invalid slivers | +| Number of invalid self intersect errors | Number of invalid self intersect errors | +| Number of invalid self overlap errors | Number of invalid self overlap errors -- Positional accuracy / Absolute or external accuracy / General measures -- | +| Mean value of positional uncertainties | Mean value of positional uncertainties | +| Mean value of positional uncertainties excluding outliers | Mean value of positional uncertainties excluding outliers | +| Number of positional uncertainties above a given threshold | Number of positional uncertainties above a given threshold | +| Rate of positional errors above a given threshold | Rate of positional errors above a given threshold | +| Covariance matrix | Covariance matrix -- Positional accuracy / Absolute or external accuracy / Vertical -- | +| Linear error probable | Linear error probable | +| Standard linear error | Standard linear error | +| Linear map accuracy at 90% significance level | Linear map accuracy at 90% significance level | +| Linear map accuracy at 95% significance level | Linear map accuracy at 95% significance level | +| Linear map accuracy at 99% significance level | Linear map accuracy at 99% significance level | +| Near certainty linear error | Near certainty linear error | +| Root mean square error | Root mean square error | +| Absolute linear error at 90% significance level of biased vertical data (Alternative 1) | Absolute linear error at 90% significance level of biased vertical data (Alternative 1) | +| Absolute linear error at 90% significance level of biased vertical data | Absolute linear error at 90% significance level of biased vertical data -- Positional accuracy / Absolute or external accuracy / Horizontal -- | +| Circular standard deviation | Circular standard deviation | +| Circular error probable | Circular error probable | +| Circular map accuracy standard | Circular map accuracy standard | +| Circular error at 95% significance level | Circular error at 95% significance level | +| Circular near certainty error | Circular near certainty error | +| Root mean square error of planimetry | Root mean square error of planimetry | +| Absolute circular error at 90% significance level of biased data (Alternative 2) | Absolute circular error at 90% significance level of biased data (Alternative 2) | +| Absolute circular error at 90% significance level of biased data | Absolute circular error at 90% significance level of biased data | +| Uncertainty ellipse | Uncertainty ellipse | +| Confidence ellipse | Confidence ellipse -- Positional accuracy / Relative or internal accuracy -- | +| Relative vertical error | Relative vertical error | +| Relative horizontal error | Relative horizontal error -- Temporal accuracy / Accuracy of a time measurement -- | +| Time accuracy at 68.3% significance level | Time accuracy at 68.3% significance level | +| Time accuracy at 50% significance level | Time accuracy at 50% significance level | +| Time accuracy at 90% significance level | Time accuracy at 90% significance level | +| Time accuracy at 95% significance level | Time accuracy at 95% significance level | +| Time accuracy at 99% significance level | Time accuracy at 99% significance level | +| Time accuracy at 99.8% significance level | Time accuracy at 99.8% significance level -- Thematic accuracy / Classification correctness -- | +| Number of incorrectly classified features | Number of incorrectly classified features | +| Misclassification rate | Misclassification rate | +| Misclassification matrix | Misclassification matrix | +| Relative misclassification matrix | Relative misclassification matrix | +| Kappa coefficient | Kappa coefficient -- Thematic accuracy / Non-quantitative attribute correctness -- | +| Number of incorrect attribute values | Number of incorrect attribute values | +| Rate of correct attribute values | Rate of correct attribute values | +| Rate of incorrect attribute values | Rate of incorrect attribute values -- Thematic accuracy / Quantitative attribute accuracy -- | +| Attribute value uncertainty at 68.3% significance level | Attribute value uncertainty at 68.3% significance level | +| Attribute value uncertainty at 50% significance level | Attribute value uncertainty at 50% significance level | +| Attribute value uncertainty at 90% significance level | Attribute value uncertainty at 90% significance level | +| Attribute value uncertainty at 95% significance level | Attribute value uncertainty at 95% significance level | +| Attribute value uncertainty at 99% significance level | Attribute value uncertainty at 99% significance level | +| Attribute value uncertainty at 99.8% significance level | Attribute value uncertainty at 99.8% significance level | + +### North bound {#iso19139-elem-gmd-northBoundLatitude-7f5fd77fbea072c35f6d4c938f74dee5} + +Name + +: + +> gmd:northBoundLatitude + +Description + +: + +```{=html} +Northern-most, coordinate of the limit of the dataset extent expressed in + latitude in decimal degrees (positive north) +``` + +Condition + +: + +> mandatory + +``` xml + + 60.57849 + +``` + +### Number of dimensions {#iso19139-elem-gmd-numberOfDimensions-be36128610852a3a86fe52230c125ae8} + +Name + +: + +> gmd:numberOfDimensions + +Description + +: + +```{=html} +Number of independent spatial-temporal axes +``` + +Condition + +: + +> mandatory + +### Obligation {#iso19139-elem-gmd-obligation-bd4d5c2002cbae677396f4195cfad3a6} + +Name + +: + +> gmd:obligation + +Description + +: + +```{=html} +Obligation of the extended element +``` +### Offline {#iso19139-elem-gmd-offLine-74ad66cbe02f22813b168bb80273d2fe} + +Name + +: + +> gmd:offLine + +Description + +: + +```{=html} +Information about offline media on which the resource can be + obtained +``` +### Offset {#iso19139-elem-gmd-offset-4d077570ef50ba2b1ea4f00396f1bb0a} + +Name + +: + +> gmd:offset + +Description + +: + +```{=html} +The physical value corresponding to a cell value of zero +``` +### OnLine resource {#iso19139-elem-gmd-onLine-c0b191c96e7e4d7dfc2a4ba2fd8946f4} + +Name + +: + +> gmd:onLine + +Description + +: + +```{=html} +Information about online sources from which the resource can be + obtained +``` +``` xml + + + + + http://www.eea.europa.eu/data-and-maps/data/ds_resolveuid/d851e1b7f678468b8f0b1b98930ba3e1 + + + + WWW:LINK-1.0-http--link + + + + + + +``` + +### Website {#iso19139-elem-gmd-onlineResource-8df8ae9d58f947d5aac1e7f95e5b7d59} + +Name + +: + +> gmd:onlineResource + +Description + +: + +```{=html} +Define URL to access the website +``` +```{=html} +On-line information that can be used to contact the individual or + organisation +``` +``` xml + + + + http://www.eea.europa.eu + + + WWW:LINK-1.0-http--link + + + Europen Environment Agency public website + + + + + + + +``` + +### Ordering instructions {#iso19139-elem-gmd-orderingInstructions-c6c68523c931c7138263c7d7895d9a16} + +Name + +: + +> gmd:orderingInstructions + +Description + +: + +```{=html} +General instructions, terms and services provided by the + distributor +``` +### Organisation name {#iso19139-elem-gmd-organisationName-d57c55f60d4bce260583a0e176106a31} + +Name + +: + +> gmd:organisationName + +Description + +: + +```{=html} +Name of the responsible organization +``` + +Condition + +: + +> conditional + +### Orientation parameter availability {#iso19139-elem-gmd-orientationParameterAvailability-f4f1451cd1e6fada4b70115d7a0db4de} + +Name + +: + +> gmd:orientationParameterAvailability + +Description + +: + +```{=html} +Indication of whether or not orientation parameters are available +``` + +Condition + +: + +> mandatory + +### Orientation parameter description {#iso19139-elem-gmd-orientationParameterDescription-871dba0b5e91443d58af60139e3483f0} + +Name + +: + +> gmd:orientationParameterDescription + +Description + +: + +```{=html} +Description of parameters used to describe sensor orientation +``` +### Other {#iso19139-elem-gmd-other-351c20974743a02b7c727421fd10411e} + +Name + +: + +> gmd:other + +Description + +: + +```{=html} +Class of information that does not fall into the other categories to which the + information applies +``` +### Other citation details {#iso19139-elem-gmd-otherCitationDetails-6045d0424a57c57988ec6627e728189a} + +Name + +: + +> gmd:otherCitationDetails + +Description + +: + +```{=html} +Other information required to complete the citation that is not recorded + elsewhere +``` +### Other constraints {#iso19139-elem-gmd-otherConstraints-696de5ef421a230cf560f7566a3c5028} + +Name + +: + +> gmd:otherConstraints + +Description + +: + +```{=html} +Other restrictions and legal prerequisites for accessing and using the + resource +``` + +Condition + +: + +> conditional + +``` xml + + no limitations + +``` + +### Page {#iso19139-elem-gmd-page-7e8d6e17c5fe0179acfb038d3475d5dd} + +Name + +: + +> gmd:page + +Description + +: + +```{=html} +Details on which pages of the publication the article was + published +``` +### Parameter citation {#iso19139-elem-gmd-parameterCitation-6b75cc829b57fd174fa3d5f26ff52591} + +Name + +: + +> gmd:parameterCitation + +Description + +: + +```{=html} +Reference providing description of the parameters +``` +### Parent entity {#iso19139-elem-gmd-parentEntity-b8e88cd3a75905b5911d9c84d25a79c6} + +Name + +: + +> gmd:parentEntity + +Description + +: + +```{=html} +Name of the metadata entity(s) under which this extended metadata element may + appear. The name(s) may be standard metadata element(s) or other extended metadata + element(s). +``` + +Condition + +: + +> mandatory + +### Parent identifier {#iso19139-elem-gmd-parentIdentifier-e660d48fcd79782e330d99a6eee272bc} + +Name + +: + +> gmd:parentIdentifier + +Description + +: + +```{=html} +File identifier of the metadata to which this metadata is a subset + (child) +``` +``` xml + + df69de7e-3af1-4b4d-94d4-8bebe84c80b0 + +``` + +### PartOf {#iso19139-elem-gmd-partOf-9ede50dac93d135983484fd0d7e44495} + +Name + +: + +> gmd:partOf + +Description + +: + +```{=html} +PartOf +``` +### Pass {#iso19139-elem-gmd-pass-bcbea9f82051424feefdcaa4953655c4} + +Name + +: + +> gmd:pass + +Description + +: + +```{=html} +Indication of the conformance result where 0 = fail and 1 = pass +``` + +Condition + +: + +> mandatory + +### Peak response {#iso19139-elem-gmd-peakResponse-47e14bef5b9ed8cac08540f6b2ebb11a} + +Name + +: + +> gmd:peakResponse + +Description + +: + +```{=html} +Wavelength at which the response is the highest +``` +### Phone {#iso19139-elem-gmd-phone-7bed516b088bd0d9ab349b4eaf477328} + +Name + +: + +> gmd:phone + +Description + +: + +```{=html} +Telephone numbers at which the organization or individual may be + contacted +``` +### Planned available datetime {#iso19139-elem-gmd-plannedAvailableDateTime-79d43570482162c903674e901789147c} + +Name + +: + +> gmd:plannedAvailableDateTime + +Description + +: + +```{=html} +Date and time when the dataset will be available + (CCYY-MM-DDThh:mm:ss) +``` +### Point in Pixel {#iso19139-elem-gmd-pointInPixel-39b5630aab74d9327175514d0b64f427} + +Name + +: + +> gmd:pointInPixel + +Description + +: + +```{=html} +Point in a pixel corresponding to the Earth location of the pixel +``` + +Condition + +: + +> mandatory + +### Point of contact {#iso19139-elem-gmd-pointOfContact-2a38035f4c8b63a35a4e6c44e6f4b624} + +Name + +: + +> gmd:pointOfContact + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) and + organizations(s) associated with the resource(s) +``` +``` xml + + + + European Environment Agency + + + + + + + Kongens Nytorv 6 + + + Copenhagen + + + K + + + 1050 + + + Denmark + + + eea.enquiries@eea.europa.eu + + + + + + + http://www.eea.europa.eu + + + WWW:LINK-1.0-http--link + + + Europen Environment Agency public website + + + + + + + + + + + + + + +``` + +### Polygon {#iso19139-elem-gmd-polygon-136906da71badd3d1d6c10c5e703e952} + +Name + +: + +> gmd:polygon + +Description + +: + +```{=html} +Sets of points defining the bounding polygon +``` + +Condition + +: + +> mandatory + +### Portrayal catalogue citation {#iso19139-elem-gmd-portrayalCatalogueCitation-7d46a0799fd5dc5455fa1122c5e45608} + +Name + +: + +> gmd:portrayalCatalogueCitation + +Description + +: + +```{=html} +Bibliographic reference to the portrayal catalogue cited +``` + +Condition + +: + +> mandatory + +### Portrayal catalogue info {#iso19139-elem-gmd-portrayalCatalogueInfo-0a09defe8c7ca8431460b5690da9a52d} + +Name + +: + +> gmd:portrayalCatalogueInfo + +Description + +: + +```{=html} +Provides information about the catalogue of rules defined for the portrayal of + a resource(s) +``` +### Position name {#iso19139-elem-gmd-positionName-9d7a0dfd5bc41e337c9deae85d95b272} + +Name + +: + +> gmd:positionName + +Description + +: + +```{=html} +Role or position of the responsible person +``` + +Condition + +: + +> conditional + +### Postal code {#iso19139-elem-gmd-postalCode-c108b19cdeff41b0d6c4c3cc2dde38c9} + +Name + +: + +> gmd:postalCode + +Description + +: + +```{=html} +ZIP or other postal code +``` +### Presentation form {#iso19139-elem-gmd-presentationForm-98bab46932258a48a69ea02060e41909} + +Name + +: + +> gmd:presentationForm + +Description + +: + +```{=html} +Mode in which the resource is represented +``` +### Processing level code {#iso19139-elem-gmd-processingLevelCode-9e2c3bf1cbd69b356f1c4f854ece6474} + +Name + +: + +> gmd:processingLevelCode + +Description + +: + +```{=html} +Image distributor_s code that identifies the level of radiometric and geometric + processing that has been applied +``` +### Processor {#iso19139-elem-gmd-processor-9ef327f7c0d24ccd64eb52cbc0dc76fe} + +Name + +: + +> gmd:processor + +Description + +: + +```{=html} +Identification of, and means of communication with, person(s) and + organization(s) associated with the process step +``` +### Process step {#iso19139-elem-gmd-processStep-e129334e8e68357571622aba3880e659} + +Name + +: + +> gmd:processStep + +Description + +: + +```{=html} +Information about an event in the creation process for the data specified by + the scope +``` + +Condition + +: + +> conditional + +### PropertyType {#iso19139-elem-gmd-propertyType-12fff0b8b43529f0300c32a5e13c9f89} + +Name + +: + +> gmd:propertyType + +Description + +: + +```{=html} +PropertyType +``` +### Protocol {#iso19139-elem-gmd-protocol-447dfb15f197f008cd2326a7dab836e8} + +Name + +: + +> gmd:protocol + +Description + +: + +```{=html} +Connection protocol to be used +``` +Recommended values + +| code | label | +|--------------------------------------|------------------------------------------------| +| ESRI:REST | ArcGIS REST Services | +| GLG:KML-2.0-http-get-map | Google Earth KML service (ver 2.0) | +| OGC API - Coverages | OGC API - Coverages | +| OGC API - Features | OGC API - Features | +| OGC API - Maps | OGC API - Maps | +| OGC API - Records | OGC API - Records | +| OGC:CSW | OGC-CSW Catalogue Service for the Web | +| OGC:KML | OGC-KML Keyhole Markup Language | +| OGC:GML | OGC-GML Geography Markup Language | +| OGC:ODS | OGC-ODS OpenLS Directory Service | +| OGC:OGS | OGC-ODS OpenLS Gateway Service | +| OGC:OUS | OGC-ODS OpenLS Utility Service | +| OGC:OPS | OGC-ODS OpenLS Presentation Service | +| OGC:ORS | OGC-ODS OpenLS Route Service | +| OGC:SOS | OGC-SOS Sensor Observation Service | +| OGC:SPS | OGC-SPS Sensor Planning Service | +| OGC:SAS | OGC-SAS Sensor Alert Service | +| OGC:WCS | OGC-WCS Web Coverage Service | +| OGC:WCS-1.1.0-http-get-capabilities | OGC-WCS Web Coverage Service (ver 1.1.0) | +| OGC:WCTS | OGC-WCTS Web Coordinate Transformation Service | +| OGC:WFS | OGC-WFS Web Feature Service | +| INSPIRE Atom | INSPIRE Atom | +| OGC:WFS-1.0.0-http-get-capabilities | OGC-WFS Web Feature Service (ver 1.0.0) | +| OGC:WFS-G | OGC-WFS-G Gazzetteer Service | +| OGC:WMC | OGC-WMC Web Map Context | +| OGC:WMS | OGC-WMS Web Map Service | +| OGC:WMS-1.1.1-http-get-capabilities | OGC-WMS Capabilities service (ver 1.1.1) | +| OGC:WMS-1.3.0-http-get-capabilities | OGC-WMS Capabilities service (ver 1.3.0) | +| OGC:WMS-1.1.1-http-get-map | OGC Web Map Service (ver 1.1.1) | +| OGC:WMS-1.3.0-http-get-map | OGC Web Map Service (ver 1.3.0) | +| OGC:WMTS | OGC-WMTS Web Map Tiled Service | +| OGC:WMTS-1.0.0-http-get-capabilities | OGC-WMTS Capabilities service (ver 1.0.0) | +| OGC:SOS-1.0.0-http-get-observation | OGC-SOS Get Observation (ver 1.0.0) | +| OGC:SOS-1.0.0-http-post-observation | OGC-SOS Get Observation (POST) (ver 1.0.0) | +| OGC:WNS | OGC-WNS Web Notification Service | +| OGC:WPS | OGC-WPS Web Processing Service | +| OGC:OWS-C | OGC OWS Context | +| TMS | Tiled Map Service | +| WWW:DOWNLOAD-1.0-ftp--download | File for download through FTP | +| WWW:DOWNLOAD-1.0-http--download | File for download | +| | GIS file | +| | GIS RASTER file | +| WWW:LINK-1.0-http--ical | iCalendar (URL) | +| WWW:LINK-1.0-http--link | Web address (URL) | +| DOI | Digital Object Identifier (DOI) | +| WWW:LINK-1.0-http--partners | Partner web address (URL) | +| WWW:LINK-1.0-http--related | Related link (URL) | +| WWW:LINK-1.0-http--rss | RSS News feed (URL) | +| WWW:LINK-1.0-http--samples | Showcase product (URL) | +| DB:POSTGIS | PostGIS database table | +| DB:ORACLE | ORACLE database table | +| WWW:LINK-1.0-http--opendap | OPeNDAP URL | +| RBNB:DATATURBINE | Data Turbine | +| UKST | Unknown Service Type | + +### Free text {#iso19139-elem-gmd-PT_FreeText-00c48876cdf6707df460773d91476446} + +Name + +: + +> gmd:PT_FreeText + +Description + +: + +```{=html} +Description of a multi-language free text metadata element +``` +### Locale {#iso19139-elem-gmd-PT_Locale-8114a4813936b84f0e6b123bb5e3018b} + +Name + +: + +> gmd:PT_Locale + +Description + +: + +```{=html} +Locale +``` +### PT_LocaleContainer {#iso19139-elem-gmd-PT_LocaleContainer-ec355086fbe079f5ebbbc4857c6eb002} + +Name + +: + +> gmd:PT_LocaleContainer + +Description + +: + +```{=html} +PT_LocaleContainer +``` +### Purpose {#iso19139-elem-gmd-purpose-b905736188713702d2a05d889f970ffa} + +Name + +: + +> gmd:purpose + +Description + +: + +```{=html} +Summary of the intentions with which the resource(s) was + developed +``` +### Radiometric calibration data availability {#iso19139-elem-gmd-radiometricCalibrationDataAvailability-92db9f55cf1ae86606dbd3b7ed2d0b3e} + +Name + +: + +> gmd:radiometricCalibrationDataAvailability + +Description + +: + +```{=html} +Indication of whether or not the radiometric calibration information for + generating the radiometrically calibrated standard data product is + available +``` +### Rationale {#iso19139-elem-gmd-rationale-a89f98c606cd39bd67cf29f996518913} + +Name + +: + +> gmd:rationale + +Description + +: + +```{=html} +Requirement or purpose for the process step +``` +### Rationale {#iso19139-elem-gmd-rationale-gmd-MD_ExtendedElementInformation-64a2e17ba633ec3f5d97e33b725e8f57} + +Name + +: + +> gmd:rationale + +Context + +: + +> gmd:MD_ExtendedElementInformation + +Description + +: + +```{=html} +Reason for creating the extended element +``` +### Reference system identifier {#iso19139-elem-gmd-referenceSystemIdentifier-5393a29789a4b6def1795d5a9e70f665} + +Name + +: + +> gmd:referenceSystemIdentifier + +Description + +: + +```{=html} +Name of reference system +``` + +Condition + +: + +> conditional + +``` xml + + + + urn:ogc:def:crs:EPSG:7.1:3035 + + + OGP Surveying & Positioning Committee + + + +``` + +### Reference System Information {#iso19139-elem-gmd-referenceSystemInfo-c7702a2e8ac03097e306ab3a02406765} + +Name + +: + +> gmd:referenceSystemInfo + +Description + +: + +```{=html} +Description of the spatial and temporal reference systems used in the + dataset +``` +``` xml + + + + + + urn:ogc:def:crs:EPSG:7.1:3035 + + + OGP Surveying & Positioning Committee + + + + + +``` + +### Report {#iso19139-elem-gmd-report-b06b527383afbca245b4712f3bf3ae44} + +Name + +: + +> gmd:report + +Description + +: + +```{=html} +Quantitative quality information for the data specified by the + scope +``` + +Condition + +: + +> conditional + +### Resolution {#iso19139-elem-gmd-resolution-0e9dc8264836da5a43380f555c0b608a} + +Name + +: + +> gmd:resolution + +Description + +: + +```{=html} +Degree of detail in the grid dataset +``` +### Resource constraints {#iso19139-elem-gmd-resourceConstraints-3ce815f506c31e6b5ef8e4e7022eefad} + +Name + +: + +> gmd:resourceConstraints + +Description + +: + +```{=html} +Provides information about constraints which apply to the + resource(s) +``` +### Resource format {#iso19139-elem-gmd-resourceFormat-0c19b5193142c6b6f0aac987fffe8f20} + +Name + +: + +> gmd:resourceFormat + +Description + +: + +```{=html} +Provides a description of the format of the resource(s) +``` +### Resource maintenance {#iso19139-elem-gmd-resourceMaintenance-a3c2f1eb185aa1d3e7d475c40a1ff637} + +Name + +: + +> gmd:resourceMaintenance + +Description + +: + +```{=html} +Provides information about the frequency of resource updates, and the scope of + those updates +``` +``` xml + + + + + + + +``` + +### Resource specific usage {#iso19139-elem-gmd-resourceSpecificUsage-c0f6662f0924e6ebd022b685a53e20ea} + +Name + +: + +> gmd:resourceSpecificUsage + +Description + +: + +```{=html} +Provides basic information about specific application(s) for which the + resource(s) has/have been or is being used by different users +``` +### Responsible Party {#iso19139-elem-gmd-responsibleParty-b189af81ab93bbbf28bf2b083d6872fd} + +Name + +: + +> gmd:responsibleParty + +Description + +: + +### Result {#iso19139-elem-gmd-result-83539788e54d2fc7d166ac779dc43f0b} + +Name + +: + +> gmd:result + +Description + +: + +```{=html} +Value (or set of values) obtained from applying a data quality measure or the + out come of evaluating the obtained value (or set of values) against a specified + acceptable conformance quality level +``` + +Condition + +: + +> mandatory + +### Role {#iso19139-elem-gmd-role-gmd-MD_Association-55ee20aa2f0f637012d7953158864d2a} + +Name + +: + +> gmd:role + +Context + +: + +> gmd:MD_Association + +Description + +: + +```{=html} +Reference to the ends (roles) of a concrete association +``` +### Role {#iso19139-elem-gmd-role-9b10bc0f5a8317c592877c27ad3012a4} + +Name + +: + +> gmd:role + +Description + +: + +```{=html} +Function performed by the responsible party +``` + +Condition + +: + +> mandatory + +### Identifier {#iso19139-elem-gmd-RS_Identifier-025635f516171e942cfaac8bbf43e014} + +Name + +: + +> gmd:RS_Identifier + +Description + +: + +```{=html} +Identifier used for reference systems +``` +### Rule {#iso19139-elem-gmd-rule-887b5f15d45db38bcc0ee11f1a6ca843} + +Name + +: + +> gmd:rule + +Description + +: + +```{=html} +Specifies how the extended element relates to other existing elements and + entities +``` + +Condition + +: + +> mandatory + +### Scale Denominator {#iso19139-elem-gmd-scaleDenominator-973704798e0501bf6ac83bd85b435b61} + +Name + +: + +> gmd:scaleDenominator + +Description + +: + +```{=html} +Denominator of the representative fraction on a source map +``` +### Scale factor {#iso19139-elem-gmd-scaleFactor-398805b3fa36127ee65a6de3b4f55118} + +Name + +: + +> gmd:scaleFactor + +Description + +: + +```{=html} +Scale factor which has been applied to the cell value +``` +### Schema ASCII {#iso19139-elem-gmd-schemaAscii-385bafc95d8b97ba2389183fd84d899e} + +Name + +: + +> gmd:schemaAscii + +Description + +: + +```{=html} +Full application schema given as an ASCII file +``` +### Schema language {#iso19139-elem-gmd-schemaLanguage-f8c161d4db9348a3a2305531704febf0} + +Name + +: + +> gmd:schemaLanguage + +Description + +: + +```{=html} +Identification of the schema language used +``` + +Condition + +: + +> mandatory + +### Scope {#iso19139-elem-gmd-scope-66b29437893946bbaf08cabb26cdabbd} + +Name + +: + +> gmd:scope + +Description + +: + +```{=html} +The specific data to which the data quality information applies +``` +``` xml + + + + + + + +``` + +### Sequence identifier {#iso19139-elem-gmd-sequenceIdentifier-eba100dcb9223d7b7564306d0df388fb} + +Name + +: + +> gmd:sequenceIdentifier + +Description + +: + +```{=html} +Number that uniquely identifies instances of bands of wavelengths on which a + sensor operates +``` +### Series {#iso19139-elem-gmd-series-98524248b047e1a31966f4fc05c765fb} + +Name + +: + +> gmd:series + +Description + +: + +```{=html} +Information about the series, or aggregate dataset, of which the dataset is a + part +``` +### SeriesMetadata {#iso19139-elem-gmd-seriesMetadata-4c8e5c0d23156817b1195ca9ab10846d} + +Name + +: + +> gmd:seriesMetadata + +Description + +: + +```{=html} +SeriesMetadata +``` +### Short name {#iso19139-elem-gmd-shortName-917a52683f1b7433b4aed3ffc10fc6b3} + +Name + +: + +> gmd:shortName + +Description + +: + +```{=html} +Short form suitable for use in an implementation method such as XML or SGML. + NOTE other methods may be used +``` +### Software development file {#iso19139-elem-gmd-softwareDevelopmentFile-7a4e9679561964e460d50c3c6584e9e7} + +Name + +: + +> gmd:softwareDevelopmentFile + +Description + +: + +```{=html} +Full application schema given as a software development file +``` +### Software development file format {#iso19139-elem-gmd-softwareDevelopmentFileFormat-4dc69820e56575d743271b86b05dea17} + +Name + +: + +> gmd:softwareDevelopmentFileFormat + +Description + +: + +```{=html} +Software dependent format used for the application schema software dependent + file +``` +### Source {#iso19139-elem-gmd-source-056931601d7cb713381cbf1eea87f599} + +Name + +: + +> gmd:source + +Description + +: + +```{=html} +Information about the source data used in creating the data specified by the + scope +``` + +Condition + +: + +> mandatory + +``` xml + +``` + +### Source {#iso19139-elem-gmd-source-gmd-MD_ExtendedElementInformation-459f928a9ea29688b69af501b0fc033e} + +Name + +: + +> gmd:source + +Context + +: + +> gmd:MD_ExtendedElementInformation + +Description + +: + +```{=html} +Name of the person or organization creating the extended element +``` + +Condition + +: + +> mandatory + +``` xml + +``` + +### Source citation {#iso19139-elem-gmd-sourceCitation-4988d0a64d3bd85bdf52c9faa14103de} + +Name + +: + +> gmd:sourceCitation + +Description + +: + +```{=html} +Recommended reference to be used for the source data +``` +### Source extent {#iso19139-elem-gmd-sourceExtent-51d5c1b2516371920a3f12b76a38f48b} + +Name + +: + +> gmd:sourceExtent + +Description + +: + +```{=html} +Information about the spatial, vertical and temporal extent of the source + data +``` + +Condition + +: + +> conditional + +### Source reference system {#iso19139-elem-gmd-sourceReferenceSystem-fb3e6e3ecd849e31bc89d8f8aeae43a6} + +Name + +: + +> gmd:sourceReferenceSystem + +Description + +: + +```{=html} +Spatial reference system used by the source data +``` +### Source step {#iso19139-elem-gmd-sourceStep-d6d84c09e8e8991a68956351c1398122} + +Name + +: + +> gmd:sourceStep + +Description + +: + +```{=html} +Information about an event in the creation process for the source + data +``` +### South bound {#iso19139-elem-gmd-southBoundLatitude-894a6499ac85eb19180f3fa2a4582263} + +Name + +: + +> gmd:southBoundLatitude + +Description + +: + +```{=html} +Southern-most coordinate of the limit of the dataset extent, expressed in + latitude in decimal degrees (positive north) +``` + +Condition + +: + +> mandatory + +``` xml + + 26.988714 + +``` + +### Spatial extent {#iso19139-elem-gmd-spatialExtent-7e0ee4e6812d3469ab8b3853903d1b34} + +Name + +: + +> gmd:spatialExtent + +Description + +: + +```{=html} +Spatial extent component of composite spatial and temporal extent +``` + +Condition + +: + +> mandatory + +### Spatial representation info {#iso19139-elem-gmd-spatialRepresentationInfo-f93705d4877ccd4c41819cc79677d6f2} + +Name + +: + +> gmd:spatialRepresentationInfo + +Description + +: + +```{=html} +Digital representation of spatial information in the dataset +``` +### Spatial representation type {#iso19139-elem-gmd-spatialRepresentationType-1617a07231ac2246d0844778962d4ca0} + +Name + +: + +> gmd:spatialRepresentationType + +Description + +: + +```{=html} +Method used to spatially represent geographic information +``` +``` xml + + + +``` + +### Spatial resolution {#iso19139-elem-gmd-spatialResolution-c248e07cdd5b0b6d769bd187d279535a} + +Name + +: + +> gmd:spatialResolution + +Description + +: + +```{=html} +Factor which provides a general understanding of the density of spatial data in + the dataset +``` +``` xml + + + + 100 + + + +``` + +### Specification {#iso19139-elem-gmd-specification-gmd-DQ_ConformanceResult-a820ababbd31f20c7492dd90785ec10b} + +Name + +: + +> gmd:specification + +Context + +: + +> gmd:DQ_ConformanceResult + +Description + +: + +```{=html} +Citation of product specification or user requirement against which data is + being evaluated +``` + +Condition + +: + +> mandatory + +### Specification {#iso19139-elem-gmd-specification-gmd-MD_Format-1888e6a22d633ee827c05b7f0bcd948c} + +Name + +: + +> gmd:specification + +Context + +: + +> gmd:MD_Format + +Description + +: + +```{=html} +Name of a subset, profile, or product specification of the format +``` +### Specification {#iso19139-elem-gmd-specification-4e210a94d2d6b382f34228d46d514e0f} + +Name + +: + +> gmd:specification + +Description + +: + +### Specific usage {#iso19139-elem-gmd-specificUsage-4791e1ef0814b94a33276de9cc4e28d7} + +Name + +: + +> gmd:specificUsage + +Description + +: + +```{=html} +Brief description of the resource and/or resource series usage +``` + +Condition + +: + +> mandatory + +### Statement {#iso19139-elem-gmd-statement-593ac58687a7831e3112879ec00a306e} + +Name + +: + +> gmd:statement + +Description + +: + +```{=html} +General explanation of the data producer_s knowledge about the lineage of a + dataset +``` + +Condition + +: + +> conditional + +``` xml + + The data set production implied 2 steps. First re-classification of + CORINE Land Cover 2006 and bathymetry data using the 7 terrestrial (urban, cropland, + grassland, woodland and forest, heathland and shrub, sparsely vegetated land, + wetland), 1 freshwater (river and lakes), and 4 marine (marine inlets and transitional + waters, coastal, shelf, open ocean) classes of the MAES ecosystem typology (Maes et + al., 2013). The classes also provide links to major policy lines such as agriculture, + forestry, territorial cohesion, water and marine related policies. The second step + comprised refinement of the ecosystem types by attributing EUNIS habitat information + to each ecosystem type (see http://eunis.eea.europa.eu/habitats.jsp). The refinement + process used reference data such as potential natural vegetation, elevation, slope, + aspect, soil, geology, environmental regions and other spatial referenced information + which allowed attribution of the EUNIS habitat characteristics to the spatial mapping + units of the MAES ecosystem types. The geometric and thematic accuracy of EUNIS class + presence was also estimated and mapped. The method is described in the EEA Technical + Report 06/2015: European Ecosystem Assessment – Concept, Data, and Implementation. + The basis for the update was CORINE land cover 2006 (CLC 2006). It includes Albania, + Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czech Republic, + Denmark, Estonia, Finland, France, Germany, Hungary, Iceland, Ireland, Italy, Kosovo + (under UNSCR 1244/99), Latvia, Liechtenstein, Lithuania, Luxembourg, the former + Yugoslavian Republic of Macedonia, Malta, Montenegro, the Netherlands, Norway, Poland, + Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey and + the United Kingdom. For Greece that has not participated in the CLC 2006 activity the + CLC 2000 data was used instead. + + +``` + +### Status {#iso19139-elem-gmd-status-d9744a135669d7e6915b63168cf07b27} + +Name + +: + +> gmd:status + +Description + +: + +```{=html} +Status of the resource(s) +``` +### Subset {#iso19139-elem-gmd-subset-0bdb2733b084445c24aa766c936bbbf1} + +Name + +: + +> gmd:subset + +Description + +: + +```{=html} +Subset +``` +### Superset {#iso19139-elem-gmd-superset-5bde61a529de9ae44e7fdda16a962a52} + +Name + +: + +> gmd:superset + +Description + +: + +```{=html} +Superset +``` +### Supplemental Information {#iso19139-elem-gmd-supplementalInformation-70bc533abfda351b79e707eb88576e9a} + +Name + +: + +> gmd:supplementalInformation + +Description + +: + +```{=html} +Any other descriptive information about the dataset +``` +### Temporal element {#iso19139-elem-gmd-temporalElement-98c13f1732cd7f7c06320d907eec27ce} + +Name + +: + +> gmd:temporalElement + +Description + +: + +```{=html} +Provides temporal component of the extent of the referring object +``` + +Condition + +: + +> conditional + +``` xml + + + + + 2006-01-01 + 2006-12-31 + + + + +``` + +### TextGroup {#iso19139-elem-gmd-textGroup-a4c4555fd1e21193bfead46ef919ddb2} + +Name + +: + +> gmd:textGroup + +Description + +: + +```{=html} +TextGroup +``` +### Thesaurus name {#iso19139-elem-gmd-thesaurusName-9b47e5bba6e4b04eb489a597f7052fa7} + +Name + +: + +> gmd:thesaurusName + +Description + +: + +```{=html} +Name of the formally registered thesaurus or a similar authoritative source of + keywords +``` +### Title {#iso19139-elem-gmd-title-cc3002a2d81bcdbc5bf4c8735faf6980} + +Name + +: + +> gmd:title + +Description + +: + +```{=html} +Name by which the cited resource is known +``` + +Condition + +: + +> mandatory + +### Title {#iso19139-elem-gmd-title-gmd-MD_Legislation-8081549b6348e976f57d3e1e1649febd} + +Name + +: + +> gmd:title + +Context + +: + +> gmd:MD_Legislation + +Description + +: + +```{=html} +Reference to legal title +``` +### Tone gradation {#iso19139-elem-gmd-toneGradation-428708b5612bd1414b331fed6f3006a3} + +Name + +: + +> gmd:toneGradation + +Description + +: + +```{=html} +Number of discrete numerical values in the grid data +``` +### Topic category {#iso19139-elem-gmd-topicCategory-beb19f9aa38425d24bc8c438657fff74} + +Name + +: + +> gmd:topicCategory + +Description + +: + +```{=html} +Main theme(s) of the dataset +``` + +Condition + +: + +> mandatory + +### Topology level {#iso19139-elem-gmd-topologyLevel-329db7737da48376e857292bb39d799a} + +Name + +: + +> gmd:topologyLevel + +Description + +: + +```{=html} +Code which identifies the degree of complexity of the spatial + relationships +``` +### Transfer options {#iso19139-elem-gmd-transferOptions-5d585a7834225f656f9b59b8a350324f} + +Name + +: + +> gmd:transferOptions + +Description + +: + +```{=html} +Provides information about technical means and media by which a resource is + obtained from the distributor +``` +``` xml + + + + + + + http://www.eea.europa.eu/data-and-maps/data/ds_resolveuid/d851e1b7f678468b8f0b1b98930ba3e1 + + + + WWW:LINK-1.0-http--link + + + + + + + + +``` + +### Transfer size {#iso19139-elem-gmd-transferSize-6fb8cca7a1c7bf60b84b95ffc22c87d1} + +Name + +: + +> gmd:transferSize + +Description + +: + +```{=html} +Estimated size of a unit in the specified transfer format, expressed in + megabytes. The transfer size is > 0.0 +``` +### Transformation dimension description {#iso19139-elem-gmd-transformationDimensionDescription-fecd0ea824eac2e867a85d80ba80807f} + +Name + +: + +> gmd:transformationDimensionDescription + +Description + +: + +```{=html} +Description of the information about which grid dimensions are the spatial + dimensions +``` +### Transformation dimension mapping {#iso19139-elem-gmd-transformationDimensionMapping-38cf0a9e5888085e44c75c1dd91663d0} + +Name + +: + +> gmd:transformationDimensionMapping + +Description + +: + +```{=html} +Information about which grid dimensions are the spatial + dimensions +``` +### Transformation parameter availability {#iso19139-elem-gmd-transformationParameterAvailability-11c9a0d6d9a25e8cf235b1e22c31f83e} + +Name + +: + +> gmd:transformationParameterAvailability + +Description + +: + +```{=html} +Indication of whether or not parameters for transformation between image + coordinates and geographic or map coordinates exist (are available) +``` + +Condition + +: + +> mandatory + +### Triangulation indicator {#iso19139-elem-gmd-triangulationIndicator-823a9f2b26c8ebb297aad2682939cee2} + +Name + +: + +> gmd:triangulationIndicator + +Description + +: + +```{=html} +Indication of whether or not triangulation has been performed upon the + image +``` +### Turnaround {#iso19139-elem-gmd-turnaround-b28170fffa4b93f27be7f98c1f5277d9} + +Name + +: + +> gmd:turnaround + +Description + +: + +```{=html} +Typical turnaround time for the filling of an order +``` +### Type {#iso19139-elem-gmd-type-3fcd7fe79fb12bc2f3687ac760ab3896} + +Name + +: + +> gmd:type + +Description + +: + +```{=html} +Subject matter used to group similar keywords +``` +### Type {#iso19139-elem-gmd-type-gmd-MD_CodeDomain-136dd2846e6d50fe2afe1fbee0b111e1} + +Name + +: + +> gmd:type + +Context + +: + +> gmd:MD_CodeDomain + +Description + +: + +```{=html} +Datatype of the code domain +``` +### Type definition {#iso19139-elem-gmd-type-gmd-MD_Type-4a34cb5da02cab9e18a0ece8b743a12e} + +Name + +: + +> gmd:type + +Context + +: + +> gmd:MD_Type + +Description + +: + +```{=html} +Data type definition +``` +```{=html} +Data type definition, formal of informal (i.e. Text12, Line) +``` +### Value unit {#iso19139-elem-gmd-units-b4d317a2179c6ac4d27f23f2e44414c4} + +Name + +: + +> gmd:units + +Description + +: + +```{=html} +Units in which sensor wavelengths are expressed +``` +### Units of distribution {#iso19139-elem-gmd-unitsOfDistribution-fba1dcd6123d4448a543ca1b292783c8} + +Name + +: + +> gmd:unitsOfDistribution + +Description + +: + +```{=html} +Tiles, layers, geographic areas, etc., in which data is available +``` +### Update scope {#iso19139-elem-gmd-updateScope-789803d91659dcd11b3b3393c90922f2} + +Name + +: + +> gmd:updateScope + +Description + +: + +```{=html} +Scope of data to which maintenance is applied +``` +### Update scope description {#iso19139-elem-gmd-updateScopeDescription-998eb6c6cec2e3f5f61934d06123ad2c} + +Name + +: + +> gmd:updateScopeDescription + +Description + +: + +```{=html} +Additional information about the range or extent of the resource +``` +### URL {#iso19139-elem-gmd-URL-1926834a548a71264f070931031c7163} + +Name + +: + +> gmd:URL + +Description + +: + +```{=html} +URL +``` +### Usage datetime {#iso19139-elem-gmd-usageDateTime-eb4261bf01930ac70a65c335557a0ffa} + +Name + +: + +> gmd:usageDateTime + +Description + +: + +```{=html} +Date and time of the first use or range of uses of the resource and/or resource + series (YYYY-MM-DDThh:mm:ss) +``` +### Use constraints {#iso19139-elem-gmd-useConstraints-9f5825b49b04c7539ccf1b67d89cae3a} + +Name + +: + +> gmd:useConstraints + +Description + +: + +```{=html} +Constraints applied to assure the protection of privacy or intellectual + property, and any special restrictions or limitations or warnings on using the + resource +``` +### Use limitation {#iso19139-elem-gmd-useLimitation-07252e81be8d86aea4553aa3df807d8b} + +Name + +: + +> gmd:useLimitation + +Description + +: + +```{=html} +Limitation affecting the fitness for use of the resource. Example, _not to be + used for navigation_ +``` +``` xml + + Unless otherwise indicated, re-use of content on the EEA website + for commercial or non-commercial purposes is permitted free of charge, provided that + the source is acknowledged. The EEA re-use policy follows Directive 2003/98/EC of the + European Parliament and the Council on the re-use of public sector information + throughout the European Union and Commission Decision 2006/291/EC, Euratom on the + re-use of Commission information. The EEA accepts no responsibility or liability + whatsoever for the re-use of content accessible on its website. Any inquiries about + re-use of content on the EEA website should be addressed to Ove Caspersen, EEA, + Kongens Nytorv 6, DK-1050 Copenhagen K, Tel +45 33 36 71 00, Fax +45 33 36 71 99, + e-mail copyrights at eea.europa.eu + + +``` + +### User contact info {#iso19139-elem-gmd-userContactInfo-441ca49469790a846c9fd368696c77f8} + +Name + +: + +> gmd:userContactInfo + +Description + +: + +```{=html} +Identification of and means of communicating with person(s) and organization(s) + using the resource(s) +``` + +Condition + +: + +> mandatory + +### User defined maintenance frequency {#iso19139-elem-gmd-userDefinedMaintenanceFrequency-ad78ef111593b28eb264caef44637052} + +Name + +: + +> gmd:userDefinedMaintenanceFrequency + +Description + +: + +```{=html} +Maintenance period other than those defined +``` +### User determined limitations {#iso19139-elem-gmd-userDeterminedLimitations-7298d0a46cbf569447e0db1962896136} + +Name + +: + +> gmd:userDeterminedLimitations + +Description + +: + +```{=html} +Applications, determined by the user for which the resource and/or resource + series is not suitable +``` +### User note {#iso19139-elem-gmd-userNote-c06ef82acaa22bad47a878213d4a8dea} + +Name + +: + +> gmd:userNote + +Description + +: + +```{=html} +Explanation of the application of the legal constraints or other restrictions + and legal prerequisites for obtaining and using the resource or metadata +``` +### Value {#iso19139-elem-gmd-value-gmd-DQ_QuantitativeResult-4da008be3457344e7b9b220bd613e546} + +Name + +: + +> gmd:value + +Context + +: + +> gmd:DQ_QuantitativeResult + +Description + +: + +```{=html} +Quantitative value or values, content determined by the evaluation procedure + used +``` + +Condition + +: + +> mandatory + +### Value {#iso19139-elem-gmd-value-00279de566515e1bf93ae185e5ffe42f} + +Name + +: + +> gmd:value + +Description + +: + +### Value {#iso19139-elem-gmd-value-gmd-MD_Type-41077608c8230790f00082e7545295d2} + +Name + +: + +> gmd:value + +Context + +: + +> gmd:MD_Type + +Description + +: + +```{=html} +Data type value +``` +### Value type {#iso19139-elem-gmd-valueType-3f097375c7a73b4f120433e3774ef780} + +Name + +: + +> gmd:valueType + +Description + +: + +```{=html} +Quantitative conformance quality level value or range of values +``` +Recommended values + +| code | label | +|---------------------------------|---------------------------------| +| Boolean | Boolean | +| Real | Real | +| Integer | Integer | +| Ratio | Ratio | +| Percentage | Percentage | +| Measure(s) (value(s) + unit(s)) | Measure(s) (value(s) + unit(s)) | + +### Value unit {#iso19139-elem-gmd-valueUnit-65c0838f9052c0ff77f2372033ae87d2} + +Name + +: + +> gmd:valueUnit + +Description + +: + +```{=html} +Value unit for reporting a data quality result +``` + +Condition + +: + +> mandatory + +### Version {#iso19139-elem-gmd-version-gmd-RS_Identifier-d861feedf8dd2aef87eb06aeb0e4a2eb} + +Name + +: + +> gmd:version + +Context + +: + +> gmd:RS_Identifier + +Description + +: + +```{=html} +Version identifier for the namespace +``` +``` xml + + + +``` + +### Version {#iso19139-elem-gmd-version-30c3096d796063300c4dd7a64593e2aa} + +Name + +: + +> gmd:version + +Description + +: + +```{=html} +Version of the format (date, number, etc.) +``` + +Condition + +: + +> mandatory + +``` xml + + + +``` + +### Vertical CRS {#iso19139-elem-gmd-verticalCRS-34034733808b1ab00927f9445d415259} + +Name + +: + +> gmd:verticalCRS + +Description + +: + +```{=html} +Provides information about the origin from which the maximum and minimum elevation + values are measured +``` +### Vertical element {#iso19139-elem-gmd-verticalElement-28aa2675a263f8317e4046addeeae416} + +Name + +: + +> gmd:verticalElement + +Description + +: + +```{=html} +Provides vertical component of the extent of the referring object +``` + +Condition + +: + +> conditional + +### Voice {#iso19139-elem-gmd-voice-4387e4ef043bc3002639aee8885c0a96} + +Name + +: + +> gmd:voice + +Description + +: + +```{=html} +Telephone number by which individuals can speak to the responsible organization + or individual +``` +### Volumes {#iso19139-elem-gmd-volumes-546112edbc2350b220b2ac0a3b22cf80} + +Name + +: + +> gmd:volumes + +Description + +: + +```{=html} +Number of items in the media identified +``` +### West bound {#iso19139-elem-gmd-westBoundLongitude-e24eb3c341fa09426f2c5f733a9151f0} + +Name + +: + +> gmd:westBoundLongitude + +Description + +: + +```{=html} +Western-most coordinate of the limit of the dataset extent, expressed in + longitude in decimal degrees (positive east) +``` + +Condition + +: + +> mandatory + +``` xml + + -33.90432 + +``` + +### Axis {#iso19139-elem-gml-axis-3fefc5dac3952c40be7017bc2a26f9b7} + +Name + +: + +> gml:axis + +Description + +: + +### Axis abbreviation {#iso19139-elem-gml-axisAbbrev-df25e0618e0c705cdc907bc2965b6239} + +Name + +: + +> gml:axisAbbrev + +Description + +: + +### Axis direction {#iso19139-elem-gml-axisDirection-7c5e69d4b1a66ecd9567ae9529e20da9} + +Name + +: + +> gml:axisDirection + +Description + +: + +### Begin {#iso19139-elem-gml-begin-fcd7703f3e5afd04b33646f5b0d6ea36} + +Name + +: + +> gml:begin + +Description + +: + +### Begin date {#iso19139-elem-gml-beginPosition-1d6323a4d959ef33b6f719047ae9a25d} + +Name + +: + +> gml:beginPosition + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +``` xml +2006-01-01 +``` + +### Catalogue symbol {#iso19139-elem-gml-catalogSymbol-8f175b4e3cadb1e37646c4c134f9bcc5} + +Name + +: + +> gml:catalogSymbol + +Description + +: + +### Coordinates {#iso19139-elem-gml-coordinates-d446715f3936aafc2075e980669135bd} + +Name + +: + +> gml:coordinates + +Description + +: + +```{=html} +Used to record an array of tuples or coordinates. +``` +### Coordinate system axis {#iso19139-elem-gml-CoordinateSystemAxis-50e3c608cbb8fb6d07159798b299a8b3} + +Name + +: + +> gml:CoordinateSystemAxis + +Description + +: + +### Description {#iso19139-elem-gml-description-473b14977bb5684339b11d3ad6ab4630} + +Name + +: + +> gml:description + +Description + +: + +```{=html} +Text description of the element +``` +### Description reference {#iso19139-elem-gml-descriptionReference-0e8fc63ab0aeb3d807a818fad310d15c} + +Name + +: + +> gml:descriptionReference + +Description + +: + +### Domain of validity {#iso19139-elem-gml-domainOfValidity-8c497852e8c983accd03d26668bf6fc4} + +Name + +: + +> gml:domainOfValidity + +Description + +: + +### Duration {#iso19139-elem-gml-duration-6f1b3e01444852276db9d1615edb9cd2} + +Name + +: + +> gml:duration + +Description + +: + +```{=html} +Conforms to the ISO 8601 syntax for temporal length as implemented by the XML + Schema duration type. +``` +### End {#iso19139-elem-gml-end-b99c9d3cc2fa4edcdc69ee20ca1b674e} + +Name + +: + +> gml:end + +Description + +: + +### End date {#iso19139-elem-gml-endPosition-466dd41e369b5b90bb57a53dcf488685} + +Name + +: + +> gml:endPosition + +Description + +: + +```{=html} +Formatted as 2007-09-12T15:00:00 (YYYY-MM-DDTHH:mm:ss) +``` +``` xml +2006-12-31 +``` + +### Outer boundary {#iso19139-elem-gml-exterior-49870353f6025fcb331e0d0e87168e54} + +Name + +: + +> gml:exterior + +Description + +: + +```{=html} +The outer boundary of a solid. +``` +### Identifier {#iso19139-elem-gml-id-e8faeae0ab7c5bebeb5cba50387cfd35} + +Name + +: + +> gml:id + +Description + +: + +```{=html} +Unique identifier +``` +### Ellipsoid {#iso19139-elem-gml-id-gmd-MD_CRS-e2a3e87e63c806772242ecb35ff81500} + +Name + +: + +> gml:id + +Context + +: + +> gmd:MD_CRS + +Description + +: + +```{=html} +Identity of the ellipsoid used +``` +```{=html} +identity of the ellipsoid used +``` +### Identifier {#iso19139-elem-gml-identifier-d7806b0981ddec95743cf0e85ac8d36f} + +Name + +: + +> gml:identifier + +Description + +: + +### Inner boundary {#iso19139-elem-gml-interior-6ddebd0b5c7dc0777295fc86afb4313c} + +Name + +: + +> gml:interior + +Description + +: + +```{=html} +The inner boundary of a solid +``` +### Linear ring {#iso19139-elem-gml-LinearRing-1bc0cfb7a90a767379f93b111300ac0e} + +Name + +: + +> gml:LinearRing + +Description + +: + +```{=html} +A gml:LinearRing is defined by four or more coordinate tuples, with linear + interpolation between them; the first and last coordinates shall be + coincident. +``` +### Line {#iso19139-elem-gml-LineString-b166d0e353c3e73518b724843023efa3} + +Name + +: + +> gml:LineString + +Description + +: + +```{=html} +A gml:LineString is a special curve that consists of a single segment with + linear interpolation. It is defined by two or more coordinate tuples, with linear + interpolation between them. +``` +### Maximum value {#iso19139-elem-gml-maximumValue-68f16f3f15cbadbf4b0c79c0de6f6d66} + +Name + +: + +> gml:maximumValue + +Description + +: + +### Metadata property {#iso19139-elem-gml-metaDataProperty-af33b267cd577920546a32c08acec8c5} + +Name + +: + +> gml:metaDataProperty + +Description + +: + +### Minimum value {#iso19139-elem-gml-minimumValue-6223553305a9824c34b3609d668a341e} + +Name + +: + +> gml:minimumValue + +Description + +: + +### Name {#iso19139-elem-gml-name-14e682acf85693b8dfb78d998145cf51} + +Name + +: + +> gml:name + +Description + +: + +### Point {#iso19139-elem-gml-Point-236f5581e92c5dfacd954d5bed8a1b5c} + +Name + +: + +> gml:Point + +Description + +: + +```{=html} +A gml:Point is defined by a single coordinate tuple. +``` +### Polygon {#iso19139-elem-gml-Polygon-b82b498d78a2b6eec8fe7f45ea7211f7} + +Name + +: + +> gml:Polygon + +Description + +: + +```{=html} +A gml:Polygon is a special surface that is defined by a single surface patch. + The boundary of this patch is coplanar and the polygon uses planar interpolation in its + interior. +``` +### Projected CRS {#iso19139-elem-gml-ProjectedCRS-f948bfb32d6ed749c86a752010533ba7} + +Name + +: + +> gml:ProjectedCRS + +Description + +: + +### Quantity Type {#iso19139-elem-gml-quantityType-d7b9caf379c87262ea3f4942b6ce87a0} + +Name + +: + +> gml:quantityType + +Description + +: + +### Quantity Type Reference {#iso19139-elem-gml-quantityTypeReference-2cfae888d8691872634683ab688ee495} + +Name + +: + +> gml:quantityTypeReference + +Description + +: + +### Range meaning {#iso19139-elem-gml-rangeMeaning-49f4157213948e7780595134a0b92110} + +Name + +: + +> gml:rangeMeaning + +Description + +: + +### Realization epoch {#iso19139-elem-gml-realizationEpoch-e4489082a0b01cdc199d2888a25a963f} + +Name + +: + +> gml:realizationEpoch + +Description + +: + +### Related time {#iso19139-elem-gml-relatedTime-505f65f26a66aa61f3d6646b84b1013b} + +Name + +: + +> gml:relatedTime + +Description + +: + +```{=html} +Defines the relation of a given time to the object. +``` +### Remarks {#iso19139-elem-gml-remarks-f62f842081ee60b9c42dd65a57b7f45d} + +Name + +: + +> gml:remarks + +Description + +: + +### Scope {#iso19139-elem-gml-scope-8a0aa936cc32e5ee6b5973381fe80db5} + +Name + +: + +> gml:scope + +Description + +: + +### Time edge {#iso19139-elem-gml-TimeEdge-2b29e2f8f85c4fc53a553674e4277644} + +Name + +: + +> gml:TimeEdge + +Description + +: + +### Time instant {#iso19139-elem-gml-TimeInstant-e042092aa87a5391fc360ec34e412e96} + +Name + +: + +> gml:TimeInstant + +Description + +: + +### Time interval {#iso19139-elem-gml-timeInterval-b6f129024d67efd7c0614e30e6564f32} + +Name + +: + +> gml:timeInterval + +Description + +: + +```{=html} +conforms to ISO 11404 which is based on floating point values for temporal length. + ISO 11404 syntax specifies the use of a positiveInteger together with appropriate values for + radix and factor. The resolution of the time interval is to one radix ^(-factor) of the + specified time unit. + The value of the unit is either selected from the units for time intervals from ISO 31-1:1992, + or is another suitable unit. The encoding is defined for GML in gml:TimeUnitType. The second + component of this union type provides a method for indicating time units other than the six + standard units given in the enumeration. +``` +### Time node {#iso19139-elem-gml-TimeNode-c03fe80fbd29824670ed95a8a519b5c6} + +Name + +: + +> gml:TimeNode + +Description + +: + +### Time period {#iso19139-elem-gml-TimePeriod-a5053bd95c76a6e191ffaa0b8e83f68c} + +Name + +: + +> gml:TimePeriod + +Description + +: + +``` xml + + 2006-01-01 + 2006-12-31 + +``` + +### Time position {#iso19139-elem-gml-timePosition-659967113b43569d7fc2280efe5729b3} + +Name + +: + +> gml:timePosition + +Description + +: + +### Time position {#iso19139-elem-gml-TimePosition-68b54fb54b86e8c5a00afe7d12b835c5} + +Name + +: + +> gml:TimePosition + +Description + +: + +### unitsSystem {#iso19139-elem-gml-unitsSystem-0206dd6fb8b96985f94443d14d675927} + +Name + +: + +> gml:unitsSystem + +Description + +: + +### Unit of measure {#iso19139-elem-gml-uom-d45a808198fd4d356dcf4684218aed03} + +Name + +: + +> gml:uom + +Description + +: + +### Vertical CRS {#iso19139-elem-gml-VerticalCRS-a414c00efb0426d91a8c140471c7a36d} + +Name + +: + +> gml:VerticalCRS + +Description + +: + +### Vertical CS {#iso19139-elem-gml-verticalCS-e44a286116a042cd66d8c9a185537785} + +Name + +: + +> gml:verticalCS + +Description + +: + +### Vertical CS {#iso19139-elem-gml-VerticalCS-e37f66628a9000cd0b4e612a1112becf} + +Name + +: + +> gml:VerticalCS + +Description + +: + +### Vertical datum {#iso19139-elem-gml-verticalDatum-8b0192217f46b813d6fbd5d5cbe6ff87} + +Name + +: + +> gml:verticalDatum + +Description + +: + +### Vertical datum {#iso19139-elem-gml-VerticalDatum-31b851524264ca4dd621e6d16600b4d4} + +Name + +: + +> gml:VerticalDatum + +Description + +: + +### Anchor {#iso19139-elem-gmx-Anchor-d0ccf7ef89bd129a31fe766fae38f1df} + +Name + +: + +> gmx:Anchor + +Description + +: + +```{=html} +Supports hyper-linking capabilities and ensures a web-like implementation of + CharacterStrings +``` +### Field of application {#iso19139-elem-gmx-fieldOfApplication-f2323295efe7d63cdd639724e044b20b} + +Name + +: + +> gmx:fieldOfApplication + +Description + +: + +```{=html} +Field of application +``` +### File name {#iso19139-elem-gmx-FileName-37df0ee2c2072b5a1f6088f3a8d1b023} + +Name + +: + +> gmx:FileName + +Description + +: + +```{=html} +File name and source URL. +``` +### Name {#iso19139-elem-gmx-name-c095560004def24f75abbb05e2d62079} + +Name + +: + +> gmx:name + +Description + +: + +```{=html} +Feature catalogue name +``` +### Scope {#iso19139-elem-gmx-scope-d18924953739105e2d01daf31cf284e0} + +Name + +: + +> gmx:scope + +Description + +: + +```{=html} +Scope definition +``` +### Date {#iso19139-elem-gmx-versionDate-3f4501418cb1164a3da629e121552ecd} + +Name + +: + +> gmx:versionDate + +Description + +: + +```{=html} +Catalogue date +``` +### Version {#iso19139-elem-gmx-versionNumber-45d0e848e304b12f16f75be3f780c97c} + +Name + +: + +> gmx:versionNumber + +Description + +: + +```{=html} +Catalogue version +``` +### Period duration {#iso19139-elem-gts-TM_PeriodDuration-e6be5bc9a1ef33b78246171f9d092eb5} + +Name + +: + +> gts:TM_PeriodDuration + +Description + +: + +```{=html} +The duration data type is used to specify a time interval. + +The time interval is specified in the following form "PnYnMnDTnHnMnS" where: + +* P indicates the period (required) +* nY indicates the number of years +* nM indicates the number of months +* nD indicates the number of days +* T indicates the start of a time section (required if you are going to specify hours, +minutes, or seconds) +* nH indicates the number of hours +* nM indicates the number of minutes +* nS indicates the number of seconds +``` +### Hidden Elements {#iso19139-elem-hidden-elements-3fcbdb1b81d4fa9c9694a3e7fa33ae88} + +Name + +: + +> hidden-elements + +Description + +: + +```{=html} +Child elements and attributes have been hidden because you do no have access to + view those elements +``` +### Identifier {#iso19139-elem-id-0dd23b8448c65513bc5df360f10d9f80} + +Name + +: + +> id + +Description + +: + +```{=html} +Unique identifier +``` +### Indeterminate position {#iso19139-elem-indeterminatePosition-260a886b2a2f47a9172910d795854c9c} + +Name + +: + +> indeterminatePosition + +Description + +: + +### Standard codelists Indeterminate position (indeterminatePosition) + +| code | label | +|---------|---------| +| after | After | +| before | Before | +| now | Now | +| unknown | Unknown | + +### Indirect projection system (for non geographical resources) {#iso19139-elem-InDirectReferenceSystem-0267274a7311c04c19a066850b7c34da} + +Name + +: + +> InDirectReferenceSystem + +Description + +: + +```{=html} +ReferenceSystem derived / specify that it is an indirect + reference +``` +### Radix {#iso19139-elem-radix-f013f1c6757bf6c47831308d9161bdc0} + +Name + +: + +> radix + +Description + +: + +### Source URL {#iso19139-elem-src-45b17fa1ca5386cd5f963342f4af3e0d} + +Name + +: + +> src + +Description + +: + +```{=html} +URL of the document. +``` +### Spatial Reference System Name {#iso19139-elem-srsName-b8afc1ab5f5b09552205c4795ccadeaa} + +Name + +: + +> srsName + +Description + +: + +```{=html} +Name of the Spatial Reference System. By default set to + geographic (epsg:4326) +``` +### Access Properties {#iso19139-elem-srv-accessProperties-0b17bae21a9a08a66679b18470ccc23e} + +Name + +: + +> srv:accessProperties + +Description + +: + +```{=html} +Information about the availability of the service eg. fees, availability, + oredering instructions +``` +### Connect Point {#iso19139-elem-srv-connectPoint-7982557d282f2f8e26ce6349f893e18f} + +Name + +: + +> srv:connectPoint + +Description + +: + +```{=html} +Handle for accessing the service interface +``` +### Contains Operations {#iso19139-elem-srv-containsOperations-5765a967aadd33b5ba92cde03c9ce30e} + +Name + +: + +> srv:containsOperations + +Description + +: + +```{=html} +Provides information about the operations that comprise the + service +``` +### Coupled Resource {#iso19139-elem-srv-coupledResource-09de21d33ee8e6c814d675f23350d40e} + +Name + +: + +> srv:coupledResource + +Description + +: + +```{=html} +Details of services coupled with this one +``` +### Coupling Type {#iso19139-elem-srv-couplingType-bc1606dff717a83807e97a1a3789e30a} + +Name + +: + +> srv:couplingType + +Description + +: + +```{=html} +Type of Coupling +``` +### Distributed Computing Platforms {#iso19139-elem-srv-DCP-4da4ef80cec961d437cc5191b256fb0f} + +Name + +: + +> srv:DCP + +Description + +: + +```{=html} +Distributed computing platforms on which the operation has been + implemented +``` +### Distributed Computing Platforms list {#iso19139-elem-srv-DCPList-dbbe623a769e6242e8fc2c6cb1ab4a6e} + +Name + +: + +> srv:DCPList + +Description + +: + +### Standard codelists Distributed Computing Platforms list (srv:DCPList) + +| description | code | label | +|--------------------|-------------|--------------| +| DCP is XML | XML | XML | +| DCP is CORBA | CORBA | CORBA | +| DCP is JAVA | JAVA | JAVA | +| DCP is COM | COM | COM | +| DCP is SQL | SQL | SQL | +| DCP is WebServices | WebServices | Web services | + +### Depends On {#iso19139-elem-srv-dependsOn-f4d4b9fc1640b60874e70642ab2280be} + +Name + +: + +> srv:dependsOn + +Description + +: + +```{=html} +List of operations that must be completed immediately before current operation + is invoked, structured as a list for capturing alternate predecessor paths and sets for + capturing parallel predecessor paths +``` +### Description {#iso19139-elem-srv-description-5b9e6dc049d103b7b405144a4b2ddc54} + +Name + +: + +> srv:description + +Description + +: + +```{=html} +Narrative explanation of the services in the chain and resulting output or role + of the parameter +``` +### Direction {#iso19139-elem-srv-direction-6554a8cbde610419936242537ba0f647} + +Name + +: + +> srv:direction + +Description + +: + +### Extent {#iso19139-elem-srv-extent-64a5e3a1fb91876497dd5bad40e89e49} + +Name + +: + +> srv:extent + +Description + +: + +```{=html} +Geographic/Temporal Extent of Service +``` +### Identifier {#iso19139-elem-srv-identifier-c2dabee10730bbcfc96d13572c1cec92} + +Name + +: + +> srv:identifier + +Description + +: + +```{=html} +Identifier of resource to which the operation applies +``` +### Invocation Name {#iso19139-elem-srv-invocationName-ff1507450b257e37f591b7f95addbdad} + +Name + +: + +> srv:invocationName + +Description + +: + +```{=html} +The name used to invoke this interface within the context of the DCP. The name + is identical for all DCPs +``` +### Keywords {#iso19139-elem-srv-keywords-f46cb2bd1f2e70ef2e62eb2edb510123} + +Name + +: + +> srv:keywords + +Description + +: + +```{=html} +Keywords describing service +``` +### Name {#iso19139-elem-srv-name-9889811abcd6d2d0bc76dc5467a06f7e} + +Name + +: + +> srv:name + +Description + +: + +```{=html} +The name, as used by the service for this chain or parameter +``` +### Operates On {#iso19139-elem-srv-operatesOn-fc0165e60dcb452c05c9f1d95416b89a} + +Name + +: + +> srv:operatesOn + +Description + +: + +```{=html} +Provides information on the datasets that the service operates on +``` +### Operation Description {#iso19139-elem-srv-operationDescription-61305b5372e54d3cdd60a8dc8b1587c7} + +Name + +: + +> srv:operationDescription + +Description + +: + +```{=html} +Free text description of the intent of the operation and the results of the + operation +``` +### Operation Name {#iso19139-elem-srv-operationName-33abdef7fb8954ae3842f74904326896} + +Name + +: + +> srv:operationName + +Description + +: + +```{=html} +A unique identifier for this interface +``` +### Optionality {#iso19139-elem-srv-optionality-32be37d11746cc993b5b447b15480f70} + +Name + +: + +> srv:optionality + +Description + +: + +```{=html} +Indication if the parameter is required +``` +### Parameters {#iso19139-elem-srv-parameters-c842f4d88772de0790d36a4789c54b0c} + +Name + +: + +> srv:parameters + +Description + +: + +```{=html} +The parameters that are required for this interface +``` +### Provider Name {#iso19139-elem-srv-providerName-67c5eeff01e2702cdca4d5543566b572} + +Name + +: + +> srv:providerName + +Description + +: + +```{=html} +A unique identifier for this organization +``` +### Repeatability {#iso19139-elem-srv-repeatability-20aecf37a789cf6d34f906ca151e6cfb} + +Name + +: + +> srv:repeatability + +Description + +: + +```{=html} +Indication if more than one value of the parameter may be + provided +``` +### Restrictions {#iso19139-elem-srv-restrictions-eddcbda30442882032776be29da19b00} + +Name + +: + +> srv:restrictions + +Description + +: + +```{=html} +Legal and security constraints on accessing the service and distributing data + generated by the service +``` +### Service Contact {#iso19139-elem-srv-serviceContact-ecd84df84bea000426f14d1faaf78266} + +Name + +: + +> srv:serviceContact + +Description + +: + +```{=html} +Information for contacting the service provider +``` +### Service Type {#iso19139-elem-srv-serviceType-31230933e2a7436c80955195b74bc0a0} + +Name + +: + +> srv:serviceType + +Description + +: + +```{=html} +Service type name from a registry of services. For example, the values of the + nameSpace and name attributes of GeneralName may be 'OGC' and 'catalogue' +``` +Recommended values + +| code | label | +|-------------------|-------------------------------------------------| +| OGC:WMS | OGC Web Map Service (OGC:WMS) | +| OGC:WFS | OGC Web Feature Service (OGC:WFS) | +| OGC:WCS | OGC Web Coverage Service (OGC:WCS) | +| W3C:HTML:DOWNLOAD | Download (W3C:HTML:DOWNLOAD) | +| W3C:HTML:LINK | Information (W3C:HTML:LINK) | +| discovery | INSPIRE Discovery Service (discovery) | +| view | INSPIRE View Service (view) | +| download | INSPIRE Download Service (download) | +| transformation | INSPIRE Transformation Service (transformation) | +| other | INSPIRE Other Services (other) | + +### Service Version {#iso19139-elem-srv-serviceTypeVersion-4187a8061f591f97903093667295daa0} + +Name + +: + +> srv:serviceTypeVersion + +Description + +: + +```{=html} +Provides for searching based on the version of serviceType. For example, we may + only be interested in OGC Catalogue V1.1 services. If version is maintained as a + separate attribute, users can easily search for all services of a type regardless of the + version +``` +### Coupled Resource {#iso19139-elem-srv-SV_CoupledResource-2d85cb6b044791b72116ba2a107bf03e} + +Name + +: + +> srv:SV_CoupledResource + +Description + +: + +```{=html} +Details of services coupled with this one +``` +### Coupling Type {#iso19139-elem-srv-SV_CouplingType-0ccd187bb4e974353b2967aeda26bb4f} + +Name + +: + +> srv:SV_CouplingType + +Description + +: + +```{=html} +Type of Coupling +``` +### Standard codelists Coupling Type (srv:SV_CouplingType) + +| code | label | description | +|-------|-------|-------------------------------------------------------------------------------| +| tight | Tight | Tightly coupled: data associated | +| mixed | Mixed | Mixed coupled: data associated; in addition, external data might be processed | +| loose | Loose | Loosely coupled: no data associated | + +### Operation {#iso19139-elem-srv-SV_OperationMetadata-360f31d3dfaf07269e52a98bdfd0782a} + +Name + +: + +> srv:SV_OperationMetadata + +Description + +: + +```{=html} +Operation Metadata +``` +### Parameter {#iso19139-elem-srv-SV_Parameter-614c824c473c037ce821444bc369929f} + +Name + +: + +> srv:SV_Parameter + +Description + +: + +```{=html} +The parameters that are required for this interface +``` +### Parameter direction {#iso19139-elem-srv-SV_ParameterDirection-fb7b80e085fc9d52b922e6ff63de2c0a} + +Name + +: + +> srv:SV_ParameterDirection + +Description + +: + +### Standard codelists Parameter direction (srv:SV_ParameterDirection) + +| code | label | +|--------|--------------| +| in | Input | +| out | Output | +| in/out | Input/output | + +### Service Identification (19119) {#iso19139-elem-srv-SV_ServiceIdentification-a03600ef3a3f59be9f022c9137a72deb} + +Name + +: + +> srv:SV_ServiceIdentification + +Description + +: + +```{=html} +ISO 19119-2005 Service Identification +``` +### Value type {#iso19139-elem-srv-valueType-5760ec25a3f9d6ee283d5fb5c6248c7c} + +Name + +: + +> srv:valueType + +Description + +: + +### Unit {#iso19139-elem-unit-945d85b3b91c6edfaa79c28f5354e396} + +Name + +: + +> unit + +Description + +: + +### Units of measure {#iso19139-elem-uom-deee964fae8827c5a9435a07abe4ceea} + +Name + +: + +> uom + +Description + +: + +Recommended values + +| code | label | +|------|--------| +| m | meters | + +### Metadata uuid {#iso19139-elem-uuidref-6f0ce82fb9f437e7a80804c85857a44a} + +Name + +: + +> uuidref + +Description + +: + +```{=html} +Unique identifier +``` +### URL {#iso19139-elem-xlink-href-24b46a26bc2f93ddbf7ff3a48bed324f} + +Name + +: + +> xlink:href + +Description + +: + +```{=html} +Supplies the data that allows an XLink application to find a remote resource (or + resource fragment) [W3C XLINK] +``` +### URL title {#iso19139-elem-xlink-title-83b73e889fe529eac02adecd853aa587} + +Name + +: + +> xlink:title + +Description + +: + +### Link {#iso19139-elem-xlink-type-2f3d5b15ae49cb486c0f798f25eb6ca0} + +Name + +: + +> xlink:type + +Description + +: + +```{=html} +Link type +``` +### Years {#iso19139-elem-years-b93df09e5de0ac46f913523035856630} + +Name + +: + +> years + +Description + +: + +### Zone {#iso19139-elem-zone-30b632c8b09244100577dcf6c0ddf419} + +Name + +: + +> zone + +Description + +: + +```{=html} +Unique identifier for 100,000 metre grid zone +``` +## Standard codelists + +List of all codelists available in the standard. + +### Standard codelists Date type code (gmd:CI_DateTypeCode) {#iso19139-cl-gmd-CI_DateTypeCode} + +| code | label | description | +|-------------|-------------|---------------------------------------------------------------------------------------| +| creation | Creation | Date identifies when the resource was brought into existence | +| publication | Publication | Date identifies when the resource was issued | +| revision | Revision | Date identifies when the resource was examined or re-examined and improved or amended | + +### Standard codelists OnLine function code (gmd:CI_OnLineFunctionCode) {#iso19139-cl-gmd-CI_OnLineFunctionCode} + +| code | label | description | +|---------------|----------------|----------------------------------------------------------------------------------------| +| download | Download | Online instructions for transferring data from one storage device or system to another | +| information | Information | Online information about the resource | +| offlineAccess | Offline access | Online instructions for requesting the resource from the provider | +| order | Order | Online order process for obtening the resource | +| search | Search | Online search interface for seeking out information about the resource | + +### Standard codelists Presentatiewijze code (gmd:CI_PresentationFormCode) {#iso19139-cl-gmd-CI_PresentationFormCode} + +| code | label | description | +|------------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| documentDigital | Digital document | Digital representation of a primarily textual item (can contain illustrations also) | +| imageDigital | Digital image | Likeness of natural or man-made features, objects, and activities acquired through the sensing of visual or any other segment of the electromagnetic spectrum by sensors, such as thermal infrared, and high resolution radar and stored in digital format | +| documentHardcopy | Hardcopy document | Representation of a primarily textual item (can contain illustrations also) on paper, photographic material, or other media | +| imageHardcopy | Hardcopy image | Likeness of natural or man-made features, objects, and activities acquired through the sensing of visual or any other segment of the electromagnetic spectrum by sensors, such as thermal infrared, and high resolution radar and reproduced on paper, photographic material, or other media for use directly by the human user | +| mapDigital | Digital map | Map represented in raster or vector form | +| mapHardcopy | Hardcopy map | Map printed on paper, photographic material, or other media for use directly by the human user | +| modelDigital | Digital model | Multi-dimensional digital representation of a feature, process, etc. | +| modelHardcopy | Hardcopy model | 3-dimensional, physical model | +| profileDigital | Digital profile | Vertical cross-section in digital form | +| profileHardcopy | Hardcopy profile | Vertical cross-section printed on paper, etc. | +| tableDigital | Digital table | Digital representation of facts or figures systematically displayed, especially in columns | +| tableHardcopy | Hardcopy table | Representation of facts or figures systematically displayed, especially in columns, printed onpapers, photographic material, or other media | +| videoDigital | Digital video | Digital video recording | +| videoHardcopy | Hardcopy video | Video recording on film | + +### Standard codelists Role code (gmd:CI_RoleCode) {#iso19139-cl-gmd-CI_RoleCode} + +| code | label | description | +|-----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| resourceProvider | Resource provider | Party that supplies the resource | +| custodian | Custodian | Party that accepts accountability and responsibility for the data and ensures appropriate care and maintenance of the resource | +| owner | Owner | Party that owns the resource | +| user | User | Party who uses the resource | +| distributor | Distributor | Party who distributes the resource | +| originator | Originator | Party who created the resource | +| pointOfContact | Point of contact | Party who can be contacted for acquiring knowledge about or acquisition of the resource | +| principalInvestigator | Principal investigator | Key party responsible for gathering information and conducting research | +| processor | Processor | Party that has processed the data in a manner such that the resource has been modified | +| publisher | Publisher | Party who published the resource | +| author | Author | Party who authored the resource | + +### Standard codelists Evaluation method type code (gmd:DQ_EvaluationMethodTypeCode) {#iso19139-cl-gmd-DQ_EvaluationMethodTypeCode} + +| code | label | description | +|----------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| directInternal | Direct internal | Method of evaluating the quality of a dataset based on inspection of items within the dataset, where all data required is internal to the dataset being evaluated | +| directExternal | Direct external | Method of evaluating the quality of a dataset based on inspection of items within the dataset, where reference data external to the dataset being evaluated is required | +| indirect | Indirect | Method of evaluating the quality of a dataset based on external knowledge | + +### Standard codelists Association Type (gmd:DS_AssociationTypeCode) {#iso19139-cl-gmd-DS_AssociationTypeCode} + +| code | label | description | +|------------------------|---------------------------|-------------------------------------------------------------------------------------| +| crossReference | Cross reference | Reference from one dataset to another | +| largerWorkCitation | Larger work citation | Reference to a master dataset of which this one is a part | +| partOfSeamlessDatabase | Part of seamless database | Part of the same structured set of data held in a computer | +| source | Source | Mapping and charting information from which the dataset content originates | +| stereoMate | Stereo mate | Part of a set of imagery that when used together, provides three-dimensional images | + +### Standard codelists Initiative Type (gmd:DS_InitiativeTypeCode) {#iso19139-cl-gmd-DS_InitiativeTypeCode} + +| code | label | description | +|---------------|---------------|-------------------------------------------------------------| +| campaign | Campaign | Series of organized planned actions | +| collection | Collection | Accumulation of datasets assembled for a specific purpose | +| exercise | Exercise | Specific performance of a function or group of functions | +| experiment | Experiment | Process designed to find if something is effective or valid | +| investigation | Investigation | Search or systematic inquiry | +| mission | Mission | Specific operation of a data collection system | +| sensor | Sensor | Device or piece of equipment which detects or records | +| operation | Operation | Action that is part of a series of actions | +| platform | Platform | Vehicle or other support base that holds a sensor | +| process | Process | Method of doing something involving a number of steps | +| program | Program | Specific planned activity | +| project | Project | Organized undertaking, research, or development | +| study | Study | Examination or investigation | +| task | Task | Piece of work | +| trial | Trial | Process of testing to discover or demonstrate something | + +### Standard codelists Cell geometry code (gmd:MD_CellGeometryCode) {#iso19139-cl-gmd-MD_CellGeometryCode} + +| code | label | description | +|-------|-------|------------------------------| +| point | Point | Each cell represents a point | +| area | Area | Each cell represents an area | + +### Standard codelists Characterset code (gmd:MD_CharacterSetCode) {#iso19139-cl-gmd-MD_CharacterSetCode} + +| code | label | description | +|------------|--------------|-----------------------------------------------------------------------------------------------------------------------------------| +| ucs2 | UCS2 | 16-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| ucs4 | UCS4 | 32-bit fixed size Universal Character Set, based on ISO/IEC 10646 | +| utf7 | UTF7 | 7-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf8 | UTF8 | 8-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| utf16 | UTF16 | 16-bit variable size UCS Transfer Format, based on ISO/IEC 10646 | +| 8859part1 | 8859 Part 1 | ISO/IEC 8859-1, Information technology - 8-bit single byte coded graphic character sets - Part 1 : Latin alphabet No.1 | +| 8859part2 | 8859 Part 2 | ISO/IEC 8859-2, Information technology - 8-bit single byte coded graphic character sets - Part 2 : Latin alphabet No.2 | +| 8859part3 | 8859 Part 3 | ISO/IEC 8859-3, Information technology - 8-bit single byte coded graphic character sets - Part 3 : Latin alphabet No.3 | +| 8859part4 | 8859 Part 4 | ISO/IEC 8859-4, Information technology - 8-bit single byte coded graphic character sets - Part 4 : Latin alphabet No.4 | +| 8859part5 | 8859 Part 5 | ISO/IEC 8859-5, Information technology - 8-bit single byte coded graphic character sets - Part 5 : Latin/Cyrillic alphabet | +| 8859part6 | 8859 Part 6 | ISO/IEC 8859-6, Information technology - 8-bit single byte coded graphic character sets - Part 6 : Latin/Arabic alphabet | +| 8859part7 | 8859 Part 7 | ISO/IEC 8859-7, Information technology - 8-bit single byte coded graphic character sets - Part 7 : Latin/Greek alphabet | +| 8859part8 | 8859 Part 8 | ISO/IEC 8859-8, Information technology - 8-bit single byte coded graphic character sets - Part 8 : Latin/Hebrew alphabet | +| 8859part9 | 8859 Part 9 | ISO/IEC 8859-9, Information technology - 8-bit single byte coded graphic character sets - Part 9 : Latin alphabet No.5 | +| 8859part10 | 8859 Part 10 | ISO/IEC 8859-10, Information technology - 8-bit single byte coded graphic character sets - Part 10 : Latin alphabet No.6 | +| 8859part11 | 8859 Part 11 | ISO/IEC 8859-11, Information technology - 8-bit single byte coded graphic character sets - Part 11 : Latin/Thai alphabet | +| 8859part13 | 8859 Part 13 | ISO/IEC 8859-13, Information technology - 8-bit single byte coded graphic character sets - Part 13 : Latin alphabet No.7 | +| 8859part14 | 8859 Part 14 | ISO/IEC 8859-14, Information technology - 8-bit single byte coded graphic character sets - Part 14 : Latin alphabet No.8 (Celtic) | +| 8859part15 | 8859 Part 15 | ISO/IEC 8859-15, Information technology - 8-bit single byte coded graphic character sets - Part 15 : Latin alphabet No.9 | +| 8859part16 | 8859 Part 16 | ISO/IEC 8859-16, Information technology - 8-bit single byte coded graphic character sets - Part 16 : Latin alphabet No.10 | +| jis | JIS | Japanese code set used for electronic transmission | +| shiftJIS | Shift JIS | Japanese code set used on MS-DOS machines | +| eucJP | EUC JP | Japanese code set used on UNIX based machines | +| usAscii | US ASCII | United States ASCII code set (ISO 646 US) | +| ebcdic | EBCDIC | IBM mainframe code set | +| eucKR | EUC KR | Korean code set | +| big5 | Big 5 | Traditional Chinese code set used in Taiwan, Hong Kong of China and other areas | +| GB2312 | GB2312 | Simplified Chinese code set | + +### Standard codelists Classification code (gmd:MD_ClassificationCode) {#iso19139-cl-gmd-MD_ClassificationCode} + +| code | label | description | +|--------------|--------------|--------------------------------------------------------------------------------------------| +| unclassified | Unclassified | Available for general disclosure | +| restricted | Restricted | Not for general disclosure | +| confidential | Confidential | Available for someone who can be entrusted with information | +| secret | Secret | Kept or meant to be kept private, unknown, or hidden from all but a select group of people | +| topSecret | Top secret | Of the highest secrecy | + +### Standard codelists Content type code (gmd:MD_CoverageContentTypeCode) {#iso19139-cl-gmd-MD_CoverageContentTypeCode} + +| code | label | description | +|------------------------|-------------------------|--------------------------------------------------------------------------------------------------------------------| +| image | Image | Meaningful numerical representation of a physical parameter that is not the actual value of the physical parameter | +| thematicClassification | Thematic classification | Code value with no quantitative meaning, used to represent a physical quantity | +| physicalMeasurement | Physical measurement | Value in physical units of the quantity being measured | + +### Standard codelists Data type code (gmd:MD_DatatypeCode) {#iso19139-cl-gmd-MD_DatatypeCode} + +| code | label | description | +|-----------------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| class | Class | Descriptor of a set of objects that share the same attributes, operations, methods, relationships, and behavior | +| codelist | Codelist | Descriptor of a set of objects that share the same attributes, operations, methods, relationships, and behavior | +| enumeration | Enumeration | Data type whose instances form a list of named literal values, not extendable | +| codelistElement | Codelist element | Permissible value for a codelist or enumeration | +| abstractClass | Abstract class | Class that cannot be directly instantiated | +| aggregateClass | Aggregate class | Class that is composed of classes it is connected to by an aggregate relationship | +| specifiedClass | Specified class | Subclass that may be substituted for its superclass | +| datatypeClass | Datatype class | Class with few or no operations whose primary purpose is to hold the abstract state of another class for transmittal, storage, encoding or persistent storage | +| interfaceClass | Interface class | Named set of operations that characterize the behavior of an element | +| unionClass | Union class | Class describing a selection of one of the specified types | +| metaClass | Meta class | Class whose instances are classes | +| typeClass | Type class | Class used for specification of a domain of instances (objects), together with the operations applicable to the objects. A type may have attributes and associations | +| characterString | Character string | Free text field | +| integer | Integer | Numerical field | +| association | Association | Semantic relationship between two classes that involves connections among their instances | + +### Standard codelists Dimension type code (gmd:MD_DimensionNameTypeCode) {#iso19139-cl-gmd-MD_DimensionNameTypeCode} + +| code | label | description | +|------------|-------------|------------------------------------------------------------| +| row | Row | Ordinate (y) axis | +| column | Column | Abscissa (x) axis | +| vertical | Vertical | Vertical (z) axis | +| track | Track | Along the direction of motion of the scan point | +| crossTrack | Cross track | Perpendicular to the direction of motion of the scan point | +| line | Line | Scan line of a sensor | +| sample | Sample | Element along a scan line | +| time | Time | Duration | + +### Standard codelists Geometric Object Type (gmd:MD_GeometricObjectTypeCode) {#iso19139-cl-gmd-MD_GeometricObjectTypeCode} + +| code | label | description | +|-----------|-----------|----------------------------------------------------------------------------------------------------------------| +| complex | Complex | Set of geometric primitives such that their boundaries can be represented as a union of other primitives | +| composite | Composite | Connected set of curves, solids or surfaces | +| curve | Curve | Bounded, 1-dimensional geometric primitive, representing the continuous image of a line | +| point | Point | Zero-dimensional geometric primitive, representing a position but not having an extent | +| solid | Solid | Bounded, connected 3-dimensional geometric primitive, representing the continuous image of a region of space | +| surface | Surface | Bounded, connected 2-dimensional geometric primitive, representing the continuous image of a region of a plane | + +### Standard codelists Imaging Condition Code (gmd:MD_ImagingConditionCode) {#iso19139-cl-gmd-MD_ImagingConditionCode} + +| code | label | description | +|--------------------|---------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| blurredImage | Blurred image | Portion of the image is blurred | +| cloud | Cloud | Portion of the image is partially obscured by cloud cover | +| degradingObliquity | Degrading obliquity | Acute angle between the plane of the ecliptic (the plane of the Earth s orbit) and the plane of the celestial equator | +| fog | Fog | Portion of the image is partially obscured by fog | +| heavySmokeOrDust | Heavy smoke or dust | Portion of the image is partially obscured by heavy smoke or dust | +| night | Night | Image was taken at night | +| rain | Rain | Image was taken during rainfall | +| semiDarkness | Semi darkness | Image was taken during semi-dark conditions -- twilight conditions | +| shadow | Shadow | Portion of the image is obscured by shadow | +| snow | Snow | Portion of the image is obscured by snow | +| terrainMasking | Terrain masking | The absence of collection data of a given point or area caused by the relative location of topographic features which obstruct the collection path between the collector(s) and the subject(s) of interest | + +### Standard codelists Keyword Type Code (gmd:MD_KeywordTypeCode) {#iso19139-cl-gmd-MD_KeywordTypeCode} + +| code | label | description | +|------------|------------|--------------------------------------------------------------------| +| discipline | Discipline | Keyword identifies a branch of instruction or specialized learning | +| place | Place | Keyword identifies a location | +| stratum | Stratum | Keyword identifies the layer(s) of any deposited substance | +| temporal | Temporal | Keyword identifies a time period related to the dataset | +| theme | Theme | Keyword identifies a particular subject or topic | + +### Standard codelists Maintenance Frequency (gmd:MD_MaintenanceFrequencyCode) {#iso19139-cl-gmd-MD_MaintenanceFrequencyCode} + +| code | label | description | +|-------------|-------------|----------------------------------------------------------| +| continual | Continual | Data is repeatedly and frequently updated | +| daily | Daily | Data is updated each day | +| weekly | Weekly | Data is updated on a weekly basis | +| fortnightly | Fortnightly | Data is updated every two weeks | +| monthly | Monthly | Data is updated each month | +| quarterly | Quarterly | Data is updated every three months | +| biannually | Biannually | Data is updated twice each year | +| annually | Annually | Data is updated every year | +| asNeeded | As needed | Data is updated as deemed necessary | +| irregular | Irregular | Data is updated in intervals that are uneven in duration | +| notPlanned | Not planned | There are no plans to update the data | +| unknown | Unknown | Frequency of maintenance for the data is not known | + +### Standard codelists Medium format (gmd:MD_MediumFormatCode) {#iso19139-cl-gmd-MD_MediumFormatCode} + +| code | label | description | +|------------------|--------------------|------------------------------------------------------------| +| cpio | CPIO | CoPy In / Out (UNIX file format and command) | +| tar | TAR | Tape ARchive | +| highSierra | High sierra | High sierra file system | +| iso9660 | ISO9660 | Information processing volume and file structure of CD-ROM | +| iso9660RockRidge | ISO9660 Rock Ridge | Rock ridge interchange protocol (UNIX) | +| iso9660AppleHFS | ISO9660 Apple HFS | Hierarchical file system (Macintosh) | + +### Standard codelists Medium name code (gmd:MD_MediumNameCode) {#iso19139-cl-gmd-MD_MediumNameCode} + +| code | label | description | +|---------------------------|-------------------------------|----------------------------------------------------| +| cdRom | CDROM | Read-only optical disk | +| dvd | DVD | Digital versatile disk | +| dvdRom | DVDROM | Digital versatile disk, read only | +| 3halfInchFloppy | 3 Half Inch Floppy | 3,5 inch magnetic disk | +| 5quarterInchFloppy | 5 Quarter Inch Floppy | 5,25 inch magnetic disk | +| 7trackTape | 7 Track tape | 7 track magnetic tape | +| 9trackTape | 9 track tape | 9 track magnetic tape | +| 3480Cartridge | 3480 Cartridge | 3480 cartridge tape drive | +| 3490Cartridge | 3490 Cartridge | 3490 cartridge tape drive | +| 3580Cartridge | 3580 Cartridge | 3580 cartridge tape drive | +| 4mmCartridgeTape | 4 mm Cartridge tape | 4 millimetre magnetic tape | +| 8mmCartridgeTape | 8 mm Cartridge tape | 8 millimetre magnetic tape | +| 1quarterInchCartridgeTape | 1 Quarter inch cartridge tape | 0,25 inch magnetic tape | +| digitalLinearTap | Digital linear tape | Half inch cartridge streaming tape drive | +| onLine | Online | Direct computer linkage | +| satellite | Satellite | Linkage through a satellite communication system | +| telephoneLink | Telephone link | Communication through a telephone network | +| hardcopy | Hardcopy | Pamphlet or leaflet giving descriptive information | + +### Standard codelists Obligation code (gmd:MD_ObligationCode) {#iso19139-cl-gmd-MD_ObligationCode} + +| code | label | description | +|-------------|-------------|------------------------------------------------------| +| mandatory | Mandatory | Element is always required | +| optional | Optional | Element is not required | +| conditional | Conditional | Element is required when a specific condition is met | + +### Standard codelists Pixel orientation code (gmd:MD_PixelOrientationCode) {#iso19139-cl-gmd-MD_PixelOrientationCode} + +| code | label | description | +|------------|-------------|----------------------------------------------------------------------------------------------------------------------------------------------| +| center | Center | Point halfway between the lower left and the upper right of the pixel | +| lowerLeft | Lower left | The corner in the pixel closest to the origin of the SRS; if two are at the same distance from the origin, the one with the smallest x-value | +| lowerRight | Lower right | Next corner counterclockwise from the lower left | +| upperRight | Upper right | Next corner counterclockwise from the lower right | +| upperLeft | Upper left | Next corner counterclockwise from the upper right | + +### Standard codelists Progress (gmd:MD_ProgressCode) {#iso19139-cl-gmd-MD_ProgressCode} + +| code | label | description | +|-------------------|--------------------|--------------------------------------------------------------------------------------| +| completed | Completed | Production of the data has been completed | +| historicalArchive | Historical archive | Data has been stored in an offline storage facility | +| obsolete | Obsolete | Data is no longer relevant | +| onGoing | On going | Data is continually being updated | +| planned | Planned | Fixed date has been established upon or by which the data will be created or updated | +| required | Required | Data needs to be generated or updated | +| underDevelopment | Under development | Data is currently in the process of being created | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|-------------|--------------|-------------| +| notobsolete | Not obsolete | | + +### Standard codelists Access Restriction (gmd:MD_RestrictionCode) {#iso19139-cl-gmd-MD_RestrictionCode} + +| code | label | description | +|----------------------------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| copyright | Copyright | Exclusive right to the publication, production, or sale of the rights to a literary, dramatic, musical, or artistic work, or to the use of a commercial print or label, granted by law for a specified period of time to an author, composer, artist, distributor | +| patent | Patent | Government has granted exclusive right to make, sell, use or license an invention or discovery | +| patentPending | Pending patent | Produced or sold information awaiting a patent | +| trademark | Trademark | A name, symbol, or other device identifying a product, officially registered and legally restricted to the use of the owner or manufacturer | +| license | License | Formal permission to do something | +| intellectualPropertyRights | Intellectual property rights | Rights to financial benefit from and control of distribution of non-tangible property that is a result of creativity | +| restricted | Restricted | Withheld from general circulation or disclosure | +| otherRestrictions | Other restrictions | Limitation not listed | + +### Standard codelists Scope code (gmd:MD_ScopeCode) {#iso19139-cl-gmd-MD_ScopeCode} + +| code | label | description | +|----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| attribute | Attribute | Information applies to the attribute class | +| attributeType | Attribute type | Information applies to the characteristic of a feature | +| collectionHardware | Collection hardware | Information applies to the collection hardware class | +| collectionSession | Collection session | Information applies to the collection session | +| dataset | Dataset | Information applies to the dataset | +| series | Series | Information applies to the series | +| nonGeographicDataset | Non geographic dataset | Information applies to non-geographic data | +| dimensionGroup | Dimension group | Information applies to a dimension group | +| feature | Feature | Information applies to a feature | +| featureType | Feature type | Information applies to a feature type | +| propertyType | Property type | Information applies to a property type | +| fieldSession | Field session | Information applies to a field session | +| software | Software | Information applies to a computer program or routine | +| service | 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 behaviour, such as a use case | +| model | Model | Information applies to a copy or imitation of an existing or hypothetical object | +| tile | Tile | Information applies to a tile, a spatial subset of geographic data | + +Those values are defined in the standard but hidden when editing. + +| code | label | description | +|---------------------------------------------|------------------------------------------------|-------------| +| map staticMap interactiveMap featureCatalog | Map Static map Interactive map Feature catalog | | + +Displayed only if + +: + +> /ancestor::node()[name()='gmd:MD_Metadata']/gmd:identificationInfo/srv:SV_ServiceIdentification + +### Standard codelists Scope code (gmd:MD_ScopeCode) + +| code | label | description | +|---------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| service | 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 behaviour, such as a use case | + +### Standard codelists Spatial Representation Type (gmd:MD_SpatialRepresentationTypeCode) {#iso19139-cl-gmd-MD_SpatialRepresentationTypeCode} + +| code | label | description | +|-------------|--------------|----------------------------------------------------------------------------------------------------| +| vector | Vector | Vector data is used to represent geographic data | +| grid | Grid | Grid data is used to represent geographic data | +| textTable | Text, table | Textual or tabular data is used to represent geographic data | +| tin | TIN | Triangulated irregular network | +| stereoModel | Stereo model | Three-dimensional view formed by the intersecting homologous rays of an overlapping pair of images | +| video | Video | Scene from a video recording | + +### Standard codelists Topic category code (gmd:MD_TopicCategoryCode) {#iso19139-cl-gmd-MD_TopicCategoryCode} + +| code | label | description | +|----------------------------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| farming | Farming | Rearing of animals and/or cultivation of plants. Examples: agriculture, irrigation, aquaculture, plantations, herding, pests and diseases affecting crops and livestock | +| biota | Biota | Flora and/or fauna in natural environment. Examples: wildlife, vegetation, biological sciences, ecology, wilderness, sealife, wetlands, habitat | +| boundaries | Boundaries | Legal land descriptions. Examples: political and administrative boundaries | +| climatologyMeteorologyAtmosphere | Climatology, meteorology, atmosphere | Processes and phenomena of the atmosphere. Examples: cloud cover, weather, climate, atmospheric conditions, climate change, precipitation | +| economy | Economy | Economic activities, conditions and employment. Examples: production, labour, revenue, commerce, industry, tourism and ecotourism, forestry, fisheries, commercial or subsistence hunting, exploration and exploitation of resources such as minerals, oil and gas | +| elevation | Elevation | Height above or below sea level. Examples: altitude, bathymetry, digital elevation models, slope, derived products | +| environment | Environment | Environmental resources, protection and conservation. Examples: environmental pollution, waste storage and treatment, environmental impact assessment, monitoring environmental risk, nature reserves, landscape | +| geoscientificInformation | Geoscientific information | Information pertaining to earth sciences. Examples: geophysical features and processes, geology, minerals, sciences dealing with the composition, structure and origin of the earth s rocks, risks of earthquakes, volcanic activity, landslides, gravity information, soils, permafrost, hydrogeology, erosion | +| health | Health | Health, health services, human ecology, and safety. Examples: disease and illness, factors affecting health, hygiene, substance abuse, mental and physical health, health services | +| imageryBaseMapsEarthCover | Imagery base maps earth cover | Base maps. Examples: land cover, topographic maps, imagery, unclassified images, annotations | +| intelligenceMilitary | Intelligence military | Military bases, structures, activities. Examples: barracks, training grounds, military transportation, information collection | +| inlandWaters | Inland waters | Inland water features, drainage systems and their characteristics. Examples: rivers and glaciers, salt lakes, water utilization plans, dams, currents, floods, water quality, hydrographic charts | +| location | Location | Positional information and services. Examples: addresses, geodetic networks, control points, postal zones and services, place names | +| oceans | Oceans | Features and characteristics of salt water bodies (excluding inland waters). Examples: tides, tidal waves, coastal information, reefs | +| planningCadastre | Planning cadastre | Information used for appropriate actions for future use of the land. Examples: land use maps, zoning maps, cadastral surveys, land ownership | +| society | Society | Characteristics of society and cultures. Examples: settlements, anthropology, archaeology, education, traditional beliefs, manners and customs, demographic data, recreational areas and activities, social impact assessments, crime and justice, census information | +| structure | Structure | Man-made construction. Examples: buildings, museums, churches, factories, housing, monuments, shops, towers | +| transportation | Transportation | Means and aids for conveying persons and/or goods. Examples: roads, airports/airstrips, shipping routes, tunnels, nautical charts, vehicle or vessel location, aeronautical charts, railways | +| utilitiesCommunication | Utilities communication | Energy, water and waste systems and communications infrastructure and services. Examples: hydroelectricity, geothermal, solar and nuclear sources of energy, water purification and distribution, sewage collection and disposal, electricity and gas distribution, data communication, telecommunication, radio, communication networks | + +### Standard codelists Topology Level (gmd:MD_TopologyLevelCode) {#iso19139-cl-gmd-MD_TopologyLevelCode} + +| code | label | description | +|------------------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| geometryOnly | Geometry only | Geometry objects without any additional structure which describes topology | +| topology1D | Topology 1D | 1-dimensional topological complex -- commonly called chain-node topology | +| planarGraph | Planar graph | 1-dimensional topological complex that is planar. (A planar graph is a graph that can be drawn in a plane in such a way that no two edges intersect except at a vertex.) | +| fullPlanarGraph | Full planar graph | 2-dimensional topological complex that is planar. (A 2-dimensional topological complex is commonly called full topology in a cartographic 2D environment.) | +| surfaceGraph | Surface graph | 1-dimensional topological complex that is isomorphic to a subset of a surface. (A geometric complex is isomorphic to a topological complex if their elements are in a one-to-one, dimensional-and boundry-preserving correspondence to one another.) | +| fullSurfaceGraph | Full surface graph | 2-dimensional topological complex that is isomorphic to a subset of a surface | +| topology3D | Topology 3D | 3-dimensional topological complex. (A topological complex is a collection of topological primitives that are closed under the boundary operations.) | +| fullTopology3D | Full topology 3D | Complete coverage of a 3D Euclidean coordinate space | +| abstract | Abstract | Topological complex without any specified geometric realisation | + +### Standard codelists (gmd:MX_ScopeCode) {#iso19139-cl-gmd-MX_ScopeCode} + +| code | label | description | +|----------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| attribute | Attribute | Information applies to the attribute class | +| attributeType | Attribute type | Information applies to the characteristic of a feature | +| collectionHardware | Collection hardware | Information applies to the collection hardware class | +| collectionSession | Collection session | Information applies to the collection session | +| dataset | Dataset | Information applies to the dataset | +| series | Series | Information applies to the series | +| nonGeographicDataset | Non geographic dataset | Information applies to non-geographic data | +| dimensionGroup | Dimension group | Information applies to a dimension group | +| feature | Feature | Information applies to a feature | +| featureType | Feature type | Information applies to a feature type | +| propertyType | Property type | Information applies to a property type | +| fieldSession | Field session | Information applies to a field session | +| software | Software | Information applies to a computer program or routine | +| service | 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 behaviour, such as a use case | +| model | Model | Information applies to a copy or imitation of an existing or hypothetical object | +| tile | Tile | Information applies to a tile, a spatial subset of geographic data | +| initiative | Initiative | The referencing entity applies to a transfer aggregate which was originally identified as an initiative (DS_Initiative) | +| stereomate | Stereo mate | The referencing entity applies to a transfer aggregate which was originally identified as a stereo mate (DS_StereoMate) | +| sensor | Sensor | The referencing entity applies to a transfer aggregate which was originally identified as a sensor (DS_Sensor) | +| platformSeries | Platform series | The referencing entity applies to a transfer aggregate which was originally identified as a platform series (DS_PlatformSeries) | +| sensorSeries | Sensor series | The referencing entity applies to a transfer aggregate which was originally identified as a sensor series (DS_SensorSeries) | +| productionSeries | Production series | The referencing entity applies to a transfer aggregate which was originally identified as a production series (DS_ProductionSeries) | +| transferAggregate | Transfer aggregate | The referencing entity applies to a transfer aggregate which has no existence outside of the transfer context | +| otherAggregate | Other aggregate | The referencing entity applies to a transfer aggregate which has an existence outside of the transfer context, but which does not pertains to a specific aggregate type. | + +### Standard codelists Distributed Computing Platforms list (srv:DCPList) {#iso19139-cl-srv-DCPList} + +| description | code | label | +|--------------------|-------------|--------------| +| DCP is XML | XML | XML | +| DCP is CORBA | CORBA | CORBA | +| DCP is JAVA | JAVA | JAVA | +| DCP is COM | COM | COM | +| DCP is SQL | SQL | SQL | +| DCP is WebServices | WebServices | Web services | + +### Standard codelists Coupling Type (srv:SV_CouplingType) {#iso19139-cl-srv-SV_CouplingType} + +| code | label | description | +|-------|-------|-------------------------------------------------------------------------------| +| tight | Tight | Tightly coupled: data associated | +| mixed | Mixed | Mixed coupled: data associated; in addition, external data might be processed | +| loose | Loose | Loosely coupled: no data associated | + +### Standard codelists Parameter direction (srv:SV_ParameterDirection) {#iso19139-cl-srv-SV_ParameterDirection} + +| code | label | +|--------|--------------| +| in | Input | +| out | Output | +| in/out | Input/output | + +### Standard codelists (SDS_category) {#iso19139-cl-SDS_category} + +| code | label | description | +|------------------------------------------------------------------------|---------------|---------------| +| | harmonised | Harmonised | +| | interoperable | Interoperable | +| | invocable | Invocable | + +### Standard codelists (SDS_DCP) {#iso19139-cl-SDS_DCP} + +| code | label | description | +|-------------|--------------|--------------| +| xml | XML | XML | +| corba | CORBA | CORBA | +| java | JAVA | JAVA | +| com | COM | COM | +| sql | SQL | SQL | +| webServices | Web Services | Web Services | + +### Standard codelists Nil reason (gco:nilReason) {#iso19139-cl-gco-nilReason} + +| code | label | +|--------------|--------------| +| missing | Missing | +| inapplicable | Inapplicable | +| template | Template | +| unknown | Unknown | +| withheld | Withheld | + +### Standard codelists Indeterminate position (indeterminatePosition) {#iso19139-cl-indeterminatePosition} + +| code | label | +|---------|---------| +| after | After | +| before | Before | +| now | Now | +| unknown | Unknown | diff --git a/docs/manual/docs/api/csw.md b/docs/manual/docs/api/csw.md new file mode 100644 index 0000000000..87c95198a2 --- /dev/null +++ b/docs/manual/docs/api/csw.md @@ -0,0 +1,71 @@ +# Catalog Service for the Web (CSW) {#csw-api} + +The CSW end point exposes the metadata records in your catalog in XML format using the OGC CSW protocol (version 2.0.2). + +Two protocols are available: + +- CSW: Provides the ability to search and publish metadata for data, services and related information. +- CSW-T: Provides an interface for creating, modifying and deleting catalog records via the CSW protocol. + +## Configuration + +See [Configuring CSW](../administrator-guide/configuring-the-catalog/csw-configuration.md) for details of how to configure the CSW end point. + +## URL + +The following URL is the standard end point for the catalog (substitute your GeoNetwork URL): + +- ? + +Generally, the `VERSION` and `SERVICE` parameter are also added, along with the `REQUEST` parameter as detailed below: + +- + +## Requests + +The full set of requests supported by GeoNetwork can be found in `CSW test`, in the `Settings` section of the Admin Dashboard. + +See [Configuring CSW](../administrator-guide/configuring-the-catalog/csw-configuration.md) for more details of this function. + +When using the GetRecords operation for searching, 2 types of parameter can be use for searching: + +- The list of queryable listed in the GetCapabilities document +- The fields in the index + +Example of a request using a standard queryable: + +``` xml + + + + + + OnlineResourceType + OGC:WFS-1.1.0-http-get-feature + + + + + +``` + +Example of a request using an index field name: + +``` xml + + + + + + linkProtocol + OGC:WMS + + + + + +``` + +The mapping between CSW standard queryable and the index fields are defined in **`web/src/main/webapp/WEB-INF/config-csw.xml`**. diff --git a/docs/manual/docs/api/img/googlesheets-fn.png b/docs/manual/docs/api/img/googlesheets-fn.png new file mode 100644 index 0000000000..b73d2347c4 Binary files /dev/null and b/docs/manual/docs/api/img/googlesheets-fn.png differ diff --git a/docs/manual/docs/api/img/googlesheets-script.png b/docs/manual/docs/api/img/googlesheets-script.png new file mode 100644 index 0000000000..6d7fe0ea99 Binary files /dev/null and b/docs/manual/docs/api/img/googlesheets-script.png differ diff --git a/docs/manual/docs/api/img/opensearch-in-browser.png b/docs/manual/docs/api/img/opensearch-in-browser.png new file mode 100644 index 0000000000..e9669c94c8 Binary files /dev/null and b/docs/manual/docs/api/img/opensearch-in-browser.png differ diff --git a/docs/manual/docs/api/img/opensearch.png b/docs/manual/docs/api/img/opensearch.png new file mode 100644 index 0000000000..1a7811af27 Binary files /dev/null and b/docs/manual/docs/api/img/opensearch.png differ diff --git a/docs/manual/docs/api/index.md b/docs/manual/docs/api/index.md new file mode 100644 index 0000000000..3f1424bac1 --- /dev/null +++ b/docs/manual/docs/api/index.md @@ -0,0 +1,25 @@ +# API Guide + +The API guide describes entry points that can be used to interact with the catalog. + +- [GeoNetwork API](the-geonetwork-api.md) + + The GeoNetwork API allows to manage all the catalog (eg. users, groups, editing, formatter, processing). + +- [Search Service](search.md) + + The main GeoNetwork search service for fast and flexible record retrieval. + +- [Catalog Service for the Web](csw.md) + + The OGC Industry standard to search, retrieve record in XML format. Can be used to manage records with transaction operation. + +GeoNetwork 3.12.x only: + +- [OpenSearch and INSPIRE ATOM](opensearch.md) +- [RDF DCAT](rdf-dcat.md) +- [Open Archive Initiative](oai-pmh.md) + +No longer supported: + +- [Z39-50](z39-50.md) diff --git a/docs/manual/docs/api/oai-pmh.md b/docs/manual/docs/api/oai-pmh.md new file mode 100644 index 0000000000..b18419bb7c --- /dev/null +++ b/docs/manual/docs/api/oai-pmh.md @@ -0,0 +1,25 @@ +# Open Archive Initiative (OAI) {#oai-pmh} + +!!! warning + + Not yet available in version 4. + + +The OAI-PMH end point exposes the metadata records in your catalog in XML format using the version 2.0 of the OAI-PMH protocol. + +## Configuration + +The following URL is the standard end point for the catalog (substitute your GeoNetwork URL): ? + +## Requests + +Standard OAI-PMH requests can be done using the url above and the 6 verbs provided by the standard: + +- GetRecord +- Identify +- ListIdentifiers +- ListMetadataFormats +- ListRecords +- ListSets + +Please see for further details. diff --git a/docs/manual/docs/api/opensearch.md b/docs/manual/docs/api/opensearch.md new file mode 100644 index 0000000000..1f2ba6a599 --- /dev/null +++ b/docs/manual/docs/api/opensearch.md @@ -0,0 +1,44 @@ +# OpenSearch and INSPIRE ATOM {#opensearch-and-atom} + +!!! warning + + Not yet available in version 4. + + +## OpenSearch + +The catalog provides an opensearch entry point at . This service is advertised in the HTML. + +![](img/opensearch.png) + +Browsers detect the availability of opensearch by checking the index page at the root of the (sub)domain. If you install geonetwork in a subfolder, consider to set up a rewrite rule forwarding the index request to the subfolder. + +An example of such a rewrite rule in Apache: + +``` text +RewriteEngine on +RewriteRule "^/$" "/geonetwork/" [R] +``` + +Verify in a browser if opensearch is detected by typing the url and then a space. The url bar should then give an indication that you're searching within the site. + +![](img/opensearch-in-browser.png){width="300px"} + +## INSPIRE ATOM + +The INSPIRE technical guideline for download services facilitates an option to set up a download service based on OpenSearch and Atom. A separate OpenSearch endpoint is created for every Atom-based download service. + +!!! note + + Only records based on the ISO19139 standard can be used with Atom. ISO19115-3 records are not. + + +A remote ATOM feed can be registered in a metadata record (see [Linking data using ATOM feeds](../user-guide/associating-resources/linking-online-resources.md#linking-data-using-atom-feed)), but the catalog can also create ATOM feeds from records describing datasets and services. + +For a service metadata record, the corresponding ATOM feed is accessed at: `http://localhost:8080/geonetwork/srv/atom/describe/service?uuid=8b719ebd-646e-4963-b9e0-16b3c2a6d94e`. If the service is attached to one or more datasets (see [Linking a dataset with a service](../user-guide/associating-resources/linking-dataset-or-service.md)), then the feed will also expose each dataset as an `entry` in the feed. Check that the service type is set to `download` (if not, the dataset feed will return an exception). + +The dataset feed is accessible at: `http://localhost:8080/geonetwork/srv/atom/describe/dataset?spatial_dataset_identifier_code=b795de68-726c-4bdf-a62a-a42686aa5b6f`. Links will be created for each online resource flagged with a `function` set to `download`. + +Examples: + +- diff --git a/docs/manual/docs/api/rdf-dcat.md b/docs/manual/docs/api/rdf-dcat.md new file mode 100644 index 0000000000..eb5e8ded40 --- /dev/null +++ b/docs/manual/docs/api/rdf-dcat.md @@ -0,0 +1,19 @@ +# RDF DCAT end point {#rdf-dcat} + +!!! warning + + Not yet available in version 4. + + +The RDF DCAT end point provides a way of getting information about the catalog, the datasets and services, and links to distributed resources in a machine-readable format. The formats of the output are based on DCAT, an RDF vocabulary that is designed to facilitate interoperability between web-based data catalogs. + +## URLS + +The following URLs are available (substitute your GeoNetwork URL): + +- : returns an RDF record for the given UUID +- ?: returns a dcat:Catalog record. By default this will describe all the records in the catalog, but query filters are available (see below) + +## Query parameters + +- `_cat`: Metadata Category diff --git a/docs/manual/docs/api/search.md b/docs/manual/docs/api/search.md new file mode 100644 index 0000000000..10f0a3844d --- /dev/null +++ b/docs/manual/docs/api/search.md @@ -0,0 +1,109 @@ +# Search Service {#q-search} + +## OpenAPI Search + +!!! note + + GeoNetwork 4 + + +The Q Search endpoint is replaced by the ``/srv/api/search/records/_search`` endpoint. + +Parameter Reference: + +- [Serach API](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html) (Elasticsearch) + +## Q Search + +!!! note + + GeoNetwork 3 + + +The Q Search endpoint allows you to query the catalog programmatically. It is available in the local catalog at `http://localhost:8080/geonetwork/srv/eng/q` (otherwise substitute your catalog URL). + +### Query results parameters + +The following parameters can be appended to your request to format the results: + +- `_content_type=json`: returns results in json format. If this parameter is not provided, then the results are returned in xml format. +- `sortBy`: sorts the results by different criteria (example: `sortBy=relevance`): + - `relevance` (default sorting method if not provided) + - `title` (metadata title) + - `changeDate` (metadata datestamp) + - `rating` + - `popularity` + - `denominatorDesc` + - `denominatorAsc` +- `sortOrder=reverse`: Used to sort alphabetically. Note this will sort in **ASCENDING** order (eg A - Z) +- `from`, `to`: Used to return a subset of the results, usually for pagination (example: `from=1&to=20`) +- `fast`: Used to indicate the information to return. Possible values: + - `index`: returns the metadata information from the Lucene index (a subset of the information). In most cases this is the best option as the retrieval of information from the Lucene index is very fast. + + The fields returned are configured in the `dumpFields` section in + + - `false`: returns the raw (full) metadata. This is slower as it will retrieve every metadata attribute from the database. If this parameter is not provided, it returns a minimal set of information for each record: uuid, internal id, metadata schema, create/change dates +- `buildSummary`: Returns a summary element with search facets that can be used to filter the metadata, typically used to provide quick filters (facets) on the search results page. Values: + - `true` (default, if the parameter is not provided). + - `false`: does not return the summary. +- `summaryOnly`: Returns the summary (depending on the value of the parameter `buildSummary`) and results. Values: + - `0` (default, if the parameter is not provided). + - Any other value returns the summary only. +- `resultType`: type of summary to return. Summaries are configured in the `summaryTypes` section in + - `hits` (default value if not provided), returns the fields configured in the `hits` section in + - `details` (recommended value to send), returns the fields configured in the `details` section in +- `extraDumpFields`: a comma-separated list of additional fields that you wish to return alongside the fields returned according to the resultType you have chosen. The wildcard character `*` can be used to match multiple fields. For example `extraDumpFields=mycustomfield*` would match mycustomfield1 and mycustomfield2. +- Other values in the summaries section are allowed + +### Query filter parameters + +You can search on any field(s) indexed in Lucene. For a complete reference see + +Note you can query the Lucene index graphically,using a Java-based graphical tool such as [Luke](https://github.com/DmitryKey/luke). Version [4.10.4](https://github.com/DmitryKey/luke/releases/tag/luke-4.10.4.1/) is required to work with the version of Lucene bundled with GeoNetwork. Download the jar file where you can access the GeoNetwork index files, then execute with: + +`java -jar luke-with-deps.jar` + +Then follow the instructions in the tool. + +Most relevant fields: + +- `any`: A special Lucene field that indexes all the text content in the metadata. Example: + +There are some additional query fields, that use the content from the Lucene field `any`. + +- `or`: extract the tokens of the query parameter to return the results that contain at least 1 of the tokens +- `without`: extract the tokens of the query parameter to return the results that don't contain any of the tokens. +- `phrase`: return the results that contain the exact text as provided in the search query parameter. +- `title`: metadata title. +- `abstract`: metadata abstract. +- `topicCat`: metadata topic categories. +- `keyword`: metadata keywords. +- `type`: hierarchyLevel (dataset, service, etc.) + +If several tokens are included in the query, an AND query with all the tokens is executed. For example, `title=roads&topicCat=biota`. This query will return the results that contain roads in the title AND have the topic category biota. + +An OR query of several fields can be executed using the format: `field1_OR_field2_OR_... =value`. For example, `title_OR_abstract=roads` returns the metadata that contain roads in the title OR the abstract. + +Additionally an OR query of several values for a single field can be executed, if the Lucene configuration for that field allows it, with the following format: `field=value1 or value2 or ...` For example `topicCat=biota or farming`, returns the metadata where the topic category is either biota OR farming. If the query was executed as `topicCat=biota&topicCat=farming` then only the metadata with BOTH topic categories would be returned. + +### Date Searches + +There are a number of ways that you can search by date. Date searches should be of the form YYYY-MM-DD + +- dateFrom/dateTo: uses the changeDate parameter in the index. +- creationDateFrom/To: uses the creation date. +- revisionDateFrom/To: uses the revision date. + +### Query examples + +Query with any field for metadata containing the string 'infrastructure', returning json, using the fast index to return results, and returning the fields configured in `config-summary.xml`: + + + +Query datasets with title containing the string 'infrastructure', returning json, using the fast index to return results, returning the fields configured in `config-summary.xml` and returning only the first 20 results (ordered by relevance): + + + +Query datasets with a revision date in June 2019 using the fast index to return results, returning the fields configured in `config-summary.xml` and returning only the first 20 results (ordered by relevance): + + diff --git a/docs/manual/docs/api/the-geonetwork-api.md b/docs/manual/docs/api/the-geonetwork-api.md new file mode 100644 index 0000000000..1c0540fac7 --- /dev/null +++ b/docs/manual/docs/api/the-geonetwork-api.md @@ -0,0 +1,397 @@ +# GeoNetwork API + +The REST API and documentation are available in your catalog at page and linked from the footer on the home page. + +In version 4, the API description is using OpenAPI specification. Old path to the API including the version ``/srv/api/0.1/\...`` is replaced by ``/srv/api/\...``. The version of the API correspond to the version of the GeoNetwork instance. + +## Using the API to apply an XSL process + +This is an example to trigger an XSL process on a set of records. It illustrates how to make a set of actions using the API: + +``` shell +CATALOG=http://localhost:8080/geonetwork +CATALOGUSER=admin +CATALOGPASS=admin +PROCESS=migrate-201904 + +rm -f /tmp/cookie; +curl -s -c /tmp/cookie -o /dev/null \ + -X GET \ + -H "Accept: application/json" \ + "$CATALOG/srv/api/me"; +TOKEN=`grep XSRF-TOKEN /tmp/cookie | cut -f 7`; +curl \ + -X GET \ + -H "Accept: application/json" \ + -H "X-XSRF-TOKEN: $TOKEN" --user $CATALOGUSER:$CATALOGPASS -b /tmp/cookie \ + "$CATALOG/srv/api/me" + +# MUST return user details + +curl -X POST "$CATALOG/srv/api/search/records/_search?bucket=111" \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json;charset=utf-8' \ + -H "X-XSRF-TOKEN: $TOKEN" -c /tmp/cookie -b /tmp/cookie --user $CATALOGUSER:$CATALOGPASS \ + -d '{"from":0,"size":0,"query":{"query_string":{"query":"+linkUrl:*data-and-maps*"}}}' + + +curl -X PUT "$CATALOG/srv/api/selections/111" -H "accept: application/json" \ + -H "X-XSRF-TOKEN: $TOKEN" -c /tmp/cookie -b /tmp/cookie --user $CATALOGUSER:$CATALOGPASS +#Body response = number of selected records + +curl -X GET "$CATALOG/srv/api/selections/111" -H "accept: application/json" \ + -H "X-XSRF-TOKEN: $TOKEN" -c /tmp/cookie -b /tmp/cookie --user $CATALOGUSER:$CATALOGPASS +#Body returns an array of selected records + +curl -X POST "$CATALOG/srv/api/processes/$PROCESS?bucket=111&index=false" \ + -H "accept: application/json" -H "X-XSRF-TOKEN: $TOKEN" -c /tmp/cookie -b /tmp/cookie --user $CATALOGUSER:$CATALOGPASS +``` + +## Loop on search results and apply changes (processing and batch editing) + +This is an example to highlight how to loop over specific search results (here only series) and apply various changes: + +``` shell +SERVER=http://localhost:8080/geonetwork +CATALOGUSER=admin +CATALOGPASS=admin + +type=series +from=0 +size=1000 + +rm results.json +rm -f /tmp/cookie; + +curl -s -c /tmp/cookie -o /dev/null \ + -X GET \ + --user $CATALOGUSER:$CATALOGPASS \ + -H "Accept: application/json" \ + "$SERVER/srv/api/me"; + +TOKEN=`grep XSRF-TOKEN /tmp/cookie | cut -f 7`; +JSESSIONID=`grep JSESSIONID /tmp/cookie | cut -f 7`; + +curl "$SERVER/srv/api/search/records/_search" \ + -X 'POST' \ + -H 'Accept: application/json, text/plain, */*' \ + -H 'Content-Type: application/json;charset=UTF-8' \ + --data-raw "{\"query\":{\"query_string\":{\"query\": \"+isHarvested:false +resourceType: $type\"}},\"from\":$from, \"size\":$size, \"_source\": {\"include\": [\"resourceTitleObject.default\"]}, \"sort\": [{\"resourceTitleObject.default.keyword\": \"asc\"}]}" \ + -H "X-XSRF-TOKEN: $TOKEN" -H "Cookie: XSRF-TOKEN=$TOKEN; JSESSIONID=$JSESSIONID" \ + --compressed \ + -o results.json + +for hit in $(jq -r '.hits.hits[] | @base64' results.json); do + _jq() { + echo "${hit}" | base64 --decode | jq -r "${1}" + } + + title=$(_jq '._source.resourceTitleObject.default') + uuid=$(_jq '._id') + echo "__________" + echo "### $uuid" + + # Update series from its members using XSL process + curl $AUTH "$SERVER/srv/api/records/$uuid/processes/collection-updater" \ + -X 'POST' \ + -H 'Accept: application/json, text/plain, */*' \ + -H "X-XSRF-TOKEN: $TOKEN" \ + -H "Cookie: XSRF-TOKEN=$TOKEN; JSESSIONID=$JSESSIONID" \ + --compressed + + curl $AUTH "$SERVER/srv/api/selections/s101" \ + -X 'DELETE' \ + -H 'Accept: application/json, text/javascript, */*; q=0.01' \ + -H "X-XSRF-TOKEN: $TOKEN" \ + -H "Cookie: XSRF-TOKEN=$TOKEN; JSESSIONID=$JSESSIONID" \ + --compressed + + curl $AUTH "$SERVER/srv/api/selections/s101?uuid=$uuid" \ + -X 'PUT' \ + -H 'Accept: application/json, text/javascript, */*; q=0.01' \ + -H "X-XSRF-TOKEN: $TOKEN" \ + -H "Cookie: XSRF-TOKEN=$TOKEN; JSESSIONID=$JSESSIONID" \ + --compressed + + # Keep only the first 2 resource identifiers using batch editing + curl $AUTH "$SERVER/srv/api/records/batchediting?bucket=s101" \ + -X 'PUT' \ + -H 'Accept: application/json, text/plain, */*' \ + -H 'Content-Type: application/json;charset=UTF-8' \ + -H "X-XSRF-TOKEN: $TOKEN" \ + -H "Cookie: XSRF-TOKEN=$TOKEN; JSESSIONID=$JSESSIONID" \ + --data-raw "[{\"xpath\":\"/gmd:identificationInfo/*/gmd:citation/*/gmd:identifier[position() > 2]\",\"value\":\"\"}]" \ + --compressed +done; +``` + +## Using the search API in Google sheet + +In Extensions --> App script create a new function. Here we create a function which run a search and return a list of matching UUIDs: + +![](img/googlesheets-script.png) + +``` js +function getUuidForSearch(query) { + var options = { + 'method' : 'post', + 'contentType': 'application/json', + 'payload' : "{\"query\":{\"query_string\":{\"query\":\"" + query + "\"}}}" + }; + var response = UrlFetchApp.fetch('http://localhost:8080/catalogue/srv/api/search/records/_search', options); + var hits = JSON.parse(response).hits; + Logger.log(hits.hits); + return hits.hits.length > 0 ? hits.hits.map(function(v) {return v._id}).join('###') : null; +} +``` + +Then use the function in formula. Here we search for records matching particular keywords: + +![](img/googlesheets-fn.png) + +## Building client for the API using codegen + +The API is described using the open API specification. [Codegen](https://swagger.io/swagger-codegen/) is a tool to build an API client based on the specification. To build a Java client use the following procedure. + +First, create a configuration file apiconfig.json for the API: + +``` json +{ + "groupId":"org.geonetwork-opensource", + "artifactId":"OpenApiClient", + "artifactVersion":"0.0.1", + "library":"okhttp-gson", + "apiPackage":"org.fao.geonet.openapi", + "modelPackage":"org.fao.geonet.openapi.model" +} +``` + +``` shell +java -jar swagger-codegen-cli.jar generate \ + -i http://localhost:8080/geonetwork/srv/v2/api-docs \ + -l java \ + -c apiconfig.json \ + -o /tmp/gn-openapi-java-client + +cd /tmp/gn-openapi-java-client + +mvn clean install +``` + +Once compiled, the Java client can be used as a dependency; eg. for Maven: + +``` xml + + org.geonetwork-opensource + OpenApiClient + 0.0.1 + +``` + +Then the client API can be used in your Java application: + +``` java +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; +import org.fao.geonet.ApiClient; +import org.fao.geonet.ApiException; +import org.fao.geonet.Configuration; +import org.fao.geonet.openapi.MeApi; +import org.fao.geonet.openapi.RecordsApi; +import org.fao.geonet.openapi.model.MeResponse; +import org.fao.geonet.openapi.model.SimpleMetadataProcessingReport; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Base64; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class GnJavaApiClientTest { + + private static final String CATALOGUE_URL = "http://localhost:8080/geonetwork"; + + ApiClient client; + + private static final String USERNAME = "admin"; + private static final String PASSWORD = "admin"; + + + @BeforeAll + private void initConfiguration() { + client + = Configuration.getDefaultApiClient(); + client.setBasePath(CATALOGUE_URL); + } + + /** + * Get user information when anonymous or connected. + */ + @Test + public void getMeInfoTest() { + try { + client.getHttpClient().networkInterceptors().clear(); + + MeApi meApi = new MeApi(); + MeResponse meResponse = meApi.getMe(); + // User is not authenticated + assertEquals(null, meResponse); + + // Configure HTTP basic authorization: basicAuth + client.getHttpClient().networkInterceptors().add(new BasicAuthInterceptor(USERNAME, PASSWORD)); + + meResponse = meApi.getMe(); + // User is authenticated + assertEquals(USERNAME, meResponse.getName()); + + } catch (ApiException e) { + e.printStackTrace(); + } + } + + + /** + * Insert and delete a record. + */ + @Test + public void insertAndDeleteRecord() { + + // Configure HTTP basic authorization: basicAuth + client.getHttpClient().networkInterceptors().add(new BasicAuthInterceptor(USERNAME, PASSWORD)); + + + try { + final RecordsApi api = new RecordsApi(); + + SimpleMetadataProcessingReport report = api.insert("METADATA", + null, + Arrays.asList(new String[]{"http://sextant.ifremer.fr/geonetwork/srv/fre/xml.metadata.get?uuid=ec41b8b2-c184-46e7-86c6-a24f0ac295ad"}), + null, null, + true, "NOTHING", + null, + null, + false, + null, + null, + null); + + int nbOfRecordInserted = report.getMetadataInfos().size(); + + + // One record MUST be inserted + assertEquals(1, nbOfRecordInserted); + + if (nbOfRecordInserted == 1) { + Object[] list = report.getMetadataInfos().keySet().toArray(); + String metadataId = (String) list[0]; + String record = api.getRecord(metadataId, "application/xml"); + assertNotNull(record); + + api.deleteRecord(metadataId, false); + + try { + api.getRecord(metadataId, "application/xml"); + } catch (ApiException e) { + assertEquals(404, e.getCode()); + } + } + } catch (ApiException e) { + e.printStackTrace(); + } + } + + + /** + * Interceptor to add basic authentication header on each request. + *

+ * TODO: How-to make generated client taking care of setting BA from swagger config. + * TODO: Add support for CSRF token. + */ + public class BasicAuthInterceptor implements Interceptor { + String username; + String password; + + public BasicAuthInterceptor(String username, String password) { + this.username = username; + this.password = password; + } + + @Override + public Response intercept(Interceptor.Chain chain) throws IOException { + byte[] auth = Base64.getEncoder() + .encode((username + ":" + password).getBytes()); + + Request compressedRequest = chain.request().newBuilder() + .header("Authorization", "Basic " + new String(auth)) + .build(); + + return chain.proceed(compressedRequest); + } + } +} +``` + +## Connecting to the API with python + +This is an example of how to use requests in python to authenticate to the API and generate an XRSF token. + +``` python +import requests + +# Set up your username and password: +username = 'username' +password = 'password' + +# Set up your server and the authentication URL: +server = "http://localhost:8080" +authenticate_url = server + '/geonetwork/srv/eng/info?type=me' + +# To generate the XRSF token, send a post request to the following URL: http://localhost:8080/geonetwork/srv/eng/info?type=me +session = requests.Session() +response = session.post(authenticate_url) + +# Extract XRSF token +xsrf_token = response.cookies.get("XSRF-TOKEN") +if xsrf_token: + print ("The XSRF Token is:", xsrf_token) +else: + print("Unable to find the XSRF token") + +# You can now use the username and password, along with the XRSF token to send requests to the API. + +# This example will add an online resource to a specified UUID using the http://localhost:8080/geonetwork/srv/api/records/batchediting endpoint + +# Set header for connection +headers = {'Accept': 'application/json', +'X-XSRF-TOKEN': xsrf_token +} + +# Set the parameters +params = {'uuids': 'the uuid to be updated', +'bucket': 'bucketname', +'updateDateStamp': 'true', +} + +# Set the JSON data: note that the value must have one of , , or +json_data = [{'condition': '', +'value': 'https://localhostWWW:LINK-1.0-http--linkThe Title of the URLThe description of the resource', +'xpath': '/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions', +}, +] + +# Send a put request to the endpoint +response = session.put(server + 'geonetwork/srv/api/records/batchediting', +params=params, +auth = (username, password), +headers=headers, +json=json_data, +) + +print(response.text) +``` diff --git a/docs/manual/docs/api/z39-50.md b/docs/manual/docs/api/z39-50.md new file mode 100644 index 0000000000..7c3260cb46 --- /dev/null +++ b/docs/manual/docs/api/z39-50.md @@ -0,0 +1,6 @@ +# Z39-50 + +!!! warning + + Deprecated since version 4.0.0. + diff --git a/docs/manual/docs/contributing/doing-a-release.md b/docs/manual/docs/contributing/doing-a-release.md new file mode 100644 index 0000000000..471cfd99ef --- /dev/null +++ b/docs/manual/docs/contributing/doing-a-release.md @@ -0,0 +1,208 @@ +# Doing a GeoNetwork release {#doing-a-release} + +This section documents the steps followed by the development team to do a new release. + +Once the release branch has been thoroughly tested and is stable a release can be made. + +1. Prepare the release + + ``` shell + # Setup properties + frombranch=origin/main + versionbranch=4.2.x + version=4.2.3 + minorversion=0 + newversion=$version-$minorversion + currentversion=4.2.3-SNAPSHOT + previousversion=4.2.2 + nextversion=4.2.4-SNAPSHOT + nextMajorVersion=4.4.0-SNAPSHOT + + + # Get the branch + git clone --recursive https://github.com/geonetwork/core-geonetwork.git \ + geonetwork-$versionbranch + cd geonetwork-$versionbranch + + + # Create or move to the branch for the version + # Create it if it does not exist yet + git checkout -b $versionbranch $frombranch + # or move into it if it exist + # git checkout $versionbranch + # or stay in main branch if the release is on main + + + # Update version number (in pom.xml, installer config and SQL) + ./update-version.sh $currentversion $newversion + + # Generate list of changes + cat < docs/changes$newversion.txt + ================================================================================ + === + === GeoNetwork $version: List of changes + === + ================================================================================ + EOF + git log --pretty='format:- %s' $previousversion... >> docs/changes$newversion.txt + ``` + +2. Commit & tag the new version + + ``` shell + # Then commit the new version + git add . + git commit -m "Update version to $newversion" + + # Create the release tag + git tag -a $version -m "Tag for $version release" + ``` + +3. Build + + ``` shell + # Build the new release + mvn clean install -DskipTests -Pwar -Pwro4j-prebuild-cache + + + # Download Jetty and create the installer + cd release + mvn clean install -Djetty-download + ant + + + # Deploy to osgeo repository (requires credentials in ~/.m2/settings.xml) + mvn deploy + ``` + +4. Test + + ``` shell + cd target/GeoNetwork-$newversion + unzip geonetwork-bundle-$newversion.zip -d geonetwork-bundle-$newversion + cd geonetwork-bundle-$newversion/bin + ./startup.sh -f + ``` + +5. Set the next version + + ``` shell + # Set version number to SNAPSHOT + ./update-version.sh $newversion $nextversion + + # Add SQL migration step for the next version + mkdir web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/v424 + cat < web/src/main/webapp/WEB-INF/classes/setup/sql/migrate/v424/migrate-default.sql + UPDATE Settings SET value='4.2.4' WHERE name='system/platform/version'; + UPDATE Settings SET value='SNAPSHOT' WHERE name='system/platform/subVersion'; + EOF + vi web/src/main/webResources/WEB-INF/config-db/database_migration.xml + ``` + + In `WEB-INF/config-db/database_migration.xml` add an entry for the new version in the 2 steps: + + ``` xml + + + WEB-INF/classes/setup/sql/migrate/v3122/migrate- + + + ``` + + ``` shell + git add . + git commit -m "Update version to $nextversion" + ``` + +6. Publishing + + ``` shell + # Push the branch and tag + git push origin $versionbranch + git push origin $version + ``` + +7. Generate checksum files + + - If using Linux: + + ``` shell + cd web/target && md5sum geonetwork.war > geonetwork.war.md5 && cd ../.. + cd release/target/GeoNetwork-$version && md5sum geonetwork-bundle-$newversion.zip > geonetwork-bundle-$newversion.zip.md5 && cd ../../.. + ``` + + - If using Mac OS X: + + ``` shell + md5 -r web/target/geonetwork.war > web/target/geonetwork.war.md5 + md5 -r release/target/GeoNetwork-$newversion/geonetwork-bundle-$newversion.zip > release/target/GeoNetwork-$newversion/geonetwork-bundle-$newversion.zip.md5 + ``` + + On sourceforge first: + + ``` shell + sftp $sourceforge_username,geonetwork@frs.sourceforge.net + # For stable release + cd /home/frs/project/g/ge/geonetwork/GeoNetwork_opensource + # or for RC release + cd /home/frs/project/g/ge/geonetwork/GeoNetwork_unstable_development_versions/ + mkdir v3.12.1 + cd v3.12.1 + put docs/changes3.12.1-0.txt + put release/target/GeoNetwork*/geonetwork-bundle*.zip* + put web/target/geonetwork.war* + bye + ``` + +8. Update or add the changelog in the documentation . + +9. Close the milestone on github with link to sourceforge download. + + Publish the release on github . + + Update the website links . + + - Add the changes file for the release to + - List the previous file in + - Update the version: + - Update the download link: + - Add the section for the new release: + + Send an email to the mailing lists. + +10. Merge in depending branches + + If a major version, then master version has to be updated to the next one (eg. if 3.8.0, then 3.7.x is 3.9.x). + + ``` shell + # Create it if it does not exist yet + git checkout master + ./update-version.sh $currentversion $nextMajorVersion + ``` + + In the following folder `web/src/main/webapp/WEB-INF/classes/setup/sql/migrate` create `v370` folder. + + In this folder create a `migrate-default.sql` with the following content: + + ``` sql + UPDATE Settings SET value='3.7.0' WHERE name='system/platform/version'; + UPDATE Settings SET value='SNAPSHOT' WHERE name='system/platform/subVersion'; + ``` + + In `web/src/main/webResources/WEB-INF/config-db/database_migration.xml` add the following for the migration to call the migration script: + + ``` xml + + + WEB-INF/classes/setup/sql/migrate/v370/migrate- + + + ``` + + Commit the new version + + ``` shell + git add . + git commit -m "Update version to $nextMajorVersion" + git push origin master + ``` diff --git a/docs/manual/docs/contributing/img/transifex.png b/docs/manual/docs/contributing/img/transifex.png new file mode 100644 index 0000000000..4dfca1b6e6 Binary files /dev/null and b/docs/manual/docs/contributing/img/transifex.png differ diff --git a/docs/manual/docs/contributing/index.md b/docs/manual/docs/contributing/index.md new file mode 100644 index 0000000000..ad0752b6d9 --- /dev/null +++ b/docs/manual/docs/contributing/index.md @@ -0,0 +1,7 @@ +# Contributing guide + +The guide for people who want to contribute to GeoNetwork. + +- [Translating the application](translating.md) +- [Making a pull request](making-a-pull-request.md) +- [Doing a GeoNetwork release](doing-a-release.md) diff --git a/docs/manual/docs/contributing/making-a-pull-request.md b/docs/manual/docs/contributing/making-a-pull-request.md new file mode 100644 index 0000000000..2a1adaaa7f --- /dev/null +++ b/docs/manual/docs/contributing/making-a-pull-request.md @@ -0,0 +1,49 @@ +# Making a pull request + +GeoNetwork uses a pull-request workflow allowing changes to be managed and reviewed. All work is done on branches and merged back. When developing start with the branch you want changed, create a new feature branch from there, make your changes on the feature branch, publish your feature branch to your GitHub repo, make a Pull Request asking your changes to be reviewed and merged. + +Occasionally core GeoNetwork developers will setup a feature branch on upstream to explore a specific topic. These shared feature-branch are subject to review when submitted as a pull-request against `master`. + +There are many great guides (See the links above) but here is a quick sequence illustrating how to make a change and commit the change. + +``` shell +$ git checkout master + # master is the 'trunk' and main development branch + # the checkout command "checks out" the requested branch + +$ git checkout -b myfeature + # the -b requests that the branch be created + # ``git branch`` will list all the branches you have checked out locally at some point + # ``git branch -a`` will list all branches in repository (checked out or not) + +# work work work + +$ git status + # See what files have been modified or added + +$ git add + # Add all files to be committed ``git add -u`` will add all modified (but not untracked) + +$ git commit -m "" + # Commit often. it is VERY fast to commit + # NOTE: doing a commit is a local operation. It does not push the change to Github + +# more work +# another commit + +$ git push origin myfeature + + # this pushed your new branch to Github + # now you are ready to make a Pull Request to get the new feature added to GeoNetwork + +# revise pull request based on review feedback +# another commit +# another push to update pull request +# Success!! +``` + +GeoNetwork uses git submodules in order to keep track of externals dependencies. It is necessary to init and update them after a branch change: + +``` shell +git submodule update --init +``` diff --git a/docs/manual/docs/contributing/translating.md b/docs/manual/docs/contributing/translating.md new file mode 100644 index 0000000000..388b5096a5 --- /dev/null +++ b/docs/manual/docs/contributing/translating.md @@ -0,0 +1,75 @@ +# Translating the application {#translating} + +To translate the client interface, go on [GeoNetwork on Transifex](https://www.transifex.com/geonetwork/core-geonetwork/). Only the reference language (ie. en) MUST be updated on github. All other translations MUST be on Transifex. + +Main files to translate are the `Angular UI` ones: + +![](img/transifex.png) + +Once translated, the new language needs to be added to the application. + +- Add the files to the client application in `web-ui/src/main/resources/catalog/locales` +- Register the new lang in `web-ui/src/main/resources/catalog/js/CatController.js` + +``` js +// Add the language here +module.constant('gnLangs', { + langs: { + 'eng': 'en', + 'dut': 'du', + 'fre': 'fr', + 'ger': 'ge', + 'kor': 'ko', + 'spa': 'es', + 'cze': 'cz' + }, + + +// Lang names to be displayed in language selector +$scope.langLabels = {'eng': 'English', 'dut': 'Nederlands', + 'fre': 'Français', 'ger': 'Deutsch', 'kor': '한국의', + 'spa': 'Español', 'cze': 'Czech'}; +``` + +To automatically retrieve and update translations files, the script `web-ui/download-from-transifex.sh` can be used. To use the script you have to join the translation team on Transifex. + +Register the new lang in the l variable of the transifex synchronization file: + +``` shell +SRC_DIR=src/main/resources/catalog/locales + +l=( + 'es::es' + 'fr::fr' + 'cz::cz' +``` + +and run the script + +``` shell +cd web-ui +./download-from-transifex.sh +``` + +Then on the Java application, register the new language in `src/main/webResources/WEB-INF/config-spring-geonetwork.xml`: + +``` xml + + ara + cze +``` + +Add a new SQL file for the database initialization in `src/main/webapp/WEB-INF/classes/setup/sql/data/loc-cze-default.sql` and update translations. This file is used to register the new language for database entity translations (eg. groups, status). + +In `src/main/webResources/WEB-INF/config-db/initial_data.xml`, register the new SQL file: + +``` xml + + + + +``` + +# Translating a standard + +To translate a standard, see the schema folder (`schemas/iso19139/src/main/plugin/iso19139/loc`). Those files are used in the editor and formatters to translate standard elements, to provide help text, recommended values list, \... diff --git a/docs/manual/docs/customizing-application/adding-static-pages.md b/docs/manual/docs/customizing-application/adding-static-pages.md new file mode 100644 index 0000000000..d1c31a506f --- /dev/null +++ b/docs/manual/docs/customizing-application/adding-static-pages.md @@ -0,0 +1,117 @@ +# Adding static pages + +This feature allows to store the HTML content for static pages and show the links to these pages in specific sections of the user interface: + +- The HTML content is stored in a new table of the GN's database. + +- The link to pages can be showed in different points of the GN's GUI according to a list of "sections" associated to each page. In this PR is introduced the support to show the links for the top toolbar and the footer. + +- Each page can be in 3 states: + + - `EN`: visible to administrator. + - `TE`: visible to logged users. + - `IC`: visible to everyone. + +- Pages can be added to different page sections. Currently the sections implemented are `OP` (top menu of the main page) and `ER` (footer of the main page). + +- Only the administrator can edit the pages and see the pages in `EN` status. + +- The creation and the management of the content is done via the API. + + ![](img/pages-api.png) + +Some restrictions: + +- It is not possible to apply custom CSS to the page. +- Any external image must be loaded externally. + +## Examples of API usage + +Before executing the following examples, see [Example of CSRF call using curl](misc.md#example-csrf-curl) for details on the usage of the CSRF token (instead of the value `"X-XSRF-TOKEN: e934f557-17a3-47f2-8e6b-bdf1a3c90a97"` used in the examples) and cookies in the requests. + +### Load a page in the top menu bar + +In this example we're going to upload a file ``contactus.html`` and link it in the top menu: + +1. Load the content by using the method POST `/api/pages/`, the mandatory fields are: + + - language (3 letters like 'eng', 'ita', 'fra' \...) + - pageId (the identifier/link description of the page) + - format (must be LINK if a link is associated to the page) + - the content: data (a file with the page content) or a link (URL to another page). Define both is not possible. + + ``` bash + $ curl -X POST "http://localhost:8080/geonetwork/srv/api/pages/?language=eng&pageId=contactus&format=HTML" -H "accept: */*" -H "Content-Type: multipart/form-data" -H "X-XSRF-TOKEN: e934f557-17a3-47f2-8e6b-bdf1a3c90a97" -d contactus.html + ``` + + At this point the page is created but not visible because is in status HIDDEN and is not loaded explicitly in any section of the page, except DRAFT that is not visible (in the future could be added to a page with an editor interface). Similar requests should be done for each UI language supported. + +2. To associate the link to the top bar is necessary to use the method POST `/api/pages/{language}/{pageId}/{section}` with the `TOP` value for the section. + + ``` bash + $ curl -X POST "http://localhost:8080/geonetwork/srv/api/pages/eng/contactus/TOP" -H "accept: */*" -H "X-XSRF-TOKEN: 7cfa1a0d-3335-4846-8061-a5bf176687b5" --user admin:admin -b /tmp/cookie + ``` + +### Load a link in the footer bar + +In this example we're going to add a link to an external resource and link it in the footer: + +1. Add the link by using the method POST `/api/pages/` with the `link` parameter in the request: + + ``` bash + $ curl -X POST "http://localhost:8080/geonetwork/srv/api/pages/?language=eng&pageId=contactus&format=LINK&link=http://myorganisation/contactus.html" -H "accept: */*" -H "X-XSRF-TOKEN: e934f557-17a3-47f2-8e6b-bdf1a3c90a97" + ``` + +2. To associate the link to the footer is necessary to use the method POST `/api/pages/{language}/{pageId}/{section}` with the `FOOTER` value for the section. + + ``` bash + $ curl -X POST "http://localhost:8080/geonetwork/srv/api/pages/eng/contactus/FOOTER" -H "accept: */*" -H "X-XSRF-TOKEN: 7cfa1a0d-3335-4846-8061-a5bf176687b5" --user admin:admin -b /tmp/cookie + ``` + +### Remove a page from a section + +To remove a page from a section DELETE `/api/pages/{language}/{pageId}/{section}` + +``` bash +curl -X DELETE "http://localhost:8080/geonetwork/srv/api/pages/eng/contactus?format=LINK" -H "accept: */*" -H "X-XSRF-TOKEN: 7cfa1a0d-3335-4846-8061-a5bf176687b5" --user admin:admin -b /tmp/cookie +``` + +### Change the page status + +The status of the page can be changed with the method PUT `/api/pages/{language}/{pageId}/{status}` where status could assume these values: + +- `IC` - Visible to every user +- `LY` - Visible to not logged users +- `TE` - Visible to logged users +- `EN` - Hidden to anyone + +Other methods in the API are to change/delete a page and to GET the list of the pages or the info of a specific one. + +### Change the menu order in the top toolbar + +Pages can be inserted in between catalogue default menu which are: + +``` json +["gn-site-name-menu", + "gn-portal-switcher", + "gn-search-menu", + "gn-map-menu", + "gn-contribute-menu", + "gn-admin-menu"] +``` + +Insert a page as a simple menu using its id or as a submenu using an object: + +``` json +["gn-site-name-menu", + "gn-portal-switcher", + "gn-search-menu", + {"Quick search": [ + "searchForAfrica", + "forReview" + ]}, + "gn-map-menu", + "gn-contribute-menu", + "gn-admin-menu", + "documentation"] +``` diff --git a/docs/manual/docs/customizing-application/advanced-configuration.md b/docs/manual/docs/customizing-application/advanced-configuration.md new file mode 100644 index 0000000000..56ff60672b --- /dev/null +++ b/docs/manual/docs/customizing-application/advanced-configuration.md @@ -0,0 +1,13 @@ +# Advanced configuration + +## User session timeout configuration {#session-timeout-configuration} + +Default session timeout is set to 35 minutes (See [User session](../administrator-guide/managing-users-and-groups/index.md#user-session)). This timeout can be configured in `WEB-INF/web.xml` by changing the value of the session-timeout (time is in minute): + +``` xml + + 35 + +``` + +For developers, the timeout is defined as a build property and can be customized in filters. See `web/src/main/filters/dev.properties#L20` diff --git a/docs/manual/docs/customizing-application/changing-layout.md b/docs/manual/docs/customizing-application/changing-layout.md new file mode 100644 index 0000000000..9f0eb99c02 --- /dev/null +++ b/docs/manual/docs/customizing-application/changing-layout.md @@ -0,0 +1,3 @@ +# Theming {#configuring-layout} + +TBD diff --git a/docs/manual/docs/customizing-application/characterset.md b/docs/manual/docs/customizing-application/characterset.md new file mode 100644 index 0000000000..62d45109dd --- /dev/null +++ b/docs/manual/docs/customizing-application/characterset.md @@ -0,0 +1,17 @@ +# Characterset + +By default the character set of GeoNetwork is ``UTF-8``. This works well for many locales in the world and is compatible with ASCII that is typically used in US and Canada. However, if ``UTF-8`` is not a compatible characterset in your environment you can change the default. + +To change it within GeoNetwork simply start the application with the system property geonetwork.file.encoding set to the desired character set name. + +For example if you are running Tomcat you can set + +``` xml +JAVA_OPTS="-Dgeonetwork.file.encoding=UTF-16" +``` + +to the startup script and the default codec in GeoNetwork will be ``UTF-16``. + +It is also recommended to set the file.encoding parameter to the same codec as this dictates to the default encoding used in Java and the Web Server may reference at times use the default codec. + +Finally, by default the URL parameters are typically interpreted as ASCII characters which can be a problem when searching for metadata that are not in the english language. Each Web Server will have a method for configuring the encoding used when reading the parameters. For example, in Tomcat the encoding/charset configuration is in the **`server.xml`** Connector element. diff --git a/docs/manual/docs/customizing-application/configuring-faceted-search.md b/docs/manual/docs/customizing-application/configuring-faceted-search.md new file mode 100644 index 0000000000..7af888bdc0 --- /dev/null +++ b/docs/manual/docs/customizing-application/configuring-faceted-search.md @@ -0,0 +1,495 @@ +# Configuring faceted search + +Facets also known as aggregation in Elasticsearch are used to provide simple search entries. GeoNetwork is using facet in different places: + +- Home page categories + + ![](img/agg-home.png) + +- Search results + + ![](img/agg-search.png) + +All facet configurations are stored in the user interface configuration (see [User Interface Configuration](../administrator-guide/configuring-the-catalog/user-interface-configuration.md)). The configuration are defined using JSON following Elasticsearch API (See ). + +By default, the facet configurations are defined as (see `web-ui/src/main/resources/catalog/js/CatController.js`). The home page display on the left side `th_httpinspireeceuropaeutheme-theme_tree.key` and `cl_topic.key` and on the right side, the last facet defined `resourceType`. + +## Term aggregation on a field + +``` js +"format": { + "terms": { + "field": "format" + } +} +``` + +This is using [Elasticsearch terms aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html). + +If a search error occurred after adding a new facet, check that it is not the following: + +``` +Text fields are not optimised for operations that require per-document field data +like aggregations and sorting, so these operations are disabled by default. +Please use a keyword field instead. +``` + +This means that the field used in the aggregation is indexed as a text field and can't be used in aggregations. In such case, check the index mapping and field definition. For example, a facet on `crsDetails.code` will fail with that error and can be fixed using `crsDetails.code.keyword` which is an additional field added by Elasticsearch while indexing. + +## Term aggregation on a codelist + +Codelist fields starts with prefix `cl_`. Codelist fields are object composed of a key, a default value for the record default language, additional field per languages and an optional link (if using Anchor). + +``` js +"cl_maintenanceAndUpdateFrequency": [ + { + "key": "daily", + "default": "Journalière", + "langfre": "Journalière", + "link": "http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_MaintenanceFrequencyCode" + } +] +``` + +For codelist, use `.default` for catalogue with no multilingual content and only one language for the UI. + +``` js +"cl_maintenanceAndUpdateFrequency.default": { + "terms": { + "field": "cl_maintenanceAndUpdateFrequency.default" + } + }, +``` + +Use `.key` for codelist for multilingual catalogue. The codelist translation needs to be loaded in the client app. See `web-ui/src/main/resources/catalog/js/GnSearchModule.js`. + +``` js +"cl_spatialRepresentationType.key": { + "terms": { + "field": "cl_spatialRepresentationType.key" + } + }, +``` + +## Term aggregation on a thesaurus + +Thesaurus are indexed in fields starting with `th_`. Each keywords are defined using multilingual fields (ie. default field + lang\...): + +``` js +"th_odatis_thematiques": [ + { + "default": "Dispositifs de surveillance", + "langfre": "Dispositifs de surveillance" + } +] +``` + +When the thesaurus define relations between concept a field `th_{thesaurusid}_tree` is also defined: + +``` js +"th_httpinspireeceuropaeutheme-theme_tree": { + "default": [ + "Installations de suivi environnemental" + ], + "key": [ + "http://inspire.ec.europa.eu/theme/ef" + ] +} +``` + +To use thesaurus as aggregation, use the following configuration: + +``` js +"th_httpinspireeceuropaeumetadatacodelistPriorityDataset-PriorityDataset_tree.default": { + "terms": { + "field": "th_httpinspireeceuropaeumetadatacodelistPriorityDataset-PriorityDataset_tree.default", + "size": 100, + "order" : { "_key" : "asc" } + } +}, +"th_httpinspireeceuropaeutheme-theme_tree.key": { + "terms": { + "field": "th_httpinspireeceuropaeutheme-theme_tree.key", + "size": 34 + } +}, +``` + +Note that using `size` and `order` properties you can configure the number of values to load in the aggregations and how to order them. + +For GEMET thesaurus, if the catalogue is not multilingual, then the default property contains the default language. All records having the same language, there will be no mix of languages. + +``` js +"th_gemet_tree.default": { + "terms": { + "field": "th_gemet_tree.default", + "size": 100, + "order" : { "_key" : "asc" }, + "include": "[^\^]+^?[^\^]+" + // Limit to 2 levels + } +}, +``` + +Note here that the `include` properties is used to filter the values to load. + +If records are not all in all the same languages, languages can be mixed together. In this case use the key which will be translated on client side by loading required concepts using the thesaurus API. + +``` js +"th_gemet_tree.key": { + "terms": { + "field": "th_gemet_tree.key", + "size": 100, + "order" : { "_key" : "asc" }, + "include": "[^\^]+^?[^\^]+" + } +} +``` + +## Filters aggregations + +Aggregation based on queries. One query will define one bucket in the aggregation. + +This is using [Elasticsearch filters aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html). + +``` js +"availableInServices": { + "filters": { + "filters": { + "availableInViewService": { + "query_string": { + "query": "+linkProtocol:/OGC:WMS.*/" + } + }, + "availableInDownloadService": { + "query_string": { + "query": "+linkProtocol:/OGC:WFS.*/" + } + } + } + } +} +``` + +Key like `availableInViewService` may not be available in the translations. Use the translation API to add your custom translation in the database (see the Admin console --> Settings --> Languages). + +## Filtering aggregation values + +To enable filtering in a facet, add an include property: + +``` js +"tag.default": { + "terms": { + "field": "tag.default", + "include": ".*", + "size": 10 + }, + "meta": { + "caseInsensitiveInclude": true + } +} +``` + +`include` and `exclude` properties can be used to filter values too. A meta `caseInsensitiveInclude` can be added as Elasticsearch facet filter is case sensitive by default. + +Example adding only 4 specific values: + +``` js +"resourceType": { + "terms": { + "field": "resourceType", + "include": "dataset|series|service|nonGeographicDataset" + } + } +``` + +See [Elasticsearch terms aggregations filtering](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_filtering_values_4) for more details. + +## Collapse aggregation on load + +Aggregations can be collapsed by default and visible to users depending on roles: + +``` js +"dateStamp" : { + "auto_date_histogram" : { + "field" : "dateStamp", + "buckets": 50 + }, + "meta": { + "collapsed": true, + "userHasRole": "isReviewerOrMore" + } +``` + +- Use `"collapsed": true` to collapse the item on load +- Use `"userHasRole": "isReviewerOrMore"` to display the aggregation depending on user roles + +## Hierarchical aggregation based on separator (Experimental) + +A tree field which contains a URI eg. but with a translation which contains a hierarchy with a custom separator `/Regulation and Management/Technical and Management Zonations/Sensitive Zones` + +``` js +"th_sextant-theme_tree.key": { + "terms": { + "field": "th_sextant-theme_tree.key", + "size": 100, + "order" : { "_key" : "asc" } + }, + "meta": { + "translateOnLoad": true, + "treeKeySeparator": "/" + } +} +``` + +This will build a tree based on the value and the separator. + +## Nested aggregation + +Aggregation can be nested. eg. `resourceType` field is used at first level, `format` as second one. + +``` js +"facetConfig": { + "resourceType": { + "terms": { + "field": "resourceType" + }, + "aggs": { + "format": { + "terms": { + "field": "format" + } + } + } + }, +``` + +This is using [Elasticsearch nested aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-nested-aggregation.html). + +## Histogram aggregation + +When fields are number, histogram aggregation can be used: + +``` js +"resolutionScaleDenominator": { + "histogram": { + "field": "resolutionScaleDenominator", + "interval": 10000, + "keyed" : true, + "min_doc_count": 1 + } +}, +"creationYearForResource": { + "histogram": { + "field": "creationYearForResource", + "interval": 5, + "keyed" : true, + "min_doc_count": 1 + } +}, +``` + +This is using [Elasticsearch histogram aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-histogram-aggregation.html). + +## Translating source or group field + +Some fields are ids in the index eg. for harvesting source or groups. In such case use `orderByTranslation` and `filterByTranslation` to not filter on the id but on the translations. + +``` js +"sourceCatalogue": { + "terms": { + "field": "sourceCatalogue", + "size": 100, + "include": ".*" + }, + "meta": { + "orderByTranslation": true, + "filterByTranslation": true, + "displayFilter": true, + "collapsed": true + } + }, +``` + +## Custom labels and search fields + +When using a generic field like `tag.default` and including only a subset of keywords in various aggregations, the aggregation label can be customized. In the example below `IDP_TOPICS` and `IDP_DPSIR`. In this case, add a `meta.field` property to indicate which field to search on. + +``` js +"IDP_TOPICS": { + "terms": { + "field": "tag.default", + "size": 34, + "include": "IDP_topics.*" + }, + "meta": { + "field": "tag.default" + } +}, +"IDP_DPSIR": { + "terms": { + "field": "tag.default", + "size": 34, + "include": "IDP_DPSIR.*|IDP_dpsir." + }, + "meta": { + "field": "tag.default" + } +}, +``` + +## Decorate aggregations {#configuring-facet-decorator} + +All aggregations can be decorated by an icon or an image in the home page or in other pages. The decorator is configured in the `meta` properties of the facet: + +``` js +"resourceType": { + "terms": { + "field": "resourceType", + "size": 10 + }, + "meta": { + "decorator": { + "type": "icon", + "prefix": "fa fa-2x pull-left gn-icon-" + } +} +``` + +![](img/agg-decorator-home.png) + +Decorator types are described below. + +### Decorate with icons + +- Fixed icon. eg. adding a tag icon to all values + + ``` js + "decorator": { + "type": "icon", + "prefix": "fa fa-fw fa-tag " + } + ``` + + ![](img/agg-decorator-icon-fixed.png) + +- Icon defined in a CSS class name using the value. eg. used for resource types `gn-icon-dataset` + + ``` js + "decorator": { + "type": "icon", + "prefix": "fa fa-fw gn-icon-" + } + ``` + + ![](img/agg-decorator-icon.png) + +- Icon defined in a css class name which is using only a portion of the value. eg. used for INSPIRE themes. The expression allows to extract the value + + ``` js + "decorator": { + "type": "icon", + "prefix": "fa fa-fw gn-icon iti-", + "expression": "http://inspire.ec.europa.eu/theme/(.*)" + } + ``` + + ![](img/agg-decorator-icon-inspire.png) + +- Icon defined with a map of values for the class name to use. + + ``` js + "decorator": { + "type": "icon", + "prefix": "fa fa-fw ", + "map": { + "availableInViewService": "fa-globe", + "availableInDownloadService": "fa-download" + } + } + ``` + + ![](img/agg-decorator-icon-map.png) + +### Decorate with images + +Define the image to use for each values: + +``` js +"decorator": { + "type": "img", + "map": { + "EEA": "https://upload.wikimedia.org/wikipedia/en/thumb/7/79/EEA_agency_logo.svg/220px-EEA_agency_logo.svg.png" + } +} +``` + +![](img/agg-decorator-img-logo.png) + +Image decorator in the home page are rendered as background images: + +![](img/agg-decorator-img.png) + +## Aggregation as tab + +One aggregation from the facet configuration can be selected to be displayed above search results as tabs using the following: + +``` js +"mods": { + "search": { + "facetTabField": "resourceType" + } +``` + +## Interactive graphics {#configuring-facet-graphics} + +Use [Vega](https://vega.github.io/vega-lite/examples/) to render date histogram facet values or render term facets to display facet as simple pie. Vega is also used in Kibana so it can make dataviz converging in dashboards and in the app. + +Facet widget based on vega allow selection of a range for dates and/or click on bar/pie. + +![](img/vega.png) + +To use Vega based facet, enable mods.search.isVegaEnabled in the user interface configuration. This trigger the load of the Vega library. + +A simple date field: + +``` js +"dateStamp" : { + "auto_date_histogram" : { + "field" : "dateStamp", + "buckets": 50 + }, +``` + +A date range field: + +``` js +"resourceTemporalDateRange": { + "gnBuildFilterForRange": { + "field": "resourceTemporalDateRange", + "buckets": "2021 - 1970", + "dateFormat": "YYYY", + "vegaDateFormat": "%Y", + "from": "1970", + "to": "2021", + "mark": "area" + }, + "meta": { + "vega": "timeline" + } +``` + +A term as pie or bar chart: + +``` js +"cl_status.key": { + "terms": { + "field": "cl_status.key", + "size": 10 + }, + "meta": { + //"vega": "bar" + "vega": "arc" + } + }, +``` diff --git a/docs/manual/docs/customizing-application/configuring-search-fields.md b/docs/manual/docs/customizing-application/configuring-search-fields.md new file mode 100644 index 0000000000..c03b2184ba --- /dev/null +++ b/docs/manual/docs/customizing-application/configuring-search-fields.md @@ -0,0 +1,251 @@ +# Configuring search fields + +In some cases it's relevant to modify or extend the search fields of the metadata index. For example to add a field (which is then searchable or can be used in a default view) or change the content of the field created from the metadata (indexation). + +## Index field types + +In the index, JSON document representing the metadata is stored. + +Simple fields are stored like a map of key = value. eg. + +``` js +"_source": { + "docType": "metadata", + "documentStandard": "iso19115-3.2018", + "document": "", + "metadataIdentifier": "7451e2bd-22e8-4a74-a999-01c58b630369", + "standardName": "ISO 19115", + "indexingDate": "2020-11-19T06:30:47.009Z", + "dateStamp": "2020-11-17T13:56:43", + "mainLanguage": "fre" +``` + +### Multilingual text field + +Multilingual fields are stored using an object with the following properties: + +- default the record default language value (this property is updated on the client side based on the UI language) +- lang{langCode} one or more properties containing all record languages values + +``` js +"_source": { + "resourceTitleObject": { + "default": "Aménagements routiers et autoroutiers - Série", + "langfre": "Aménagements routiers et autoroutiers - Série", + "langger": "Straßen- und Autobahnverbesserungen - Standard" +}, +``` + +### Codelist + +Codelists are stored as an object like titles, abstract, \... + +If the record is multilingual, codelist translations are stored in the index for the record languages: + +``` js +"cl_spatialRepresentationType" : { + "key": "grid", + "default": "Grid", + "langeng": "Grid", + "langfre": "Grid", + "text": "{{> inner text of the codelist element. Used in some profiles eg. ISO HNAP}}", + "link": "./resources/codeList.xml#MD_SpatialRepresentationTypeCode", + } +``` + +When creating a facets on a codelist, 2 options: + +- if the catalog content is in one language (and there is no need to translate codelist in other language), use the default property eg. cl_spatialRepresentationType.default +- if you have a catalog containing a mix of languages without having all records translated in all languages, use the key eg. cl_spatialRepresentationType.key and do translation on the client side. See GnSearchModule.js to load extra codelist translations on the Angular app. + +The second one is also required if you want the codelist to be translated in the user interface language (whatever the record language). The codelist translations are loaded by the application depending on the UI language. + +Use the default property in record view. Depending on the UI language, the default property contains the translation in the UI language or fallback to the record default. + +### Thesaurus + +Each thesaurus are described by the following fields: + +- ``th_{thesaurusId}Number`` with the count of non empty keywords +- ``th_{thesaurusId}``, an array of multilingual keyword which may contains a link (when using Anchor) +- (optional) ``th_{thesaurusId}_tree`` containing hierarchy when broader terms are found. default property contains the record default language hierarchy, key property contains the hierarchy of broader terms keys. This can be used to build tree depending on UI language (thesaurus translations has to be loaded by the client app). + +``` js +{ + "th_httpinspireeceuropaeumetadatacodelistPriorityDatasetPriorityDatasetNumber": "3", + "th_httpinspireeceuropaeumetadatacodelistPriorityDatasetPriorityDataset": [{ + "default": "Agglomerations - industrial noise exposure delineation (Noise Directive)", + "langfre": "Agglomerations - industrial noise exposure delineation (Noise Directive)", + "link": "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-IndustrialNoiseExposureDelineation-dir-2002-49" + }, + { + "default": "Agglomerations - noise exposure delineation day-evening-night (Noise Directive)", + "langfre": "Agglomerations - noise exposure delineation day-evening-night (Noise Directive)", + "link": "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-NoiseExposureDelineationDEN-dir-2002-49" + }, + { + "default": "Designated waters (Water Framework Directive)", + "langfre": "Designated waters (Water Framework Directive)", + "link": "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/DesignatedWaters-dir-2000-60" + } + ], + "th_httpinspireeceuropaeumetadatacodelistPriorityDatasetPriorityDataset_tree": { + "default": [ + "Directive 2000/60/EC", + "Directive 2000/60/EC^Protected areas (Water Framework Directive)", + "Directive 2000/60/EC^Protected areas (Water Framework Directive)^Designated waters (Water Framework Directive)", + "Directive 2002/49/EC", + "Directive 2002/49/EC^Environmental noise exposure (Noise Directive)", + "Directive 2002/49/EC^Environmental noise exposure (Noise Directive)^Agglomerations - industrial noise exposure delineation (Noise Directive)", + "Directive 2002/49/EC^Environmental noise exposure (Noise Directive)^Agglomerations - noise exposure delineation (Noise Directive)", + "Directive 2002/49/EC^Environmental noise exposure (Noise Directive)^Agglomerations - noise exposure delineation (Noise Directive)^Agglomerations - noise exposure delineation day-evening-night (Noise Directive)" + ], + "key": [ + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2000-60", + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2000-60^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ProtectedAreas-dir-2000-60", + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2000-60^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ProtectedAreas-dir-2000-60^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/DesignatedWaters-dir-2000-60", + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2002-49", + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/EnvironmentalNoiseExposure-dir-2002-49", + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/EnvironmentalNoiseExposure-dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-IndustrialNoiseExposureDelineation-dir-2002-49", + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/EnvironmentalNoiseExposure-dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-NoiseExposureDelineation-dir-2002-49", + "http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/EnvironmentalNoiseExposure-dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-NoiseExposureDelineation-dir-2002-49^http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-NoiseExposureDelineationDEN-dir-2002-49" + ] + } +} +``` + +### Other types + +Index document also contains other types of object for field like: + +- geom representing the bounding boxes of the record stored as GeoJSON +- contact stored as simple fields and as object: + +``` +{ + "Org": "Direction Asset Management (SPW - Mobilité et Infrastructure)", + "pointOfContactOrg": "Direction Asset Management (SPW - Mobilité et Infrastructure)", + "contact: [ + { + "organisation": "Direction Asset Management (SPW - Mobilité et Infrastructure)", + "role": "pointOfContact", + "email": "frederic.plumier@spw.wallonie.be", + "website": "", + "logo": "", + "individual": "", + "position": "", + "phone": "", + "address": "Boulevard du Nord, 8, NAMUR, 5000, Belgique" + } + ] +} +``` + +- link + +``` js +"link": [ + { + "protocol": "WWW:LINK-1.0-http--link", + "url": "http://geoapps.spw.wallonie.be/portailRoutes", + "name": "Portail cartographique des routes - Application sécurisée", + "description": "Application de consultation des routes et autoroutes de Wallonie. Cette application est sécurisée et n'est accessible que pour les agents de la DGO1 du SPW.", + "applicationProfile": "", + "group": 0 + }, +``` + +- recordLink + +``` js +"recordLink": [ + { + "type": "siblings", + "associationType": "isComposedOf", + "initiativeType": "collection", + "to": "f010eda4-e791-44b1-8b2a-309f352f7d8f", + "url": "", + "title": "", + "origin": "catalog" + }, +``` + +## Add a search field + +Indexed fields are defined on a per schema basis on the schema folder (see `schemas/iso19139/src/main/plugin/iso19139/index-fields/index.xsl`). + +This file define for each search criteria the corresponding element in a metadata record. For example, indexing the resource identifier of an ISO19139 record: + +``` xml + + + + + +``` + +Once the field added to the index, user could query using it as a search criteria in the different kind of search services. For example using: + +``` shell +curl -X POST "localhost:8080/geonetwork/srv/api/search/records/_search" \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json;charset=utf-8' \ + -d '{"from":0,"size":0,"query":{"query_string":{"query":"+resourceIdentifier:1234"}}}' +``` + +To customize how the field is indexed see `web/src/main/webResources/WEB-INF/data/config/index/records.json`. + +To return it in the search response, use the `ce` parameter of the query. See . + +## Boosting at search time + +See . + +By default, the search is defined as (see `web-ui/src/main/resources/catalog/js/CatController.js`): + +``` js +'queryBase': 'any:(${any}) resourceTitleObject.default:(${any})^2', +``` + +## Scoring + +By default the search engine compute score according to search criteria and the corresponding result set and the index content. + +By default, the search score is defined as (see `web-ui/src/main/resources/catalog/js/CatController.js`): + +``` js +'scoreConfig': { + "boost": "5", + "functions": [ + // Boost down member of a series + { + "filter": { "exists": { "field": "parentUuid" } }, + "weight": 0.3 + }, + // Boost down obsolete records + { + "filter": { "match": { "codelist_status": "obsolete" } }, + "weight": 0.3 + }, + // { + // "filter": { "match": { "codelist_resourceScope": "service" } }, + // "weight": 0.8 + // }, + // Start boosting down records more than 3 months old + { + "gauss": { + "dateStamp": { + "scale": "365d", + "offset": "90d", + "decay": 0.5 + } + } + } + ], + "score_mode": "multiply" + }, +``` + +## Language analyzer + +By default a `rd` analyzer is used. If the catalog content is english, it may make sense to change the analyzer to `sh`. To customize the analyzer see `web/src/main/webResources/WEB-INF/data/config/index/records.json` diff --git a/docs/manual/docs/customizing-application/creating-custom-view.md b/docs/manual/docs/customizing-application/creating-custom-view.md new file mode 100644 index 0000000000..5174243d3e --- /dev/null +++ b/docs/manual/docs/customizing-application/creating-custom-view.md @@ -0,0 +1,13 @@ +# Customizing metadata views {#creating-custom-view} + +GeoNetwork facilitates developers to easily change or add a metadata view. A User can change the view to his/her needs. + +By default the initial view is an AngularJS view on the results returned from the search service. Therefore the view can only contain the fields from the Lucene Index. If you require more fields, you can either add fields to the index or don't use the AngularJS view. This view is defined in `web-ui/src/main/resources/catalog/views/default/templates/recordView.html`. + +Metadata views are called 'formatters'. They are located in the schema-plugin related to the metadata that you are formatting. Formatters use either XSLT or Groovy to transform the XML to the required format (html, xml, pdf, json). + +A formatter can be updated from the web interface in the `admin console`, `metadata and templates`, tab 'formatters'. On this page you can upload, change and preview formatters. + +![](img/formatter.png) + +After having created a new formatter you will have to update your application code, so the new formatter-output can be visualised from your application. If the goal of the formatter is to introduce a new html view on metadata, then you can add a reference to it in `web-ui/src/main/resources/catalog/views/default/config.js` (searchSettings.formatter.list). diff --git a/docs/manual/docs/customizing-application/editor-ui/creating-custom-editor.md b/docs/manual/docs/customizing-application/editor-ui/creating-custom-editor.md new file mode 100644 index 0000000000..db72ca078f --- /dev/null +++ b/docs/manual/docs/customizing-application/editor-ui/creating-custom-editor.md @@ -0,0 +1,909 @@ +# Customizing editor {#creating-custom-editor} + +!!! warning + + This file is produced automatically from the geonetwork-core repository. To make any suggestions to the content of the page please add your changes to [core-geonetwork/schemas/config.editor.xsd](https://github.com/geonetwork/core-geonetwork/blob/main/schemas/config-editor.xsd). + + +## Creating custom editor + +A metadata editor configuration is defined for a specific schema plugin standard (see [Implementing schema plugins](../implementing-a-schema-plugin.md)). + +The editor configuration defines the navigation menu for the editor (i.e. list of views and tabs), the list of fields and the type of control to use. Controls can be HTML-type (e.g. text, date) or more advanced controls built using [AngularJS directives](https://docs.angularjs.org/guide/directive). + +To build such an editor configuration, the user needs to know the XSD of the standard to properly build views, tabs and fields according to the element names (see `schemas/config-editor.xsd`). Create an editor root element and attach: + +- the schema and +- namespaces for the standards + +``` xml + +``` + +An editor configuration should first define some general element descriptions and then a set of views with at least one defined view. + +Child elements: + +- **fields**, Optional element (see [Defining field type](creating-custom-editor.md#creating-custom-editor-fields)) +- **fieldsWithFieldset**, Optional element (see [Grouping element from the standards](creating-custom-editor.md#creating-custom-editor-fieldsWithFieldset)) +- **multilingualFields**, Optional element (see [Defining multilingual fields](creating-custom-editor.md#creating-custom-editor-multilingualFields)) +- **views**, Mandatory element (see [Configuring views](creating-custom-editor.md#creating-custom-editor-views)) + +## Defining field type {#creating-custom-editor-fields} + +Define the form fields type configuration. The default is simple text input. This list contains a list of fields which do not use a simple text input. The list of possible values are: + +- all HTML5 input type or +- an AngularJS directive name. MUST start with `data-` and could end with `-textarea` to create a textarea element or with `-div` if the directive does not apply to the input or textarea but to the div element containing it. + +An element can only have one type defined. + +``` xml + + + + + + +``` + +The other option to define a more advanced field type is to catch the element using and XSL template. This approach is used for keywords in ISO19139 (see for example `schemas/iso19139/src/main/plugin/iso19139/layout/layout-custom-fields-keywords.xsl`). + +## Grouping element from the standards {#creating-custom-editor-fieldsWithFieldset} + +List of elements to be displayed in a fieldset (i.e. boxed element). Those elements usually contain children elements and define major sections in the standard. For example, in ISO19139, `on` and `on` are major sections and should usually be displayed as a group of `on`. + +``` xml + + ... + + gmd:identificationInfo + gmd:distributionInfo +``` + +## Defining multilingual fields {#creating-custom-editor-multilingualFields} + +Configure here the list of multilingual fields for a standard. + +By default, if the standard has multilingual support like ISO19139, all fields will be displayed as multilingual fields. Define in the exclude section the exceptions (e.g. ``gmd:identifier`` in ISO19139). + +Then this section also allows to define how multilingual fields are displayed using the expanded elements. If expanded, then one field per language is displayed with no need to click on the language switcher. + +![](../../user-guide/describing-information/img/multilingual-editing.png) + +``` xml + + ... + ... + + + gmd:title + gmd:abstract + + + gmd:identifier + gmd:metadataStandardName +``` + +## Configuring views {#creating-custom-editor-views} + +At least one view MUST be defined, but more view modes can be defined depending on the needs. + +By default ISO19139 defines 3 views (i.e. default, advanced, xml) and has one disabled view (i.e. INSPIRE). See `schemas/iso19139/src/main/plugin/iso19139/layout/config-editor.xml` for the configuration. + +![](../../user-guide/describing-information/img/view-mode.png) + +Another basic example is the Dublin Core view (see `schemas/dublin-core/src/main/plugin/dublin-core/layout/config-editor.xml`). + +To create a new view, use the following: + +``` xml + + + ... + +``` + +Child elements: + +- **view**, One or more (see [Defining a view](creating-custom-editor.md#creating-custom-editor-view)) + +## Defining a view {#creating-custom-editor-view} + +A view has a label and defines a specific rendering of the metadata records. A view is composed of one or more tabs. + +``` xml + + + .... + +``` + +The view could be displayed or not according to the metadata record content or the current user session using the `rd` and `fo` attributes. + +Attributes: + +- **name** (Mandatory) + +The key of the view name stored in `{schema}/loc/{lang}/strings.xml` or the element name with namespace prefix. + +``` xml + + Simple + INSPIRE + My view +``` + +- **disabled** (Optional) Fixed value: **true** + +Hide the view from the menu if the attribute is defined. Allows to easily disable a view. + +- **class** (Optional) + +Define custom CSS class to be set on the form element. This is mainly used to set the type of indent: + +- gn-label-above-input: to put label above form input +- gn-indent-colored: colored left border on each fieldset +- gn-indent-bluescale: blue scale colored left border on each fieldset + +See ``catalog/views/default/less/gn_editor_default.less`` to add your custom editor styles. + +- **upAndDownControlHidden** (Optional) Fixed value: **true** + +Define if up and down control should be displayed in that view. If not defined, controls are displayed. Hide those controls in a view to make it easier with less controls for the end-user. + +![](../../user-guide/describing-information/img/editor-control-updown.png) + +- **displayAttributes** (Optional) Fixed value: **true** + +Display attributes by default when loading the view. + +- **displayTooltips** (Optional) Fixed value: **true** + +Display help documentation for all elements by default when loading the view. + +- **displayTooltipsMode** (Optional) + +Display help documentation onhover elements (default) or by clicking on an icon. + +- **hideTimeInCalendar** (Optional) Fixed value: **true** + +Define if calendar control should allow users to set date only or datetime. If the attribute is not set, then date and datetime can be set. This is controlled at the view level, switching to another view may allow more control over the dates. + +- **displayIfRecord** (Optional) + +XPath expression returning boolean value which will be evaluated against the metadata record. if true the view will be displayed. eg. Display custom-view if metadata standard name contains Medsea: + +``` xml + + + +

+ +
+ + +``` + +Attributes: + +- **id** (Mandatory) + +The tab key used in URL parameter to activate that tab. The key is also use for the tab label as defined in `{schema}/loc/{lang}/strings.xml`. + +- **default** (Optional) Fixed value: **true** + +Define if this tab is the default one for the view. Only one tab should be the default in a view. + +- **hideIfNotDisplayed** (Optional) Fixed value: **true** + +Define if the tab should be hidden (and not disabled only) if not displayed based on display rules. + +- **toggle** (Optional) Fixed value: **true** + +Define if the tab should be displayed as a dropdown menu instead of a tab. This is used for advanced section, which is not used often by the end-user. More than one tab could be grouped in that dropdown tab menu. + +- **formatter-order** (Optional) + +Define the ordering index of this tab in the XSLT formatter (Note used for editor). + +- **mode** (Optional) Fixed value: **flat** + +The "flat" mode is an important concept to understand for the editor. It controls the way: + +- complex elements are displayed (i.e. elements having children) and +- non-existing elements are displayed (i.e. elements in the standard, not in the current document). + +When a tab is in flat mode, this tab will not display elements which are not in the current metadata document and it will display complex elements as a group only if defined in the list of elements with fieldset (see [Grouping element from the standards](creating-custom-editor.md#creating-custom-editor-fieldsWithFieldset)). + +Example for a contact in ""non-flat" mode: + +![](../../user-guide/describing-information/img/editor-contact-nonflatmode.png) + +Example for a contact in "flat" mode: + +![](../../user-guide/describing-information/img/editor-contact-flatmode.png) + +This mode makes the layout simpler, but does not provide all controls to remove some of the usually boxed elements. End-users can still change to the advanced view mode to access those hidden elements in flat mode. + +It's recommended to preserve at least one view in ""non-flat" mode for Reviewers or Administrators in order to be able: + +- to build proper templates based on the standards +- to fix any type of errors. +- **mode** (Mandatory) +- **displayIfRecord** (Optional) + +XPath expression returning boolean value which will be evaluated against the metadata record. if true the view will be displayed. eg. Display custom-view if metadata standard name contains Medsea: + +``` xml + + + + + + + + +``` + +### Customizing thesaurus {#creating-custom-editor-thesaurusList} + +To configure the type of transformations, or the number of keywords allowed, or if the widget has to be displayed in a fieldset, or as simple field for a thesaurus define a specific configuration: + +e.g. only 2 INSPIRE themes: + +``` xml + + + +``` + +## Adding a section to a tab {#creating-custom-editor-section} + +A section is a group of fields. If a `me` attribute is provided, then it will create an HTML fieldset which is collapsible. If no `me` attribute is provided, then it will just render the inner elements. For example, if you need a tab without a root fieldset, just create the mandatory section with no name and then the inner elements. + +Attributes: + +- **name** (Optional) + +An optional name to override the default one base on field name for the + +: section. The name must be defined in `{schema}/loc/{lang}/strings.xml`. + +- **xpath** (Optional) + +The XPath of the element to match. If an XPath is set for a section, it + +: should not contain any fields. + +- **collapsed** (Optional) Fixed value: **true** + +An optional attribute to collapse the section. If not set the section is expanded. + +- **collapsible** (Optional) Fixed value: **false** + +An optional attribute to not allow collapse for the section. If not set the section is expandable. + +- **mode** (Optional) Fixed value: **flat** + +The "flat" mode is an important concept to understand for the editor. It controls the way: + +- complex elements are displayed (i.e. elements having children) and +- non-existing elements are displayed (i.e. elements in the standard, not in the current document). + +When a tab is in flat mode, this tab will not display elements which are not in the current metadata document and it will display complex elements as a group only if defined in the list of elements with fieldset (see [Grouping element from the standards](creating-custom-editor.md#creating-custom-editor-fieldsWithFieldset)). + +Example for a contact in ""non-flat" mode: + +![](../../user-guide/describing-information/img/editor-contact-nonflatmode.png) + +Example for a contact in "flat" mode: + +![](../../user-guide/describing-information/img/editor-contact-flatmode.png) + +This mode makes the layout simpler, but does not provide all controls to remove some of the usually boxed elements. End-users can still change to the advanced view mode to access those hidden elements in flat mode. + +It's recommended to preserve at least one view in ""non-flat" mode for Reviewers or Administrators in order to be able: + +- to build proper templates based on the standards +- to fix any type of errors. +- **mode** (Mandatory) +- **or** (Optional) + +Local name to match if the element does not exist. + +- **or** (Optional) + +The local name of the geonet child (i.e. non-existing element) to match. + +``` xml + +``` + +- **or** (Optional) +- **in** (Optional) + +XPath of the geonet:child element with the or name to look for. Usually + +: points to the parent of last element of the XPath attribute. + +- **in** (Optional) + +The element to search in for the geonet child. + +- **displayIfRecord** (Optional) + +XPath expression returning boolean value which will be evaluated against the metadata record. if true the view will be displayed. eg. Display custom-view if metadata standard name contains Medsea: + +``` xml + +``` + +To override a field label use the `me` attribute and define that new label in `{schema}/loc/{lang}/strings.xml`: + +``` xml + +``` + +To display a complex element which exists in the metadata document: + +``` xml + +``` + +In this case all children elements are also displayed. + +To display a field if it exists in the metadata document or to provide an `dd` button in case it does not exist (specify `in` and `or` attributes): + +``` xml + +``` + +Activate the "flat" mode at the tab level to make the form display only existing elements: + +``` xml + + +
+ + +
+
+
+``` + +Attributes: + +- **xpath** (Mandatory) + +The xpath of the element to match. + +- **if** (Optional) + +An optional XPath expression to evaluate to define if the element should be displayed only in some situation (e.g. only for service metadata records). e.g. + +``` xml + +``` + +- **name** (Optional) + +A field name to override the default name. + +- **isMissingLabel** (Optional) + +The label to display if the element does not exist in the metadata record. It indicates that the element is missing in the current record. It could be used for a conformity section saying that the element is "not evaluated". **EXPERIMENTAL** + +- **or** (Optional) + +The local name of the geonet child (i.e. non-existing element) to match. + +``` xml + +``` + +- **in** (Optional) + +The element to search in for the geonet child. + +- **del** (Optional) + +Relative XPath of the element to remove when the `ve` button is clicked. + +e.g. If a template field match linkage and allows editing of field URL, the remove control should remove the parent element gmd:onLine. + +``` xml + +