Search in sources :

Example 1 with RdfBlankNode

use of nl.knaw.huygens.timbuctoo.rml.dto.RdfBlankNode in project timbuctoo by HuygensING.

the class RmlExecutorService method execute.

public void execute(Consumer<String> statusUpdate) {
    transactionEnforcer.execute(timbuctooActions -> {
        timbuctooActions.setVrePublishState(vreName, Vre.PublishState.MAPPING_EXECUTION);
        timbuctooActions.rdfCleanImportSession(vreName, session -> {
            final TripleImporter importer = new TripleImporter(graphWrapper, vreName, session);
            // first save the archetype mappings
            AtomicLong tripleCount = new AtomicLong(0);
            AtomicLong curtime = new AtomicLong(Clock.systemUTC().millis());
            // create the links from the collection entities to the archetypes
            model.listStatements(null, model.createProperty("http://www.w3.org/2000/01/rdf-schema#subClassOf"), (String) null).forEachRemaining(statement -> {
                importer.importTriple(true, new Triple(statement.getSubject().asNode(), statement.getPredicate().asNode(), statement.getObject().asNode()));
                reportTripleCount(tripleCount, curtime, statusUpdate);
            });
            // generate and import rdf
            rmlMappingDocument.execute(new LoggingErrorHandler()).forEach((quad) -> {
                reportTripleCount(tripleCount, curtime, statusUpdate);
                Node object;
                final QuadPart sourceObject = quad.getObject();
                if (sourceObject.getLiteralLanguage().isPresent()) {
                    object = createLiteral(sourceObject.getContent(), sourceObject.getLiteralLanguage().get());
                } else if (sourceObject.getLiteralType().isPresent()) {
                    object = createLiteral(sourceObject.getContent(), new BaseDatatype(sourceObject.getLiteralType().get()));
                } else if (sourceObject instanceof RdfBlankNode) {
                    object = NodeFactory.createBlankNode(sourceObject.getContent());
                } else {
                    object = NodeFactory.createURI(sourceObject.getContent());
                }
                importer.importTriple(true, new Triple(quad.getSubject() instanceof RdfBlankNode ? NodeFactory.createBlankNode(quad.getSubject().getContent()) : NodeFactory.createURI(quad.getSubject().getContent()), NodeFactory.createURI(quad.getPredicate().getContent()), object));
            });
            reportTripleCount(tripleCount, curtime, statusUpdate);
            // Give the collections a proper name
            graphWrapper.getGraph().traversal().V().hasLabel(Vre.DATABASE_LABEL).has(Vre.VRE_NAME_PROPERTY_NAME, vreName).out(HAS_COLLECTION_RELATION_NAME).forEachRemaining(v -> {
                if (!v.property(COLLECTION_LABEL_PROPERTY_NAME).isPresent()) {
                    String typeName = v.value(ENTITY_TYPE_NAME_PROPERTY_NAME);
                    v.property(COLLECTION_LABEL_PROPERTY_NAME, typeName.substring(vreName.length()));
                }
            });
            return commit();
        });
        return commit();
    });
    // FIXME naar importSession.close can be done when the Vres are retrieved via TimbuctooActions
    vres.reload();
}
Also used : Triple(org.apache.jena.graph.Triple) AtomicLong(java.util.concurrent.atomic.AtomicLong) TripleImporter(nl.knaw.huygens.timbuctoo.rdf.TripleImporter) LoggingErrorHandler(nl.knaw.huygens.timbuctoo.rml.LoggingErrorHandler) RdfBlankNode(nl.knaw.huygens.timbuctoo.rml.dto.RdfBlankNode) Node(org.apache.jena.graph.Node) BaseDatatype(org.apache.jena.datatypes.BaseDatatype) QuadPart(nl.knaw.huygens.timbuctoo.rml.dto.QuadPart) RdfBlankNode(nl.knaw.huygens.timbuctoo.rml.dto.RdfBlankNode)

Example 2 with RdfBlankNode

use of nl.knaw.huygens.timbuctoo.rml.dto.RdfBlankNode in project timbuctoo by HuygensING.

the class RrTemplate method generateValue.

@Override
public Optional<QuadPart> generateValue(Row input) {
    Matcher regexMatcher = pattern.matcher(template);
    StringBuffer resultString = new StringBuffer();
    while (regexMatcher.find()) {
        String value = input.getRawValue(regexMatcher.group(1));
        if (value == null) {
            return Optional.empty();
        } else {
            if (termType == TermType.IRI) {
                try {
                    value = URLEncoder.encode(value, "UTF-8").replace("+", "%20");
                } catch (UnsupportedEncodingException e) {
                    LOG.error("Java is being really stoopid and throws an unsupportedEncodingException for UTF-8.");
                    throw new RuntimeException(e);
                }
            }
            regexMatcher.appendReplacement(resultString, value);
        }
    }
    if (StringUtils.isBlank(resultString.toString())) {
        return Optional.empty();
    }
    regexMatcher.appendTail(resultString);
    switch(termType) {
        case IRI:
            return Optional.of(new RdfUri(resultString.toString()));
        case BlankNode:
            return Optional.of(new RdfBlankNode(resultString.toString()));
        case Literal:
            return Optional.of(new RdfValue(resultString.toString(), dataType));
        default:
            throw new UnsupportedOperationException("Not all items in the Enumerable where handled");
    }
}
Also used : Matcher(java.util.regex.Matcher) RdfUri(nl.knaw.huygens.timbuctoo.rml.dto.RdfUri) UnsupportedEncodingException(java.io.UnsupportedEncodingException) RdfValue(nl.knaw.huygens.timbuctoo.rml.dto.RdfValue) RdfBlankNode(nl.knaw.huygens.timbuctoo.rml.dto.RdfBlankNode)

Aggregations

RdfBlankNode (nl.knaw.huygens.timbuctoo.rml.dto.RdfBlankNode)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 Matcher (java.util.regex.Matcher)1 TripleImporter (nl.knaw.huygens.timbuctoo.rdf.TripleImporter)1 LoggingErrorHandler (nl.knaw.huygens.timbuctoo.rml.LoggingErrorHandler)1 QuadPart (nl.knaw.huygens.timbuctoo.rml.dto.QuadPart)1 RdfUri (nl.knaw.huygens.timbuctoo.rml.dto.RdfUri)1 RdfValue (nl.knaw.huygens.timbuctoo.rml.dto.RdfValue)1 BaseDatatype (org.apache.jena.datatypes.BaseDatatype)1 Node (org.apache.jena.graph.Node)1 Triple (org.apache.jena.graph.Triple)1