You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by to...@apache.org on 2010/09/27 17:31:46 UTC
svn commit: r1001780 - in
/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator:
./ src/main/java/org/apache/clerezza/uima/metadatagenerator/
src/main/java/org/apache/clerezza/uima/met...
Author: tommaso
Date: Mon Sep 27 15:31:45 2010
New Revision: 1001780
URL: http://svn.apache.org/viewvc?rev=1001780&view=rev
Log:
[CLEREZZA-182] - integrated Apache Tika as MediaTypeTextExtractor implementation, applied patch from Davide Palmisano
Added:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractor.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractorTest.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractorTest.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/metadatagenerator/
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/metadatagenerator/mediatype/
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/metadatagenerator/mediatype/clerezza-homepage.html
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/pom.xml
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/UIMABaseMetadataGenerator.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/MediaTypeTextExtractor.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractor.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/UnsupportedMediaTypeException.java
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/pom.xml?rev=1001780&r1=1001779&r2=1001780&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/pom.xml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/pom.xml Mon Sep 27 15:31:45 2010
@@ -53,6 +53,18 @@
<artifactId>org.apache.clerezza.jaxrs.testutils</artifactId>
<scope>test</scope>
</dependency>
+ <!-- BEGIN: Tika -->
+ <dependency>
+ <groupId>org.apache.tika</groupId>
+ <artifactId>tika-core</artifactId>
+ <version>0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tika</groupId>
+ <artifactId>tika-parsers</artifactId>
+ <version>0.7</version>
+ </dependency>
+ <!-- END: Tika -->
<dependency>
<groupId>org.apache.uima</groupId>
<artifactId>uimaj-ep-runtime</artifactId>
@@ -92,4 +104,4 @@
</plugin>
</plugins>
</build>
-</project>
\ No newline at end of file
+</project>
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/UIMABaseMetadataGenerator.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/UIMABaseMetadataGenerator.java?rev=1001780&r1=1001779&r2=1001780&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/UIMABaseMetadataGenerator.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/UIMABaseMetadataGenerator.java Mon Sep 27 15:31:45 2010
@@ -50,7 +50,6 @@ public class UIMABaseMetadataGenerator i
this.textExtractors = new TreeSet<MediaTypeTextExtractor>();
}
- @Override
public void generate(GraphNode node, byte[] data, MediaType mediaType) {
if (textExtractors.isEmpty()) {
initializeExtractors();
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/MediaTypeTextExtractor.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/MediaTypeTextExtractor.java?rev=1001780&r1=1001779&r2=1001780&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/MediaTypeTextExtractor.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/MediaTypeTextExtractor.java Mon Sep 27 15:31:45 2010
@@ -3,12 +3,25 @@ package org.apache.clerezza.uima.metadat
import javax.ws.rs.core.MediaType;
/**
- * A MediaTypeTextExtractor should extract text from a (list of) specified {@link javax.ws.rs.core.MediaType}
+ * A MediaTypeTextExtractor extracts text from a (list of) specified {@link javax.ws.rs.core.MediaType}.
*/
public interface MediaTypeTextExtractor {
+ /**
+ * Check if the provided {@link javax.ws.rs.core.MediaType} is supported by this extractor.
+ *
+ * @param mediaType to be checked.
+ * @return <code>true</code> if the provided {@link javax.ws.rs.core.MediaType} as input is supported.
+ */
public boolean supports(MediaType mediaType);
+ /**
+ * Extract the text from the provided input if its <i>Media Type</i> is supported.
+ *
+ * @param bytes an array of <code>byte</code> representing the input.
+ * @return a {@link String} with the extracted text.
+ * @throws UnsupportedMediaTypeException if the input implicit <i>Media type</i> is not supported.
+ */
public String extract(byte[] bytes) throws UnsupportedMediaTypeException;
}
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractor.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractor.java?rev=1001780&r1=1001779&r2=1001780&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractor.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractor.java Mon Sep 27 15:31:45 2010
@@ -6,13 +6,18 @@ import javax.ws.rs.core.MediaType;
* Base implementation of {@link javax.ws.rs.core.MediaType}
*/
public class PlainTextExtractor implements MediaTypeTextExtractor {
- @Override
+
+ /**
+ * {@inheritDoc}
+ */
public boolean supports(MediaType mediaType) {
return mediaType != null && mediaType.getType().equals(MediaType.TEXT_PLAIN_TYPE.getType()) &&
mediaType.getSubtype().equals(MediaType.TEXT_PLAIN_TYPE.getSubtype());
}
- @Override
+ /**
+ * {@inheritDoc}
+ */
public String extract(byte[] bytes) throws UnsupportedMediaTypeException {
return new String(bytes);
}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractor.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractor.java?rev=1001780&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractor.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractor.java Mon Sep 27 15:31:45 2010
@@ -0,0 +1,117 @@
+package org.apache.clerezza.uima.metadatagenerator.mediatype;
+
+import org.apache.tika.Tika;
+import org.apache.tika.config.TikaConfig;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.mime.MimeTypes;
+
+import javax.ws.rs.core.MediaType;
+import java.io.*;
+
+/**
+ * An implementation based on <a href="http://tika.apache.org">Apache Tika</a>.
+ *
+ * @author Davide Palmisano
+ */
+public class TikaTextExtractor implements MediaTypeTextExtractor {
+
+ private Tika tika;
+
+ private TikaConfig config;
+
+ private MimeTypes types;
+
+ /**
+ * Construct an instance using the default {@link org.apache.tika.Tika} configuration.
+ */
+ public TikaTextExtractor() {
+ try {
+ config = TikaConfig.getDefaultConfig();
+ } catch (Exception e) {
+ throw new RuntimeException("Error while loading Tika configuration.", e);
+ }
+ types = config.getMimeRepository();
+ tika = new Tika(config);
+ }
+
+ /**
+ * Construct an instance using a custom <i>tika-config.xml</i> configuration file.
+ *
+ * @param tikaConfigPath the path to the <i>tika-config.xml</i> configuration file.
+ */
+ public TikaTextExtractor(String tikaConfigPath) {
+ InputStream inputStream = getResourceAsStream(tikaConfigPath);
+ try {
+ config = new TikaConfig(inputStream);
+ inputStream.close();
+ } catch (Exception e) {
+ throw new RuntimeException("Error while loading Tika configuration.", e);
+ }
+ types = config.getMimeRepository();
+ tika = new Tika(config);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean supports(MediaType mediaType) {
+ return this.types.getMimeType(mediaType.getType()) != null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String extract(byte[] bytes) throws UnsupportedMediaTypeException {
+ InputStream inputStream = new ByteArrayInputStream(bytes);
+ String mimeType = null;
+ try {
+ mimeType = this.tika.detect(inputStream);
+ } catch (IOException e) {
+ throw new RuntimeException("Error while detecting mime type", e);
+ }
+ if (this.types.getMimeType(mimeType) == null) {
+ throw new UnsupportedMediaTypeException(
+ String.format("[%s] mime type is not supported", mimeType)
+ );
+ }
+ Metadata metadata = new Metadata();
+ metadata.set(Metadata.CONTENT_TYPE, mimeType);
+ Reader reader = null;
+ try {
+ reader = this.tika.parse(inputStream, metadata);
+ } catch (IOException e) {
+ throw new RuntimeException("Error while parsing the provided input");
+ }
+ BufferedReader in
+ = new BufferedReader(reader);
+ String line;
+ String result = null;
+ try {
+ line = in.readLine();
+ while (line != null) {
+ result = line;
+ line = in.readLine();
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("Error while parsing the provided input");
+ }
+ return result;
+ }
+
+ /**
+ * Loads the <code>Tika</code> configuration file.
+ *
+ * @return the input stream containing the configuration.
+ */
+ private InputStream getResourceAsStream(String tikaConfigFile) {
+ InputStream result;
+ result = TikaTextExtractor.class.getResourceAsStream(tikaConfigFile);
+ if (result == null) {
+ result = TikaTextExtractor.class.getClassLoader().getResourceAsStream(tikaConfigFile);
+ if (result == null) {
+ result = ClassLoader.getSystemResourceAsStream(tikaConfigFile);
+ }
+ }
+ return result;
+ }
+}
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/UnsupportedMediaTypeException.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/UnsupportedMediaTypeException.java?rev=1001780&r1=1001779&r2=1001780&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/UnsupportedMediaTypeException.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/main/java/org/apache/clerezza/uima/metadatagenerator/mediatype/UnsupportedMediaTypeException.java Mon Sep 27 15:31:45 2010
@@ -8,6 +8,14 @@ import javax.ws.rs.core.MediaType;
public class UnsupportedMediaTypeException extends Exception {
private static final String UNSUPPORTED = " is not supported";
+ public UnsupportedMediaTypeException(String message) {
+ super(message);
+ }
+
+ public UnsupportedMediaTypeException(String message, Exception e) {
+ super(message, e);
+ }
+
public UnsupportedMediaTypeException(MediaType mediaType) {
super(new StringBuilder(mediaType.getType()).append(UNSUPPORTED).toString());
}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractorTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractorTest.java?rev=1001780&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractorTest.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/PlainTextExtractorTest.java Mon Sep 27 15:31:45 2010
@@ -0,0 +1,22 @@
+package org.apache.clerezza.uima.metadatagenerator.mediatype;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Reference test case for {@link org.apache.clerezza.uima.metadatagenerator.mediatype.PlainTextExtractor} class.
+ *
+ * @author Davide Palmisano
+ */
+public class PlainTextExtractorTest {
+
+ @Test
+ public void testExtract() throws UnsupportedMediaTypeException {
+ final String TEXT = "just a simple test string";
+ MediaTypeTextExtractor extractor = new PlainTextExtractor();
+ String extracted = extractor.extract(TEXT.getBytes());
+ Assert.assertNotNull(extracted);
+ Assert.assertEquals(extracted, TEXT);
+ }
+
+}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractorTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractorTest.java?rev=1001780&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractorTest.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/java/org/apache/clerezza/uima/metadatagenerator/mediatype/TikaTextExtractorTest.java Mon Sep 27 15:31:45 2010
@@ -0,0 +1,60 @@
+package org.apache.clerezza.uima.metadatagenerator.mediatype;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.ws.rs.core.MediaType;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+
+/**
+ * Reference test for {@link org.apache.clerezza.uima.metadatagenerator.mediatype.TikaTextExtractor} class.
+ *
+ * @author Davide Palmisano
+ */
+public class TikaTextExtractorTest {
+
+ private TikaTextExtractor tikaTextExtractor;
+
+ @Before
+ public void setUp() {
+ this.tikaTextExtractor = new TikaTextExtractor();
+ }
+
+ @After
+ public void tearDown() {
+ this.tikaTextExtractor = null;
+ }
+
+ @Test
+ public void testExtract() throws UnsupportedMediaTypeException, IOException {
+ InputStream inputStream = TikaTextExtractorTest.class.getResourceAsStream("clerezza-homepage.html");
+ byte[] bytes = new byte[inputStream.available()];
+ inputStream.read(bytes);
+ String extracted = this.tikaTextExtractor.extract(bytes);
+ Assert.assertNotNull(extracted);
+ Assert.assertTrue(extracted.length() > 0);
+ }
+
+ /**
+ * Tests the if all the {@link javax.ws.rs.core.MediaType}s already defined could be recognized.
+ *
+ * @throws UnsupportedMediaTypeException
+ * @throws IllegalAccessException
+ */
+ @Test
+ public void testSupports() throws UnsupportedMediaTypeException, IllegalAccessException {
+ Class mediaTypeClass = MediaType.class;
+ for (Field field : mediaTypeClass.getFields()) {
+ if (field.getType().equals(MediaType.class)) {
+ MediaType objectInstance = new MediaType();
+ MediaType value = (MediaType) field.get(objectInstance);
+ Assert.assertTrue(tikaTextExtractor.supports(value));
+ }
+ }
+ }
+
+}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/metadatagenerator/mediatype/clerezza-homepage.html
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/metadatagenerator/mediatype/clerezza-homepage.html?rev=1001780&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/metadatagenerator/mediatype/clerezza-homepage.html (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.uima/org.apache.clerezza.uima.metadata-generator/src/test/resources/org/apache/clerezza/uima/metadatagenerator/mediatype/clerezza-homepage.html Mon Sep 27 15:31:45 2010
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
+
+
+ <head>
+ <link type="text/css" href="/clerezza/style/style.css" rel="stylesheet" />
+ <title>Welcome to Apache Clerezza</title>
+ </head>
+
+
+
+
+ <body>
+ <h1>Welcome to Apache Clerezza</h1>
+<div class='tx-content'>
+
+ <div>ApachClerezza is an OSGi-based modular application and set of components (bundles) for building RESTFul Semantic Web applications and services.<br xmlns="http://www.w3.org/1999/xhtml"></br></div>
+
+ <div><h2>Features</h2>
+<div class='tx-content'>
+
+ <div>Apache Clerezza allows to easily develop semantic web application by providing the following:<ul xmlns="http://www.w3.org/1999/xhtml"><li>An API to access RDF Graphs</li><li>A Jax RS implementation</li><li>TypeHandlers: Jax-RS resources bound to an RDF type</li><li>Renderlets to create various represenattions from RDF resources, ScalaServerPages allow to easily write renderlets in Scala</li></ul></div>
+
+</div>
+</div>
+
+ <div><h2>Documentation</h2>
+<div class='tx-content'>
+
+ <div><div xmlns="http://www.w3.org/1999/xhtml">Clerezza documentation is available on every clerezza instance for the active bundles at http://host:port/documentation, a copy is also available on this server: <a href="/clerezza/documentation">documentation</a></div>
+<div xmlns="http://www.w3.org/1999/xhtml">Maven generated site: <a href="http://incubator.apache.org/clerezza/mvn-site">http://incubator.apache.org/clerezza/mvn-site/</a></div>
+</div>
+
+</div>
+</div>
+
+ <div><h2>Resources</h2>
+<div class='tx-content'>
+
+ <div><div xmlns="http://www.w3.org/1999/xhtml">
+Subversion: <a href="http://svn.apache.org/repos/asf/incubator/clerezza/">http://svn.apache.org/repos/asf/incubator/clerezza/</a></div>
+<div xmlns="http://www.w3.org/1999/xhtml">Clerezza proposal: <a href="http://wiki.apache.org/incubator/ClerezzaProposal">http://wiki.apache.org/incubator/ClerezzaProposal</a></div>
+<div xmlns="http://www.w3.org/1999/xhtml">Status page: <a href="http://incubator.apache.org/projects/clerezza.html">http://incubator.apache.org/projects/clerezza.html</a></div></div>
+
+</div>
+</div>
+
+ <div><img xmlns="http://www.w3.org/1999/xhtml" src="/clerezza/images/sw-horz-w3c.png"></img></div>
+
+</div>
+
+ </body>
+</html>