<?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.
-->
<rdf:RDF 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:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:doap="http://usefulinc.com/ns/doap#" xml:lang="en">
  <Project rdf:about="http://commons.apache.org/lang/">
    <name>Apache Commons Lang</name>
    <homepage rdf:resource="http://commons.apache.org/lang/"/>
    <programming-language>Java</programming-language>
    <category rdf:resource="http://projects.apache.org/category/library"/>
    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
    <bug-database rdf:resource="http://issues.apache.org/jira/browse/LANG"/>
    <download-page rdf:resource="http://commons.apache.org/downloads/download_lang.cgi"/>
    <asfext:pmc rdf:resource="http://commons.apache.org/"/>
    <shortdesc xml:lang="en">Java Common Components</shortdesc>
    <description xml:lang="en">
        Commons Lang, a package of Java utility classes for the
        classes that are in java.lang's hierarchy, or are considered to be so
        standard as to justify existence in java.lang.
    </description>
    <repository>
      <SVNRepository>
        <browse rdf:resource="http://svn.apache.org/viewvc/commons/proper/lang/trunk"/>
        <location rdf:resource="http://svn.apache.org/repos/asf/commons/proper/lang"/>
      </SVNRepository>
    </repository>
    <release>
      <Version>
        <name>commons-lang</name>
        <created>2011-07-18</created>
        <revision>3.0</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2011-01-17</created>
        <revision>2.6</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2010-02-25</created>
        <revision>2.5</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2008-03-18</created>
        <revision>2.4</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2007-02-13</created>
        <revision>2.3</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2006-10-04</created>
        <revision>2.2</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2005-06-12</created>
        <revision>2.1</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2003-09-02</created>
        <revision>2.0</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2002-11-25</created>
        <revision>1.0.1</revision>
      </Version>
      <Version>
        <name>commons-lang</name>
        <created>2002-10-04</created>
        <revision>1.0</revision>
      </Version>
    </release>
    <mailing-list rdf:resource="http://commons.apache.org/mail-lists.html"/>
  </Project>
</rdf:RDF>
