From: <jo...@us...> - 2011-02-17 06:53:15
|
Revision: 7277 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=7277&view=rev Author: jonescc Date: 2011-02-17 06:53:06 +0000 (Thu, 17 Feb 2011) Log Message: ----------- Include updated RIF-CS conversion for anzlic/mcp and bug fixes (Thanks to Pauline Mak) Modified Paths: -------------- sandbox/tags/BlueNetMEST-1.4.4-260111/installer/build.xml sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/Lib.java sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/GetRecord.java sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/ListRecords.java sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/loc/en/xml/about.xml sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/validation/oai/schemas.xml Added Paths: ----------- sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rif.xsl sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139.ADO/convert/rif.xsl sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139.mcp/convert/rif.xsl sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139.wmo/convert/rif.xsl Removed Paths: ------------- sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rifcs.xsl sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139.ADO/convert/rifcs.xsl sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139.mcp/convert/rifcs.xsl sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139.wmo/convert/rifcs.xsl Modified: sandbox/tags/BlueNetMEST-1.4.4-260111/installer/build.xml =================================================================== --- sandbox/tags/BlueNetMEST-1.4.4-260111/installer/build.xml 2011-02-17 02:04:30 UTC (rev 7276) +++ sandbox/tags/BlueNetMEST-1.4.4-260111/installer/build.xml 2011-02-17 06:53:06 UTC (rev 7277) @@ -31,7 +31,7 @@ <property name="project" value="BlueNetMEST" /> <property name="version" value="1.4.4" /> - <property name="subVersion" value="1.4.3+7220" /> + <property name="subVersion" value="7277" /> <property name="javaVersion" value="1.6.0" /> <!-- Minimum version required --> <property name="jre_url" value="http://java.sun.com/javase/downloads/index.jsp" /> <property name="OS" value="Compiled on ${os.name} (${osys})" /> Modified: sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/Lib.java =================================================================== --- sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/Lib.java 2011-02-17 02:04:30 UTC (rev 7276) +++ sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/Lib.java 2011-02-17 06:53:06 UTC (rev 7277) @@ -91,7 +91,8 @@ //-------------------------------------------------------------------------- - public static Element transform(String schema, Element md, String uuid, String changeDate, String appPath, String targetFormat, String baseUrl, String siteUrl) throws Exception { + public static Element transform(String schema, Element md, String uuid, String changeDate, String appPath, String targetFormat, String baseUrl, + String siteUrl, String siteName) throws Exception { //--- setup environment @@ -101,6 +102,7 @@ env.addContent(new Element("changeDate").setText(changeDate)); env.addContent(new Element("baseURL") .setText(baseUrl)); env.addContent(new Element("siteURL") .setText(siteUrl)); + env.addContent(new Element("siteName") .setText(siteName)); //--- setup root element Modified: sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/GetRecord.java =================================================================== --- sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/GetRecord.java 2011-02-17 02:04:30 UTC (rev 7276) +++ sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/GetRecord.java 2011-02-17 06:53:06 UTC (rev 7277) @@ -104,7 +104,7 @@ md.setAttribute("schemaLocation", schemaLoc, OaiPmh.Namespaces.XSI); } else { if (Lib.existsConverter(schema, context.getAppPath(), prefix)) { - md = Lib.transform(schema, md, uuid, changeDate, context.getAppPath(), prefix, context.getBaseUrl(), dm.getSiteURL()); + md = Lib.transform(schema, md, uuid, changeDate, context.getAppPath(), prefix, context.getBaseUrl(), dm.getSiteURL(), gc.getSiteName()); } else { throw new CannotDisseminateFormatException("Unknown prefix : "+ prefix); } Modified: sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/ListRecords.java =================================================================== --- sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/ListRecords.java 2011-02-17 02:04:30 UTC (rev 7276) +++ sandbox/tags/BlueNetMEST-1.4.4-260111/src/org/fao/geonet/kernel/oaipmh/services/ListRecords.java 2011-02-17 06:53:06 UTC (rev 7277) @@ -128,7 +128,7 @@ md.setAttribute("schemaLocation", schemaLoc, OaiPmh.Namespaces.XSI); } else { if (Lib.existsConverter(schema, context.getAppPath(), prefix)) { - md = Lib.transform(schema, md, uuid, changeDate, context.getAppPath(), prefix, context.getBaseUrl(), dm.getSiteURL()); + md = Lib.transform(schema, md, uuid, changeDate, context.getAppPath(), prefix, context.getBaseUrl(), dm.getSiteURL(), gc.getSiteName()); } else { return null; } Modified: sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/loc/en/xml/about.xml =================================================================== --- sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/loc/en/xml/about.xml 2011-02-17 02:04:30 UTC (rev 7276) +++ sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/loc/en/xml/about.xml 2011-02-17 06:53:06 UTC (rev 7277) @@ -1,23 +1,45 @@ -<?xml version="1.0" encoding="UTF-8"?> -<help> - <content> - <h1>About the BlueNet MEST and GeoNetwork opensource</h1> - <p>This site is powered by the <a href="http://anzlicmet.bluenet.utas.edu.au -" target="_blank">BlueNet MEST</a>. The MEST is an enhanced version of <a href=" -http://geonetwork-opensource.org" target="_blank">GeoNetwork opensource 2.2</a>. Amongst other things, these enhancements provide support for the following profiles of the AS/NZS-19115 geographic metadata standard:</p> -<ul> -<li>the ANZLIC profile (version 1.1)</li> -<li>the Australian Marine Community Profile (MCP) (BlueNet version 1.4)</li> -<li>the Australian Defence Organisation (ADO) Profile (version 1.0.3).</li> -<li>the World Meteorological Organisation (WMO) Core Profile (version 1.0).</li> -</ul> -<p>which are implemented using the xml format in the ISO19139 standard. In addition, this version of the MEST supports:</p> -<ul> -<li>sensorML - a gml application schema for sensor descriptions.</li> -</ul> - <p>The enhancements were done by the <a href="http://www.bluenet.org.au" target="_blank">BlueNet</a> project.</p> - <p>The application of the BlueNet MEST as the Australian Government Metadata Entry Tool and the ANZLIC Metadata Entry Tool is the result of collaboration between the <a href="http://www.osdm.gov.au" target="_blank">Australian Office for Spatial Data Management (OSDM)</a>, <a href="http://anzlic.org.au" target="_blank">ANZLIC - the spatial information council</a>, <a href="http://www.ga.gov.au" target="_blank">GeoScience Australia</a> and the <a href="http://www.bluenet.org.au" target="_blank">BlueNet project</a>.</p> - <p>A discussion list for bugs and issues called anzlicmet-l is available - click on the following link to find out how to subscribe <a href="mailto:anz...@li...">anz...@li...</a>. For more information please contact your local site admin through the 'Contact Us' button in the banner.</p> - <p><a href="http://geonetwork-opensource.org" target="_blank">Read more about GeoNetwork opensource here...</a></p> - </content> -</help> +<?xml version="1.0" encoding="UTF-8"?> +<help> + <content> + +<h1>About the 'ANZ-MEST software'(renamed from 'BlueNetMEST software' in 2011-01) and GeoNetwork opensource</h1> + +<p>This site is powered by the <a href="http://anzlicmet.bluenet.utas.edu.au" target="_blank">'ANZ-MEST software'</a> + version 1.4.4, otherwise known as the 'MEST' [Metadata Entry and Search Tool], which is an enhanced version of <a href=" +http://geonetwork-opensource.org" target="_blank">GeoNetwork opensource software v.2.2</a>.</p> +<p>Amongst other things, MEST enhancements (distinguishing it from GeoNetwork trunk software) include support for:</p> +<p>the following profiles of the AS/NZS-19115 geographic metadata standard (implemented using the xml format in the ISO19139 standard):</p> +<ul> +<li>the ANZLIC profile (version 1.1)</li> +<li>the Australian Marine Community Profile (MCP) (BlueNet version 1.4)</li> +<li>the Australian Defence Organisation (ADO) Profile (version 1.0.3).</li> +<li>the World Meteorological Organisation (WMO) Core Profile (version 1.0).</li> +</ul> +<p>and</p> +<ul> +<li>sensorML - a gml application schema for sensor descriptions.</li> +</ul> + +<p>Contributions to the 'MEST' enhancements have been from a number of the Australian government funded projects, including: +<a href="http://www.bluenet.org.au" target="_blank">BlueNet</a> (ended 2009), MACDDAP and +<a href="http://imos.org.au/emii.html" target="_blank">IMOS-eMII</a> projects. Major ongoing contributions (funded under these projects and CSIRO[CMAR]) have been by Simon Pigot. Since 2009, ongoing contributions have also been from the IMOS and MACDDAP project staff. +A number of other enhancements have come from staff at ANDS, AODN, AIMS, CSIRO IM&T, and even WMO (World Met.Organisation). +</p> + +<p>The 'ANZ-MEST software' was adopted as the Australian Government ANZLIC Metadata Entry Tool in 2009. +</p> + +<p> +Note that most aspects of this 'MEST' branch of 'GeoNetwork' have already been contributed back to the GeoNetwork 'trunk' software. The major differences include 'metadata profile' support (expected to be incorporated into trunk in late 2011, by using a 'schema plugin' approach), and cosmetic changes (layout; field display, linking and wording; popups, etc). +</p> + +<p> +MEST software can be downloaded from + <a href="http://anzlicmet.bluenet.utas.edu.au" target="_blank">here</a>. A discussion list for bugs and issues called anzlicmet-l is available - click on the following link to find out how to subscribe <a href="mailto:anz...@li...">anz...@li...</a>. +For more information, please contact your local site admin through the 'Contact Us' button in the banner. +</p> + +<p><br/><a href="http://geonetwork-opensource.org" target="_blank">Read more about GeoNetwork opensource here...</a></p> + + </content> +</help> Added: sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rif.xsl =================================================================== --- sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rif.xsl (rev 0) +++ sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rif.xsl 2011-02-17 06:53:06 UTC (rev 7277) @@ -0,0 +1,801 @@ +<?xml version="1.0"?> +<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gmd="http://www.isotc211.org/2005/gmd" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:gml="http://www.opengis.net/gml" + xmlns:gco="http://www.isotc211.org/2005/gco" + xmlns:gts="http://www.isotc211.org/2005/gts" + xmlns:geonet="http://www.fao.org/geonetwork" + xmlns:gmx="http://www.isotc211.org/2005/gmx" + xmlns:oai="http://www.openarchives.org/OAI/2.0/" + xmlns="http://ands.org.au/standards/rif-cs/registryObjects"> + +<!-- stylesheet to convert iso19139 in OAI-PMH ListRecords response to RIF-CS --> + +<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> + +<xsl:strip-space elements="*"/> + +<!--xsl:template match="oai:metadata|oai:ListRecords|oai:record"> + <xsl:apply-templates/> +</xsl:template--> + + +<!--xsl:template match="oai:OAI-PMH"> + <xsl:element name="registryObjects"> + <xsl:attribute name="xsi:schemaLocation"> + <xsl:text>http://ands.org.au/standards/iso2146/registryObjects http://services.ands.org.au/home/orca/schemata/registryObjects.xsd</xsl:text> + </xsl:attribute> + <xsl:apply-templates/> + </xsl:element> +</xsl:template--> + +<xsl:template match="root"> + <xsl:apply-templates/> +</xsl:template> + +<xsl:template match="gmd:MD_Metadata"> + <xsl:element name="registryObjects"> + <xsl:attribute name="xsi:schemaLocation"> + <xsl:text>http://ands.org.au/standards/rif-cs/registryObjects http://services.ands.org.au/documentation/rifcs/schema/registryObjects.xsd</xsl:text> + </xsl:attribute> + <xsl:apply-templates select="." mode="collection"/> + </xsl:element> +</xsl:template> + +<xsl:template match="gmd:voice[not(@gco:nilReason)]"> + <xsl:element name="electronic"> + <xsl:attribute name="type"> + <xsl:text>voice</xsl:text> + </xsl:attribute> + <xsl:element name="value"> + <xsl:value-of select="concat('tel:',translate(translate(.,'+',''),' ','-'))"/> + </xsl:element> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:facsimile[not(@gco:nilReason)]"> + <xsl:element name="electronic"> + <xsl:attribute name="type"> + <xsl:text>fax</xsl:text> + </xsl:attribute> + <xsl:element name="value"> + <xsl:value-of select="concat('tel:',translate(translate(.,'+',''),' ','-'))"/> + </xsl:element> + </xsl:element> +</xsl:template> + +<xsl:template match="gmd:electronicMailAddress[not(@gco:nilReason)]"> + <xsl:element name="electronic"> + <xsl:attribute name="type"> + <xsl:text>email</xsl:text> + </xsl:attribute> + <xsl:element name="value"> + <xsl:value-of select="."/> + </xsl:element> + </xsl:element> +</xsl:template> + +<xsl:template match="gmd:URL[not(@gco:nilReason)]"> + <xsl:element name="electronic"> + <xsl:attribute name="type"> + <xsl:text>url</xsl:text> + </xsl:attribute> + <xsl:element name="value"> + <xsl:value-of select="."/> + </xsl:element> + </xsl:element> +</xsl:template> + + + +<xsl:template match="gml:timePosition[not(@gco:nilReason)]"> + <xsl:choose> + <xsl:when test='contains(., "T")'> + <xsl:value-of select="."/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat(., 'T00:00:00Z')"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template match="gml:beginPosition[not(@gco:nilReason)]"> + <xsl:choose> + <xsl:when test='contains(., "T")'> + <xsl:value-of select="."/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat(., 'T00:00:00Z')"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template match="gml:endPosition[not(@gco:nilReason)]"> + <xsl:choose> + <xsl:when test='contains(., "T")'> + <xsl:value-of select="."/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat(., 'T00:00:00Z')"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + + +<xsl:template match="gmd:organisationName[not(@gco:nilReason)]"> + <xsl:element name="addressPart"> + <xsl:attribute name="type"> + <xsl:text>locationDescriptor</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + + +<xsl:template match="deliveryPoint[not(@gco:nilReason)]"> + <xsl:element name="addressPart"> + <xsl:attribute name="type"> + <xsl:text>addressLine</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:city[not(@gco:nilReason)]"> + <xsl:element name="addressPart"> + <xsl:attribute name="type"> + <xsl:text>suburbOrPlaceOrLocality</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:administrativeArea[not(@gco:nilReason)]"> + <xsl:element name="addressPart"> + <xsl:attribute name="type"> + <xsl:text>stateOrTerritory</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:postalCode[not(@gco:nilReason)]"> + <xsl:element name="addressPart"> + <xsl:attribute name="type"> + <xsl:text>postCode</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:country[not(@gco:nilReason)]"> + <xsl:element name="addressPart"> + <xsl:attribute name="type"> + <xsl:text>country</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:title"> + <xsl:value-of select="."/> +</xsl:template> + + +<xsl:template match="gmd:EX_GeographicBoundingBox"> + <xsl:element name="spatial"> + <xsl:attribute name="type"> + <xsl:text>iso19139dcmiBox</xsl:text> + </xsl:attribute> + <xsl:value-of select="concat('northlimit=',gmd:northBoundLatitude/gco:Decimal,'; southlimit=',gmd:southBoundLatitude/gco:Decimal,'; westlimit=',gmd:westBoundLongitude/gco:Decimal,'; eastLimit=',gmd:eastBoundLongitude/gco:Decimal)"/> + <xsl:apply-templates select="../gmd:verticalElement"/> + <xsl:text>; projection=WGS84</xsl:text> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:verticalElement"> + <xsl:value-of select="concat('; uplimit=',gmd:EX_VerticalExtent/gmd:maximumValue/gco:Real,'; downlimit=',gmd:EX_VerticalExtent/gmd:minimumValue/gco:Real)"/> +</xsl:template> + + +<xsl:template match="gmd:description[not(@gco:nilReason)]"> + <xsl:element name="spatial"> + <xsl:attribute name="type"> + <xsl:text>text</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + + +<xsl:template match="gml:coordinates"> + <xsl:element name="spatial"> + <xsl:attribute name="type"> + <xsl:text>gmlKmlPolyCoords</xsl:text> + </xsl:attribute> + <xsl:call-template name="gmlToKml"> + <xsl:with-param name="coords" select="."/> + </xsl:call-template> + </xsl:element> +</xsl:template> + + +<xsl:template match="gmd:keyword"> + <xsl:call-template name="splitSubject"> + <xsl:with-param name="string" select="."/> + </xsl:call-template> +</xsl:template> + + +<xsl:template match="gmd:MD_TopicCategoryCode"> + <xsl:element name="subject"> + <xsl:attribute name="type"> + <xsl:text>local</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + +<xsl:template match="gmd:abstract"> + <xsl:element name="description"> + <xsl:attribute name="type"> + <xsl:text>brief</xsl:text> + </xsl:attribute> + <xsl:value-of select="."/> + </xsl:element> +</xsl:template> + +<!-- + CREATE COLLECTION OBJECT +--> +<xsl:template match="gmd:MD_Metadata" mode="collection"> + + +<!-- the originating source --> + <xsl:param name="origSource" select="/root/env/siteURL"/> + + <!-- the registry object group --> + <xsl:param name="group" select="/root/env/siteName"/> + + <xsl:variable name="originatingSource" select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty/gmd:contactInfo/gmd:CI_Contact/gmd:onlineResource/gmd:CI_OnlineResource/gmd:linkage/gmd:URL"/> + + <xsl:variable name="ge" select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement"/> + <xsl:variable name="te" select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement"/> + <xsl:variable name="ve" select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:verticalElement"/> + + <xsl:variable name="formattedFrom"> + <xsl:choose> + <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"> + <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"/> + </xsl:when> + <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"> + <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"/> + </xsl:when> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="formattedTo"> + <xsl:choose> + <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"> + <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"/> + </xsl:when> + <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"> + <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"/> + </xsl:when> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="from"> + <xsl:choose> + <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"> + <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"/> + </xsl:when> + <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"> + <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"/> + </xsl:when> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="to"> + <xsl:choose> + <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"> + <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"/> + </xsl:when> + <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"> + <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"/> + </xsl:when> + </xsl:choose> + </xsl:variable> + + <xsl:element name="registryObject"> + <xsl:attribute name="group"> + <xsl:value-of select="$group"/> + </xsl:attribute> + <xsl:element name="key"> + <xsl:value-of select="gmd:fileIdentifier"/> + </xsl:element> + <xsl:element name="originatingSource"> + <xsl:choose> + <xsl:when test="not($originatingSource)"> + <xsl:value-of select="$origSource"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$originatingSource"/> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + <xsl:element name="collection"> + <xsl:attribute name="type"> + <xsl:value-of select="'dataset'"/> + </xsl:attribute> + <xsl:element name="identifier"> + <xsl:attribute name="type"> + <xsl:text>local</xsl:text> + </xsl:attribute> + <xsl:value-of select="gmd:fileIdentifier"/> + </xsl:element> + + <xsl:element name="name"> + <xsl:attribute name="type"> + <xsl:text>primary</xsl:text> + </xsl:attribute> + <xsl:element name="namePart"> + <xsl:attribute name="type"> + <xsl:text>full</xsl:text> + </xsl:attribute> + <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title"/> + </xsl:element> + </xsl:element> + + <xsl:element name="location"> + <xsl:element name="address"> + <xsl:element name="electronic"> + <xsl:attribute name="type"> + <xsl:text>url</xsl:text> + </xsl:attribute> + <xsl:element name="value"> + <xsl:variable name="url"> + <xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions[1]/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage[following-sibling::gmd:description = 'Point of truth URL of this metadata record']/gmd:URL"/> + </xsl:variable> + <xsl:choose> + <xsl:when test="not($url='')"> + <!-- source has some duplicates, odd, possibly automated data (CSIRO bluenet) --> + <xsl:value-of select="$url"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat($origSource,'/metadata.show?uuid=',/root/env/uuid)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </xsl:element> + </xsl:element> + </xsl:element> + + <xsl:if test="$ge/gmd:EX_GeographicBoundingBox"> + <xsl:element name="location"> + <xsl:attribute name="type"> + <xsl:text>coverage</xsl:text> + </xsl:attribute> + <!-- date time --> + <xsl:if test="not($formattedFrom='')"> + <xsl:attribute name="dateFrom"> + <xsl:value-of select="$formattedFrom"/> + </xsl:attribute> + </xsl:if> + <xsl:if test="not($formattedTo='')"> + <xsl:attribute name="dateTo"> + <xsl:value-of select="$formattedTo"/> + </xsl:attribute> + </xsl:if> + + <xsl:apply-templates select="$ge/gmd:EX_GeographicBoundingBox"/> + + <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:description"/> + + <xsl:apply-templates select="$ge/gmd:EX_BoundingPolygon/gmd:polygon/gml:Polygon/gml:exterior/gml:LinearRing/gml:coordinates[text()!='']"/> + + </xsl:element> + </xsl:if> + + <!-- related parties generated here --> + <xsl:for-each-group select="descendant::gmd:CI_ResponsibleParty[(gmd:individualName[not(@gco:nilReason)] or gmd:positionName[not(@gco:nilReason)] or gmd:organisationName[not(@gco:nilReason)]) and not(gmd:role/gmd:CI_RoleCode/@codeListValue='')]" group-by="gmd:role/gmd:CI_RoleCode"> + <xsl:element name="relatedObject"> + <xsl:element name="key"> + <xsl:choose> + <xsl:when test="string(gmd:individualName)"> + <xsl:value-of select="gmd:individualName" /> + </xsl:when> + <xsl:when test="string(gmd:positionName)"> + <xsl:value-of select="gmd:positionName"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="gmd:organisationName"/> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + <xsl:for-each-group select="gmd:role" group-by="gmd:CI_RoleCode/@codeListValue"> + <xsl:variable name="code"> + <xsl:value-of select="current-grouping-key()"/> + </xsl:variable> + + <xsl:variable name="codelist"> + <xsl:value-of select="substring-after(gmd:CI_RoleCode/@codeList, '#')"/> + </xsl:variable> + + <xsl:variable name="url"> + <xsl:value-of select="substring-before(gmd:CI_RoleCode/@codeList, '#')"/> + </xsl:variable> + + <xsl:element name="relation"> + <xsl:attribute name="type"> + <xsl:value-of select="$code"/> + </xsl:attribute> + </xsl:element> + </xsl:for-each-group> + </xsl:element> + </xsl:for-each-group> + + <xsl:for-each-group select="descendant::gmd:CI_ResponsibleParty[gmd:organisationName[not(@gco:nilReason)] and not(gmd:role/gmd:CI_RoleCode/@codeListValue='') and gmd:individualName='']" group-by="gmd:organisationName"> + <xsl:element name="relatedObject"> + <xsl:element name="key"> + <xsl:value-of select="current-grouping-key()"/> + </xsl:element> + <xsl:for-each-group select="gmd:role" group-by="gmd:CI_RoleCode/@codeListValue"> + <xsl:variable name="code"> + <xsl:value-of select="current-grouping-key()"/> + </xsl:variable> + + <xsl:element name="relation"> + <xsl:attribute name="type"> + <xsl:value-of select="$code"/> + </xsl:attribute> + </xsl:element> + </xsl:for-each-group> + </xsl:element> + </xsl:for-each-group> + + <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword"/> + + <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode"/> + + <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract"/> + + <!-- for access constraints --> + <xsl:variable name="legals" select="descendant::gmd:resourceConstraints[not(@gco:nilReason)]/*"/> + + <xsl:for-each select="$legals/node()"> + <xsl:element name="description"> + <xsl:attribute name="type"> + <xsl:choose> + <xsl:when test="name(.) eq 'gmd:accessConstraints'"> + <xsl:text>accessRights</xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>rights</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:choose> + <xsl:when test="gmd:MD_RestrictionCode"> + <xsl:value-of select="gmd:MD_RestrictionCode/@codeListValue" /> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="." /> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </xsl:for-each> + + <xsl:if test="$te/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod"> + + <xsl:if test="not($from='') and $formattedFrom=''"> + <xsl:element name="description"> + <xsl:attribute name="type"> + <xsl:text>temporal</xsl:text> + </xsl:attribute> + <xsl:choose> + <xsl:when test="$from = $to or $to=''"> + <xsl:text>Time period: </xsl:text> + <xsl:value-of select="$from"/> + </xsl:when> + <xsl:otherwise> + <xsl:text>Time period: </xsl:text> + <xsl:value-of select="concat($from, ' to ', $to)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </xsl:if> + </xsl:if> + </xsl:element> + </xsl:element> + + <xsl:for-each-group select="descendant::gmd:CI_ResponsibleParty[(gmd:individualName[not(@gco:nilReason)] or gmd:positionName[not(@gco:nilReason)] or gmd:organisationName[not(@gco:nilReason)]) and not(gmd:role/gmd:CI_RoleCode/@codeListValue='')]" group-by="gmd:role/gmd:CI_RoleCode"> + <xsl:element name="registryObject"> + <xsl:attribute name="group"> + <xsl:value-of select="$group"/> + </xsl:attribute> + <xsl:element name="key"> + <xsl:choose> + <xsl:when test="string(gmd:individualName)"> + <xsl:value-of select="gmd:individualName" /> + </xsl:when> + <xsl:when test="string(gmd:positionName)"> + <xsl:value-of select="gmd:positionName"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="gmd:organisationName"/> + </xsl:otherwise> + </xsl:choose> + <!--<xsl:value-of select="current-grouping-key()"/> --> + </xsl:element> + <xsl:element name="originatingSource"> + <xsl:choose> + <xsl:when test="not($originatingSource)"> + <xsl:value-of select="$origSource"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$originatingSource"/> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + <xsl:element name="party"> + <xsl:attribute name="type"> + <xsl:choose> + <xsl:when test="string(gmd:individualName)"> + <xsl:value-of select="'person'" /> + </xsl:when> + <xsl:when test="string(gmd:positionName)"> + <xsl:value-of select="'person'"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="'group'"/> + </xsl:otherwise> + </xsl:choose> + + + <!--<xsl:text>person</xsl:text>--> + </xsl:attribute> + <xsl:element name="name"> + <xsl:attribute name="type"> + <xsl:text>primary</xsl:text> + </xsl:attribute> + <xsl:element name="namePart"> + <xsl:attribute name="type"> + <xsl:text>full</xsl:text> + </xsl:attribute> + <xsl:choose> + <xsl:when test="string(gmd:individualName)"> + <xsl:value-of select="gmd:individualName" /> + </xsl:when> + <xsl:when test="string(gmd:positionName)"> + <xsl:value-of select="gmd:positionName"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="gmd:organisationName"/> + </xsl:otherwise> + </xsl:choose> + + <!--<xsl:value-of select="current-grouping-key()"/>--> + </xsl:element> + </xsl:element> + + <!-- to normalise parties within a single record we need to group them, obtain the fragment for each party with the most information, and at the same time cope with rubbish data. In the end the only way to cope is to ensure at least an organisation name, city, phone or fax exists (sigh) --> + <xsl:for-each select="current-group()"> + <xsl:sort select="count(gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/child::*) + count(gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/child::*)" data-type="number" order="descending"/> + <xsl:choose> + <xsl:when test="position()=1"> + <xsl:if test="gmd:organisationName[not(@gco:nilReason)] or gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city or gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone[gmd:voice or gmd:facsimile]"> + <xsl:element name="location"> + <xsl:element name="address"> + + <xsl:element name="physical"> + <xsl:attribute name="type"> + <xsl:text>streetAddress</xsl:text> + </xsl:attribute> + <xsl:apply-templates select="gmd:organisationName"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea[not(@gco:nilReason)]"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode[not(@gco:nilReason)]"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/> + </xsl:element> + </xsl:element> + <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone[gmd:voice or gmd:facsimile] or gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress or gmd:contactInfo/gmd:CI_Contact/gmd:onlineResource/gmd:CI_OnlineResource/gmd:linkage/gmd:URL"> + <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice"> + <xsl:element name="address"> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:voice"/> + </xsl:element> + </xsl:if> + <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:facsimile"> + <xsl:element name="address"> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/gmd:facsimile"/> + </xsl:element> + </xsl:if> + <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress"> + <xsl:element name="address"> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:electronicMailAddress"/> + </xsl:element> + </xsl:if> + <xsl:if test="gmd:contactInfo/gmd:CI_Contact/gmd:onlineResource/gmd:CI_OnlineResource/gmd:linkage/gmd:URL"> + <xsl:element name="address"> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:onlineResource/gmd:CI_OnlineResource/gmd:linkage/gmd:URL"/> + </xsl:element> + </xsl:if> + </xsl:if> + </xsl:element> + </xsl:if> + </xsl:when> + </xsl:choose> + </xsl:for-each> + + <xsl:element name="relatedObject"> + <xsl:element name="key"> + <xsl:value-of select="ancestor::gmd:MD_Metadata/gmd:fileIdentifier"/> + </xsl:element> + + <xsl:for-each-group select="gmd:role" group-by="gmd:CI_RoleCode/@codeListValue"> + <xsl:variable name="code"> + <xsl:value-of select="current-grouping-key()"/> + </xsl:variable> + + <xsl:element name="relation"> + <xsl:attribute name="type"> + <xsl:value-of select="$code"/> + </xsl:attribute> + </xsl:element> + </xsl:for-each-group> + </xsl:element> + </xsl:element> + </xsl:element> + </xsl:for-each-group> + + <!-- Create all the associated party objects for organisations --> + <xsl:for-each-group select="descendant::gmd:CI_ResponsibleParty[gmd:individualName[@gco:nilReason] and gmd:organisationName[not(@gco:nilReason)] and not(gmd:role/gmd:CI_RoleCode/@codeListValue='')]" group-by="gmd:organisationName"> + <xsl:element name="registryObject"> + <xsl:attribute name="group"> + <xsl:value-of select="$group"/> + </xsl:attribute> + <xsl:element name="key"> + <xsl:value-of select="current-grouping-key()"/> + </xsl:element> + <xsl:element name="originatingSource"> + <xsl:choose> + <xsl:when test="not($originatingSource)"> + <xsl:value-of select="$origSource"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$originatingSource"/> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + <xsl:element name="party"> + <xsl:attribute name="type"> + <xsl:text>person</xsl:text> + </xsl:attribute> + <xsl:element name="name"> + <xsl:attribute name="type"> + <xsl:text>primary</xsl:text> + </xsl:attribute> + <xsl:element name="namePart"> + <xsl:attribute name="type"> + <xsl:text>full</xsl:text> + </xsl:attribute> + <xsl:value-of select="current-grouping-key()"/> + </xsl:element> + </xsl:element> + + <!-- to normalise parties within a single record we need to group them, obtain the fragment for each party with the most information, and at the same time cope with rubbish data. In the end the only way to cope is to ensure at least an organisation name, city, phone or fax exists (sigh) --> + <xsl:for-each select="current-group()"> + <xsl:sort select="count(gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/child::*) + count(gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone/child::*)" data-type="number" order="descending"/> + <xsl:choose> + <xsl:when test="position()=1"> + <xsl:if test="gmd:organisationName[not(@gco:nilReason)] or gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city or gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone[gmd:voice or gmd:fax]"> + <xsl:element name="location"> + <xsl:element name="address"> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone[not(gmd:voice='')]"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:phone/gmd:CI_Telephone[not(gmd:facsimile='')]"/> + + <xsl:element name="physical"> + <xsl:attribute name="type"> + <xsl:text>streetAddress</xsl:text> + </xsl:attribute> + <xsl:apply-templates select="gmd:organisationName"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:deliveryPoint"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:city"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:administrativeArea[not(@gco:nilReason)]"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:postalCode[not(@gco:nilReason)]"/> + <xsl:apply-templates select="gmd:contactInfo/gmd:CI_Contact/gmd:address/gmd:CI_Address/gmd:country"/> + </xsl:element> + </xsl:element> + </xsl:element> + </xsl:if> + </xsl:when> + </xsl:choose> + </xsl:for-each> + + <xsl:element name="relatedObject"> + <xsl:element name="key"> + <xsl:value-of select="ancestor::gmd:MD_Metadata/gmd:fileIdentifier"/> + </xsl:element> + + <xsl:for-each-group select="gmd:role" group-by="gmd:CI_RoleCode/@codeListValue"> + <xsl:variable name="code"> + <xsl:value-of select="current-grouping-key()"/> + </xsl:variable> + + <xsl:element name="relation"> + <xsl:attribute name="type"> + <xsl:value-of select="$code"/> + </xsl:attribute> + </xsl:element> + </xsl:for-each-group> + </xsl:element> + </xsl:element> + </xsl:element> + </xsl:for-each-group> + +</xsl:template> + +<xsl:template match="node()"/> + +<xsl:template name="splitSubject"> + <xsl:param name="string"/> + <xsl:param name="separator" select="', '"/> + + <xsl:choose> + <xsl:when test="contains($string, $separator)"> + <xsl:if test="not(starts-with($string, $separator))"> + + <xsl:element name="subject"> + <xsl:attribute name="type"> + <xsl:text>local</xsl:text> + </xsl:attribute> + <xsl:value-of select="substring-before($string, $separator)"/> + </xsl:element> + </xsl:if> + <xsl:call-template name="splitSubject"> + <xsl:with-param name="string" select="substring-after($string,$separator)" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + + <xsl:element name="subject"> + <xsl:attribute name="type"> + <xsl:text>local</xsl:text> + </xsl:attribute> + <xsl:value-of select="$string"/> + </xsl:element> + </xsl:otherwise> + </xsl:choose> + +</xsl:template> + +<xsl:template name="gmlToKml"> + <xsl:param name="coords"/> + + <xsl:for-each select="tokenize($coords, ', ')"> + <xsl:choose> + <xsl:when test="position()=last()"> + <xsl:value-of select="."/> + </xsl:when> + <xsl:when test="position() mod 2 = 0"> + <xsl:value-of select="."/> + <xsl:text> </xsl:text> + </xsl:when> + <xsl:when test="position() mod 2 = 1"> + <xsl:value-of select="."/> + <xsl:text>,</xsl:text> + </xsl:when> + </xsl:choose> + </xsl:for-each> + +</xsl:template> + +</xsl:stylesheet> Deleted: sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rifcs.xsl =================================================================== --- sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rifcs.xsl 2011-02-17 02:04:30 UTC (rev 7276) +++ sandbox/tags/BlueNetMEST-1.4.4-260111/web/geonetwork/xml/schemas/iso19139/convert/rifcs.xsl 2011-02-17 06:53:06 UTC (rev 7277) @@ -1,630 +0,0 @@ -<?xml version="1.0"?> -<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gmd="http://www.isotc211.org/2005/gmd" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:gml="http://www.opengis.net/gml" - xmlns:gco="http://www.isotc211.org/2005/gco" - xmlns:gts="http://www.isotc211.org/2005/gts" - xmlns:geonet="http://www.fao.org/geonetwork" - xmlns:gmx="http://www.isotc211.org/2005/gmx" - xmlns:oai="http://www.openarchives.org/OAI/2.0/" - xmlns="http://ands.org.au/standards/rif-cs/registryObjects"> - -<!-- stylesheet to convert iso19139 in OAI-PMH ListRecords response to RIF-CS --> - -<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> - -<xsl:strip-space elements="*"/> - -<!-- the originating source --> -<xsl:param name="origSource" select="/root/env/siteURL"/> - -<!-- the registry object group --> -<xsl:param name="group" select="'Local Test'"/> - - -<!--xsl:template match="oai:metadata|oai:ListRecords|oai:record"> - <xsl:apply-templates/> -</xsl:template--> - - -<!--xsl:template match="oai:OAI-PMH"> - <xsl:element name="registryObjects"> - <xsl:attribute name="xsi:schemaLocation"> - <xsl:text>http://ands.org.au/standards/iso2146/registryObjects http://services.ands.org.au/home/orca/schemata/registryObjects.xsd</xsl:text> - </xsl:attribute> - <xsl:apply-templates/> - </xsl:element> -</xsl:template--> - -<xsl:template match="root"> - <xsl:apply-templates/> -</xsl:template> - -<xsl:template match="gmd:MD_Metadata"> - <xsl:element name="registryObjects"> - <xsl:attribute name="xsi:schemaLocation"> - <xsl:text>http://ands.org.au/standards/iso2146/registryObjects http://services.ands.org.au/home/orca/schemata/registryObjects.xsd</xsl:text> - </xsl:attribute> - <xsl:apply-templates select="." mode="collection"/> - </xsl:element> -</xsl:template> - -<xsl:template match="gmd:voice[not(@gco:nilReason)]"> - <xsl:element name="electronic"> - <xsl:attribute name="type"> - <xsl:text>voice</xsl:text> - </xsl:attribute> - <xsl:element name="value"> - <xsl:value-of select="concat('tel:',translate(translate(.,'+',''),' ','-'))"/> - </xsl:element> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:facsimile[not(@gco:nilReason)]"> - <xsl:element name="electronic"> - <xsl:attribute name="type"> - <xsl:text>fax</xsl:text> - </xsl:attribute> - <xsl:element name="value"> - <xsl:value-of select="concat('tel:',translate(translate(.,'+',''),' ','-'))"/> - </xsl:element> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:organisationName[not(@gco:nilReason)]"> - <xsl:element name="addressPart"> - <xsl:attribute name="type"> - <xsl:text>locationDescriptor</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="deliveryPoint[not(@gco:nilReason)]"> - <xsl:element name="addressPart"> - <xsl:attribute name="type"> - <xsl:text>addressLine</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:city[not(@gco:nilReason)]"> - <xsl:element name="addressPart"> - <xsl:attribute name="type"> - <xsl:text>suburbOrPlaceOrLocality</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:administrativeArea[not(@gco:nilReason)]"> - <xsl:element name="addressPart"> - <xsl:attribute name="type"> - <xsl:text>stateOrTerritory</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:postalCode[not(@gco:nilReason)]"> - <xsl:element name="addressPart"> - <xsl:attribute name="type"> - <xsl:text>postCode</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:country[not(@gco:nilReason)]"> - <xsl:element name="addressPart"> - <xsl:attribute name="type"> - <xsl:text>country</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:title"> - <xsl:value-of select="."/> -</xsl:template> - - -<xsl:template match="gmd:EX_GeographicBoundingBox"> - <xsl:element name="spatial"> - <xsl:attribute name="type"> - <xsl:text>iso19139dcmiBox</xsl:text> - </xsl:attribute> - <xsl:value-of select="concat('northlimit=',gmd:northBoundLatitude/gco:Decimal,'; southlimit=',gmd:southBoundLatitude/gco:Decimal,'; westlimit=',gmd:westBoundLongitude/gco:Decimal,'; eastLimit=',gmd:eastBoundLongitude/gco:Decimal)"/> - <xsl:apply-templates select="../gmd:verticalElement"/> - <xsl:text>; projection=WGS84</xsl:text> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:verticalElement"> - <xsl:value-of select="concat('; uplimit=',gmd:EX_VerticalExtent/gmd:maximumValue/gco:Real,'; downlimit=',gmd:EX_VerticalExtent/gmd:minimumValue/gco:Real)"/> -</xsl:template> - - -<xsl:template match="gmd:description[not(@gco:nilReason)]"> - <xsl:element name="spatial"> - <xsl:attribute name="type"> - <xsl:text>text</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="gml:coordinates"> - <xsl:element name="spatial"> - <xsl:attribute name="type"> - <xsl:text>gmlKmlPolyCoords</xsl:text> - </xsl:attribute> - <xsl:call-template name="gmlToKml"> - <xsl:with-param name="coords" select="."/> - </xsl:call-template> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:keyword"> - <xsl:call-template name="splitSubject"> - <xsl:with-param name="string" select="."/> - </xsl:call-template> -</xsl:template> - - -<xsl:template match="gmd:MD_TopicCategoryCode"> - <xsl:element name="subject"> - <xsl:attribute name="type"> - <xsl:text>local</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - - -<xsl:template match="gmd:abstract"> - <xsl:element name="description"> - <xsl:attribute name="type"> - <xsl:text>brief</xsl:text> - </xsl:attribute> - <xsl:value-of select="."/> - </xsl:element> -</xsl:template> - -<!-- - CREATE COLLECTION OBJECT ---> -<xsl:template match="gmd:MD_Metadata" mode="collection"> - <xsl:variable name="ge" select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement"/> - <xsl:variable name="te" select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement"/> - <xsl:variable name="ve" select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:verticalElement"/> - - <xsl:variable name="formattedFrom"> - <xsl:choose> - <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"> - <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"/> - </xsl:when> - <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"> - <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"/> - </xsl:when> - </xsl:choose> - </xsl:variable> - - <xsl:variable name="formattedTo"> - <xsl:choose> - <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"> - <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"/> - </xsl:when> - <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"> - <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"/> - </xsl:when> - </xsl:choose> - </xsl:variable> - - <xsl:variable name="from"> - <xsl:choose> - <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"> - <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition"/> - </xsl:when> - <xsl:when test="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"> - <xsl:value-of select="$te[1]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:begin/gml:TimeInstant/gml:timePosition"/> - </xsl:when> - </xsl:choose> - </xsl:variable> - - <xsl:variable name="to"> - <xsl:choose> - <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"> - <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition"/> - </xsl:when> - <xsl:when test="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"> - <xsl:value-of select="$te[position()=last()]/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:end/gml:TimeInstant/gml:timePosition"/> - </xsl:when> - </xsl:choose> - </xsl:variable> - - <xsl:element name="registryObject"> - <xsl:attribute name="group"> - <xsl:value-of select="$group"/> - </xsl:attribute> - <xsl:element name="key"> - <xsl:value-of select="gmd:fileIdentifier"/> - </xsl:element> - <xsl:element name="originatingSource"> - <xsl:value-of select="$origSource"/> - </xsl:element> - <xsl:element name="collection"> - <xsl:attribute name="type"> - <xsl:value-of select="'dataset'"/> - </xsl:attribute> - <xsl:element name="identifier"> - <xsl:attribute name="type"> - <xsl:text>local</xsl:text> - </xsl:attribute> - <xsl:value-of select="gmd:fileIdentifier"/> - </xsl:element> - - <xsl:element name="name"> - <xsl:attribute name="type"> - <xsl:text>primary</xsl:text> - </xsl:attribute> - <xsl:element name="namePart"> - <xsl:attribute name="type"> - <xsl:text>full</xsl:text> - </xsl:attribute> - <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title"/> - </xsl:element> - </xsl:element> - - <xsl:element name="location"> - <xsl:element name="address"> - <xsl:element name="electronic"> - <xsl:attribute name="type"> - <xsl:text>url</xsl:text> - </xsl:attribute> - <xsl:element name="value"> - <xsl:variable name="url"> - <xsl:value-of select="gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions[1]/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage[following-sibling::gmd:description = 'Point of truth URL of this metadata record']/gmd:URL"/> - </xsl:variable> - <xsl:choose> - <xsl:when test="not($url='')"> - <!-- source has some duplicates, odd, possibly automated data (CSIRO bluenet) --> - <xsl:value-of select="$url"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat($origSource,'/metadata.show?uuid=',/root/env/uuid)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - </xsl:element> - </xsl:element> - </xsl:element> - - <xsl:if test="$ge/gmd:EX_GeographicBoundingBox"> - <xsl:element name="location"> - <xsl:attribute name="type"> - <xsl:text>coverage</xsl:text> - </xsl:attribute> - <!-- date time --> - <xsl:if test="not($formattedFrom='')"> - <xsl:attribute name="dateFrom"> - <xsl:value-of select="$formattedFrom"/> - </xsl:attribute> - </xsl:if> - <xsl:if test="not($formattedTo='')"> - <xsl:attribute name="dateTo"> - <xsl:value-of select="$formattedTo"/> - </xsl:attribute> - </xsl:if> - - <xsl:apply-templates select="$ge/gmd:EX_GeographicBoundingBox"/> - - <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:description"/> - - <xsl:apply-templates select="$ge/gmd:EX_BoundingPolygon/gmd:polygon/gml:Polygon/gml:exterior/gml:LinearRing/gml:coordinates[text()!='']"/> - - </xsl:element> - </xsl:if> - - <!-- related parties generated here --> - <xsl:for-each-group select="descendant::gmd:CI_ResponsibleParty[gmd:individualName[not(@gco:nilReason)] and not(gmd:role/gmd:CI_RoleCode/@codeListValue='')]" group-by="gmd:individualName"> - <xsl:element name="relatedObject"> - <xsl:element name="key"> - <xsl:value-of select="current-grouping-key()"/> - </xsl:element> - <xsl:for-each-group select="gmd:role" group-by="gmd:CI_RoleCode/@codeListValue"> - <xsl:variable name="code"> - <xsl:value-of select="current-grouping-key()"/> - </xsl:variable> - - <xsl:variable name="codelist"> - <xsl:value-of select="substring-after(gmd:CI_RoleCode/@codeList, '#')"/> - </xsl:variable> - - <xsl:variable name="url"> - <xsl:value-of select="substring-before(gmd:CI_RoleCode/@codeList, '#')"/> - </xsl:variable> - - <xsl:element name="relation"> - <xsl:attribute name="type"> - <xsl:value-of select="$code"/> - </xsl:attribute> - </xsl:element> - </xsl:for-each-group> - </xsl:element> - </xsl:for-each-group> - - <xsl:for-each-group select="descendant::gmd:CI_ResponsibleParty[gmd:organisationName[not(@gco:nilReason)] and not(gmd:role/gmd:CI_RoleCode/@codeListValue='') and gmd:individualName='']" group-by="gmd:organisationName"> - <xsl:element name="relatedObject"> - <xsl:element name="key"> - <xsl:value-of select="current-grouping-key()"/> - </xsl:element> - <xsl:for-each-group select="gmd:role" group-by="gmd:CI_RoleCode/@codeListValue"> - <xsl:variable name="code"> - <xsl:value-of select="current-grouping-key()"/> - </xsl:variable> - - <xsl:element name="relation"> - <xsl:attribute name="type"> - <xsl:value-of select="$code"/> - </xsl:attribute> - </xsl:element> - </xsl:for-each-group> - </xsl:element> - </xsl:for-each-group> - - <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword"/> - - <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode"/> - - <xsl:apply-templates select="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract"/> - - <xsl:if test="$te/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod"> - - <xsl:if test="not($from='') and $formattedFrom=''"> - <xsl:element name="description"> - <xsl:attribute name="type"> - <xsl:text>temporal</xsl:text> - </xsl:attribute> - <xsl:choose> - <xsl:when test="$from = $to or $to=''"> - <xsl:text>Time period: </xsl:text> - <xsl:value-of select="$from"/> - </xsl:when> - <xsl:otherwise> - <xsl:text>Time period: </xsl:text> - <xsl:value-of select="concat($from, ' to ', $to)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:element> - </xsl:if> - </xsl:if> - </xsl:element> - </xsl:element> - - <!-- Create all the associated party objects for individuals --> - <xsl:for-each-group select="descendant::gmd:CI_ResponsibleParty[gmd:individualName[not(@gco:nilReason)] and not(gmd:role/gmd:CI_RoleCode/@codeListValue='')]" group-by="gmd:individualName"> - <xsl:element name="registryObject"> - <xsl:attribute name="group"> - <xsl:value-of select="$group"/> - </xsl:a... [truncated message content] |