<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more contributor
  license agreements.  See the NOTICE.txt file distributed with this work for
  additional information regarding copyright ownership.  The ASF licenses this
  file to you under the Apache License, Version 2.0 (the "License"); you may not
  use this file except in compliance with the License.  You may obtain a copy of
  the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
  License for the specific language governing permissions and limitations under
  the License.
-->

<!--
  Authors: Chris A. Mattmann, Ross Laidlaw
  Description: This file configures the CAS RSS web service. The main aspects
  of this file are the ability to recast a product's metadata as relevant RSS
  compatible tags.  This file contains example GeoRSS tags.
-->

<cas:rssconf xmlns:cas="http://oodt.apache.org/ns/cas">

  <!--
    An option "channelLink" attribute may be set on the above outer tag to set
    the channel's link attribute.

    Metadata available for replacement in this attribute is:

    BaseUrl: the base URL for the CAS web service layer.
    ProductTypeId: the id passed to the RSS channel via the id param
    ProductType: the channel product type name passed via the channel param
    TopN: the topn param, if passed.
  -->

  <!--
    Each &lt;tag&gt; tag defines 2 attributes:

    name (required) - the RSS output tag name
    source (optional) - the field name from the CAS product's metadata and its
    associated value.

    Each &lt;tag&gt; has a set of &lt;attribute&gt; tags, which define XML
    attributes on the RSS output tags. Each &lt;attribute&gt; has the following
    attributes:

    name (required) - the RSS output tag attribute name
    value (required) - the RSS output tag attribute value. By default these
    values are run through PathUtils#replaceEnvVariables which replaces met keys
    using the standard CAS met replacement strategy.
  -->

  <!--
    If you want to turn your CAS File Manager into a GeoRSS basic W3C (WGS84)
    service (see http://www.w3.org/2003/01/geo), add the following block,
    assuming that you have indexed met fields named Latitude and Longitude for
    your product (update as appropriate otherwise).

    <namespace prefix="geo" uri="http://www.w3.org/2003/01/geo/wgs84_pos#"/>
    <tag name="geo:lat" source="[Latitude]"/>
    <tag name="geo:long" source="[Longitude]"/>
  -->

  <!--
    If you want to turn your CAS File Manager into a GeoRSS simple service
    (see http://georss.org/simple), add the following block, assuming that you
    have indexed met fields named Latitude and Longitude for your product
    (update as appropriate otherwise).

    <namespace prefix="georss" uri="http://www.georss.org/georss"/>
    <tag name="georss:point" source="[Latitude] [Longitude]"/>
  -->

  <namespace prefix="cas" uri="http://oodt.apache.org/ns/cas"/>
  <tag name="cas:source" source="[ProductType]"/>
  <tag name="source" source="[ProductType]"/>

</cas:rssconf>
