<?xml version="1.0" encoding="UTF-8"?>

<!--
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 xml:lang="en" xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <Project rdf:about="">
    <name></name>
    <homepage rdf:resource="" />
    <shortdesc></shortdesc>
    <description></description>

    <maintainer>
      <foaf:Person>
        <foaf:name>Clebert Suconic</foaf:name>
        <foaf:status>Project Lead</foaf:status>
        <foaf:firstName>Clebert</foaf:firstName>
        <foaf:lastName>Suconic</foaf:lastName>
      </foaf:Person>
    </maintainer>
    <developer>
      <foaf:Person>
        <foaf:name>Andy Taylor</foaf:name>
        <foaf:firstName>Andy</foaf:firstName>
        <foaf:lastName>Taylor</foaf:lastName>
      </foaf:Person>
    </developer>
    <developer>
      <foaf:Person>
        <foaf:name>Howard Gao</foaf:name>
        <foaf:firstName>Howard</foaf:firstName>
        <foaf:lastName>Gao</foaf:lastName>
      </foaf:Person>
    </developer>
    <developer>
      <foaf:Person>
        <foaf:name>Justin Bertram</foaf:name>
        <foaf:firstName>Justin</foaf:firstName>
        <foaf:lastName>Bertram</foaf:lastName>
      </foaf:Person>
    </developer>
    <developer>
      <foaf:Person>
        <foaf:name>Martyn Taylor</foaf:name>
        <foaf:firstName>Martyn</foaf:firstName>
        <foaf:lastName>Taylor</foaf:lastName>
      </foaf:Person>
    </developer>
    <license rdf:resource="" />


    <programming-language>Java</programming-language>
    <programming-language>C/C++</programming-language>
    <vendor>Red Hat</vendor>
    <implements>
      <Specification>
        <name>JMS 2.0</name>
        <description></description>
        <rdfs:seeAlso rdf:resource="" />
      </Specification>
    </implements>
    <foaf:logo rdf:resource="" />
    <foaf:account>
      <foaf:OnlineAccount>
        <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/OnlineChatAccount" />
        <foaf:accountServiceHomepage rdf:resource="http://twitter.com/" />
        <foaf:accountName>activemq</foaf:accountName>
      </foaf:OnlineAccount>
    </foaf:account>
  </Project>
</rdf:RDF>

