<?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.

-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         !!!!!!                                !!!!!!
         !!!!!!    This pom is only provided   !!!!!!
         !!!!!!   for build convenience and    !!!!!!
         !!!!!!   should not be released       !!!!!!
         !!!!!!                                !!!!!!
         !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    <modelVersion>4.0.0</modelVersion>
    
    <parent>
        <groupId>org.apache.clerezza</groupId>
        <artifactId>clerezza</artifactId>
        <version>0.5</version>
        <relativePath />
     </parent>

    <groupId>org.apache.clerezza.commons-rdf</groupId>
    <artifactId>commons-reactor</artifactId>
    <packaging>pom</packaging>
    <version>0.1-SNAPSHOT</version>
    <name>Clerezza Commons RDF Reactor</name>
    <description>
        Apache Commons RDF provides an API modelling the RDF data model as defined by 
        http://www.w3.org/TR/rdf11-concepts/
    </description>
    
    <url>http://clerezza.apache.org/commons-rdf/</url>
    
    <issueManagement>
        <system>jira</system>
        <url>http://issues.apache.org/jira/browse/CLEREZZA</url>
    </issueManagement>
    
    <inceptionYear>2015</inceptionYear>
    <scm>
        <connection>scm:git:https://git-wip-us.apache.org/repos/asf/clerezza-rdf-core.git</connection>
        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/clerezza-rdf-core.git</developerConnection>
        <url>https://git-wip-us.apache.org/repos/asf/clerezza-rdf-core.git</url>
    </scm>

    <modules>
        <module>api</module>
        <module>impl.utils</module>
        <module>impl.sparql</module>
    </modules>

</project>
