实现模式插件

元数据模式和配置文件

元数据架构描述:

  1. 元数据架构中元素的名称、描述和任何值代码列表

  2. 元数据模式的元素在元数据文档(结构)中的布局方式

  3. 元数据文档中元素和内容的约束

  4. 有关如何使用元数据架构元素的文档

  5. 元数据文档和元数据模板示例

  6. 将元数据文档转换为其他元数据架构的脚本

元数据模式通常是元数据标准的实现。

元数据配置文件是对元数据模式的一种调整,以适应特定社区的需要。元数据配置文件包含元数据架构的所有组件,但可以扩展、限制或重新定义这些组件。

实现元数据架构或配置文件

实现元数据模式或配置文件的方法有很多。本节将描述在其上实现元数据架构的方式https://github.com/geonetwork/schema-plugins或者https://github.com/metadata101。

每个元数据模式都是一个实现为文件系统树的Maven模块。树的根是元数据架构的缩写名称。中元数据模式的基本组件 src/main/plugin/<schema_id> 文件夹和布局如下:

  1. loc 目录,其中包含此信息本地化到的每三个字母的语言代码的子目录,内容在XML文件中(labels.xml标签, 代码列表.xml). 例如: loc/eng/codelists.xml 描述元数据元素的英文代码列表

  2. 图式 名为的目录和文件 schema.xsd 为XSD层次结构提供一个入口点。例如: schema/gmd/gmd.xsd

  3. schematron公司 目录对使用ISO schematron语言实现的元数据文档中的元素和内容有约束

  4. docs 目录中有关于如何使用元数据架构元素的文档。

  5. sample-data 目录包含示例元数据文档

  6. 转换 目录具有将元数据文档转换为其他模式和从其他模式转换元数据文档的xslt

有关这些目录和文件内容的更多信息将在下一节中给出。

参见

上的某些架构https://github.com/geonetwork/schema-plugins或者https://github.com/metadata101有比上面描述的更多的信息,因为它们已经被实现为GeoNetwork模式插件。

架构插件

GeoNetwork中可以使用的模式插件是一个包含样式表、XML模式描述(XSD)和其他信息的目录,GeoNetwork需要这些信息来索引、查看和编辑XML元数据记录中的内容。

要在GeoNetwork中使用,可以在 schema_plugins GeoNetwork数据目录的子目录。对于某些模式,应该在WEB-INF/lib文件夹中添加一个额外的JAR文件。默认的地理网络数据目录位置是 INSTALL_DIR/web/geonetwork/WEB-INF/data .

这些模式的内容在地理网络初始化期间进行分析。如果有效,它们将在GeoNetwork启动时可用。

