<!--
    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:asfext="http://projects.apache.org/ns/asfext#"
         xmlns:foaf="http://xmlns.com/foaf/0.1/">
  <Project rdf:about="https://geode.apache.org">
    <created>2021-06-24</created>
    <license rdf:resource="https://spdx.org/licenses/Apache-2.0" />
    <name>Apache Geode</name>
    <homepage rdf:resource="https://geode.apache.org" />
    <asfext:pmc rdf:resource="https://geode.apache.org" />
    <shortdesc>Apache Geode is a data management platform that provides real-time, consistent access to data-intensive applications throughout widely distributed cloud architectures.</shortdesc>
    <description>Apache Geode is a data management platform that provides real-time, consistent access to data-intensive applications throughout widely distributed cloud architectures. Geode pools memory, CPU, network resources, and optionally local disk across multiple processes to manage application objects and behavior. It uses dynamic replication and data partitioning techniques to implement high availability, improved performance, scalability, and fault tolerance. In addition to being a distributed data container, Geode is an in-memory data management system that provides reliable asynchronous event notifications and guaranteed message delivery.</description>
    <bug-database rdf:resource="https://issues.apache.org/jira/browse/GEODE" />
    <mailing-list rdf:resource="https://geode.apache.org/community/#mailing-lists" />
    <download-page rdf:resource="https://geode.apache.org/releases/" />

    <programming-language>Java</programming-language>

    <category rdf:resource="https://projects.apache.org/category/database" />

    <repository>
      <GitRepository>
        <location rdf:resource="https://gitbox.apache.org/repos/asf/geode.git"/>
        <browse rdf:resource="https://gitbox.apache.org/repos/asf/geode.git"/>
      </GitRepository>
    </repository>
    </Project>
    </rdf:RDF>
