
edu.rpi.tw.twks.nanopub.NanopublicationParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of twks-nanopub Show documentation
Show all versions of twks-nanopub Show documentation
${product} nanopublication library
package edu.rpi.tw.twks.nanopub;
import com.google.common.collect.ImmutableList;
import edu.rpi.tw.twks.uri.Uri;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.DatasetFactory;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFParserBuilder;
import java.io.File;
import java.io.StringReader;
import java.util.Optional;
import static com.google.common.base.Preconditions.checkNotNull;
public final class NanopublicationParser {
private final RDFParserBuilder rdfParserBuilder = RDFParserBuilder.create();
private NanopublicationDialect dialect = NanopublicationDialect.SPECIFICATION;
public final ImmutableList parseAll(final File filePath) throws MalformedNanopublicationException {
final Uri nanopublicationUri = Uri.parse(checkNotNull(filePath).toURI().toString());
rdfParserBuilder.source(filePath.getPath());
return parseAllDelegate(Optional.of(nanopublicationUri));
}
public final ImmutableList parseAll(final Uri url) throws MalformedNanopublicationException {
rdfParserBuilder.source(url.toString());
return parseAllDelegate(Optional.of(url));
}
public final ImmutableList parseAll(final StringReader stringReader) throws MalformedNanopublicationException {
return parseAll(stringReader, Optional.empty());
}
public final ImmutableList parseAll(final StringReader stringReader, final Optional sourceUri) throws MalformedNanopublicationException {
rdfParserBuilder.source(stringReader);
return parseAllDelegate(sourceUri);
}
private ImmutableList parseAllDelegate(final Optional sourceUri) throws MalformedNanopublicationException {
final Dataset dataset = DatasetFactory.create();
rdfParserBuilder.parse(dataset);
final NanopublicationFactory factory = new NanopublicationFactory(dialect);
// Dataset has named graphs, assume it's a well-formed nanopublication.
if (dataset.listNames().hasNext()) {
return factory.createNanopublicationsFromDataset(dataset);
}
return ImmutableList.of(Nanopublication.builder().getAssertionBuilder().setModel(dataset.getDefaultModel()).getNanopublicationBuilder().build());
}
public final Nanopublication parseOne(final File filePath) throws MalformedNanopublicationException {
return parseOneDelegate(parseAll(filePath));
}
public final Nanopublication parseOne(final Uri url) throws MalformedNanopublicationException {
return parseOneDelegate(parseAll(url));
}
public final Nanopublication parseOne(final StringReader stringReader) throws MalformedNanopublicationException {
return parseOne(stringReader, Optional.empty());
}
public final Nanopublication parseOne(final StringReader stringReader, final Optional sourceUri) throws MalformedNanopublicationException {
return parseOneDelegate(parseAll(stringReader, sourceUri));
}
private Nanopublication parseOneDelegate(final ImmutableList nanopublications) throws MalformedNanopublicationException {
switch (nanopublications.size()) {
case 0:
throw new IllegalStateException();
case 1:
return nanopublications.get(0);
default:
throw new MalformedNanopublicationException("more than one nanopublication parsed");
}
}
public NanopublicationParser setDialect(final NanopublicationDialect dialect) {
this.dialect = checkNotNull(dialect);
return this;
}
public final NanopublicationParser setLang(final Lang lang) {
rdfParserBuilder.lang(checkNotNull(lang));
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy