<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"?>
<rdf:RDF xml:lang="en"
         xmlns="http://usefulinc.com/ns/doap#" 
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
         xmlns:asfext="http://projects.apache.org/ns/asfext#"
         xmlns:foaf="http://xmlns.com/foaf/0.1/">
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE 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.
-->
  <Project rdf:about="http://climate.apache.org">
    <created>2013-07-29</created>
    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
    <name>Apache Open Climate Workbench</name>
    <homepage rdf:resource="http://climate.apache.org" />
    <asfext:pmc rdf:resource="http://climate.apache.org" />
    <shortdesc>The Apache Open Climate Workbench(OCW) is a comprehensive suite of algorithms, libraries, and interfaces designed to standardize and streamline the process of interacting with large quantities of observational data (such as is provided by the RCMED) and conducting regional climate model evaluations.</shortdesc>
    <description>Apache Open Climate Workbench is an effort to develop software that performs climate model evaluation using model outputs from a variety of different sources (the Earth System Grid Federation, the Coordinated Regional Downscaling Experiment, the U.S. National Climate Assessment and the North American Regional Climate Change Assessment Program) and temporal/spatial scales with remote sensing data from NASA, NOAA and other agencies. The toolkit includes capabilities for rebinning, metrics computation and visualization.</description>
    <bug-database rdf:resource="https://issues.apache.org/jira/browse/CLIMATE" />
    <mailing-list rdf:resource="http://climate.apache.org/community/mailing-lists.html" />
    <download-page rdf:resource="http://climate.apache.org/" />
    <programming-language>Python</programming-language>
    <category rdf:resource="http://projects.apache.org/category/content" />
    <release>
        <Version>
            <name>Apache Open Climate Workbench 1.3.0</name>
            <created>2018-03-28</created>
            <revision>1.3.0</revision>
        </Version>
    </release>
    <release>
        <Version>
            <name>Apache Open Climate Workbench 1.2.0</name>
            <created>2017-04-20</created>
            <revision>1.2.0</revision>
        </Version>
    </release>
    <release>
        <Version>
            <name>Apache Open Climate Workbench 1.1.0</name>
            <created>2016-07-23</created>
            <revision>1.1.0</revision>
        </Version>
    </release>
    <release>
        <Version>
            <name>Apache Open Climate Workbench 1.0</name>
            <created>2015-09-03</created>
            <revision>1.0.0</revision>
        </Version>
    </release>
    <release>
        <Version>
            <name>Apache Open Climate Workbench 0.5</name>
            <created>2015-01-14</created>
            <revision>0.5</revision>
        </Version>
    </release>
    <release>
        <Version>
            <name>Apache Open Climate Workbench 0.4</name>
            <created>2014-08-06</created>
            <revision>0.4</revision>
        </Version>
    </release>
    <release>
      <Version>
        <name>Apache Open Climate Workbench 0.3-incubating</name>
        <created>2013-10-12</created>
        <revision>0.3-incubating</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>Apache Open Climate Workbench 0.2-incubating</name>
        <created>2013-08-19</created>
        <revision>0.2-incubating</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>Apache Open Climate Workbench</name>
        <created>2013-07-29</created>
        <revision>0.1-incubating</revision>
      </Version>
    </release>
    <repository>
      <SVNRepository>
        <location rdf:resource="https://git-wip-us.apache.org/repos/asf/climate.git"/>
        <browse rdf:resource="https://github.com/apache/climate/"/>
      </SVNRepository>
    </repository>
  </Project>
</rdf:RDF>
