<?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.

  Author: Chris A. Mattmann
  Description: Refactored the definition of the relevant CAS RDF web service
  configuration parameters into this file. See tag specific documentation below
  for information on how to use the file to configure the CAS RDF web service.
-->
<cas:rdfconf xmlns:cas="http://oodt.apache.org/ns/cas">
  <!--
    Here you can add as many &quot;ns&quot; tags as desired. Each ns should
    include <b>both</b> a name attribute and a value attribute, where name and
    value are the xmlns name and value,
    e.g. xmlns:&lt;name&gt;=&quot;value&quot;
  -->
  <namespaces>
    <ns name="cas" value="urn:oodt:"/>
    <ns name="rdf" value="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>

    <!-- an example included from EDRN -->
    <ns name="edrn" value="urn:edrn:"/>
    <ns name="x" value="http://edrn.nci.nih.gov/rdf/schema.rdf#"/>
  </namespaces>

  <!--
    Optionally specify CAS met keys to be renamed in the output RDF. Each key
    tag must include a <b>from</b> and a <b>to</b> attribute, renaming the
    original CAS product met key &quot;from&quot; to the new RDF output key
    &quot;to&quot;
  -->
  <rewrite>
    <key from="SiteId" to="site"/>
    <key from="SiteName" to="site"/>
    <key from="ProtocolId" to="protocol"/>
    <key from="OrganId" to="organ"/>
    <key from="OrganSite" to="organ"/>
    <key from="ProtocolName" to="protocol"/>
  </rewrite>

  <!--
    Placing key tags in this file declares that the source CAS product met keys
    are in fact resource link identifiers, and should be output as such in the
    RDF. Required parameters for each key tag are: name, identifying the source
    CAS product met key, and link, identifying the start of the resource link to
    be used in the rdf:resource output tag, e.g.,
    &lt;x:protocol rdf:resource=&quot;&lt;link&gt;/&lt;key value&gt;&quot;&gt;
  -->
  <resourcelinks>
    <key name="SiteId" link="http://edrn.nci.nih.gov/data/sites/"/>
    <key name="SiteName" link="http://edrn.nci.nih.gov/data/sites/"/>
    <key name="ProtocolId" link="http://edrn.nci.nih.gov/data/protocols/"/>
    <key name="ProtocolName" link="http://edrn.nci.nih.gov/data/protocols/"/>
    <key name="OrganId" link="http://edrn.nci.nih.gov/data/body-systems/"/>
    <key name="OrganSite" link="http://edrn.nci.nih.gov/data/body-systems/"/>
  </resourcelinks>

  <!--
    Associates CAS product metadata specific keys to previously declared
    namespaces. Each key tag should contain a name attribute whose value is
    valid CAS product met key, and each ns attribute on each key tag should be a
    previously declared namespace from the namespaces tag.

    You <b>must</b> declare a default ns in the default attribute in the
    keynsmap tag. This ns will be used if no key ns is declared in the nsmap.
  -->
  <keynsmap default="cas">
    <key name="CAS.ProductId" ns="cas"/>
    <key name="CAS.ProductName" ns="cas"/>
    <key name="CAS.ProductReceivedTime" ns="cas"/>
    <key name="FileLocation" ns="cas"/>
    <key name="Filename" ns="cas"/>
    <key name="ProductType" ns="cas"/>
    <key name="DataVersion" ns="cas"/>
    <key name="MimeType" ns="cas"/>

    <!--  EDRN example -->
    <key name="SiteId" ns="x"/>
    <key name="SiteName" ns="x"/>
    <key name="ProtocolName" ns="x"/>
    <key name="ProtocolId" ns="x"/>
    <key name="OrganId" ns="x"/>
    <key name="OrganSite" ns="x"/>
  </keynsmap>

  <!--
    Associates CAS product type names to previously declared namespaces. Each
    type tag should contain a name attribute whose value is valid CAS product
    type, and each ns attribute on each key tag should be a previously declared
    namespace from the namespaces tag.

    You <b>must</b> declare a default ns in the default attribute in the
    typesnsmap tag. This ns will be used if no type ns is declared in the nsmap.
  -->
  <typesnsmap default="cas">
    <type name="GenericFile" ns="cas"/>
  </typesnsmap>
</cas:rdfconf>
