<?xml version="1.0"?>
<!--
   Licensed 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.
 -->
<?xml-stylesheet type="text/xsl" href="../xsl/p2.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://xmlsns.com/foaf/0.1/"
	>
  <Project rdf:about="http://openmeetings.apache.org/">
    <name>Apache OpenMeetings</name>
    <homepage rdf:resource="http://openmeetings.apache.org/"/>
    <asfext:pmc rdf:resource="http://openmeetings.apache.org/" />
    <programming-language>Java</programming-language>
    <category rdf:resource="http://projects.apache.org/category/network-server"/>
    <category rdf:resource="http://projects.apache.org/category/network-client"/>
    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
    <bug-database rdf:resource="https://issues.apache.org/jira/browse/OPENMEETINGS"/>
    <download-page rdf:resource="http://openmeetings.apache.org/downloads.html"/>

    <shortdesc xml:lang="en">
      Video conferencing, instant messaging, white board and collaborative document editing application.
    </shortdesc>

    <description xml:lang="en">
      The Apache OpenMeetings provides video conferencing, instant messaging, white board, 
      collaborative document editing and other groupware tools using API functions 
      of the Red5 Streaming Server for Remoting and Streaming.
    </description>

    <repository>
      <SVNRepository>
        <browse rdf:resource="http://svn.apache.org/viewcvs.cgi/openmeetings/"/>
        <location rdf:resource="http://svn.apache.org/repos/asf/openmeetings/"/>
      </SVNRepository>
    </repository>

    <mailing-list rdf:resource="http://openmeetings.apache.org/mail-lists.html"/>
 
    <maintainer>
      <foaf:Person>
        <foaf:name>OpenMeetings PMC</foaf:name>
        <foaf:mbox rdf:resource="mailto:dev@openmeetings.apache.org"/>
      </foaf:Person>
    </maintainer>
    
    <release>
      <Version>
        <name>Recommended current 3.2.x release</name>
        <created>2017-02-13</created>
        <revision>3.2.0</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>Legacy 3.1.x release</name>
        <created>2017-01-29</created>
        <revision>3.1.5</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>Legacy 2.2.0 release</name>
        <created>2013-12-12</created>
        <revision>2.2.0</revision>
      </Version>
    </release>
  </Project>
</rdf:RDF>

