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