如果创建了模式目录的zip存档,然后使用“管理”菜单中的函数以下列方式之一上载到GeoNetwork,则也可以将模式动态添加到GeoNetwork:

  1. 服务器文件路径(使用文件选择器指定)

  2. HTTP URL(例如。http://somehost/somedirectory/iso19139.mcp.zip)

  3. 作为附加到ISO19115/19139元数据记录的联机资源

上载的架构也存储在 schema_plugins GeoNetwork数据目录的子目录。

参见

此处提供模板模块https://github.com/geonetwork/schema-plugins/tree/develop/iso19139.xyz是一个很好的例子。

地理网络模式的内容

安装时,geonnetwork模式是一个目录。

以下子目录可以出现在 src/main/plugin/<schema_id>

  • 图式 :( 可选的 )包含元数据架构的官方xsd的目录。如果模式由DTD描述,则此目录是可选的。请注意,DTD描述的模式不能由GeoNetwork编辑。

  • schematron公司 :( 可选的 )包含用于检查内容条件的schematrons的目录。

  • docs :( 可选的 )有关架构的文档

  • index-fields :( 强制性的 )索引元数据记录所需的XSLT目录。

  • loc :( 强制性的 )本地化信息的目录:标签、代码列表或特定于架构的字符串。如。 loc/eng/codelists.xml

  • 转换 :( 强制性的 )用于将元数据从此架构转换或转换到此架构的xslt目录。这可以是将元数据转换为其他架构,或者将元数据从其他架构和格式转换为此架构。如。 convert/oai_dc.xsl

  • 布局 :( 对于版本3.x是必需的 )包含用于在编辑器中显示元数据的配置。

  • 格式化程序 :( 3.x版可选 )包含使用Groovy或XSLT格式化程序显示元数据的配置。

  • 目前 :( 对于版本2.x是必需的 )包含用于在查看器/编辑器中显示元数据的xslt。

  • present/csw :( 强制性的 )包含用于响应CSW请求的简短、摘要和完整记录的xslt。

  • 过程 :( 可选的 )包含用于通过元数据建议机制处理元数据元素的xslt(请参见 suggest.xsl 下面)。

  • sample-data :( 可选的 )此架构的元数据示例。元数据示例采用MEF格式,因此示例可以有缩略图或浏览图形以及联机资源。

  • 模板 :( 可选的 )包含此架构的模板和子模板元数据记录的目录。模板元数据记录通常是具有将用于特定目的的一组元素(和内容)的元数据记录。mcp模式有一个“最小元素”模板,该模板包含模式的必需元素和预期内容的示例。

可以显示以下样式表:

  • extract-date-modified.xsl :( 强制性的 )从元数据记录中提取修改日期。

  • extract-gml.xsl :( 强制性的 )将元数据记录中的空间范围提取为GML GeometryCollection元素。

  • extract-thumbnails.xsl :( 可选的 )从元数据记录中提取浏览图形/缩略图。

  • extract-uuid.xsl :( 强制性的 )提取元数据记录的UUID。

  • extract-relations.xsl :( 可选的 )提取元数据记录的关联资源(例如联机源、缩略图)。

  • set-thumbnail.xsl :( 可选的 )在元数据记录中设置浏览图形/缩略图。

  • set-uuid.xsl :( 可选的 )设置元数据记录的UUID。

  • suggest.xsl :( 可选的 )由元数据建议服务运行的XSLT。XSLT包含可以在元数据记录的不同元素上注册和运行的进程。用逗号分隔的内容将关键字字段扩展成多个关键字字段。见 改进元数据内容的建议 更多信息。

  • unset-thumbnail.xsl :( 可选的 )从元数据记录中删除浏览图形/缩略图。

  • update-child-from-parent-info.xsl :( 可选的 )XSLT指定从父记录更新子记录中的哪些元素。用于管理元数据记录之间的层次关系。

  • update-fixed-info.xsl :( 可选的 )更新元数据记录中“固定”内容的XSLT。

可以存在以下配置文件:

  • oasis-catalog.xml :( 可选的 )一个oasis目录,描述应该用于此架构的任何映射,例如将URL映射到本地副本,例如schemaLocations。http://www.isotc211.org/2005/gmd/gmd.xsd映射到 schema/gmd/gmd.xsd . oasis目录中使用的路径名与此文件(即架构目录)的位置相关。

  • schema.xsd :( 可选的 )包含此元数据架构使用的xsd的XML架构目录文件。如果架构使用DTD,则此文件不应存在。无法在GeoNetwork中编辑来自使用DTD的架构的元数据记录。

  • schema-conversions.xml :( 可选的 )描述可应用于属于此架构的记录的转换器的XML文件。此信息用于将这些转换显示为选项,供用户选择何时在搜索结果中显示属于此架构的元数据记录。

  • schema-ident.xml :( 强制性的 )包含架构名称、标识符、版本号和有关如何识别属于此架构的元数据记录的详细信息的XML文件。此文件在 INSTALL_DIR/web/geonetwork/xml/validation/schemaPlugins/schema-ident.xsd 用于在加载架构时验证它。

  • schema-substitutes.xml :( 可选的 )一个XML文件,它重新定义了一组可以用作特定元素替代的元素。

  • schema-suggestions.xml :( 可选的 )告诉编辑器在编辑器中自动展开复杂元素的子元素的XML文件。

index-fields 文件夹中,需要以下文件:

  • default.xsl :( 强制性的 )索引Lucene中的元数据记录内容。创建GeoNetwork用于索引元数据记录内容的Lucene文档。

  • language-default.xsl :( 可选的 )需要为多语言元数据编制索引

为了帮助理解这些组件是什么以及需要什么,我们现在将逐步给出一个如何为geonnetwork构建schemaPlugin的示例。

制备

为了创建GeoNetwork的模式插件,您应该检查源代码:

git clone --recursive https://github.com/geonetwork/core-geonetwork

然后您可以查看包含以下示例的架构插件存储库:

git clone --recursive https://github.com/geonetwork/schema-plugins

要使用这里显示的示例,您应该在schemasmaven模块的子目录中创建新的模式插件(请参见 source file schemas )这个 iso19139.xyz 架构插件库中的插件可能是一个好的开始。

创建后,您需要在应用程序的构建中注册新插件。为此:

<module>iso19139.xyz</module>
<resource>
   <directory>${project.basedir}/../schemas/iso19139.xyz/src/main/plugin</directory>
   <targetPath>${basedir}/src/main/webapp/WEB-INF/data/config/schema_plugins</targetPath>
 </resource>
<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>schema-iso19139.xyz</artifactId>
  <version>${project.version}</version>
</dependency>

示例-ISO19115/19139海洋群落概况(MCP)

海洋群落剖面(MCP)是为海洋群落而开发并与之一起开发的ISO19115/19139剖面。概要文件扩展了ISO19115元数据标准,并使用ISO19139中描述的ISO19115的XML实现的扩展来实现。ISO19115元数据标准及其XML实现ISO19139都可以通过ISO发行渠道获得。

海洋群落概况的文件可在http://www.aodc.gov.au/files/MarineCommunityProfilev1.4.pdf。海洋社区概要文件作为XML模式定义的实现基于https://www.seegrid.csiro.au/wiki/AppSchemas/MetadataProfiles。XML模式定义(xsd)在URL上可用http://bluenet3.antcrc.utas.edu.au/mcp-1.4。

纵观XML模式定义,概要文件向基本的ISO19139标准添加了一些新元素。因此,为geonnetwork定义一个插件海洋社区概要模式的基本思想是尽可能多地使用geonnetwork提供的基本ISO19139模式定义。

现在,我们将在基本步骤中描述如何为实现MCP的GeoNetwork创建插件模式的每个组件。

创建架构-标识.xml文件

现在我们需要提供必要的信息来标识属于该模式的模式和元数据记录。架构-标识.xmlMCP文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://geonetwork-opensource.org/schemas/schema-ident"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <name>iso19139.mcp</name>
  <id>19c9a2b2-dddb-11df-9df4-001c2346de4c</id>
  <version>1.5</version>
  <schemaLocation>
    http://bluenet3.antcrc.utas.edu.au/mcp
    http://bluenet3.antcrc.utas.edu.au/mcp-1.5-experimental/schema.xsd
    http://www.isotc211.org/2005/gmd
    http://www.isotc211.org/2005/gmd/gmd.xsd
    http://www.isotc211.org/2005/srv
    http://schemas.opengis.net/iso/19139/20060504/srv/srv.xsd
  </schemaLocation>
  <autodetect xmlns:mcp="http://bluenet3.antcrc.utas.edu.au/mcp"
              xmlns:gmd="http://www.isotc211.org/2005/gmd"
              xmlns:gco="http://www.isotc211.org/2005/gco">
    <elements>
      <gmd:metadataStandardName>
        <gco:CharacterString>
          Australian Marine Community Profile of ISO 19115:2005/19139|
          Marine Community Profile of ISO 19115:2005/19139
        </gco:CharacterString>
      </gmd:metadataStandardName>
      <gmd:metadataStandardVersion>
        <gco:CharacterString>
          1.5-experimental|
          MCP:BlueNet V1.5-experimental|
          MCP:BlueNet V1.5
        </gco:CharacterString>
      </gmd:metadataStandardVersion>
    </elements>
  </autodetect>
</schema>

每个元素如下:

  • name -在GeoNetwork中已知架构的名称。如果模式是已添加到geonnetwork中的基本模式的配置文件,则惯例是调用模式<base_schema_name><namespace_of_profile>。

  • id -架构的唯一标识符。

  • 版本 -架构的版本号。GeoNetwork中可以存在该架构的多个版本。

  • 示意图位置 -一组对,其中第一个成员是命名空间URI,第二个成员是XSD的正式URL。此元素的内容将添加到geonnetwork显示为schemaLocation/noNamespaceSchemaLocation属性的任何元数据记录的根元素中(如果此类属性不存在)。当需要正式schemaLocation/noNamespaceSchemaLocation时(例如,响应listmetadatformatsoai请求),也将使用它。

  • 自动检测 -包含必须存在于属于此架构的任何元数据记录中的元素或属性(包含内容)。当geonnetwork接收到未知模式的元数据记录时,将在模式检测期间使用此选项。

  • 过滤器 -(可选)包含要基于用户权限应用的自定义筛选器

创建此文件后,可以使用中的XML架构定义(XSD)手动验证它 INSTALL_DIR/web/geonetwork/xml/validation/schemaPlugins/schema-ident.xsd . 此XSD还用于在加载架构时验证此文件。如果架构-标识.xml验证失败,将不会加载架构。

有关自动检测的详细信息

架构的自动检测部分-标识.xml当GeoNetwork需要标识记录所属的元数据架构时使用。

本节中可按评估顺序使用的五条规则是:

一。属性 -在文档中查找一个或多个属性和/或命名空间。一个示例用例是ISO19115/19139的一个概要文件,它在新的名称空间下添加可选元素gmd:标识信息/gmd:MD_数据标识。要检测属于此配置文件的记录,架构中的“自动检测”部分-标识.xml文件可能如下所示:

<autodetect xmlns:cmar="http://www.marine.csiro.au/schemas/cmar.xsd">
  <!-- catch all cmar records that have the cmar vocab element -->
  <attributes cmar:vocab="http://www.marine.csiro.au/vocabs/projectCodes.xml"/>
</autodetect>

关于属性自动检测的其他一些要点:

  • 可以指定多个属性-所有属性都必须匹配才能将记录识别为属于此架构。

  • 如果属性具有命名空间,则应在autodetect元素或架构中的某个位置指定命名空间-标识.xml文件。

2。元素 -在文档中查找一个或多个元素。示例用例是示例模式中显示的用例-标识.xml以前的文件:

<autodetect xmlns:mcp="http://bluenet3.antcrc.utas.edu.au/mcp"
            xmlns:gmd="http://www.isotc211.org/2005/gmd"
            xmlns:gco="http://www.isotc211.org/2005/gco">
  <elements>
    <gmd:metadataStandardName>
      <gco:CharacterString>
        Australian Marine Community Profile of ISO 19115:2005/19139|
        Marine Community Profile of ISO 19115:2005/19139
      </gco:CharacterString>
    </gmd:metadataStandardName>
    <gmd:metadataStandardVersion>
      <gco:CharacterString>
        1.5-experimental|
        MCP:BlueNet V1.5-experimental|
        MCP:BlueNet V1.5
      </gco:CharacterString>
    </gmd:metadataStandardVersion>
  </elements>
</autodetect>

关于元素自动检测的其他一些要点:

  • 可以指定多个元素-例如,如上所述,已指定metadataStandardName和metadataStandardVersion-所有元素都必须匹配,才能将记录识别为属于此架构。

  • 可以为元素指定多个值。如上文所述gmd:metadataStandardVersion将为找到 1.5-experimental OR MCP:BlueNet V1.5-experimental OR MCP:BlueNet V1.5 -垂直线或管道字符“|”用于分隔此处的选项。也可以使用正则表达式。

  • 如果元素具有命名空间,则应在自动检测元素或架构中的某个位置指定命名空间-标识.xml在使用它们的元素之前记录文档-例如,在上面的autodetect元素上有名称空间声明,以避免内容混乱。

三。根元素 -文档的根元素必须匹配。一个示例用例是用于eml gbif模式的用例。属于此架构的文档始终具有根元素埃米尔:埃米尔·索此架构的自动检测部分是:

<autodetect xmlns:eml="eml://ecoinformatics.org/eml-2.1.1">
  <elements type="root">
    <eml:eml/>
  </elements>
</autodetect>

关于根元素自动检测的其他一些要点:

  • 可以指定多个元素-集合中与记录的根元素匹配的任何元素都将触发匹配。

  • 如果元素具有命名空间,则应在自动检测元素或架构中的某个位置指定命名空间-标识.xml在使用它们的元素之前记录文档-例如,如上所述,为了清楚起见,autodetect元素上有一个名称空间声明。

四。命名空间 -在文档中查找一个或多个命名空间。示例用例是用于记录模式。属于csw:记录模式可能有三个根元素:csw:记录, csw:总结记录和csw:简要记录,但我们可以使用通用csw命名空间进行自动检测,而不是使用多元素根自动检测,如下所示:

<autodetect>
  <namespaces xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"/>
</autodetect>

关于名称空间自动检测的其他几点:

  • 可以指定多个命名空间-必须全部存在,才能将记录识别为属于此架构。

  • 前缀将被忽略。如果在记录中找到的命名空间URI与namespaces autodetect元素中指定的命名空间URI匹配,则会发生命名空间匹配。

5个。默认架构 -这是对与任何已安装架构都不匹配的记录的故障安全设置。默认架构的值在 INSTALL_DIR/web/geonetwork/WEB-INF/config.xml 配置文件,也可以是调用自动检测的操作指定的默认值(例如,从用户批量加载某些元数据记录中解析的值)。出于灵活性和准确性的原因,最好使用已安装架构的自动检测信息来检测记录。默认模式只是将记录分配给特定模式的“全部捕获”方法。中的config元素 INSTALL_DIR/web/geonetwork/WEB-INF/config.xml 如下所示:

<appHandler class="org.fao.geonet.Geonetwork">
  .....
  <param name="preferredSchema" value="iso19139" />
  .....
</appHandler>

有关自动检测评估的详细信息

自动检测的规则计算如下:

for-each autodetect rule type in ( 'attributes/namespaces', 'elements',
                                   'namespaces', 'root element' )
  for-each schema
    if schema has autodetect rule type then
      check rule for a match
      if match add to list of previous matches
    end if
  end for-each

  if more than one match throw 'SCHEMA RULE CONFLICT EXCEPTION'
  if one match then set matched = first match and break loop
end for-each

if no match then
  if namespaces of record and default schema overlap then
    set match = default schema
  else throw 'NO SCHEMA MATCHES EXCEPTION'
end if

return matched schema

例如,假设我们有三个模式iso19139.mcp、iso19139.mcp-1.4和iso19139.mcp-cmar,其中包含以下自动检测元素:

iso19139.mcp-1.4:

<autodetect xmlns:mcp="http://bluenet3.antcrc.utas.edu.au/mcp"
            xmlns:gmd="http://www.isotc211.org/2005/gmd"
            xmlns:gco="http://www.isotc211.org/2005/gco">
  <elements>
    <gmd:metadataStandardName>
      <gco:CharacterString>
        Australian Marine Community Profile of ISO 19115:2005/19139
      </gco:CharacterString>
    </gmd:metadataStandardName>
    <gmd:metadataStandardVersion>
      <gco:CharacterString>MCP:BlueNet V1.4</gco:CharacterString>
    </gmd:metadataStandardVersion>
  </elements>
</autodetect>

iso19139.mcp-cmar:

<autodetect>
    <attributes xmlns:mcp-cmar="http://www.marine.csiro.au/schemas/mcp-cmar">
</autodetect>

iso19139.mcp标准:

<autodetect xmlns:mcp="http://bluenet3.antcrc.utas.edu.au/mcp">
  <elements type="root">
    <mcp:MD_Metadata/>
  </elements>
</autodetect>

通过自动检测处理(如导入时)的记录将对照:

  • iso19139.mcp-cmar首先有一个“属性”规则

  • 然后是iso19139.mcp-1.4,因为它有一个“元素”规则

  • 最后反对iso19139.mcp,因为它有一个“根元素”规则。

此处理算法的思想是,基本架构将使用“根元素”规则(或更难控制的“名称空间”规则),配置文件将使用更精细或更具体的规则,如“属性”或“元素”。

有关筛选器的详细信息

其目标是添加根据目录内容配置下载和动态操作的功能,这些内容可能具有不同的含义,具体取决于:

  • 在模式上(例如,要下载的文件的URL不在dublin core和ISO19139的同一位置)

  • 关于记录编码规则(例如,下载可以是WFS链接,而不仅仅是上传的文件)。

架构中定义了每种类型操作的筛选器配置-标识.xml在过滤器部分。

过滤器定义:

  • 一个操作(与AccessManager中的canEdit、canDownload、canDynamic方法匹配)

  • 用于选择要筛选的元素的XPath

  • 替换替换元素的可选元素定义(如果找到匹配项,则插入此元素属性或子元素)。这用于突出显示已删除的元素。

<filters>
  <!-- Filter element having withheld nilReason for user who can not edit -->
  <filter xpath="*//*[@gco:nilReason='withheld']"
          ifNotOperation="editing">
    <keepMarkedElement gco:nilReason="withheld"/>
  </filter>
  <!-- Filter element having protocol download for user who can not download -->
  <filter xpath="*//gmd:onLine[*/gmd:protocol/gco:CharacterString = 'WWW:DOWNLOAD-1.0-http--download']"
          ifNotOperation="download"/>
  <!-- Filter element having protocol WMS for user who can not dynamic -->
  <filter xpath="*//gmd:onLine[starts-with(*/gmd:protocol/gco:CharacterString, 'OGC:WMS')]"
          ifNotOperation="dynamic"/>
</filters>

根据用户权限在XMLSerializer中应用筛选器。

设置架构后-标识.xml,我们新的MCP地理网络插件模式包含:

schema-ident.xml

创建架构-转换.xml文件

此文件描述可应用于属于架构的元数据记录的转换器。每个转换器都必须手动定义为一个geonnetwork(Jeeves)服务,可以调用该服务将特定的元数据记录转换为不同的模式。架构-转换.xmlMCP文件如下:

<conversions>
   <converter name="xml_iso19139.mcp"
              nsUri="http://bluenet3.antcrc.utas.edu.au/mcp"
              schemaLocation="http://bluenet3.antcrc.utas.edu.au/mcp-1.5-experimental/schema.xsd"
              xslt="xml_iso19139.mcp.xsl"/>
   <converter name="xml_iso19139.mcp-1.4"
              nsUri="http://bluenet3.antcrc.utas.edu.au/mcp"
              schemaLocation="http://bluenet3.antcrc.utas.edu.au/mcp/schema.xsd"
              xslt="xml_iso19139.mcp-1.4.xsl"/>
   <converter name="xml_iso19139.mcpTooai_dc"
              nsUri="http://www.openarchives.org/OAI/2.0/"
              schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
              xslt="oai_dc.xsl"/>
   <converter name="xml_iso19139.mcpTorifcs"
              nsUri="http://ands.org.au/standards/rif-cs/registryObjects"
              schemaLocation="http://services.ands.org.au/home/orca/schemata/registryObjects.xsd"
              xslt="rif.xsl"/>
</conversions>

每个转换器具有以下属性:

  • name -转换器的名称。这是geonnetwork(Jeeves)服务的服务名,应该是唯一的(在服务名前面加上xml<schemau name>是使该名称唯一的好方法)。

  • 恩苏里 -由转换器生成的架构的主命名空间。mcp to RIFCS将元数据记录从iso19139.mcp转换为RIFCS模式。RIFCS元数据架构中的元数据记录的主命名空间URI为http://ands.org.au/standards/rif-cs/registryObjects。

  • 示意图位置 -与nsURI相对应的XML模式定义(XSD)的位置(URL)。

  • xslt -实际执行转换的XSLT的名称。这个XSLT应该位于模式插件的convert子目录中。

设置架构后-转换.xml,我们新的MCP地理网络插件模式包含:

::

架构-转换.xml架构-标识.xml

创建架构目录并架构.xsd文件

架构和架构.xsdGeoNetwork编辑器和验证功能使用组件。

geonnetwork的编辑器使用XSDs构建一个表单,该表单不仅可以正确地对元数据文档中的元素进行排序,而且还提供了创建不在元数据文档中的任何元素的选项。这种方法背后的想法是双重的。首先,编辑器可以使用XML模式定义规则来帮助用户避免创建结构不正确的文档,例如缺少强制元素或元素顺序不正确。其次,相同的编辑器代码可以用于任何定义了XSD的XML元数据文档。

如果要定义自己的元数据架构,则可以使用XSD语言创建XML架构文档。语言的元素可以在网上找到http://www.w3schools.com/schema/或者您可以参考一本教科书,比如Priscilla Walmsley的最终XML模式(Prentice Hall,2002)。geonnetwork的XML schema解析代码几乎可以理解所有XSD语言,除了redefine、any和anyAttribute(尽管最后两个可以在特殊情况下处理)。

在海洋公用设施概况的情况下,我们基本上定义了一些对基本标准ISO19115/19139的扩展。这些扩展是在ISO19139中定义的类型上使用XSD扩展机制定义的。下面的代码片段显示了海洋社区概要文件如何扩展gmd:MD_元数据元素以添加名为revisionDate的新元素:

<xs:schema targetNamespace="http://bluenet3.antcrc.utas.edu.au/mcp"
           xmlns:mcp="http://bluenet3.antcrc.utas.edu.au/mcp">

  <xs:element name="MD_Metadata" substitutionGroup="gmd:MD_Metadata"
                                 type="mcp:MD_Metadata_Type"/>

  <xs:complexType name="MD_Metadata_Type">
    <xs:annotation>
      <xs:documentation>
       Extends the metadata element to include revisionDate
      </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="gmd:MD_Metadata_Type">
        <xs:sequence>
          <xs:element name="revisionDate" type="gco:Date_PropertyType"
                      minOccurs="0"/>
        </xs:sequence>
        <xs:attribute ref="gco:isoType" use="required"
                      fixed="gmd:MD_Metadata"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

</xs:schema>

简而言之,我们定义了一个新元素mcp:MD_元数据带类型mcp:MD_元数据类型,这是gmd:MD_元数据类型。扩展来说,我们的意思是新类型包含了旧类型的所有元素加上一个新元素,mcp:修订日期。强制属性(gco:同型)也附加到mcp:MD_元数据将一个固定值设置为我们扩展的元素的名称(gmd:MD_元数据).

通过这样定义概要文件,就不必修改底层的ISO19139模式。因此,MCP的模式目录本质上由扩展和基础ISO19139模式组成。一种可能的目录结构如下:

extensions gco gmd gml gmx gsr gss gts resources srv xlink

扩展目录包含一个文件MCP扩展.xsd,它将导入gmd命名空间。其余目录是ISO19139基本模式。

这个架构.xsd文件,即geonnetwork查找的文件,将导入MCP扩展.xsd文件和未作为基本ISO19139架构的一部分导入的任何其他命名空间。具体如下:

<xs:schema targetNamespace="http://bluenet3.antcrc.utas.edu.au/mcp"
           elementFormDefault="qualified"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:mcp="http://bluenet3.antcrc.utas.edu.au/mcp"
        xmlns:gmd="http://www.isotc211.org/2005/gmd"
        xmlns:gmx="http://www.isotc211.org/2005/gmx"
        xmlns:srv="http://www.isotc211.org/2005/srv">
  <xs:include schemaLocation="schema/extensions/mcpExtensions.xsd"/>
  <!-- this is a logical place to include any additional schemas that are
       related to ISO19139 including ISO19119 -->
  <xs:import namespace="http://www.isotc211.org/2005/srv"
             schemaLocation="schema/srv/srv.xsd"/>
  <xs:import namespace="http://www.isotc211.org/2005/gmx"
             schemaLocation="schema/gmx/gmx.xsd"/>
</xs:schema>

在此阶段,我们针对MCP的新GeoNetwork插件模式包含:

schema-conversions.xml  schema-ident.xml  schema.xsd  schema

正在创建提取-。。。xslt

GeoNetwork需要从元数据记录中提取某些信息,并将其转换为独立于元数据模式的通用、简化的XML结构。与Java编码的xpath不同,xslt用于处理XML并返回通用的、简化的XML结构。

我们将创建的三个xslt是:

  • extract-date-modified.xsl -这个XSLT处理元数据记录并提取上次修改元数据记录的日期。对于MCP,此信息保存在mcp:修订日期元素是一个孩子mcp:MD U元数据。为MCP创建此项的最简单方法是复制提取日期-修改.xsl从iso19139模式修改它以适应MCP名称空间并使用mcp:修订日期地点gmd:日期戳。

  • extract-gml.xsl -此XSLT处理元数据记录并将空间范围提取为gml GeometryCollection元素。gml被传递给geotools以插入空间索引(shapefile或空间数据库)。对于ISO19115/19139和profiles,这项任务非常简单,因为空间范围(除了边界框)在元数据记录中编码为gml。同样,为MCP创建这个的最简单的方法是复制extract-gml.xsd公司从iso19139模式ad修改它以适应MCP名称空间。

MCP元数据记录的边界框片段示例如下:

<gmd:extent>
  <gmd:EX_Extent>
    <gmd:geographicElement>
      <gmd:EX_GeographicBoundingBox>
        <gmd:westBoundLongitude>
          <gco:Decimal>112.9</gco:Decimal>
        </gmd:westBoundLongitude>
        <gmd:eastBoundLongitude>
          <gco:Decimal>153.64</gco:Decimal>
        </gmd:eastBoundLongitude>
        <gmd:southBoundLatitude>
          <gco:Decimal>-43.8</gco:Decimal>
        </gmd:southBoundLatitude>
        <gmd:northBoundLatitude>
          <gco:Decimal>-9.0</gco:Decimal>
        </gmd:northBoundLatitude>
      </gmd:EX_GeographicBoundingBox>
    </gmd:geographicElement>
  </gmd:EX_Extent>
</gmd:extent>

运行提取-gml.xsl对于包含此XML的元数据记录,将生成:

<gml:GeometryCollection xmlns:gml="http://www.opengis.net/gml">
  <gml:Polygon>
    <gml:exterior>
      <gml:LinearRing>
        <gml:coordinates>
          112.9,-9.0, 153.64,-9.0, 153.64,-43.8, 112.9,-43.8, 112.9,-9.0
        </gml:coordinates>
      </gml:LinearRing>
    </gml:exterior>
  </gml:Polygon>
</gml:GeometryCollection>

如果元数据记录中有多个数据块,则它们也应出现在gml:GeometryCollection元素。

有关gml的更多信息,请参见Lake、Burggraf、Trninic和Rae,“gml地理标记语言,地理网络基础”,Wiley,2004。

最后,关于投影的说明。可以在投影中的MCP记录中包含边界多边形,而不是爱普生:4326。GeoNetwork将GeoTools已知的所有投影(并以GeoTools理解的形式编码)转换为EPSG:4326何时将空间范围写入shapefile或空间数据库。

  • extract-uuid.xsl -这个XSLT处理元数据记录并提取记录的标识符。对于MCP和基本ISO标准,此信息保存在gmd:fileIdentifier元素是一个孩子mcp:MD U元数据。

可以通过在模式的元数据记录上运行这些xslt来进行测试。您应该使用saxon xslt处理器。例如:

java -jar INSTALL_DIR/web/geonetwork/WEB-INF/lib/saxon-9.1.0.8b-patch.jar
     -s testmcp.xml -o output.xml extract-gml.xsl

在此阶段,我们针对MCP的新GeoNetwork插件模式包含:

extract-date-modified.xsl  extract-gml.xsd   extract-uuid.xsl
schema-conversions.xml  schema-ident.xml  schema.xsd  schema

在loc目录中创建本地化字符串

loc目录包含特定于此架构的本地化字符串,按子目录中的语言缩写排列。

您应该以任何语言提供本地化字符串,您希望在其中使用您的模式。

此架构的本地化字符串可以在表示xslt和schematron错误消息中使用。对于表示xslt:

  • 受控词汇字段的代码列表应为loc/<language_缩写>/代码列表.xml如。 loc/eng/codelists.xml

  • 用更容易理解/替换的短语和滚动帮助字符串替换XML元素名称的标签字符串应使用loc/<language_缩写>/labels.xml标签如。 loc/eng/labels.xml .

  • 所有其他本地化字符串应使用loc/<language_缩写>/字符串.xml如。 loc/eng/strings.xml

请注意,由于MCP是ISO19115/19139的配置文件,并且我们遵循了配置文件的地理网络命名约定,因此我们只需要包含特定于MCP或我们要覆盖的标签和代码列表。其他标签和代码列表将从基本模式iso19139中检索。

更多关于代码列表.xml

通常,代码列表是从元数据模式xsd中的枚举列表生成的,例如http://www.isotc211.org/2005/gmd/identification.xsd为了gmd:MD_TopicCategoryCode公司在iso19139模式中:

<xs:element name="MD_TopicCategoryCode" type="gmd:MD_TopicCategoryCode_Type"/>

<xs:simpleType name="MD_TopicCategoryCode_Type">
   <xs:restriction base="xs:string">
     <xs:enumeration value="farming"/>
     <xs:enumeration value="biota"/>
     <xs:enumeration value="boundaries"/>
     <xs:enumeration value="climatologyMeteorologyAtmosphere"/>
     <xs:enumeration value="economy"/>
     <xs:enumeration value="elevation"/>
     <xs:enumeration value="environment"/>
     <xs:enumeration value="geoscientificInformation"/>
     <xs:enumeration value="health"/>
     <xs:enumeration value="imageryBaseMapsEarthCover"/>
     <xs:enumeration value="intelligenceMilitary"/>
     <xs:enumeration value="inlandWaters"/>
     <xs:enumeration value="location"/>
     <xs:enumeration value="oceans"/>
     <xs:enumeration value="planningCadastre"/>
     <xs:enumeration value="society"/>
     <xs:enumeration value="structure"/>
     <xs:enumeration value="transportation"/>
     <xs:enumeration value="utilitiesCommunication"/>
   </xs:restriction>
 </xs:simpleType>

以下是代码列表.xml为此元素手动创建的条目:

<codelist name="gmd:MD_TopicCategoryCode">
  <entry>
    <code>farming</code>
    <label>Farming</label>
    <description>Rearing of animals and/or cultivation of plants. Examples: agriculture,
      irrigation, aquaculture, plantations, herding, pests and diseases affecting crops and
      livestock</description>
  </entry>
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - -->
  <entry>
    <code>biota</code>
    <label>Biota</label>
    <description>Flora and/or fauna in natural environment. Examples: wildlife, vegetation,
      biological sciences, ecology, wilderness, sealife, wetlands, habitat</description>
  </entry>
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - -->
  <entry>
    <code>boundaries</code>
    <label>Boundaries</label>
    <description>Legal land descriptions. Examples: political and administrative
    boundaries</description>
  </entry>

  .....

</codelist>

这个代码列表.xml文件通过代码元素将枚举值从XSD映射到本地化标签和描述。

的本地化副本代码列表.xml可通过XPath访问表示xslt,例如iso19139模式的/root/gui/schemas/iso19139/codelist。

XSLT元数据.xsl它包含所有元数据模式表示xslt使用的模板,处理编辑器中选择列表/下拉菜单的创建以及元数据查看器中代码和说明的显示。

iso19139模式在目录/词汇表文件(如http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml这些也被添加到代码列表.xml文件,以便在配置文件中对其进行本地化、重写,并包含扩展说明以提供更有用的查看元数据记录时的信息。

要在配置文件中使用ISO19139代码列表,可以添加模板以指向要使用的代码列表:

<xsl:template mode="mode-iso19139.xyz" match="*[*/@codeList]">
  <xsl:param name="schema" select="$schema" required="no"/>
  <xsl:param name="labels" select="$labels" required="no"/>

  <xsl:apply-templates mode="mode-iso19139" select=".">
    <xsl:with-param name="schema" select="$schema"/>
    <xsl:with-param name="labels" select="$labels"/>
    <xsl:with-param name="codelists" select="$codelists"/><!-- Will be the profile codelist -->
  </xsl:apply-templates>
</xsl:template>

要覆盖某些ISO19139代码列表,可以检查代码列表是否在xyz配置文件中定义,如果没有使用ISO19139代码列表:

<!-- check iso19139.xyz first, then fall back to iso19139 -->
<xsl:variable name="listOfValues" as="node()">
  <xsl:variable name="profileCodeList" as="node()" select="gn-fn-metadata:getCodeListValues($schema, name(*[@codeListValue]), $codelists, .)"/>
  <xsl:choose>
    <xsl:when test="count($profileCodeList/*) = 0"> <!-- do iso19139 -->
      <xsl:copy-of select="gn-fn-metadata:getCodeListValues('iso19139', name(*[@codeListValue]), $iso19139codelists, .)"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:copy-of select="$profileCodeList"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

iso19139模式在其表示xslt中有额外的模板来处理代码列表,因为它们是特定于该模式的。这些在本手册后面关于表示xslt的部分中进行了讨论。

更多关于labels.xml标签

的本地化副本labels.xml标签可通过XPath访问表示xslt,例如iso19139模式的/root/gui/schemas/iso19139/labels。

这个 labels.xml 文件还可以用于为自由文本字段提供下拉/选择列表形式的帮助器值。例如:

<element name="gmd:credit" id="27.0">
  <label>Credit</label>
  <description>Recognition of those who contributed to the resource(s)</description>
  <helper>
    <option value="University of Tasmania">UTAS</option>
    <option value="University of Queensland">UQ</option>
  </helper>
</element>

这将导致编辑器(通过XSLT元数据.xsl)在下拉菜单/选择菜单中显示“信用”字段及其旁边列出的帮助程序选项,如下所示:

../_images/editor-helper.png

更多关于字符串.xml

的本地化副本 strings.xml 可通过XPath访问表示xslt,例如iso19139模式的/root/gui/schemas/iso19139/strings。

添加本地化字符串后,我们新的MCP GeoNetwork插件模式包含:

extract-date-modified.xsl  extract-gml.xsd  extract-uuid.xsl
loc  present  schema-conversions.xml  schema-ident.xml  schema.xsd
schema

使用格式化程序创建演示文稿

3.0 新版功能.

参见

请参阅3.x版的格式化程序TODO部分

自定义编辑器

3.0 新版功能.

参见

参见3.x版的编辑器配置部分TODO

在当前目录中创建演示文稿xslt

3.0.0 版后已移除.

每个元数据架构都应包含显示和可能编辑属于该架构的元数据记录的xslt。这些xslt保存在 present 目录。

要在XSLT包含/导入层次结构中使用,这些XSLT必须遵循命名约定:metadata-<schema name>.xsl。例如,iso19139模式的表示xslt是 metadata-iso19139.xsl . 对于MCP,由于我们的模式名是iso19139.MCP,表示XSLT将被调用 metadata-iso19193.mcp.xsl .

演示XSLT包含的任何XSLT也应该在当前目录中(这是一个明确的约定-它不是强制性的,因为include/import url可以在oasis中映射-目录.xml对于到其他位置的架构)。

演示文稿XSLT必须具有某些XSLT模板:

  • 这个 main 必须调用的模板:metadata-<schema name>。对于iso19139的MCP配置文件,主模板如下所示(摘自metadata-iso19139)。mcp.xsl):

<xsl:template name="metadata-iso19139.mcp">
  <xsl:param name="schema"/>
  <xsl:param name="edit" select="false()"/>
  <xsl:param name="embedded"/>

  <xsl:apply-templates mode="iso19139" select="." >
    <xsl:with-param name="schema" select="$schema"/>
    <xsl:with-param name="edit"   select="$edit"/>
    <xsl:with-param name="embedded" select="$embedded" />
  </xsl:apply-templates>
</xsl:template>

正在分析此模板:

  1. 中的主元素处理模板使用name=“metadata-iso19139.mcp”元数据.xsl:元素EP。主要的元数据服务,显示和编辑,最终调用元数据-显示.xsl和元数据-编辑.xsl分别使用从Java服务传递的元数据记录。这两个xslt都通过应用元数据.xsl到根元素。elementEP模板使用模式名iso19139.mcp调用此主模式模板。

  2. 此主模板的作业设置为使用与架构名称或基本架构名称(在本例中为iso19139)匹配的模式名称声明的模板来处理元数据记录的所有元素。这种模式处理是为了确保只应用用于处理来自此架构或基本架构的元数据元素的模板。原因是几乎所有概要文件都会更改或向基本模式中的概要文件添加少量元素。因此概要文件中的大多数元数据元素都可以以基本模式进行处理。我们将在本节后面看到如何重写基本模式中元素的处理。

  • 完成体 模板,必须调用:<schema name>CompleteTab。此模板将在编辑器/查看器屏幕的左侧框架中显示除“默认”(或简单模式)和“XML视图”选项卡之外的所有选项卡。以下是MCP的一个示例:

<xsl:template name="iso19139.mcpCompleteTab">
  <xsl:param name="tabLink"/>

  <xsl:call-template name="displayTab"> <!-- non existent tab - by profile -->
    <xsl:with-param name="tab"     select="''"/>
    <xsl:with-param name="text"    select="/root/gui/strings/byGroup"/>
    <xsl:with-param name="tabLink" select="''"/>
  </xsl:call-template>

  <xsl:call-template name="displayTab">
    <xsl:with-param name="tab"     select="'mcpMinimum'"/>
    <xsl:with-param name="text"    select="/root/gui/strings/iso19139.mcp/mcpMinimum"/>
    <xsl:with-param name="indent"  select="'&#xA0;&#xA0;&#xA0;'"/>
    <xsl:with-param name="tabLink" select="$tabLink"/>
  </xsl:call-template>

  <xsl:call-template name="displayTab">
    <xsl:with-param name="tab"     select="'mcpCore'"/>
    <xsl:with-param name="text"    select="/root/gui/strings/iso19139.mcp/mcpCore"/>
    <xsl:with-param name="indent"  select="'&#xA0;&#xA0;&#xA0;'"/>
    <xsl:with-param name="tabLink" select="$tabLink"/>
  </xsl:call-template>

  <xsl:call-template name="displayTab">
    <xsl:with-param name="tab"     select="'complete'"/>
    <xsl:with-param name="text"    select="/root/gui/strings/iso19139.mcp/mcpAll"/>
    <xsl:with-param name="indent"  select="'&#xA0;&#xA0;&#xA0;'"/>
    <xsl:with-param name="tabLink" select="$tabLink"/>
  </xsl:call-template>

  ...... (same as for iso19139CompleteTab in
 GEONETWORK_DATA_DIR/schema_plugins/iso19139/present/
 metadata-iso19139.xsl) ......

</xsl:template>

此模板由名为“tab”的模板(它还添加了“default”和“XML View”选项卡)调用 INSTALL_DIR/web/geonetwork/xsl/metadata-tab-utils.xsl 使用架构名称。该XSLT还有“displayTab”模板的代码。

“mcpmimum”、“mcpCore”、“complete”等是选项卡的名称。当前或活动选项卡的名称存储在所有表示xslt都可用的全局变量“currTab”中。在根元素处理选项卡中应包含决定在特定选项卡处于活动状态时显示什么的逻辑。

  • 根元素 处理选项卡。此选项卡应与元数据记录的根元素匹配。例如,对于iso19139模式:

<xsl:template mode="iso19139" match="gmd:MD_Metadata">
  <xsl:param name="schema"/>
  <xsl:param name="edit"/>
  <xsl:param name="embedded"/>

  <xsl:choose>

  <!-- metadata tab -->
  <xsl:when test="$currTab='metadata'">
    <xsl:call-template name="iso19139Metadata">
      <xsl:with-param name="schema" select="$schema"/>
      <xsl:with-param name="edit"   select="$edit"/>
    </xsl:call-template>
  </xsl:when>

  <!-- identification tab -->
  <xsl:when test="$currTab='identification'">
    <xsl:apply-templates mode="elementEP" select="gmd:identificationInfo|geonet:child[string(@name)='identificationInfo']">
      <xsl:with-param name="schema" select="$schema"/>
      <xsl:with-param name="edit"   select="$edit"/>
    </xsl:apply-templates>
  </xsl:when>

  .........

</xsl:template>

这个模板基本上是一个很长的“choose”语句,带有“when”子句,用于测试当前定义的tab(在全局变量currTab中)的值。每个“when”子句将直接(如上面“identification”选项卡的“when”子句中所示)或通过命名模板(如上面的“metadata”选项卡中所示)显示与选项卡定义相对应的元数据元素集。对于MCP,我们的模板与上面的iso19139模板相似,只是匹配将处于打开状态。”mcp:MD_元数据“(而且处理模式可能有所不同-有关更多详细信息,请参阅下面的‘概要文件的替代XSLT设计’一节)。

  • 简明的 模板,必须调用:<schema name>Brief。此模板处理元数据记录,并从中提取元数据的非格式摘要,以用于显示搜索结果等目的。下面是eml gbif模式的一个示例(因为它相当短!):

<xsl:template match="eml-gbifBrief">
 <xsl:for-each select="/metadata/*[1]">
  <metadata>
    <title><xsl:value-of select="normalize-space(dataset/title[1])"/></title>
    <abstract><xsl:value-of select="dataset/abstract"/></abstract>

    <xsl:for-each select="dataset/keywordSet/keyword">
      <xsl:copy-of select="."/>
    </xsl:for-each>

    <geoBox>
        <westBL><xsl:value-of select="dataset/coverage/geographicCoverage/boundingCoordinates/westBoundingCoordinate"/></westBL>
        <eastBL><xsl:value-of select="dataset/coverage/geographicCoverage/boundingCoordinates/eastBoundingCoordinate"/></eastBL>
        <southBL><xsl:value-of select="dataset/coverage/geographicCoverage/boundingCoordinates/southBoundingCoordinate"/></southBL>
        <northBL><xsl:value-of select="dataset/coverage/geographicCoverage/boundingCoordinates/northBoundingCoordinate"/></northBL>
    </geoBox>
    <xsl:copy-of select="geonet:info"/>
  </metadata>
 </xsl:for-each>
</xsl:template>

正在分析此模板:

  1. 模板匹配由元数据中的mode=“brief”模板创建的元素eml gbifBrief-utils.xsl. 元数据记录将是/metadata XPath中的第一个子项。

  2. 然后处理元数据元素以生成搜索结果使用的平面XML结构-xhtml.xsl显示搜索找到的元数据记录的摘要。

再一次,对于现有模式的概要文件,使用一种略微不同的方法是有意义的,这样概要文件就不需要重复的模板。以下是metadata-iso19139中的一个示例。mcp.xsl:

<xsl:template match="iso19139.mcpBrief">
  <metadata>
    <xsl:for-each select="/metadata/*[1]">
      <!-- call iso19139 brief -->
      <xsl:call-template name="iso19139-brief"/>
      <!-- now brief elements for mcp specific elements -->
      <xsl:call-template name="iso19139.mcp-brief"/>
    </xsl:for-each>
  </metadata>
</xsl:template>

此模板将基本iso19139模式和处理特定于概要文件的元素的简短模板之间的处理分开。假设:

  1. 基本模式将<metadata>元素与其简短处理的其余部分分离,以便可以由概要文件调用它

  2. 概要文件包括指向等效元素的链接,这些元素可由基本模式用于处理公共元素,例如对于ISO19139,概要文件中的元素具有gco:同型属性提供基元素的名称,并可用于XPath匹配中,例如“gmd:MD U数据标识|* [@gco:isoType='gmd:MD_DataIdentification'] “。

  • 与特定于架构的元素匹配的模板。下面是eml gbif模式的一个示例:

<!-- keywords are processed to add thesaurus name in brackets afterwards
     in view mode -->

<xsl:template mode="eml-gbif" match="keywordSet">
  <xsl:param name="schema"/>
  <xsl:param name="edit"/>

  <xsl:choose>
    <xsl:when test="$edit=false()">
      <xsl:variable name="keyword">
        <xsl:for-each select="keyword">
          <xsl:if test="position() &gt; 1">,  </xsl:if>
          <xsl:value-of select="."/>
        </xsl:for-each>
        <xsl:if test="keywordThesaurus">
          <xsl:text> (</xsl:text>
          <xsl:value-of select="keywordThesaurus"/>
          <xsl:text>)</xsl:text>
        </xsl:if>
      </xsl:variable>
      <xsl:apply-templates mode="simpleElement" select=".">
        <xsl:with-param name="schema" select="$schema"/>
        <xsl:with-param name="edit"   select="$edit"/>
        <xsl:with-param name="text"    select="$keyword"/>
      </xsl:apply-templates>
    </xsl:when>
    <xsl:otherwise>
      <xsl:apply-templates mode="complexElement" select=".">
        <xsl:with-param name="schema" select="$schema"/>
        <xsl:with-param name="edit"   select="$edit"/>
      </xsl:apply-templates>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

正在分析此模板:

  1. 在视图模式下,集合中的各个关键字连接到逗号分隔的字符串中,该字符串的末尾用括号括住同义词库的名称。

  2. 在编辑模式下,关键字集作为一个复杂元素处理,即用户可以添加包含内容和单个同义词库名称的单个关键字元素。

  3. 这是可以对元数据记录中的元素执行的处理类型的示例。

对于概要文件,可以用相同的方式定义元素的模板,只是模板将以基本架构的模式进行处理。下面是一个示例,显示了用于处理mcp:修订日期元素:

<xsl:template mode="iso19139" match="mcp:revisionDate">
   <xsl:param name="schema"/>
   <xsl:param name="edit"/>

   <xsl:choose>
     <xsl:when test="$edit=true()">
       <xsl:apply-templates mode="simpleElement" select=".">
         <xsl:with-param name="schema"  select="$schema"/>
         <xsl:with-param name="edit"   select="$edit"/>

   ......

如果配置文件的模板要覆盖基本架构中的模板,则可以在配置文件的表示XSLT中定义该模板,其中priority属性设置为高位,XPath条件确保仅为配置文件处理该模板。例如在MCP中,我们可以覆盖gmd:地理边界框在metadata-iso19139.xsl中,通过在metadata-iso19139中定义模板。mcp.xsl具体如下:

<xsl:template mode="iso19139" match="gmd:EX_GeographicBoundingBox[starts-with(//geonet:info/schema,'iso19139.mcp')]" priority="3">

......

最后,概要文件还可以扩展基本模式中的一些现有代码列表。这些扩展的代码列表应该保存在本地化的代码列表.xml. 例如,在iso19139中,这些代码表通常附加到如下元素:

<gmd:role>
  <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="custodian">custodian</gmd:CI_RoleCode>
</gmd:role>

处理这些元素的模板在iso19139表示XSLT中 GEONETWORK_DATA_DIR/schema_plugins/iso19139/present/metadata-iso19139.xsl . 这些模板使用元素的名称(例如。gmd:CI_RoleCode公司)以及代码列表XPath(例如/root/gui/schemas/iso19139/codelists),用于在编辑时构建选择列表/下拉菜单,并在查看时显示完整的描述。请参阅名为“iso19139Codelist”的模板附近的模板。这些模板可以处理任何配置文件的扩展代码列表,因为它们:

  • 匹配具有具有属性codeList的子元素的任何元素

  • 在代码列表XPath中使用模式名

  • 如果配置文件代码列表没有所需的代码列表,则返回到基iso19139模式

但是,如果不需要本地化代码列表,则直接从 gmxCodelists.xml 文件。这实际上是MCP所采用的解决方案。这个 gmxCodelists.xml 文件使用如下语句包含在MCP的演示xslt中:

<xsl:variable name="codelistsmcp"
              select="document('../schema/resources/Codelist/gmxCodelists.xml')"/>

检查中的代码列表处理模板 metadata-iso19139.mcp.xsl 看看这是怎么回事。

用于概要文件的另一种XSLT设计

在所有强大的语言中,都有不止一种方法可以实现特定的目标。这种替代的XSLT设计用于处理概要文件。备选方案背后的想法是基于以下关于地理网络xslt的观察结果:

  1. 所有元素最初都由模式“elementEP”中的apply templates处理。

  2. 模板“elementEP”(参见 INSTALL_DIR/web/geonetwork/xsl/metadata.xsl )最后打电话给 main 架构/配置文件的模板。

  3. 主模板最初可以在特定于概要文件的模式中处理元素,如果处理不成功(即没有模板匹配,因此没有返回HTML元素),则在基本架构的模式中处理元素。

这种设计的优点是,重写基本架构中元素的模板不需要对架构名称进行优先级属性或XPath条件检查。

下面是基本模式为iso19139的MCP(iso19139.MCP)的示例:

  • 这个 main 模板,必须调用:metadata-iso19139。mcp.xsl:

<!-- main template - the way into processing iso19139.mcp -->
<xsl:template name="metadata-iso19139.mcp">
  <xsl:param name="schema"/>
  <xsl:param name="edit" select="false()"/>
  <xsl:param name="embedded"/>

    <!-- process in profile mode first -->
    <xsl:variable name="mcpElements">
      <xsl:apply-templates mode="iso19139.mcp" select="." >
        <xsl:with-param name="schema" select="$schema"/>
        <xsl:with-param name="edit"   select="$edit"/>
        <xsl:with-param name="embedded" select="$embedded" />
      </xsl:apply-templates>
    </xsl:variable>

    <xsl:choose>

      <!-- if we got a match in profile mode then show it -->
      <xsl:when test="count($mcpElements/*)>0">
        <xsl:copy-of select="$mcpElements"/>
      </xsl:when>

      <!-- otherwise process in base iso19139 mode -->
      <xsl:otherwise>
        <xsl:apply-templates mode="iso19139" select="." >
          <xsl:with-param name="schema" select="$schema"/>
          <xsl:with-param name="edit"   select="$edit"/>
          <xsl:with-param name="embedded" select="$embedded" />
        </xsl:apply-templates>
      </xsl:otherwise>
    </xsl:choose>
</xsl:template>

正在分析此模板:

  1. 中的主元素处理模板使用name=“metadata-iso19139.mcp”元数据.xsl:元素EP。主要的元数据服务,显示和编辑,最终调用元数据-显示.xsl和元数据-编辑.xsl分别使用从Java服务传递的元数据记录。这两个xslt都通过应用元数据.xsl到根元素。elementEP使用模式名调用适当的主模式模板。

  2. 此主模板的作业设置为处理元数据配置文件的所有元素。处理以两种模式之一进行。首先,在剖面模式(iso19139.mcp)下对元素进行处理。如果找到匹配项,则将返回HTML元素并将其复制到输出文档中。如果没有返回HTML元素,则在基本模式iso19139中处理该元素。

  • 与特定于配置文件的元素匹配的模板具有模式iso19139.mcp:

<xsl:template mode="iso19139.mcp" match="mcp:taxonomicElement">
  <xsl:param name="schema"/>
  <xsl:param name="edit"/>

  .....
</xsl:template>
  • 重写基本架构中元素的模板在概要模式iso19139.mcp中处理

<xsl:template mode="iso19139.mcp" match="gmd:keyword">
  <xsl:param name="schema"/>
  <xsl:param name="edit"/>

  .....
</xsl:template>

注意,配置文件的模板头的设计比用于原始设计的模板头的设计更简单?priority属性或模式XPath条件都不是必需的,因为我们使用的模式与基本模式不同。

  • 为了支持两种模式下的处理,我们需要向配置文件模式iso19139.mcp添加一个空模板,如下所示:

<xsl:template mode="iso19139.mcp" match="*|@*"/>

此模板将匹配在配置文件模式iso19139.mcp中没有特定模板的所有元素。这些元素将在基本模式iso19139中处理,因为空模板不返回任何内容(参见上面的主模板讨论)。

原始设计中有关标签等的讨论的其余部分适用于替代设计,此处不再重复。

CSW表示XSLTs

可以要求CSW服务器在许多输出模式中提供记录。GeoNetwork支持的两个功能是:

从每一个输出模式中 简明的总结full 可以请求元素集。

这些输出模式和元素集作为xslt在geonnetwork中实现,并存储在“present”目录的“csw”子目录中。ogc输出模式xslt作为ogc实现-简介.xsl,ogc摘要和ogc-完整.xsl. iso输出模式xslt作为iso实现-简介.xsl,国际标准化组织-summary.xsl摘要和iso-完整.xsl.

要为MCP创建这些xslt,最好的选择是从基本模式iso19139复制和修改csw表示xslt。

在创建表示xslt之后,我们新的MCP geonnetwork插件模式包含:

extract-date-modified.xsl  extract-gml.xsd  extract-uuid.xsl
loc  present  schema-conversions.xml  schema-ident.xml  schema.xsd
schema

创建索引-字段.xsl为元数据记录中的内容编制索引

这个XSLT索引元数据记录中元素的内容。这个XSLT的本质是从元数据记录中选择元素并将它们映射到lucene索引字段名。GeoNetwork中使用的lucene索引字段名如下:

Lucene索引字段名

描述

摘要

元数据摘要

任何

来自所有元数据元素的内容(对于自由文本)

变更日期

修改元数据记录的日期

创建日期

创建元数据记录的日期

分母

数据分辨率中的尺度分母

下载

元数据记录是否附加了可下载的资源?(0或1)

数字的

元数据记录是否以数字格式分发/提供?(0或1)

东界

东边界框经度

关键字

元数据关键字

元数据标准名

元数据标准名

北界

北边界框纬度

运营商

描述由服务操作的数据集的元数据记录的Uuid

组织名称

联系人信息中列出的组织名称

父母身份

父元数据记录的Uuid

纸张

元数据记录是否以纸质格式分发/提供?(0或1)

协议

在线资源访问协议

公布日期

资源发布日期

南部边界

南边界框纬度

空间表示类型

矢量、栅格等

临时扩展域

时间范围开始

温度延伸

时间范围结束

标题

元数据标题

托皮卡

元数据主题类别

类型

元数据层次结构级别(如果未知,则应为数据集)

威斯特布尔

西边界框经度

例如,下面是在元数据元素之间创建的映射mcp:修订日期和lucene索引字段更改日期:

<xsl:for-each select="mcp:revisionDate/*">
  <Field name="changeDate" string="{string(.)}" store="true" index="true"/>
</xsl:for-each>

注意,我们正在创建一个新的XML文档。GeoNetwork读取此文档中的字段元素以创建用于索引的Lucene文档对象(请参阅GeoNetwork源中的SearchManager类)。

再一次,由于MCP是ISO19115/19139的一个概要,所以最好修改 index-fields.xsl 从模式iso19139处理MCP的名称空间和其他元素。

在此阶段,我们针对MCP的新GeoNetwork插件模式包含:

extract-date-modified.xsl  extract-gml.xsd  extract-uuid.xsl
index-fields.xsl  loc  present  schema-conversions.xml  schema-ident.xml
schema.xsd  schema

创建示例数据目录

这是一个简单的目录。将包含示例元数据的MEF文件放在此目录中。确保他们有 .mef 后缀。

MEF文件是包含元数据、缩略图、基于文件的联机资源和描述内容的信息文件的zip存档。本手册的下一节将更详细地讨论MEF文件的内容。

可以使用“管理”菜单将此目录中的示例数据添加到目录中。

在此阶段,我们针对MCP的新GeoNetwork插件模式包含:

extract-date-modified.xsl  extract-gml.xsd  extract-uuid.xsl
index-fields.xsl  loc  present  sample-data schema-ident.xml  schema.xsd
schema

创建schematrons来描述MCP条件

Schematrons是用于检查元数据记录中的条件和内容的规则,是GeoNetwork使用的两阶段验证过程的一部分。

Schematron规则是在前面签出的schematrons目录中创建的-请参见 制备 上面。

一个示例规则是:

<!-- anzlic/trunk/gml/3.2.0/gmd/spatialRepresentation.xsd-->
<!-- TEST 12 -->
<sch:pattern>
  <sch:title>$loc/strings/M30</sch:title>
  <sch:rule context="//gmd:MD_Georectified">
    <sch:let name="cpd" value="(gmd:checkPointAvailability/gco:Boolean='1' or gmd:checkPointAvailability/gco:Boolean='true') and
      (not(gmd:checkPointDescription) or count(gmd:checkPointDescription[@gco:nilReason='missing'])>0)"/>
    <sch:assert
      test="$cpd = false()"
      >$loc/strings/alert.M30</sch:assert>
    <sch:report
      test="$cpd = false()"
      >$loc/strings/report.M30</sch:report>
  </sch:rule>
</sch:pattern>

对于大多数地理网络,该规则的输出可以本地化为不同的语言。相应的本地化字符串是:

<strings>

  .....

  <M30>[ISOFTDS19139:2005-TableA1-Row15] - Check point description required if available</M30>

  .....

  <alert.M30><div>'checkPointDescription' is mandatory if 'checkPointAvailability' = 1 or true.</div></alert.M30>

  .....

  <report.M30>Check point description documented.</report.M30>

  .....

</strings>

在schematrons目录中添加schematron规则的过程:

  1. 将schematron规则放入“规则”中。命名转换是'schematron rules-<suffix>.sch'例如。 schematron-rules-iso-mcp.sch . 将规则断言的本地化字符串放入“rules/loc/<language_prefix>”。

Schematron规则在加载模式时编译。

在此阶段,我们针对MCP的新GeoNetwork插件模式包含:

extract-date-modified.xsl  extract-gml.xsd  extract-uuid.xsl
index-fields.xsl  loc  present  sample-data  schema-conversions.xml
schema-ident.xml  schema.xsd  schema  schematron/schematron-rules-iso-mcp.sch

添加创建和编辑MCP元数据所需的组件

到目前为止,我们已经添加了GeoNetwork识别、查看和验证MCP元数据记录所需的所有组件。现在,我们将添加创建和编辑MCP元数据记录所需的其余组件。

我们将从设置MCP元数据记录中各种元素的内容的xslt开始。

创建集合-uuid.xsl

  • set-uuid.xsl -此XSLT将元数据记录的UUID作为参数,并将其写入元数据记录的相应元素中。对于MCP,此元素与基本ISO模式(在GeoNetwork中称为iso19139)相同,即gmd:文件标识符。但是,由于MCP在根元素上使用不同的名称空间,因此需要修改这个XSLT。

创建提取、设置和取消设置缩略图xslt

如果元数据记录可以有缩略图或浏览图形链接,则需要添加提取、设置和取消设置此信息的xslt,以便可以使用GeoNetwork缩略图编辑界面。

支持此接口的三个xslt是:

  • extract-thumbnails.xsl -此XSLT从元数据记录中提取缩略图/浏览图形,将其转换为所有元数据模式都相同的通用XML。元素需要有geonnetwork能够理解的内容。以下是iso19139的缩略图界面所期望的示例(我们将复制MCP的此要求):

<gmd:graphicOverview>
  <gmd:MD_BrowseGraphic>
    <gmd:fileName>
      <gco:CharacterString>bluenet_s.png</gco:CharacterString>
    </gmd:fileName>
    <gmd:fileDescription>
      <gco:CharacterString>thumbnail</gco:CharacterString>
    </gmd:fileDescription>
    <gmd:fileType>
      <gco:CharacterString>png</gco:CharacterString>
    </gmd:fileType>
  </gmd:MD_BrowseGraphic>
</gmd:graphicOverview>
<gmd:graphicOverview>
  <gmd:MD_BrowseGraphic>
    <gmd:fileName>
      <gco:CharacterString>bluenet.png</gco:CharacterString>
    </gmd:fileName>
    <gmd:fileDescription>
      <gco:CharacterString>large_thumbnail</gco:CharacterString>
    </gmd:fileDescription>
    <gmd:fileType>
      <gco:CharacterString>png</gco:CharacterString>
    </gmd:fileType>
  </gmd:MD_BrowseGraphic>
</gmd:graphicOverview>

什么时候? extract-thumbnails.xsl 运行时,它将根据此信息创建一个小的XML层次结构,该层次结构如下所示:

<thumbnail>
  <large>
    bluenet.png
  </large>
  <small>
    bluenet_s.png
  </small>
</thumbnail>
  • set-thumbnail.xsl -此XSLT执行与提取相反的操作-缩略图.xsl. 它采用geonnetwork使用的简化的通用XML结构来描述大小缩略图,并创建表示它们所需的元数据记录元素。这是一个比extract稍微复杂一点的XSLT-缩略图.xsl因为需要保留元数据记录中的现有元素,并且需要在正确的位置创建新元素。

  • unset-thumbnail.xsl -此XSLT针对并删除描述特定缩略图的元数据记录的元素。保留元数据记录的其余元素。

由于MCP是ISO19115/19139的一个概要文件,创建这些xslt的最简单方法是从iso19139模式复制它们,并根据MCP所需的名称空间更改修改它们。

正在创建更新-。。。xslt

  • update-child-from-parent-info.xsl -当子记录需要将内容从父记录复制到其中时,将运行此XSLT。它是一个XSLT,可以更改一些元素的内容,而不更改其余元素。此XSLT的行为将取决于父记录的哪些元素将用于更新子记录的元素。

  • update-fixed-info.xsl -此XSLT在编辑后运行,以修复元数据记录中的某些元素和内容。对于MCP,我们希望采取一些措施来“硬连线”某些元素和内容。为此,XSLT使用以下处理逻辑:

if the element is one that we want to process then
  add a template with a match condition for that element and process it
else copy the element to output

由于MCP是ISO19115/19139的一个概要文件,创建这个XSLT的最简单的方法是复制update fixed-信息.xsl从iso19139模式中修改它以适应MCP所需的名称空间更改,然后包括我们想要的处理。

MCP处理的一个简单示例是确保gmd:metadataStandardName和gmd:metadataStandardVersion元素具备确保记录被识别为MCP所需的内容。为此,我们可以添加两个模板,如下所示:

<xsl:template match="gmd:metadataStandardName" priority="10">
  <xsl:copy>
    <gco:CharacterString>Australian Marine Community Profile of ISO 19115:2005/19139</gco:CharacterString>
  </xsl:copy>
</xsl:template>

<xsl:template match="gmd:metadataStandardVersion" priority="10">
  <xsl:copy>
    <gco:CharacterString>MCP:BlueNet V1.5</gco:CharacterString>
  </xsl:copy>
</xsl:template>

处理方式 update-fixed-info.xsl 可以使用 自动修复 系统配置菜单中的复选框。默认情况下,它处于启用状态。

中处理的一些重要任务 upgrade-fixed-info.xsl

  • 为带有附加文件的元数据创建url(例如,iso19139中带有“下载文件”的onlineResources)

  • 设置日期戳/修订日期

  • 设置代码列表URL以指向联机ISO代码列表目录

  • 将默认空间参照系统属性添加到空间范围

MCP所需的特定任务 update-fixed-info.xsl 将自动创建一个联机资源,该资源的URL指向元数据.show参数设置为元数据uuid的服务。这需要对修复的更新进行一些更改-信息.xsl与iso19139一起提供。特别地:

  • 元数据记录中可能不存在父元素

  • 元数据真值点URL的联机资源元素的处理不应干扰联机资源元素的其他处理

与其描述实现此功能所需的各个步骤和XSLT语言所需的决策,不如看看 update-fixed-info.xsl 已经存在于iso19139.MCP目录中的MCP模式中,请参阅上面的点。

创建模板目录

这是一个简单的目录。将要用作模板的XML元数据文件放在此目录中。确保他们有 .xml 后缀。可以使用“管理”菜单将此目录中的模板添加到目录中。

编辑器行为:添加模式-建议.xml和模式-替换.xml

  • schema-suggestions.xml -构建编辑器表单时,geonnetwork高级编辑器的默认行为是将元数据记录中未包含的元素显示为未展开的元素。要将这些元素添加到记录中,用户必须单击元素名称旁边的“+”图标。这可能是乏味的,尤其是一些元数据标准有嵌套在其他标准中的元素(即复杂元素)。架构-建议.xml文件允许您指定编辑器应自动展开的元素。这方面的一个例子是ISO19115/19139标准中的在线资源信息。如果将以下XML添加到 schema-suggestions.xml 文件:

<field name="gmd:CI_OnlineResource">
  <suggest name="gmd:protocol"/>
  <suggest name="gmd:name"/>
  <suggest name="gmd:description"/>
</field>

这样做的效果是,当联机资源元素展开时,协议的输入字段(下拉列表/选择列表)、名称和描述将自动显示在编辑器中。

再一次,一个很好的开始 schema-suggestions.xml MCP的文件是 schema-suggestions.xml iso19139模式的文件。

  • schema-substitutes.xml -以前的回忆 创建架构目录并架构.xsd文件 第节,我们用来扩展基ISO19115/19139模式的方法是扩展基类型,用扩展基类型定义一个新元素,并允许新元素替换基元素。因此,例如,在MCP中,我们希望添加一个新的资源约束元素,该元素保存Creative Commons和其他Commons类型的许可信息。这要求扩展MD_约束类型并mcp:MD_Commons公司可以替换为gmd:MD U约束。下面的XSD片段显示了这一点:

<xs:complexType name="MD_CommonsConstraints_Type">
  <xs:annotation>
    <xs:documentation>
      Add MD_Commons as an extension of gmd:MD_Constraints_Type
    </xs:documentation>
  </xs:annotation>
  <xs:complexContent>
    <xs:extension base="gmd:MD_Constraints_Type">
      <xs:sequence minOccurs="0">
        <xs:element name="jurisdictionLink" type="gmd:URL_PropertyType" minOccurs="1"/>
        <xs:element name="licenseLink" type="gmd:URL_PropertyType" minOccurs="1"/>
        <xs:element name="imageLink" type="gmd:URL_PropertyType" minOccurs="1"/>
        <xs:element name="licenseName" type="gco:CharacterString_PropertyType" minOccurs="1"/>
        <xs:element name="attributionConstraints" type="gco:CharacterString_PropertyType" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="derivativeConstraints" type="gco:CharacterString_PropertyType" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="commercialUseConstraints" type="gco:CharacterString_PropertyType" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="collectiveWorksConstraints" type="gco:CharacterString_PropertyType" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="otherConstraints" type="gco:CharacterString_PropertyType" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute ref="mcp:commonsType" use="required"/>
      <xs:attribute ref="gco:isoType" use="required" fixed="gmd:MD_Constraints"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:element name="MD_Commons" substitutionGroup="gmd:MD_Constraints" type="mcp:MD_CommonsConstraints_Type"/>

对于MCP记录,GeoNetwork编辑器将显示从替换组中选择的元素gmd:MD_约束向元数据文档添加“资源约束”时。现在包括mcp:MD U Commons公司。

../_images/Editor-Constraints-Choices.png

注意,通过类似的过程,另外两个现在被否决的、支持MD_Commons的元素也被添加为MD_约束的替代。如果有必要限制此菜单中显示的选项,比如删除不推荐的元素并将选项限制为合法、安全和公共,那么可以通过模式中的以下XML片段来完成-替换.xml文件:

<field name="gmd:MD_Constraints">
  <substitute name="gmd:MD_LegalConstraints"/>
  <substitute name="gmd:MD_SecurityConstraints"/>
  <substitute name="mcp:MD_Commons"/>
</field>

此更改的结果如下所示。

../_images/Editor-Constraints-Choices-Modified.png

再次强调,在构建模式时,这是一个很好的起点-替换.xmlMCP的文件是模式-替换.xmliso19139模式的文件。

添加组件以支持将元数据记录转换为其他架构

创建转换目录

如果新的GeoNetwork插件模式支持将元数据记录动态转换为其他模式,那么应该创建转换目录,并使用适当的xslt填充该目录。

支持OAIPMH转换

GeoNetwork中的OAIPMH服务器可以从GeoNetwork已知的任何模式中传递元数据记录。如果存在将元数据记录转换为该模式的XSLT,还可以将其配置为传递geonnetwork不知道的模式。文件 INSTALL_DIR/web/geonetwork/WEB-INF/config-oai-prefixes.xml 描述可由XSLT生成的架构(在OAI语言中称为前缀)。此文件内容的简单示例如下所示:

<schemas>
  <schema prefix="oai_dc" nsUrl="http://www.openarchives.org/OAI/2.0/"
          schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc.xsd"/>
</schemas>

在上面所示的前缀oai_dc的情况下,如果带有前缀的模式转换器 oai_dc 存在于 schema-conversions.xml 地理网络架构的文件,则属于此架构的记录将被转换并包含在 oai_dc 前缀。见 创建架构-转换.xml文件 更多信息。

要为MCP添加oai_dc支持,最简单的方法是复制oai_dc.xsl格式从iso19139模式的convert目录中,修改它以处理MCP的不同名称空间和附加元素,并将其添加到 schema-conversions.xml MCP文件。