You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@any23.apache.org by mo...@apache.org on 2012/01/10 17:32:33 UTC
svn commit: r1229627 [2/5] - in /incubator/any23/trunk: ./ any23-core/
any23-core/bin/ any23-core/src/main/java/org/deri/any23/
any23-core/src/main/java/org/deri/any23/cli/
any23-core/src/main/java/org/deri/any23/eval/
any23-core/src/main/java/org/deri...
Added: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdf/TriXExtractor.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdf/TriXExtractor.java?rev=1229627&view=auto
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdf/TriXExtractor.java (added)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdf/TriXExtractor.java Tue Jan 10 16:32:28 2012
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2008-2010 Digital Enterprise Research Institute (DERI)
+ *
+ * Licensed 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.
+ */
+
+package org.deri.any23.extractor.rdf;
+
+import org.deri.any23.extractor.ExtractionContext;
+import org.deri.any23.extractor.ExtractionResult;
+import org.deri.any23.extractor.ExtractorDescription;
+import org.deri.any23.extractor.ExtractorFactory;
+import org.deri.any23.extractor.SimpleExtractorFactory;
+import org.openrdf.rio.helpers.RDFParserBase;
+
+import java.util.Arrays;
+
+/**
+ * Concrete implementation of {@link ContentExtractor}
+ * to perform extraction on <a href="http://www.w3.org/2004/03/trix/">TriX</a> documents.
+ *
+ * @author Michele Mostarda (mostarda@fbk.eu)
+ */
+public class TriXExtractor extends BaseRDFExtractor {
+
+ public final static ExtractorFactory<TriXExtractor> factory =
+ SimpleExtractorFactory.create(
+ "rdf-trix",
+ null,
+ Arrays.asList(
+ "application/trix"
+ ),
+ "example-trix.trx",
+ TriXExtractor.class
+ );
+
+ /**
+ * Constructor, allows to specify the validation and error handling policies.
+ *
+ * @param verifyDataType if <code>true</code> the data types will be verified,
+ * if <code>false</code> will be ignored.
+ * @param stopAtFirstError if <code>true</code> the parser will stop at first parsing error,
+ * if <code>false</code> will ignore non blocking errors.
+ */
+ public TriXExtractor(boolean verifyDataType, boolean stopAtFirstError) {
+ super(verifyDataType, stopAtFirstError);
+ }
+
+ /**
+ * Default constructor, with no verification of data types and not stop at first error.
+ */
+ public TriXExtractor() {
+ this(true, true);
+ }
+
+ public ExtractorDescription getDescription() {
+ return factory;
+ }
+
+ @Override
+ protected RDFParserBase getParser(ExtractionContext extractionContext, ExtractionResult extractionResult) {
+ return RDFParserFactory.getInstance().getTriXParser(
+ isVerifyDataType(), isStopAtFirstError(), extractionContext, extractionResult
+ );
+ }
+
+
+}
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Extractor.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Extractor.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Extractor.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Extractor.java Tue Jan 10 16:32:28 2012
@@ -45,7 +45,7 @@ public class RDFa11Extractor implements
NAME,
null,
Arrays.asList("text/html;q=0.3", "application/xhtml+xml;q=0.3"),
- null,
+ "example-rdfa11.html",
RDFa11Extractor.class
);
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Parser.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Parser.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Parser.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/extractor/rdfa/RDFa11Parser.java Tue Jan 10 16:32:28 2012
@@ -54,7 +54,7 @@ public class RDFa11Parser {
private static final Logger logger = LoggerFactory.getLogger(RDFa11Parser.class);
public static final String CURIE_SEPARATOR = ":";
- public static final String URI_PREFIX_SEPARATOR = ":";
+ public static final char URI_PREFIX_SEPARATOR = ':';
public static final String URI_SCHEMA_SEPARATOR = "://";
public static final String URI_PATH_SEPARATOR = "/";
@@ -113,8 +113,38 @@ public class RDFa11Parser {
return documentURL;
}
+ /**
+ * Given a prefix declaration returns a list of <code>prefixID:prefixURL</code> strings
+ * normalizing blanks where present.
+ *
+ * @param prefixesDeclaration
+ * @return
+ */
+ protected static String[] extractPrefixSections(String prefixesDeclaration) {
+ final String[] parts = prefixesDeclaration.split("\\s");
+ final List<String> out = new ArrayList<String>();
+ int i = 0;
+ while(i < parts.length) {
+ final String part = parts[i];
+ if(part.length() == 0) {
+ i++;
+ continue;
+ }
+ if(part.charAt( part.length() -1 ) == URI_PREFIX_SEPARATOR) {
+ i++;
+ while(i < parts.length && parts[i].length() == 0) i++;
+ out.add( part + (i < parts.length ? parts[i] : "") );
+ i++;
+ } else {
+ out.add(parts[i]);
+ i++;
+ }
+ }
+ return out.toArray( new String[out.size()] );
+ }
+
protected static boolean isAbsoluteURI(String uri) {
- return uri.indexOf(URI_SCHEMA_SEPARATOR) != -1;
+ return uri.contains(URI_SCHEMA_SEPARATOR);
}
protected static boolean isCURIE(String curie) {
@@ -640,7 +670,7 @@ public class RDFa11Parser {
private void extractPrefixes(Node node, List<PrefixMap> prefixMapList) {
final String prefixAttribute = DomUtils.readAttribute(node, PREFIX_ATTRIBUTE, null);
if(prefixAttribute == null) return;
- final String[] prefixParts = prefixAttribute.split("\\s");
+ final String[] prefixParts = extractPrefixSections(prefixAttribute);
for(String prefixPart : prefixParts) {
int splitPoint = prefixPart.indexOf(URI_PREFIX_SEPARATOR);
final String prefix = prefixPart.substring(0, splitPoint);
@@ -883,8 +913,8 @@ public class RDFa11Parser {
mapping = mapping.substring(1);
}
- final String[] parts = mapping.split(":");
- if(parts.length != 2) { // there is no prefix separator.
+ final int prefixSeparatorIndex = mapping.indexOf(':');
+ if(prefixSeparatorIndex == -1) { // there is no prefix separator.
if(resolutionPolicy == ResolutionPolicy.NSRequired) {
throw new IllegalArgumentException(
String.format("Invalid mapping string [%s], must declare a prefix.", mapping)
@@ -900,11 +930,12 @@ public class RDFa11Parser {
return resolveURI(documentBase.toString() + mapping);
}
- final URI curieMapping = getMapping(parts[0]);
+ final String prefix = mapping.substring(0, prefixSeparatorIndex);
+ final URI curieMapping = getMapping(prefix);
if(curieMapping == null) {
- throw new IllegalArgumentException( String.format("Cannot map prefix '%s'", parts[0]) );
+ throw new IllegalArgumentException( String.format("Cannot map prefix '%s'", prefix) );
}
- final String candidateCURIEStr = curieMapping.toString() + parts[1];
+ final String candidateCURIEStr = curieMapping.toString() + mapping.substring(prefixSeparatorIndex + 1);
final java.net.URI candidateCURIE;
try {
candidateCURIE = new java.net.URI(candidateCURIEStr);
Added: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuads.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuads.java?rev=1229627&view=auto
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuads.java (added)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuads.java Tue Jan 10 16:32:28 2012
@@ -0,0 +1,39 @@
+/**
+ * Copyright 2008-2010 Digital Enterprise Research Institute (DERI)
+ *
+ * Licensed 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.
+ *
+ */
+
+package org.deri.any23.io.nquads;
+
+import org.openrdf.rio.RDFFormat;
+
+import java.nio.charset.Charset;
+
+/**
+ * Defines the <i>N-Quads</i> format.
+ *
+ * @author Michele Mostarda (mostarda@fbk.eu)
+ */
+public class NQuads {
+
+ /**
+ * Returns the format associate to the <i>NQuads</i> specification.
+ */
+ public static RDFFormat FORMAT =
+ RDFFormat.register("N-Quads", "text/nquads", "nq", Charset.forName("UTF-8"));
+
+ private NQuads(){}
+
+}
Added: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsParser.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsParser.java?rev=1229627&view=auto
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsParser.java (added)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsParser.java Tue Jan 10 16:32:28 2012
@@ -0,0 +1,697 @@
+/**
+ * Copyright 2008-2010 Digital Enterprise Research Institute (DERI)
+ *
+ * Licensed 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.
+ *
+ */
+
+package org.deri.any23.io.nquads;
+
+import org.deri.any23.util.ReaderInputStream;
+import org.openrdf.model.BNode;
+import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.datatypes.XMLDatatypeUtil;
+import org.openrdf.model.impl.URIImpl;
+import org.openrdf.rio.ParseLocationListener;
+import org.openrdf.rio.RDFFormat;
+import org.openrdf.rio.RDFHandler;
+import org.openrdf.rio.RDFHandlerException;
+import org.openrdf.rio.RDFParseException;
+import org.openrdf.rio.helpers.RDFParserBase;
+import org.openrdf.rio.ntriples.NTriplesUtil;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+/**
+ * <i>N-Quads</i> parser implementation based on the
+ * {@link org.openrdf.rio.RDFParser} interface.
+ * See the format specification <a href="http://sw.deri.org/2008/07/n-quads/">here</a>.
+ *
+ * @author Michele Mostarda (mostarda@fbk.eu)
+ * @see org.openrdf.rio.RDFParser
+ */
+public class NQuadsParser extends RDFParserBase {
+
+ /**
+ * Location listener acquired when parsing started.
+ */
+ private ParseLocationListener locationListener;
+
+ /**
+ * RDF handler acquired when parsing started.
+ */
+ private RDFHandler rdfHandler;
+
+ /**
+ * Current row, col and marker trackers.
+ */
+ private int row, col, mark;
+
+ public NQuadsParser() {}
+
+ public RDFFormat getRDFFormat() {
+ return NQuads.FORMAT;
+ }
+
+ public void parse(Reader reader, String s)
+ throws IOException, RDFParseException, RDFHandlerException {
+ ReaderInputStream readerInputStream = new ReaderInputStream(reader);
+ parse(readerInputStream, s);
+ }
+
+ public synchronized void parse(InputStream is, String baseURI)
+ throws IOException, RDFParseException, RDFHandlerException {
+ if(is == null) {
+ throw new NullPointerException("inputStream cannot be null.");
+ }
+ if(baseURI == null) {
+ throw new NullPointerException("baseURI cannot be null.");
+ }
+
+ try {
+ row = col = 1;
+
+ locationListener = getParseLocationListener();
+ rdfHandler = getRDFHandler();
+
+ setBaseURI(baseURI);
+
+ final BufferedReader br = new BufferedReader( new InputStreamReader(is) );
+ if( rdfHandler != null ) {
+ rdfHandler.startRDF();
+ }
+ while( parseLine(br) ) {
+ nextRow();
+ }
+ } finally {
+ if(rdfHandler != null) {
+ rdfHandler.endRDF();
+ }
+ clear();
+ clearBNodeIDMap();
+ }
+ }
+
+ /**
+ * Moves to the next row, resets the column.
+ */
+ private void nextRow() {
+ col = 0;
+ row++;
+ if(locationListener != null) {
+ locationListener.parseLocationUpdate(row, col);
+ }
+ }
+
+ /**
+ * Moves to the next column.
+ */
+ private void nextCol() {
+ col++;
+ if(locationListener != null) {
+ locationListener.parseLocationUpdate(row, col);
+ }
+ }
+
+ /**
+ * Reads the next char.
+ *
+ * @param br
+ * @return the next read char.
+ * @throws IOException
+ */
+ private char readChar(BufferedReader br) throws IOException {
+ final int c = br.read();
+ if(c == -1) {
+ throw new EOS();
+ }
+ nextCol();
+ return (char) c;
+ }
+
+ /**
+ * Reads an unicode char with pattern <code>\\uABCD</code>.
+ *
+ * @param br input reader.
+ * @return read char.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private char readUnicode(BufferedReader br) throws IOException, RDFParseException {
+ final char[] unicodeSequence = new char[4];
+ for(int i = 0; i < unicodeSequence.length; i++) {
+ unicodeSequence[i] = readChar(br);
+ }
+ final String unicodeCharStr = new String(unicodeSequence);
+ try {
+ return (char) Integer.parseInt(unicodeCharStr, 16);
+ } catch (NumberFormatException nfe) {
+ reportError("Error while converting unicode char '\\u" + unicodeCharStr + "'", row, col);
+ throw new IllegalStateException();
+ }
+ }
+
+ /**
+ * Marks the buffered input stream with the current location.
+ *
+ * @param br
+ */
+ private void mark(BufferedReader br) throws IOException {
+ mark = col;
+ br.mark(5);
+ }
+
+ /**
+ * Resets the buffered input stream and update the new location.
+ *
+ * @param br
+ * @throws IOException
+ */
+ private void reset(BufferedReader br) throws IOException {
+ col = mark;
+ br.reset();
+ if(locationListener != null) {
+ locationListener.parseLocationUpdate(row, col);
+ }
+ }
+
+ /**
+ * Asserts to read a specific char.
+ *
+ * @param br
+ * @param c
+ * @throws IOException
+ */
+ private void assertChar(BufferedReader br, char c) throws IOException {
+ if( readChar(br) != c) {
+ throw new IllegalArgumentException(
+ String.format("Unexpected char at location %s %s, expected '%s'", row, col, c)
+ );
+ }
+ }
+
+ /**
+ * Parsers an <i>NQuads</i> line.
+ *
+ * @param br input stream reader containing NQuads.
+ * @return <code>false</code> if the parsing completed, <code>true</code> otherwise.
+ * @throws IOException
+ * @throws RDFParseException
+ * @throws RDFHandlerException
+ */
+ private boolean parseLine(BufferedReader br)
+ throws IOException, RDFParseException, RDFHandlerException {
+
+ if(!consumeSpacesAndNotEOS(br)) {
+ return false;
+ }
+
+ // Consumes empty line or line comment.
+ try {
+ if(consumeEmptyLine(br)) return true;
+ if( consumeComment(br) ) return true;
+ } catch (EOS eos) {
+ return false;
+ }
+
+ final Resource sub;
+ final URI pred;
+ final Value obj;
+ final URI graph;
+ try {
+ sub = parseSubject(br);
+ consumeSpaces(br);
+ pred = parsePredicate(br);
+ consumeSpaces(br);
+ obj = parseObject(br);
+ consumeSpaces(br);
+ graph = parseGraph(br);
+ consumeSpaces(br);
+ parseDot(br);
+ } catch (EOS eos) {
+ reportFatalError("Unexpected end of line.", row, col);
+ throw new IllegalStateException();
+ }
+
+ notifyStatement(sub, pred, obj, graph);
+
+ if(!consumeSpacesAndNotEOS(br)) {
+ return false;
+ }
+ return readChar(br) == '\n';
+ }
+
+ /**
+ * Consumes the line if empty (contains just a carriage return).
+ *
+ * @param br input NQuads stream.
+ * @return <code>true</code> if the line is empty.
+ * @throws IOException if an error occurs while consuming stream.
+ */
+ private boolean consumeEmptyLine(BufferedReader br) throws IOException {
+ char c;
+ mark(br);
+ c = readChar(br);
+ if (c == '\n') {
+ return true;
+ } else {
+ reset(br);
+ return false;
+ }
+ }
+
+ /**
+ * Consumes all subsequent spaces and returns true, if End Of Stream is reached instead returns false.
+ * @param br input NQuads stream reader.
+ * @return <code>true</code> if there are other chars to be consumed.
+ * @throws IOException if an error occurs while consuming stream.
+ */
+ private boolean consumeSpacesAndNotEOS(BufferedReader br) throws IOException {
+ try {
+ consumeSpaces(br);
+ return true;
+ } catch (EOS eos) {
+ return false;
+ }
+ }
+
+ /**
+ * Consumes a comment if any.
+ *
+ * @param br input NQuads stream reader.
+ * @return <code>true</code> if comment has been consumed, false otherwise.
+ * @throws IOException
+ */
+ private boolean consumeComment(BufferedReader br) throws IOException {
+ char c;
+ mark(br);
+ c = readChar(br);
+ if (c == '#') {
+ mark(br);
+ while (readChar(br) != '\n');
+ mark(br);
+ return true;
+ } else {
+ reset(br);
+ return false;
+ }
+ }
+
+ /**
+ * Notifies the parsed statement to the {@link RDFHandler}.
+ *
+ * @param sub
+ * @param pred
+ * @param obj
+ * @param graph
+ * @throws RDFParseException
+ * @throws RDFHandlerException
+ */
+ private void notifyStatement(Resource sub, URI pred, Value obj, URI graph)
+ throws RDFParseException, RDFHandlerException {
+ Statement statement = createStatement(sub, pred, obj, graph);
+ if (rdfHandler != null) {
+ try {
+ rdfHandler.handleStatement(statement);
+ } catch (RDFHandlerException rdfhe) {
+ reportFatalError(rdfhe);
+ throw rdfhe;
+ }
+ }
+ }
+
+ /**
+ * Consumes spaces until a non space char is detected.
+ *
+ * @param br input stream reader from which consume spaces.
+ * @throws IOException
+ */
+ private void consumeSpaces(BufferedReader br) throws IOException {
+ char c;
+ while(true) {
+ mark(br);
+ c = readChar(br);
+ if(c == ' ' || c == '\r' || c == '\f' || c == '\t') {
+ mark(br);
+ } else {
+ break;
+ }
+ }
+ reset(br);
+ }
+
+ /**
+ * Consumes the dot at the end of NQuads line.
+ *
+ * @param br
+ * @throws IOException
+ */
+ private void parseDot(BufferedReader br) throws IOException {
+ assertChar(br, '.');
+ }
+
+ /**
+ * Parses a URI enclosed within < and > brackets.
+ * @param br
+ * @return the parsed URI.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private URI parseURI(BufferedReader br) throws IOException, RDFParseException {
+ assertChar(br, '<');
+
+ StringBuilder sb = new StringBuilder();
+ char c;
+ while(true) {
+ c = readChar(br);
+ if(c != '>') {
+ sb.append(c);
+ } else {
+ break;
+ }
+ }
+ mark(br);
+
+ try {
+ // TODO - LOW: used to unescape \\uXXXX unicode chars. Unify with #printEscaped().
+ String uriStr = NTriplesUtil.unescapeString( sb.toString() );
+ URI uri;
+ if(uriStr.charAt(0) == '#') {
+ uri = resolveURI(uriStr);
+ } else {
+ uri = createURI(uriStr);
+ }
+ return uri;
+ } catch (RDFParseException rdfpe) {
+ reportFatalError(rdfpe, row, col);
+ throw rdfpe;
+ }
+ }
+
+ /**
+ * Parses a BNode.
+ *
+ * @param br the buffered input stream.
+ * @return the generated bnode.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private BNode parseBNode(BufferedReader br) throws IOException, RDFParseException {
+ assertChar(br, '_');
+ assertChar(br, ':');
+
+ char c;
+ StringBuilder sb = new StringBuilder();
+ while(true) {
+ c = readChar(br);
+ if(c != ' ' && c != '<') {
+ sb.append(c);
+ mark(br);
+ } else {
+ break;
+ }
+ }
+ reset(br);
+
+ try {
+ return createBNode( sb.toString() );
+ } catch (RDFParseException rdfpe) {
+ reportFatalError(rdfpe, row, col);
+ throw rdfpe;
+ }
+ }
+
+ /**
+ * Parses a literal attribute that can be either the language or the data type.
+ *
+ * @param br
+ * @return the literal attribute.
+ * @throws IOException
+ */
+ private LiteralAttribute parseLiteralAttribute(BufferedReader br) throws IOException {
+ char c = readChar(br);
+ if(c != '^' && c != '@') {
+ reset(br);
+ return null;
+ }
+
+ boolean isLang = true;
+ if(c == '^') {
+ isLang = false;
+ assertChar(br, '^');
+ }
+
+ // Consuming eventual open URI.
+ mark(br);
+ c = readChar(br);
+ if(c != '<') {
+ reset(br);
+ }
+
+ StringBuilder sb = new StringBuilder();
+ while(true) {
+ c = readChar(br);
+ if(c == '>') {
+ mark(br);
+ continue;
+ }
+ if(c != ' ' && c != '<') {
+ mark(br);
+ sb.append(c);
+ } else {
+ break;
+ }
+ }
+ reset(br);
+ return new LiteralAttribute( isLang, sb.toString() );
+ }
+
+ /**
+ * Validates and normalize the value of a literal on the basis of the datat ype handling policy and
+ * the associated data type.
+ *
+ * @param value
+ * @param datatype
+ * @return the normalized data type. It depends on the data type handling policy and the specified data type.
+ * @throws RDFParseException
+ */
+ private String validateAndNormalizeLiteral(String value, URI datatype) throws RDFParseException {
+ DatatypeHandling dh = datatypeHandling();
+ if(dh.equals( DatatypeHandling.IGNORE )) {
+ return value;
+ }
+
+ if ( dh.equals(DatatypeHandling.VERIFY) ) {
+ if( ! XMLDatatypeUtil.isBuiltInDatatype(datatype)){
+ return value;
+ }
+ if( ! XMLDatatypeUtil.isValidValue(value, datatype) ) {
+ throw new RDFParseException(
+ String.format("Illegal literal value '%s' with datatype %s", value, datatype.stringValue() ),
+ row, col
+ );
+ }
+ return value;
+ } else if( dh.equals(DatatypeHandling.NORMALIZE) ) {
+ return XMLDatatypeUtil.normalize(value, datatype);
+ } else {
+ throw new IllegalArgumentException( String.format("Unsupported datatype handling: %s", dh) );
+ }
+ }
+
+ /**
+ * Prints the escaped version of the given char c.
+ *
+ * @param c escaped char.
+ * @param sb output string builder.
+ */
+ private void printEscaped(char c, StringBuilder sb) {
+ if(c == 'b') {
+ sb.append('\b');
+ return;
+ }
+ if(c == 'f') {
+ sb.append('\f');
+ return;
+ }
+ if(c == 'n') {
+ sb.append('\n');
+ return;
+ }
+ if(c == 'r') {
+ sb.append('\r');
+ return;
+ }
+ if(c == 't') {
+ sb.append('\t');
+ return;
+ }
+ }
+
+ /**
+ * Parses a literal.
+ *
+ * @param br
+ * @return the parsed literal.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private Value parseLiteral(BufferedReader br) throws IOException, RDFParseException {
+ assertChar(br, '"');
+
+ char c;
+ boolean escaped = false;
+ StringBuilder sb = new StringBuilder();
+ while(true) {
+ c = readChar(br);
+ if( c == '\\' ) {
+ if(escaped) {
+ escaped = false;
+ sb.append(c);
+ } else {
+ escaped = true;
+ }
+ continue;
+ } else if(c == '"' && !escaped) {
+ break;
+ }
+ if(escaped) {
+ if(c == 'u') {
+ char unicodeChar = readUnicode(br);
+ sb.append(unicodeChar);
+ } else {
+ printEscaped(c, sb);
+ }
+ escaped = false;
+ } else {
+ sb.append(c);
+ }
+ }
+ mark(br);
+
+ LiteralAttribute lt = parseLiteralAttribute(br);
+
+ final String value = sb.toString();
+ if(lt == null) {
+ return createLiteral(value, null, null);
+ }else if(lt.isLang) {
+ return createLiteral(
+ value,
+ lt.value,
+ null
+ );
+ } else {
+ URI literalType = null;
+ try {
+ literalType = new URIImpl(lt.value);
+ } catch (Exception e) {
+ reportError( String.format("Error while parsing literal type '%s'", lt.value), row, col );
+ }
+ return createLiteral(
+ validateAndNormalizeLiteral(value, literalType),
+ null,
+ literalType
+ );
+ }
+ }
+
+ /**
+ * Parses the subject sequence.
+ *
+ * @param br
+ * @return the corresponding URI object.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private Resource parseSubject(BufferedReader br) throws IOException, RDFParseException {
+ mark(br);
+ char c = readChar(br);
+ reset(br);
+ if( c == '<' ) {
+ return parseURI(br);
+ } else {
+ return parseBNode(br);
+ }
+ }
+
+ /**
+ * Parses the predicate URI.
+ *
+ * @param br
+ * @return the corresponding URI object.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private URI parsePredicate(BufferedReader br) throws IOException, RDFParseException {
+ return parseURI(br);
+ }
+
+ /**
+ * Parses the the object sequence.
+ *
+ * @param br
+ * @return the corresponding URI object.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private Value parseObject(BufferedReader br) throws IOException, RDFParseException {
+ mark(br);
+ char c = readChar(br);
+ reset(br);
+ if( c == '<' ) {
+ return parseURI(br);
+ } else if( c == '_') {
+ return parseBNode(br);
+ } else {
+ return parseLiteral(br);
+ }
+ }
+
+ /**
+ * Represents a literal with its attribute value that can be either a language or a data type.
+ */
+ class LiteralAttribute {
+ final boolean isLang;
+ final String value;
+
+ LiteralAttribute(boolean lang, String value) {
+ isLang = lang;
+ this.value = value;
+ }
+ }
+
+ /**
+ * Parses the graph URI.
+ *
+ * @param br
+ * @return the corresponding URI object.
+ * @throws IOException
+ * @throws RDFParseException
+ */
+ private URI parseGraph(BufferedReader br) throws IOException, RDFParseException {
+ return parseURI(br);
+ }
+
+ /**
+ * Defines the End Of Stream exception.
+ */
+ class EOS extends IOException {}
+
+}
Added: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsWriter.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsWriter.java?rev=1229627&view=auto
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsWriter.java (added)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/NQuadsWriter.java Tue Jan 10 16:32:28 2012
@@ -0,0 +1,273 @@
+/**
+ * Copyright 2008-2010 Digital Enterprise Research Institute (DERI)
+ *
+ * Licensed 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.
+ *
+ */
+
+package org.deri.any23.io.nquads;
+
+import org.openrdf.model.BNode;
+import org.openrdf.model.Literal;
+import org.openrdf.model.Resource;
+import org.openrdf.model.Statement;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.rio.RDFFormat;
+import org.openrdf.rio.RDFHandlerException;
+import org.openrdf.rio.RDFWriter;
+import org.openrdf.rio.ntriples.NTriplesUtil;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <i>N-Quads</i> implementation of an {@link org.openrdf.rio.RDFWriter}.
+ * See the format specification <a href="http://sw.deri.org/2008/07/n-quads/">here</a>.
+ *
+ * @author Michele Mostarda (mostarda@fbk.eu)
+ */
+public class NQuadsWriter implements RDFWriter {
+
+ /**
+ * The table maintaining namespaces.
+ */
+ private Map<String,String> namespaceTable;
+
+ /**
+ * The output writer.
+ */
+ private Writer writer;
+
+ /**
+ * Maintain the started status.
+ */
+ private boolean started = false;
+
+ public NQuadsWriter(OutputStream os) {
+ this( new OutputStreamWriter(os) );
+ }
+
+ public NQuadsWriter(Writer w) {
+ if(w == null) {
+ throw new NullPointerException("the writer cannot be null.");
+ }
+ writer = w;
+ }
+
+ public RDFFormat getRDFFormat() {
+ return NQuads.FORMAT;
+ }
+
+ public void startRDF() throws RDFHandlerException {
+ if(started) {
+ throw new IllegalStateException("Parsing already started.");
+ }
+ started = true;
+ }
+
+ public void endRDF() throws RDFHandlerException {
+ if(!started) {
+ throw new IllegalStateException("Parsing never started.");
+ }
+
+ try {
+ writer.flush();
+ } catch (IOException ioe) {
+ throw new RDFHandlerException("Error while flushing writer.", ioe);
+ } finally {
+ started = false;
+ if(namespaceTable != null) {
+ namespaceTable.clear();
+ }
+ }
+ }
+
+ public void handleNamespace(String ns, String uri) throws RDFHandlerException {
+ if(!started) {
+ throw new IllegalStateException("Parsing never started.");
+ }
+
+ if(namespaceTable == null) {
+ namespaceTable = new HashMap<String, String>();
+ }
+ namespaceTable.put(ns, NTriplesUtil.escapeString(uri) );
+ }
+
+ public void handleStatement(Statement statement) throws RDFHandlerException {
+ if(!started) {
+ throw new IllegalStateException("Cannot handle statement without start parsing first.");
+ }
+
+ try {
+ printSubject(statement);
+ printSpace();
+ printPredicate(statement);
+ printSpace();
+ printObject(statement);
+ printSpace();
+ printGraph(statement);
+ printCloseStatement();
+ } catch (IOException ioe) {
+ throw new RDFHandlerException("An error occurred while printing statement.", ioe);
+ }
+ }
+
+ public void handleComment(String comment) throws RDFHandlerException {
+ try {
+ writer.write("# ");
+ writer.write(comment);
+ writer.append('\n');
+ } catch (IOException ioe) {
+ throw new RDFHandlerException("An error occurred while printing comment.", ioe);
+ }
+ }
+
+ /**
+ * Prints out a space.
+ *
+ * @throws IOException
+ */
+ private void printSpace() throws IOException {
+ writer.append(' ');
+ }
+
+ /**
+ * Prints out the close statement.
+ *
+ * @throws IOException
+ */
+ private void printCloseStatement() throws IOException {
+ writer.append(" .\n");
+ }
+
+ /**
+ * Prints out a URI string, replacing the existing prefix if found.
+ *
+ * @param uri the URI to print.
+ * @throws IOException
+ */
+ private void printURI(URI uri) throws IOException {
+ final String uriString = uri.stringValue();
+ int splitIdx = 0;
+ String namespace = null;
+ if(namespaceTable != null) {
+ splitIdx = uriString.indexOf(':');
+ if (splitIdx > 0) {
+ String prefix = uriString.substring(0, splitIdx);
+ namespace = namespaceTable.get(prefix);
+ }
+ }
+
+ if (namespace != null) {
+ writer.append('<');
+ writer.append(namespace);
+ writer.append( NTriplesUtil.escapeString(uriString.substring(splitIdx)) );
+ writer.append('>');
+ } else {
+ writer.append('<');
+ writer.append( NTriplesUtil.escapeString(uriString) );
+ writer.append('>');
+ }
+ }
+
+ /**
+ * Prints out the bnode.
+ *
+ * @param b bnode value.
+ * @throws IOException
+ */
+ private void printBNode(BNode b) throws IOException {
+ writer.append( NTriplesUtil.toNTriplesString(b) );
+ }
+
+ /**
+ * Prints out the resource.
+ *
+ * @param r resource value.
+ * @throws java.io.IOException
+ */
+ private void printResource(Resource r) throws IOException {
+ if(r instanceof BNode) {
+ printBNode((BNode) r);
+ } else if(r instanceof URI) {
+ printURI((URI) r);
+ } else {
+ throw new IllegalStateException();
+ }
+ }
+
+ /**
+ * Prints out a literal value.
+ *
+ * @param l literal value.
+ * @throws java.io.IOException
+ */
+ private void printLiteral(Literal l) throws IOException {
+ writer.append( NTriplesUtil.toNTriplesString(l) );
+ }
+
+ /**
+ * Prints out the subject.
+ *
+ * @param s
+ * @throws IOException
+ */
+ private void printSubject(Statement s) throws IOException {
+ printResource( s.getSubject() );
+ }
+
+ /**
+ * Prints out the predicate.
+ *
+ * @param s
+ * @throws IOException
+ */
+ private void printPredicate(Statement s) throws IOException {
+ printURI( s.getPredicate() );
+ }
+
+ /**
+ * Prints out the object, handling all the logic to manage
+ * the literal data type / language attribute.
+ *
+ * @param s
+ * @throws IOException
+ */
+ private void printObject(Statement s) throws IOException {
+ Value v = s.getObject();
+ if(v instanceof Resource) {
+ printResource((Resource) v);
+ return;
+ }
+ printLiteral( (Literal) v );
+ }
+
+ /**
+ * Prints out the graph.
+ *
+ * @param s
+ * @throws IOException
+ */
+ private void printGraph(Statement s) throws IOException {
+ Resource graph = s.getContext();
+ if(graph != null) {
+ printResource( s.getContext() );
+ }
+ }
+
+}
Added: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/package-info.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/package-info.java?rev=1229627&view=auto
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/package-info.java (added)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/io/nquads/package-info.java Tue Jan 10 16:32:28 2012
@@ -0,0 +1,6 @@
+
+/**
+ * This package contains an <i>NQuads</i>
+ * parser and writer based on the <i>Sesame API</i>.
+ */
+package org.deri.any23.io.nquads;
\ No newline at end of file
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/mime/TikaMIMETypeDetector.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/mime/TikaMIMETypeDetector.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/mime/TikaMIMETypeDetector.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/mime/TikaMIMETypeDetector.java Tue Jan 10 16:32:28 2012
@@ -139,10 +139,6 @@ public class TikaMIMETypeDetector implem
return CSVReaderBuilder.isCSV(is);
}
- public static void main(String[] args) {
- new TikaMIMETypeDetector(new WhiteSpacesPurifier());
- }
-
/**
* Tries to apply one of the given patterns on a sample of the input stream.
*
@@ -225,6 +221,10 @@ public class TikaMIMETypeDetector implem
}
}
+ public TikaMIMETypeDetector() {
+ this( new WhiteSpacesPurifier() );
+ }
+
/**
* Estimates the <code>MIME</code> type of the content of input file.
* The <i>input</i> stream must be resettable.
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/plugin/Any23PluginManager.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/plugin/Any23PluginManager.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/plugin/Any23PluginManager.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/plugin/Any23PluginManager.java Tue Jan 10 16:32:28 2012
@@ -32,6 +32,7 @@ import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
+import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -234,7 +235,7 @@ public class Any23PluginManager {
errors.add(t);
}
}
- return errors.toArray( new Throwable[errors.size()] );
+ return errors.toArray(new Throwable[errors.size()]);
}
/**
@@ -251,12 +252,12 @@ public class Any23PluginManager {
public synchronized <T> Set<Class<T>> getClassesInPackage(final String packageName, final ClassFilter filter)
throws IOException {
final Set<Class<T>> result = new HashSet<Class<T>>();
- getClassesInPackageFromClasspath(packageName, filter, result);
+ loadClassesInPackageFromClasspath(packageName, filter, result);
for(File jar : dynamicClassLoader.jars) {
- getClassesInPackageFromJAR(jar, packageName, filter, result);
+ loadClassesInPackageFromJAR(jar, packageName, filter, result);
}
for(File dir : dynamicClassLoader.dirs) {
- getClassesInPackageFromDir(dir, packageName, filter, result);
+ loadClassesInPackageFromDir(dir, packageName, filter, result);
}
return result;
}
@@ -402,7 +403,7 @@ public class Any23PluginManager {
* @param result list for writing result.
* @throws java.io.IOException
*/
- protected <T> void getClassesInPackageFromJAR(
+ protected <T> void loadClassesInPackageFromJAR(
File jarFile,
String packageName,
ClassFilter filter,
@@ -448,7 +449,7 @@ public class Any23PluginManager {
* @param <T> class types.
* @throws MalformedURLException
*/
- protected <T> void getClassesInPackageFromDir(
+ protected <T> void loadClassesInPackageFromDir(
File classDir,
final String packageName,
final ClassFilter filter,
@@ -504,25 +505,50 @@ public class Any23PluginManager {
* @param <T>
* @throws IOException
*/
- protected <T> void getClassesInPackageFromClasspath(
+ protected <T> void loadClassesInPackageFromClasspath(
final String packageName,
final ClassFilter filter,
Set<Class<T>> result
) throws IOException {
- final File codePath = new File(
- this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()
- );
- if (codePath.isDirectory()) {
- getClassesInPackageFromDir(codePath, packageName, filter, result);
- } else {
- getClassesInPackageFromJAR(codePath, packageName, filter, result);
+ final String[] classpathEntries = getClasspathEntries();
+ for (String classPathEntry : classpathEntries) {
+ if(classPathEntry.trim().length() == 0) continue;
+ final File codePath = new File(URLDecoder.decode(classPathEntry, "UTF-8"));
+ if (codePath.isDirectory()) {
+ loadClassesInPackageFromDir(codePath, packageName, filter, result);
+ } else {
+ loadClassesInPackageFromJAR(codePath, packageName, filter, result);
+ }
}
}
+ /**
+ * @return the classpath entries.
+ */
+ private String[] getClasspathEntries() {
+ final String classpath = System.getProperty("java.class.path");
+ assert classpath != null : "Class path is null.";
+ final String classpathSeparator = System.getProperty("path.separator");
+ assert classpathSeparator != null : "Class path separator is null.";
+ return classpath.split("\\" + classpathSeparator);
+ }
+
+ /**
+ * Checks if the class name is valid.
+ *
+ * @param clazzName
+ * @return
+ */
private boolean isValidClassName(String clazzName) {
return clazzName.endsWith(".class") && ! clazzName.contains("$");
}
+ /**
+ * Converts a column separated list of dirs in a list of files.
+ *
+ * @param pluginDirsList
+ * @return
+ */
private File[] getPluginLocations(String pluginDirsList) {
final String[] locationsStr = pluginDirsList.split(PLUGIN_DIRS_LIST_SEPARATOR);
final List<File> locations = new ArrayList<File>();
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/rdf/RDFUtils.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/rdf/RDFUtils.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/rdf/RDFUtils.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/rdf/RDFUtils.java Tue Jan 10 16:32:28 2012
@@ -16,7 +16,7 @@
package org.deri.any23.rdf;
-import org.deri.any23.parser.NQuadsParser;
+import org.deri.any23.io.nquads.NQuadsParser;
import org.deri.any23.util.MathUtils;
import org.openrdf.model.BNode;
import org.openrdf.model.Literal;
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/FileUtils.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/FileUtils.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/FileUtils.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/FileUtils.java Tue Jan 10 16:32:28 2012
@@ -166,11 +166,11 @@ public class FileUtils {
}
/**
- * Reads the content of a file and return it in a string.
+ * Returns the content of a file a single string.
*
* @param f the file to read.
* @return the content of file.
- * @throws IOException if an exception occurs while locating or accessing the file.
+ * @throws IOException if an error occurs while locating or accessing the file.
*/
public static String readFileContent(File f) throws IOException {
FileInputStream fis = new FileInputStream(f);
@@ -178,6 +178,18 @@ public class FileUtils {
}
/**
+ * Returns all the lines of a file.
+ *
+ * @param f the file to read.
+ * @return a not <code>null</code> array with not <code>null</code> line strings.
+ * @throws IOException if an error occurs while locating or accessing the file.
+ */
+ public static String[] readFileLines(File f) throws IOException {
+ FileInputStream fis = new FileInputStream(f);
+ return StreamUtils.asLines(fis);
+ }
+
+ /**
* Lists the content of a dir applying the specified filter.
*
* @param dir directory root.
Added: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/LogUtils.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/LogUtils.java?rev=1229627&view=auto
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/LogUtils.java (added)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/LogUtils.java Tue Jan 10 16:32:28 2012
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2008-2010 Digital Enterprise Research Institute (DERI)
+ *
+ * Licensed 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.
+ */
+
+package org.deri.any23.util;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Provides specific application logger configuration methods.
+ */
+public class LogUtils {
+
+ public static void setDefaultLogging() {
+ Logger.getLogger("").setLevel(Level.WARNING);
+ // Suppress silly cookie warnings.
+ Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.SEVERE);
+ Logger.getLogger("").getHandlers()[0].setLevel(Level.ALL);
+ }
+
+ public static void setVerboseLogging() {
+ Logger.getLogger("").setLevel(Level.INFO);
+ Logger.getLogger("org.deri.any23").setLevel(Level.ALL);
+ Logger.getLogger("").getHandlers()[0].setLevel(Level.ALL);
+ }
+
+}
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StreamUtils.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StreamUtils.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StreamUtils.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StreamUtils.java Tue Jan 10 16:32:28 2012
@@ -25,6 +25,8 @@ import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
/**
* Contains general utility functions for handling streams.
@@ -38,6 +40,27 @@ public class StreamUtils {
private StreamUtils(){}
/**
+ * Returns all the lines read from an input stream.
+ *
+ * @param is input stream.
+ * @return list of not <code>null</code> lines.
+ * @throws IOException
+ */
+ public static String[] asLines(InputStream is) throws IOException {
+ final BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ final List<String> lines = new ArrayList<String>();
+ try {
+ String line;
+ while ((line = br.readLine()) != null) {
+ lines.add(line);
+ }
+ return lines.toArray( new String[ lines.size() ] );
+ } finally {
+ closeGracefully(br);
+ }
+ }
+
+ /**
* Returns the string content of a stream.
*
* @param is input stream.
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StringUtils.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StringUtils.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StringUtils.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/util/StringUtils.java Tue Jan 10 16:32:28 2012
@@ -154,5 +154,21 @@ public class StringUtils {
return escapeDoubleQuotes( in.replaceAll("\n", "\\\\n") );
}
+ /**
+ * Builds a string composed of the given char <code>c<code/> <code>n</code> times.
+ *
+ * @param c char to be multiplied.
+ * @param times number of times.
+ * @return the string containing the multiplied char.
+ */
+ public static String multiply(char c, int times) {
+ if(times <= 0) throw new IllegalArgumentException("Invalid number of times, must be > 0 .");
+ final char[] buffer = new char[times];
+ for(int i = 0; i < times; i++) {
+ buffer[i] = c;
+ }
+ return new String(buffer);
+ }
+
private StringUtils() {}
}
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/DOAC.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/DOAC.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/DOAC.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/DOAC.java Tue Jan 10 16:32:28 2012
@@ -55,21 +55,21 @@ public class DOAC extends Vocabulary {
public final URI reference_type = createProperty(NS, "reference-type");
// Resources.
- public final URI Publication = createResource(NS, "Publication");
- public final URI Education = createResource(NS, "Education");
- public final URI OrganisationalSkill = createResource(NS, "OrganisationalSkill");
- public final URI PrimarySchool = createResource(NS, "PrimarySchool");
- public final URI Reference = createResource(NS, "Reference");
- public final URI DrivingSkill = createResource(NS, "DrivingSkill");
- public final URI Degree = createResource(NS, "Degree");
- public final URI LanguageSkill = createResource(NS, "LanguageSkill");
- public final URI Skill = createResource(NS, "Skill");
- public final URI SecondarySchool = createResource(NS, "SecondarySchool");
- public final URI Course = createResource(NS, "Course");
- public final URI Experience = createResource(NS, "Experience");
- public final URI SocialSkill = createResource(NS, "SocialSkill");
- public final URI ComputerSkill = createResource(NS, "ComputerSkill");
- public final URI LanguageLevel = createResource(NS, "LanguageLevel");
+ public final URI Publication = createClass(NS, "Publication");
+ public final URI Education = createClass(NS, "Education");
+ public final URI OrganisationalSkill = createClass(NS, "OrganisationalSkill");
+ public final URI PrimarySchool = createClass(NS, "PrimarySchool");
+ public final URI Reference = createClass(NS, "Reference");
+ public final URI DrivingSkill = createClass(NS, "DrivingSkill");
+ public final URI Degree = createClass(NS, "Degree");
+ public final URI LanguageSkill = createClass(NS, "LanguageSkill");
+ public final URI Skill = createClass(NS, "Skill");
+ public final URI SecondarySchool = createClass(NS, "SecondarySchool");
+ public final URI Course = createClass(NS, "Course");
+ public final URI Experience = createClass(NS, "Experience");
+ public final URI SocialSkill = createClass(NS, "SocialSkill");
+ public final URI ComputerSkill = createClass(NS, "ComputerSkill");
+ public final URI LanguageLevel = createClass(NS, "LanguageLevel");
private DOAC(){
super(NS);
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/FOAF.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/FOAF.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/FOAF.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/FOAF.java Tue Jan 10 16:32:28 2012
@@ -90,18 +90,18 @@ public class FOAF extends Vocabulary {
public final URI jabberID = createProperty(NS, "jabberID");
// Resources.
- public final URI Person = createResource(NS, "Person");
- public final URI PersonalProfileDocument = createResource(NS, "PersonalProfileDocument");
- public final URI Project = createResource(NS, "Project");
- public final URI OnlineChatAccount = createResource(NS, "OnlineChatAccount");
- public final URI OnlineAccount = createResource(NS, "OnlineAccount");
- public final URI Agent = createResource(NS, "Agent");
- public final URI Group = createResource(NS, "Group");
- public final URI OnlineGamingAccount = createResource(NS, "OnlineGamingAccount");
- public final URI OnlineEcommerceAccount = createResource(NS, "OnlineEcommerceAccount");
- public final URI Document = createResource(NS, "Document");
- public final URI Organization = createResource(NS, "Organization");
- public final URI Image = createResource(NS, "Image");
+ public final URI Person = createClass(NS, "Person");
+ public final URI PersonalProfileDocument = createClass(NS, "PersonalProfileDocument");
+ public final URI Project = createClass(NS, "Project");
+ public final URI OnlineChatAccount = createClass(NS, "OnlineChatAccount");
+ public final URI OnlineAccount = createClass(NS, "OnlineAccount");
+ public final URI Agent = createClass(NS, "Agent");
+ public final URI Group = createClass(NS, "Group");
+ public final URI OnlineGamingAccount = createClass(NS, "OnlineGamingAccount");
+ public final URI OnlineEcommerceAccount = createClass(NS, "OnlineEcommerceAccount");
+ public final URI Document = createClass(NS, "Document");
+ public final URI Organization = createClass(NS, "Organization");
+ public final URI Image = createClass(NS, "Image");
private FOAF(){
super(NS);
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/GEO.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/GEO.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/GEO.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/GEO.java Tue Jan 10 16:32:28 2012
@@ -35,7 +35,7 @@ public class GEO extends Vocabulary {
}
// Resources.
- public final URI Point = createResource(NS, "Point");
+ public final URI Point = createClass(NS, "Point");
// Properties
public final URI lat = createProperty(NS, "lat" );
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HLISTING.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HLISTING.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HLISTING.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HLISTING.java Tue Jan 10 16:32:28 2012
@@ -38,24 +38,24 @@ public class HLISTING extends Vocabulary
}
// Resources.
- public final URI Listing = createResource("Listing");
- public final URI Lister = createResource("Lister" ); // isa FOAF.Person
- public final URI Item = createResource("Item" ); // isa ?
+ public final URI Listing = createClass("Listing");
+ public final URI Lister = createClass("Lister" ); // isa FOAF.Person
+ public final URI Item = createClass("Item" ); // isa ?
// Properties.
public final URI action = createProperty("action");
public final URI lister = createProperty("lister"); // ranges over Lister
public final URI item = createProperty("item" );
- public final URI sell = createResource("sell" );
- public final URI rent = createResource("rent" );
- public final URI trade = createResource("trade" );
- public final URI meet = createResource("meet" );
- public final URI announce = createResource("announce");
- public final URI offer = createResource("offer" );
- public final URI wanted = createResource("wanted" );
- public final URI event = createResource("event" );
- public final URI service = createResource("service" );
+ public final URI sell = createClass("sell" );
+ public final URI rent = createClass("rent" );
+ public final URI trade = createClass("trade" );
+ public final URI meet = createClass("meet" );
+ public final URI announce = createClass("announce");
+ public final URI offer = createClass("offer" );
+ public final URI wanted = createClass("wanted" );
+ public final URI event = createClass("event" );
+ public final URI service = createClass("service" );
public final URI tel = VCARD.getInstance().tel;
public final URI dtlisted = createProperty("dtlisted" );
@@ -86,8 +86,8 @@ public class HLISTING extends Vocabulary
return createProperty(NS, localName);
}
- private URI createResource(String localName) {
- return createResource(NS, localName);
+ private URI createClass(String localName) {
+ return createClass(NS, localName);
}
private HLISTING(){
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HRECIPE.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HRECIPE.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HRECIPE.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/HRECIPE.java Tue Jan 10 16:32:28 2012
@@ -21,10 +21,10 @@ public class HRECIPE extends Vocabulary
}
// Resources.
- public URI Recipe = createResource(NS, "Recipe");
- public URI Duration = createResource(NS, "Duration");
- public URI Ingredient = createResource(NS, "Ingredient");
- public URI Nutrition = createResource(NS, "Nutrition");
+ public URI Recipe = createClass(NS, "Recipe");
+ public URI Duration = createClass(NS, "Duration");
+ public URI Ingredient = createClass(NS, "Ingredient");
+ public URI Nutrition = createClass(NS, "Nutrition");
// Properties.
public URI fn = createProperty(NS, "fn");
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/ICAL.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/ICAL.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/ICAL.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/ICAL.java Tue Jan 10 16:32:28 2012
@@ -19,7 +19,7 @@ package org.deri.any23.vocab;
import org.openrdf.model.URI;
/**
- * Vocabulary definitions from ical.rdf
+ * Vocabulary definitions from <code>ical.rdf</code>
*/
public class ICAL extends Vocabulary {
@@ -42,53 +42,52 @@ public class ICAL extends Vocabulary {
*/
public final URI NAMESPACE = createURI(NS);
- public final URI DomainOf_rrule = createResource("DomainOf_rrule");
-
- public final URI List_of_Float = createResource("List_of_Float");
+ public final URI DomainOf_rrule = createClass("DomainOf_rrule");
+ public final URI List_of_Float = createClass("List_of_Float");
/**
* Provide a grouping of component properties that define an alarm..
*/
- public final URI Valarm = createResource("Valarm");
+ public final URI Valarm = createClass("Valarm");
- public final URI Value_CAL_ADDRESS = createResource("Value_CAL-ADDRESS");
+ public final URI Value_CAL_ADDRESS = createClass("Value_CAL-ADDRESS");
- public final URI Value_DATE = createResource("Value_DATE");
+ public final URI Value_DATE = createClass("Value_DATE");
- public final URI Value_DURATION = createResource("Value_DURATION");
+ public final URI Value_DURATION = createClass("Value_DURATION");
- public final URI Value_PERIOD = createResource("Value_PERIOD");
+ public final URI Value_PERIOD = createClass("Value_PERIOD");
- public final URI Value_RECUR = createResource("Value_RECUR");
+ public final URI Value_RECUR = createClass("Value_RECUR");
- public final URI Vcalendar = createResource("vcalendar");
+ public final URI Vcalendar = createClass("vcalendar");
/**
* Provide a grouping of component properties that describe an event..
*/
- public final URI Vevent = createResource("Vevent");
+ public final URI Vevent = createClass("Vevent");
/**
* Provide a grouping of component properties that describe either a request
* for free/busy time, describe a response to a request for free/busy time or
* describe a published set of busy time..
*/
- public final URI Vfreebusy = createResource("Vfreebusy");
+ public final URI Vfreebusy = createClass("Vfreebusy");
/**
* Provide a grouping of component properties that describe a journal entry..
*/
- public final URI Vjournal = createResource("Vjournal");
+ public final URI Vjournal = createClass("Vjournal");
/**
* Provide a grouping of component properties that defines a time zone..
*/
- public final URI Vtimezone = createResource("Vtimezone");
+ public final URI Vtimezone = createClass("Vtimezone");
/**
* Provide a grouping of calendar properties that describe a to-do..
*/
- public final URI Vtodo = createResource("Vtodo");
+ public final URI Vtodo = createClass("Vtodo");
/**
@@ -101,13 +100,10 @@ public class ICAL extends Vocabulary {
* The URI defines an "Attendee" within a calendar component.value type:
* CAL-ADDRESS.
*/
- public final URI attendee = createProperty("attendee");
-
+ public final URI attendee = createProperty("attendee");
public final URI calAddress = createProperty("calAddress");
-
- public final URI component = createProperty("component");
-
- public final URI daylight = createProperty("daylight");
+ public final URI component = createProperty("component");
+ public final URI daylight = createProperty("daylight");
/**
* The URI specifies a positive duration of time.value type: DURATION.
@@ -515,8 +511,8 @@ public class ICAL extends Vocabulary {
*/
public final URI version = createProperty("version");
- private URI createResource(String string) {
- return createResource(NS, string);
+ private URI createClass(String string) {
+ return createClass(NS, string);
}
private URI createProperty(String string) {
Added: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/OGP.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/OGP.java?rev=1229627&view=auto
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/OGP.java (added)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/OGP.java Tue Jan 10 16:32:28 2012
@@ -0,0 +1,149 @@
+/**
+ * Copyright 2008-2010 Digital Enterprise Research Institute (DERI)
+ *
+ * Licensed 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.
+ *
+ */
+
+package org.deri.any23.vocab;
+
+import org.openrdf.model.URI;
+
+/**
+ * The <a href="http://ogp.me/">Open Graph Protocol</> vocabulary.
+ *
+ * @author Michele Mostarda (mostarda@fbk.eu)
+ */
+public class OGP extends Vocabulary {
+
+ public static final String NS = "http://ogp.me/ns#";
+
+ /* BEGIN: Basic Metadata. */
+
+ /** The title of your object as it should appear within the graph (Facebook Graph API). */
+ public static final String TITLE = "title";
+ /** The type of your object, e.g., <code>video.movie</code>.
+ * Depending on the type you specify, other properties may also be required. */
+ public static final String TYPE = "type";
+ /** An image URL which should represent your object within the graph. */
+ public static final String URL = "url";
+ /** The canonical URL of your object that will be used as its permanent ID in the graph (Facebook Graph API). */
+ public static final String IMAGE = "image";
+
+ /* END: Basic Metadata. */
+
+ /* BEGIN: Optional Metadata. */
+
+ /** A URL to an audio file to accompany this object. */
+ public static final String AUDIO = "audio";
+ /** A one to two sentence description of your object. */
+ public static final String DESCRIPTION = "description";
+ /** The word that appears before this object's title in a sentence. An enum of (a, an, the, "", auto).
+ * If auto is chosen, the consumer of your data should chose between "a" or "an". Default is "" (blank). */
+ public static final String DETERMINER = "determiner";
+ /** The locale these tags are marked up in. Of the format <code>language_TERRITORY</code>.
+ * Default is <code>en_US</code>. */
+ public static final String LOCALE = "locale";
+ /** An array of other locales this page is available in. */
+ public static final String LOCALE__ALTERNATE = "locale:alternate";
+ /** If your object is part of a larger web site, the name which should be
+ * displayed for the overall site. e.g., <b>IMDb</b>. */
+ public static final String SITE_NAME = "site_name";
+ /** A URL to a video file that complements this object. */
+ public static final String VIDEO = "video";
+
+ /* END: Optional Metadata. */
+
+ /* BEGIN: Structured Properties. */
+
+ /** Identical to <code>og:image</code>. */
+ public static final String IMAGE__URL = "image:url";
+ /** An alternate url to use if the webpage requires <b>HTTPS</b>. */
+ public static final String IMAGE__SECURE_URL = "image:secure_url";
+ /** A <i>MIME type</i> for this image. */
+ public static final String IMAGE__TYPE = "image:type";
+ /** The number of pixels wide. */
+ public static final String IMAGE__WIDTH = "image:width";
+ /** The number of pixels high. */
+ public static final String IMAGE__HEIGHT = "image:height";
+
+ /** Video URL. */
+ public static final String VIDEO__URL = "video:url";
+ /** An alternate url to use if the webpage requires <b>HTTPS</b>. */
+ public static final String VIDEO__SECURE_URL = "video:secure_url";
+ /** A <i>MIME type</i> for this video. */
+ public static final String VIDEO__TYPE = "video:type";
+ /** The number of pixels wide. */
+ public static final String VIDEO__WIDTH = "video:width";
+ /** The number of pixels height. */
+ public static final String VIDEO__HEIGHT = "video:height";
+
+ /** An alternate url to use if the webpage requires <b>HTTPS</b>. */
+ public static final String AUDIO__SECURE_URL = "audio:secure_url";
+ /** A <i>MIME type</i> for this audio. */
+ public static final String AUDIO__TYPE = "audio:type";
+
+ /* END: Structured Properties. */
+
+ private static OGP instance;
+
+ public static OGP getInstance() {
+ if(instance == null) {
+ instance = new OGP();
+ }
+ return instance;
+ }
+
+ public final URI NAMESPACE = createURI(NS);
+
+
+ public final URI title = createProperty(TITLE);
+ public final URI type = createProperty(TYPE);
+ public final URI url = createProperty(URL);
+ public final URI image = createProperty(IMAGE);
+ public final URI description = createProperty(DESCRIPTION);
+ public final URI determiner = createProperty(DETERMINER);
+ public final URI locale = createProperty(LOCALE);
+ public final URI localeAlternate = createProperty(LOCALE__ALTERNATE);
+ public final URI siteName = createProperty(SITE_NAME);
+ public final URI video = createProperty(VIDEO);
+
+ public final URI imageURL = createProperty(IMAGE__URL);
+ public final URI imageSecureURL = createProperty(IMAGE__SECURE_URL);
+ public final URI imageType = createProperty(IMAGE__TYPE);
+ public final URI imageWidth = createProperty(IMAGE__WIDTH);
+ public final URI imageHeight = createProperty(IMAGE__HEIGHT);
+
+ public final URI videoURL = createProperty(VIDEO__URL);
+ public final URI videoSecureURL = createProperty(VIDEO__SECURE_URL);
+ public final URI videoType = createProperty(VIDEO__TYPE);
+ public final URI videoWidth = createProperty(VIDEO__WIDTH);
+ public final URI videoHeight = createProperty(VIDEO__HEIGHT);
+
+ public final URI audio = createProperty(AUDIO);
+ public final URI audioSecureURL = createProperty(AUDIO__SECURE_URL);
+ public final URI audioType = createProperty(AUDIO__TYPE);
+
+ private URI createClass(String localName) {
+ return createClass(NS, localName);
+ }
+
+ private URI createProperty(String localName) {
+ return createProperty(NS, localName);
+ }
+
+ private OGP() {
+ super(NS);
+ }
+
+}
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/RDFSchemaUtils.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/RDFSchemaUtils.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/RDFSchemaUtils.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/RDFSchemaUtils.java Tue Jan 10 16:32:28 2012
@@ -16,9 +16,10 @@
package org.deri.any23.vocab;
-import org.deri.any23.parser.NQuadsWriter;
+import org.deri.any23.io.nquads.NQuadsWriter;
import org.deri.any23.rdf.RDFUtils;
import org.deri.any23.util.DiscoveryUtils;
+import org.deri.any23.util.StringUtils;
import org.openrdf.model.URI;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.model.vocabulary.RDFS;
@@ -28,9 +29,10 @@ import org.openrdf.rio.ntriples.NTriples
import org.openrdf.rio.rdfxml.RDFXMLWriter;
import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
+import java.io.PrintStream;
import java.lang.reflect.Constructor;
import java.util.List;
+import java.util.Map;
/**
* This class provides a set of methods for generating
@@ -40,6 +42,8 @@ import java.util.List;
*/
public class RDFSchemaUtils {
+ private static final String RDF_XML_SEPARATOR = StringUtils.multiply('=', 100);
+
/**
* Supported formats for vocabulary serialization.
*/
@@ -54,25 +58,33 @@ public class RDFSchemaUtils {
* <code>resources</code> and <code>properties</code>.
*
* @param namespace vocabulary namespace.
- * @param resources list of resources.
+ * @param classes list of classes.
* @param properties list of properties.
+ * @param comments map of resource comments.
* @param writer writer to print out the RDF Schema triples.
* @throws RDFHandlerException
*/
public static void serializeVocabulary(
URI namespace,
- URI[] resources,
+ URI[] classes,
URI[] properties,
+ Map<URI,String> comments,
RDFWriter writer
) throws RDFHandlerException {
writer.startRDF();
- for(URI entity : resources) {
- writer.handleStatement( RDFUtils.quad(entity, RDF.TYPE, RDFS.CLASS , namespace) );
- writer.handleStatement( RDFUtils.quad(entity, RDFS.MEMBER, namespace, namespace) );
+ for(URI clazz : classes) {
+ writer.handleStatement( RDFUtils.quad(clazz, RDF.TYPE, RDFS.CLASS , namespace) );
+ writer.handleStatement( RDFUtils.quad(clazz, RDFS.MEMBER, namespace, namespace) );
+ final String comment = comments.get(clazz);
+ if(comment != null)
+ writer.handleStatement( RDFUtils.quad(clazz, RDFS.COMMENT, RDFUtils.literal(comment), namespace) );
}
for(URI property : properties) {
writer.handleStatement(RDFUtils.quad(property, RDF.TYPE, RDF.PROPERTY, namespace));
writer.handleStatement(RDFUtils.quad(property, RDFS.MEMBER, namespace, namespace));
+ final String comment = comments.get(property);
+ if(comment != null)
+ writer.handleStatement( RDFUtils.quad(property, RDFS.COMMENT, RDFUtils.literal(comment), namespace) );
}
writer.endRDF();
}
@@ -88,8 +100,9 @@ public class RDFSchemaUtils {
throws RDFHandlerException {
serializeVocabulary(
vocabulary.getNamespace(),
- vocabulary.getResources(),
+ vocabulary.getClasses(),
vocabulary.getProperties(),
+ vocabulary.getComments(),
writer
);
}
@@ -99,18 +112,27 @@ public class RDFSchemaUtils {
*
* @param vocabulary vocabulary to be serialized.
* @param format output format for vocabulary.
- * @param os output stream.
+ * @param willFollowAnother if <code>true</code> another vocab will be printed in the same stream.
+ * @param ps output stream.
* @throws RDFHandlerException
*/
- public static void serializeVocabulary(Vocabulary vocabulary, VocabularyFormat format, OutputStream os)
- throws RDFHandlerException {
+ public static void serializeVocabulary(
+ Vocabulary vocabulary,
+ VocabularyFormat format,
+ boolean willFollowAnother,
+ PrintStream ps
+ ) throws RDFHandlerException {
final RDFWriter rdfWriter;
if(format == VocabularyFormat.RDFXML) {
- rdfWriter = new RDFXMLWriter(os);
+ rdfWriter = new RDFXMLWriter(ps);
+ if(willFollowAnother)
+ ps.print("\n");
+ ps.print(RDF_XML_SEPARATOR);
+ ps.print("\n");
} else if(format == VocabularyFormat.NTriples) {
- rdfWriter = new NTriplesWriter(os);
+ rdfWriter = new NTriplesWriter(ps);
} else if(format == VocabularyFormat.NQuads) {
- rdfWriter = new NQuadsWriter(os);
+ rdfWriter = new NQuadsWriter(ps);
}
else {
throw new IllegalArgumentException("Unsupported format " + format);
@@ -129,7 +151,9 @@ public class RDFSchemaUtils {
public static String serializeVocabulary(Vocabulary vocabulary, VocabularyFormat format)
throws RDFHandlerException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- serializeVocabulary(vocabulary, format, baos);
+ final PrintStream ps = new PrintStream(baos);
+ serializeVocabulary(vocabulary, format, false, ps);
+ ps.close();
return baos.toString();
}
@@ -137,14 +161,15 @@ public class RDFSchemaUtils {
* Serializes all the vocabularies to <i>NQuads</i> over the given output stream.
*
* @param format output format for vocabularies.
- * @param os output stream.
+ * @param ps output print stream.
*/
- public static void serializeVocabularies(VocabularyFormat format, OutputStream os) {
+ public static void serializeVocabularies(VocabularyFormat format, PrintStream ps) {
final Class vocabularyClass = Vocabulary.class;
final List<Class> vocabularies = DiscoveryUtils.getClassesInPackage(
vocabularyClass.getPackage().getName(),
vocabularyClass
);
+ int currentIndex = 0;
for (Class vocabClazz : vocabularies) {
final Vocabulary instance;
try {
@@ -155,7 +180,7 @@ public class RDFSchemaUtils {
throw new RuntimeException("Error while instantiating vocabulary class " + vocabClazz, e);
}
try {
- serializeVocabulary(instance, format, os);
+ serializeVocabulary(instance, format, currentIndex < vocabularies.size() - 2, ps);
} catch (RDFHandlerException rdfhe) {
throw new RuntimeException("Error while serializing vocabulary.", rdfhe);
}
Modified: incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/SINDICE.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/SINDICE.java?rev=1229627&r1=1229626&r2=1229627&view=diff
==============================================================================
--- incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/SINDICE.java (original)
+++ incubator/any23/trunk/any23-core/src/main/java/org/deri/any23/vocab/SINDICE.java Tue Jan 10 16:32:28 2012
@@ -43,7 +43,7 @@ public class SINDICE extends Vocabulary
/**
* The namespace of the vocabulary as a string.
*/
- public static final String NS = "http://vocab.sindice.net/";
+ public static final String NS = "http://vocab.sindice.net/any23#";
private static SINDICE instance;
@@ -57,7 +57,7 @@ public class SINDICE extends Vocabulary
/**
* The namespace of the vocabulary as a URI.
*/
- public final URI NAMESPACE = createResource(NS);
+ public final URI NAMESPACE = createURI(NS);
/**
* This property expresses the DNS domain of the resource on which
@@ -94,8 +94,8 @@ public class SINDICE extends Vocabulary
public final URI date = createProperty(DATE);
- private URI createResource(String localName) {
- return createResource(NS, localName);
+ private URI createClass(String localName) {
+ return createClass(NS, localName);
}
private URI createProperty(String localName) {