Repository: any23 Updated Branches: refs/heads/master bcd87e524 -> f44be91f9
Solved issues in javadoc description. - replaces Map.Entry by dedicated small getters bean. - other small changes Signed-off-by:Jacek Grzebyta <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/any23/repo Commit: http://git-wip-us.apache.org/repos/asf/any23/commit/aefcce70 Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/aefcce70 Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/aefcce70 Branch: refs/heads/master Commit: aefcce70abbc072723422b726fcc7efe6f1e3e22 Parents: bcd87e5 Author: Jacek Grzebyta <[email protected]> Authored: Tue Dec 12 16:48:11 2017 +0000 Committer: Jacek Grzebyta <[email protected]> Committed: Tue Dec 12 16:48:11 2017 +0000 ---------------------------------------------------------------------- .../any23/extractor/yaml/ElementsProcessor.java | 66 +++++++++++++------- .../any23/extractor/yaml/YAMLExtractor.java | 13 ++-- .../java/org/apache/any23/rdf/RDFUtils.java | 15 ++--- .../extractor/yaml/ElementsProcessorTest.java | 27 ++++---- 4 files changed, 71 insertions(+), 50 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/any23/blob/aefcce70/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java b/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java index 2d95c86..bacb90c 100644 --- a/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java +++ b/core/src/main/java/org/apache/any23/extractor/yaml/ElementsProcessor.java @@ -17,7 +17,6 @@ package org.apache.any23.extractor.yaml; import com.google.common.collect.Sets; -import java.util.AbstractMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -38,7 +37,7 @@ import org.eclipse.rdf4j.model.vocabulary.RDF; import org.eclipse.rdf4j.model.vocabulary.RDFS; /** - * Converts Object into RDF graph encoded to {@link Map.Entry}. Where key is a + * Converts Object into RDF graph encoded to {@link ModelHolder}. Where key is a * graph root node and value is a graph itself inside a {@link Model}. * * This parser performs conversion for three main types: @@ -59,12 +58,35 @@ public class ElementsProcessor { private static final ElementsProcessor _ep = new ElementsProcessor(); - private Map.Entry<Value, Model> asMapEntry(Value v, Model m) { - return new AbstractMap.SimpleEntry(v, m); + /** + * A model holder describes the two required parameters which makes a model useful + * in further processing: a root node and model itself. + */ + public class ModelHolder { + private final Value root; + private final Model model; + + public Value getRoot() { + return root; + } + + public Model getModel() { + return model; + } + + public ModelHolder(Value root, Model model) { + this.root = root; + this.model = model; + } + } + + + private ModelHolder asModelHolder(Value v, Model m) { + return new ModelHolder(v,m); } /** - * Converts a data structure to {@link Map.Entry}. where value + * Converts a data structure to {@link ModelHolder}. where value * is a root node of the data structure and model is a content of the RDF * graph. * @@ -76,9 +98,9 @@ public class ElementsProcessor { * @param t Object (or data structure) converting to RDF graph * @param rootNode root node of the graph. If not given then blank node is * created. - * @return + * @return instance of {@link ModelHolder}, */ - public Map.Entry<Value,Model> asModel(IRI namespace, final Object t, Value rootNode) { + public ModelHolder asModel(IRI namespace, final Object t, Value rootNode) { if (t == null) { return null; } @@ -88,9 +110,9 @@ public class ElementsProcessor { } else if (t instanceof Map) { return processMap(namespace, (Map) t, rootNode); } else if (t instanceof String) { - return asMapEntry(RDFUtils.makeIRI(t.toString()), modelFactory.createEmptyModel()); + return asModelHolder(RDFUtils.makeIRI(t.toString()), modelFactory.createEmptyModel()); } else { - return asMapEntry(Literals.createLiteral(vf, t), modelFactory.createEmptyModel()); + return asModelHolder(Literals.createLiteral(vf, t), modelFactory.createEmptyModel()); } } @@ -102,9 +124,9 @@ public class ElementsProcessor { * @param ns * @param object * @param parentNode - * @return + * @return instance of {@link ModelHolder}. */ - protected Map.Entry<Value, Model> processMap(IRI ns, Map<String, Object> object, Value parentNode) { + protected ModelHolder processMap(IRI ns, Map<String, Object> object, Value parentNode) { // check if map is empty if (object.isEmpty()) { return null; @@ -135,25 +157,25 @@ public class ElementsProcessor { model.add(vf.createStatement(predicate, RDF.TYPE, RDF.PREDICATE)); model.add(vf.createStatement(predicate, RDFS.LABEL, RDFUtils.literal(k))); Value subGraphRoot = RDFUtils.makeIRI(); - Map.Entry<Value, Model> valInst = asModel(ns, object.get(k), subGraphRoot); + ModelHolder valInst = asModel(ns, object.get(k), subGraphRoot); // if asModel returns null than if (valInst != null) { /* Subgraph root node is added always. If subgraph is null that root node is Literal. Otherwise submodel in added to the current model. */ - model.add(vf.createStatement((Resource) nodeURI, (IRI) predicate, valInst.getKey())); - if (valInst.getValue() != null) { - model.addAll(valInst.getValue()); + model.add(vf.createStatement((Resource) nodeURI, (IRI) predicate, valInst.root)); + if (valInst.model != null) { + model.addAll(valInst.model); } } }); - return asMapEntry(nodeURI, model); + return asModelHolder(nodeURI, model); } @SuppressWarnings("UnusedAssignment") - protected Map.Entry<Value, Model> processList(IRI ns, List<Object> object) { + protected ModelHolder processList(IRI ns, List<Object> object) { if (object.isEmpty() || object.stream().noneMatch((i) -> { return i != null; @@ -167,14 +189,14 @@ public class ElementsProcessor { Resource prevNode = null; Model finalModel = modelFactory.createEmptyModel(); for (int i=0; i < objectSize; i++) { - Map.Entry<Value, Model> node = asModel(ns, object.get(i), RDFUtils.bnode()); + ModelHolder node = asModel(ns, object.get(i), RDFUtils.bnode()); BNode currentNode = RDFUtils.bnode(); if (i == 0) { listRoot = currentNode; } - finalModel.add(currentNode, RDF.FIRST, node.getKey(), (Resource[]) null); + finalModel.add(currentNode, RDF.FIRST, node.root, (Resource[]) null); if (prevNode != null) { finalModel.add(prevNode, RDF.REST, currentNode, (Resource[]) null); @@ -184,15 +206,15 @@ public class ElementsProcessor { finalModel.add(currentNode, RDF.REST, RDF.NIL, (Resource[]) null); } - if(node.getValue() != null) { - finalModel.addAll(node.getValue()); + if(node.model != null) { + finalModel.addAll(node.model); } prevNode = currentNode; } finalModel.add((Resource) listRoot, RDF.TYPE, RDF.LIST, (Resource[]) null); - return asMapEntry(listRoot, finalModel); + return asModelHolder(listRoot, finalModel); } // hide constructor http://git-wip-us.apache.org/repos/asf/any23/blob/aefcce70/core/src/main/java/org/apache/any23/extractor/yaml/YAMLExtractor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/any23/extractor/yaml/YAMLExtractor.java b/core/src/main/java/org/apache/any23/extractor/yaml/YAMLExtractor.java index 00df8a4..1bbf698 100644 --- a/core/src/main/java/org/apache/any23/extractor/yaml/YAMLExtractor.java +++ b/core/src/main/java/org/apache/any23/extractor/yaml/YAMLExtractor.java @@ -18,7 +18,6 @@ package org.apache.any23.extractor.yaml; import java.io.IOException; import java.io.InputStream; -import java.util.Map; import org.apache.any23.extractor.ExtractionContext; import org.apache.any23.extractor.ExtractionException; import org.apache.any23.extractor.ExtractionParameters; @@ -29,8 +28,6 @@ import org.apache.any23.rdf.RDFUtils; import org.apache.any23.vocab.YAML; import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.model.IRI; -import org.eclipse.rdf4j.model.Model; -import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.model.vocabulary.RDF; import org.eclipse.rdf4j.model.vocabulary.RDFS; import org.slf4j.Logger; @@ -77,19 +74,19 @@ public class YAMLExtractor implements Extractor.ContentExtractor { Resource pageNode = RDFUtils.makeIRI("document", documentIRI, true); out.writeTriple(documentRoot, vocab.contains, pageNode); out.writeTriple(pageNode, RDF.TYPE, vocab.document); - Map.Entry<Value, Model> rootNode = ep.asModel(documentIRI, p, pageNode); + ElementsProcessor.ModelHolder rootNode = ep.asModel(documentIRI, p, pageNode); if (rootNode == null) { continue; } - if (!rootNode.getKey().equals(pageNode)) { - out.writeTriple(pageNode, vocab.contains, rootNode.getKey()); + if (!rootNode.getRoot().equals(pageNode)) { + out.writeTriple(pageNode, vocab.contains, rootNode.getRoot()); } - log.debug("Subgraph root node: {}", rootNode.getKey().stringValue()); + log.debug("Subgraph root node: {}", rootNode.getRoot().stringValue()); - rootNode.getValue().forEach((s) ->{ + rootNode.getModel().forEach((s) ->{ out.writeTriple(s.getSubject(), s.getPredicate(), s.getObject()); }); http://git-wip-us.apache.org/repos/asf/any23/blob/aefcce70/core/src/main/java/org/apache/any23/rdf/RDFUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/any23/rdf/RDFUtils.java b/core/src/main/java/org/apache/any23/rdf/RDFUtils.java index 2d6b697..b8f143b 100644 --- a/core/src/main/java/org/apache/any23/rdf/RDFUtils.java +++ b/core/src/main/java/org/apache/any23/rdf/RDFUtils.java @@ -577,7 +577,7 @@ public class RDFUtils { /** * {@link #makeIRI(java.lang.String, org.eclipse.rdf4j.model.IRI, boolean) }. * @param docUri - * @return + * @return instance of {@link Resource}. */ public static Resource makeIRI(IRI docUri) { return makeIRI("node", docUri); @@ -587,7 +587,7 @@ public class RDFUtils { * {@link #makeIRI(java.lang.String, org.eclipse.rdf4j.model.IRI, boolean) }. * @param type * @param docIRI - * @return + * @return instance of {@link Resource}. */ public static Resource makeIRI(String type, IRI docIRI) { return makeIRI(type, docIRI, false); @@ -596,11 +596,12 @@ public class RDFUtils { /** * Creates implementation of {@link Resource} from given arguments: <i>type</i> and <i>docIRI</i>. * + * <b>NB:</b> The Java Naming Conventions is described by <a href='http://www.geeksforgeeks.org/java-naming-conventions/'>GeeksForGeeks</a>. + * * @param type This argument is converted following Java naming conventions with {@link StringUtils#implementJavaNaming(java.lang.String) }. * @param docIRI It is a namespace. If it ends with '/' character than stays unchanged otherwise the hash character '#' is added to the end. * @param addId If argument is <b>TRUE</b> than the node identifier is added to the end formated <tt>'_{int}'</tt>. - * @return {@link Resource} implementation - * @see <a href="http://www.geeksforgeeks.org/java-naming-conventions/">Java Naming Conventions [from GeeksForGeeks]</a>. + * @return instance of {@link Resource}. */ public static Resource makeIRI(String type, IRI docIRI, boolean addId) { @@ -629,11 +630,11 @@ public class RDFUtils { /** * Convert string to either IRI or Literal. * - * If string value expresses valid IRI than IRI is created. Otherwise method - * creates simple literal xsd:string. + * If string value expresses valid IRI than {@link IRI} is created. Otherwise method + * creates simple {@link Literal} xsd:string. * * @param inString - * @return + * @return either {@link IRI} or {@link Literal}. */ public static Value makeIRI(String inString) { if (RDFUtils.isAbsoluteIRI(inString)) { http://git-wip-us.apache.org/repos/asf/any23/blob/aefcce70/core/src/test/java/org/apache/any23/extractor/yaml/ElementsProcessorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/any23/extractor/yaml/ElementsProcessorTest.java b/core/src/test/java/org/apache/any23/extractor/yaml/ElementsProcessorTest.java index 5533b4b..d670916 100644 --- a/core/src/test/java/org/apache/any23/extractor/yaml/ElementsProcessorTest.java +++ b/core/src/test/java/org/apache/any23/extractor/yaml/ElementsProcessorTest.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import org.eclipse.rdf4j.model.Literal; import org.eclipse.rdf4j.model.Model; +import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.model.Value; import org.eclipse.rdf4j.model.vocabulary.RDF; import org.eclipse.rdf4j.rio.RDFFormat; @@ -51,13 +52,13 @@ public class ElementsProcessorTest { } }; - Map.Entry<Value, Model> toTest = ep.processMap(ep.vf.createIRI("http://example.org/"), + ElementsProcessor.ModelHolder toTest = ep.processMap(ep.vf.createIRI("http://example.org/"), simpleMap, ep.vf.createIRI("http://example.org/node1")); - Assert.assertEquals("http://example.org/node1", toTest.getKey().stringValue()); // if parent node is not blank than returns it as key - Assert.assertTrue(toTest.getValue().size() > 0); - log.debug("Model: \n{}\n", dumpModel(toTest.getValue(), RDFFormat.TURTLE)); + Assert.assertEquals("http://example.org/node1", toTest.getRoot().stringValue()); // if parent node is not blank than returns it as key + Assert.assertTrue(toTest.getModel().size() > 0); + log.debug("Model: \n{}\n", dumpModel(toTest.getModel(), RDFFormat.TURTLE)); } @Test @@ -71,13 +72,13 @@ public class ElementsProcessorTest { } }; - Map.Entry<Value, Model> toTest = ep.processList(ep.vf.createIRI("http://example.org/data"), simpleList); + ElementsProcessor.ModelHolder toTest = ep.processList(ep.vf.createIRI("http://example.org/data"), simpleList); Assert.assertNotNull(toTest); - Assert.assertTrue(toTest.getValue().contains(null, RDF.FIRST, ep.vf.createLiteral("Ala"), null)); - Assert.assertTrue(toTest.getValue().contains(null, RDF.FIRST, ep.vf.createLiteral(6), null)); - Assert.assertTrue(toTest.getValue().contains(null, RDF.FIRST, ep.vf.createLiteral("ma"), null)); - Assert.assertTrue(toTest.getValue().contains(null, RDF.FIRST, ep.vf.createLiteral("k".getBytes()[0]), null)); - log.debug("Model: \n{}\n", dumpModel(toTest.getValue(), RDFFormat.TURTLE)); + Assert.assertTrue(toTest.getModel().contains(null, RDF.FIRST, ep.vf.createLiteral("Ala"), (Resource[]) null)); + Assert.assertTrue(toTest.getModel().contains(null, RDF.FIRST, ep.vf.createLiteral(6), (Resource[]) null)); + Assert.assertTrue(toTest.getModel().contains(null, RDF.FIRST, ep.vf.createLiteral("ma"), (Resource[]) null)); + Assert.assertTrue(toTest.getModel().contains(null, RDF.FIRST, ep.vf.createLiteral("k".getBytes()[0]), (Resource[]) null)); + log.debug("Model: \n{}\n", dumpModel(toTest.getModel(), RDFFormat.TURTLE)); } @Test @@ -92,9 +93,9 @@ public class ElementsProcessorTest { }; simpleList.forEach((i) -> { - Map.Entry<Value, Model> out = ep.asModel(ep.vf.createIRI("urn:test/"), i, null); - Assert.assertTrue(out.getKey() instanceof Literal); - Assert.assertTrue(out.getValue().isEmpty()); + ElementsProcessor.ModelHolder out = ep.asModel(ep.vf.createIRI("urn:test/"), i, null); + Assert.assertTrue(out.getRoot() instanceof Literal); + Assert.assertTrue(out.getModel().isEmpty()); }); }
