<?xml version="1.0"?>
<!--
 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.
-->
<rss version="0.91">
  <channel>
    <title>Apache</title>
    <link>http://www.apache.org</link>
    <description>The Apache Software Foundation</description>
    <language>en-US</language>
    <rating>(PICS-1.1 "http://www.rsac.org/ratingsv01.html" 2 gen true comment "RSACi North America Server" for
      "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0))</rating>
    <image>
      <title>Apache</title>
      <url>http://jakarta.apache.org/images/jakarta-logo.gif</url>
      <link>http://jakarta.apache.org</link>
      <width>505</width>
      <height>480</height>
      <description>The Jakarta project. Open source, serverside java.</description>
    </image>
    <item>
      <title>Commons Attributes 2.1 Released</title>
      <link>http://jakarta.apache.org/site/news/news-2004-2ndHalf.html#20040815.1</link>
      <description>The Apache Commons team is happy to announce the release of Commons Attributes 2.1. This is the first
        release of the new Commons-Attributes code.</description>
    </item>
    <item>
      <title>Cloudscape Becomes Apache Derby</title>
      <link>http://jakarta.apache.org/site/news/elsewhere-2004-2ndHalf.html#20040803.1</link>
      <description>IBM has submitted a proposal to the Apache DB project for a Java-based package to be called 'Derby'.</description>
    </item>
    <item>
      <title>Commons BeanUtils 1.7 Released</title>
      <link>http://jakarta.apache.org/site/news/news-2004-2ndHalf.html#20040802.1</link>
    </item>
    <item>
      <title>Commons JXPath 1.2 Released</title>
      <link>http://jakarta.apache.org/site/news/news-2004-2ndHalf.html#20040801.2</link>
    </item>
  </channel>
</rss>
