Repository: any23 Updated Branches: refs/heads/master c40b7888b -> 09072c922
Simplify rdf graph structure - if yaml document contains a map than the document become the map - if String is a valid IRI than convert to IRI - add additional unit test for parsing tree 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/daf9b38f Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/daf9b38f Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/daf9b38f Branch: refs/heads/master Commit: daf9b38f249822ab424517cace77530daf08b093 Parents: b0baa94 Author: Jacek Grzebyta <[email protected]> Authored: Thu Jul 13 18:09:39 2017 +0100 Committer: Jacek Grzebyta <[email protected]> Committed: Thu Jul 13 18:09:39 2017 +0100 ---------------------------------------------------------------------- .../main/java/org/apache/any23/vocab/YAML.java | 17 ++++++++--- .../any23/extractor/yaml/YAMLExtractor.java | 32 ++++++++++++++------ .../any23/extractor/yaml/YAMLExtractorTest.java | 20 +++++++++++- .../org/apache/any23/extractor/yaml/tree.yml | 11 +++++++ 4 files changed, 66 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/any23/blob/daf9b38f/api/src/main/java/org/apache/any23/vocab/YAML.java ---------------------------------------------------------------------- diff --git a/api/src/main/java/org/apache/any23/vocab/YAML.java b/api/src/main/java/org/apache/any23/vocab/YAML.java index 41df328..c4e488f 100644 --- a/api/src/main/java/org/apache/any23/vocab/YAML.java +++ b/api/src/main/java/org/apache/any23/vocab/YAML.java @@ -36,6 +36,10 @@ public class YAML extends Vocabulary { public static final String DOCUMENT = "Document"; public static final String NODE = "Node"; + + public static final String SEQUENCE = "Sequence" ; + + public static final String MAPPING = "Mapping"; public static final String CONTAINS = "contains"; @@ -49,6 +53,7 @@ public class YAML extends Vocabulary { return _instance; } + // Resources /** * <p>The root node. Representation of the YAML file. NB: one file may contain more than one documents * represented by nodes; e.g. </p> @@ -64,12 +69,16 @@ public class YAML extends Vocabulary { * </p> * Contains two documents. */ - public final IRI root = createProperty(NS, ROOT); + public final IRI root = createClass(NS, ROOT); - public final IRI document = createProperty(NS, DOCUMENT); - - public final IRI node = createProperty(NS, NODE); + public final IRI document = createClass(NS, DOCUMENT); + public final IRI node = createClass(NS, NODE); + + public final IRI sequence = createClass(NS, SEQUENCE); + + public final IRI mapping = createClass(NS, MAPPING); + // property public final IRI contains = createProperty(NS, CONTAINS); } http://git-wip-us.apache.org/repos/asf/any23/blob/daf9b38f/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 5c73082..bf70b63 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 @@ -17,6 +17,7 @@ package org.apache.any23.extractor.yaml; import java.io.IOException; import java.io.InputStream; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -77,7 +78,7 @@ public class YAMLExtractor implements Extractor.ContentExtractor { Resource pageNode = YAMLExtractor.this.makeUri("document", documentURI); out.writeTriple(documentRoot, vocab.contains, pageNode); out.writeTriple(pageNode, RDF.TYPE, vocab.document); - out.writeTriple(pageNode, vocab.contains, buildNode(documentURI, p, out)); + buildNode(documentURI, p, out, pageNode); } } @@ -87,7 +88,7 @@ public class YAMLExtractor implements Extractor.ContentExtractor { return YAMLExtractorFactory.getDescriptionInstance(); } - private Value buildNode(IRI fileURI, Object treeData, ExtractionResult out) { + private Value buildNode(IRI fileURI, Object treeData, ExtractionResult out, Resource... parent) { if (treeData != null) { log.debug("object type: {}", treeData.getClass()); @@ -96,9 +97,9 @@ public class YAMLExtractor implements Extractor.ContentExtractor { if (treeData == null) { return RDF.NIL; } else if (treeData instanceof Map) { - return processMap(fileURI, (Map) treeData, out); + return processMap(fileURI, (Map) treeData, out, parent); } else if (treeData instanceof List) { - return processList(fileURI, (List) treeData, out); + return processList(fileURI, (List) treeData, out, parent); } else if (treeData instanceof Long) { return RDFUtils.literal(((Long) treeData)); } else if (treeData instanceof Integer) { @@ -112,16 +113,17 @@ public class YAMLExtractor implements Extractor.ContentExtractor { } else if (treeData instanceof Boolean) { return RDFUtils.literal((Boolean) treeData); } else { - return RDFUtils.literal(((String) treeData)); + return processString((String) treeData); } } - private Value processMap(IRI file, Map<String, Object> node, ExtractionResult out) { - Resource nodeURI = YAMLExtractor.this.makeUri(file); + private Value processMap(IRI file, Map<String, Object> node, ExtractionResult out, Resource... parent) { + Resource nodeURI = Arrays.asList(parent).isEmpty() ? YAMLExtractor.this.makeUri(file) : parent[0]; + for (String k : node.keySet()) { Resource predicate = makeUri(k, file, false); Value value = buildNode(file, node.get(k), out); - out.writeTriple(nodeURI, RDF.TYPE, vocab.node); + out.writeTriple(nodeURI, RDF.TYPE, vocab.mapping); out.writeTriple(nodeURI, (IRI) predicate, value); out.writeTriple(predicate, RDF.TYPE, RDF.PREDICATE); out.writeTriple(predicate, RDFS.LABEL, RDFUtils.literal(k)); @@ -129,9 +131,13 @@ public class YAMLExtractor implements Extractor.ContentExtractor { return nodeURI; } - private Value processList(IRI fileURI, Iterable iter, ExtractionResult out) { + private Value processList(IRI fileURI, Iterable iter, ExtractionResult out, Resource... parent) { Resource node = YAMLExtractor.this.makeUri(); out.writeTriple(node, RDF.TYPE, RDF.LIST); + + if (!Arrays.asList(parent).isEmpty()) { + out.writeTriple(parent[0], vocab.contains, node); + } Resource pList = null; // previous RDF iter node Resource cList = node; // cutternt RDF iter node @@ -152,6 +158,14 @@ public class YAMLExtractor implements Extractor.ContentExtractor { return node; } + + private Value processString(String str) { + if (RDFUtils.isAbsoluteIRI(str)) { + return RDFUtils.iri(str); + } else { + return RDFUtils.literal(str); + } + } private Resource makeUri() { Resource bnode = RDFUtils.bnode(Integer.toString(nodeId)); http://git-wip-us.apache.org/repos/asf/any23/blob/daf9b38f/core/src/test/java/org/apache/any23/extractor/yaml/YAMLExtractorTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/any23/extractor/yaml/YAMLExtractorTest.java b/core/src/test/java/org/apache/any23/extractor/yaml/YAMLExtractorTest.java index f2c85ba..fa8ae63 100644 --- a/core/src/test/java/org/apache/any23/extractor/yaml/YAMLExtractorTest.java +++ b/core/src/test/java/org/apache/any23/extractor/yaml/YAMLExtractorTest.java @@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory; public class YAMLExtractorTest extends AbstractExtractorTestCase { public static final Logger log = LoggerFactory.getLogger(YAMLExtractorTest.class); - + public static final String ns = "http://bob.example.com/"; private static final YAML vocab = YAML.getInstance(); @Override @@ -92,4 +92,22 @@ public class YAMLExtractorTest extends AbstractExtractorTestCase { RepositoryResult<Statement> docs = getStatements(null, null, RDF.NIL); Assert.assertTrue(Iterations.asList(docs).size() == 2); } + + @Test + public void treeTest() throws Exception { + assertExtract("/org/apache/any23/extractor/yaml/tree.yml"); + log.debug(dumpModelToTurtle()); + assertModelNotEmpty(); + // validate part of the tree structure + assertContainsModel(new Statement[] { + RDFUtils.triple(RDFUtils.bnode(), RDFUtils.iri(ns, "value3"), RDFUtils.bnode("10")), + RDFUtils.triple(RDFUtils.bnode("10"), RDF.FIRST, RDFUtils.bnode("11")), + RDFUtils.triple(RDFUtils.bnode("11"), RDFUtils.iri(ns, "key3.1"), RDFUtils.bnode("12")), + RDFUtils.triple(RDFUtils.bnode("12"), RDF.TYPE, RDF.LIST), + RDFUtils.triple(RDFUtils.bnode("12"), RDF.FIRST, RDFUtils.literal("value3.1.1" )) + }); + + // validate occurence of <urn:value1> resource + assertContains(RDFUtils.triple(RDFUtils.bnode(), RDF.FIRST, RDFUtils.iri("urn:value1"))); + } } http://git-wip-us.apache.org/repos/asf/any23/blob/daf9b38f/test-resources/src/test/resources/org/apache/any23/extractor/yaml/tree.yml ---------------------------------------------------------------------- diff --git a/test-resources/src/test/resources/org/apache/any23/extractor/yaml/tree.yml b/test-resources/src/test/resources/org/apache/any23/extractor/yaml/tree.yml new file mode 100644 index 0000000..1727e2c --- /dev/null +++ b/test-resources/src/test/resources/org/apache/any23/extractor/yaml/tree.yml @@ -0,0 +1,11 @@ +%YAML 1.2 +--- +- urn:value1 +- value2 +- + value3 : + - key3.1: + - value3.1.1 + - value3.1.2 + - value3.1.3 + - key3.2: value3.2.1
