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 

Reply via email to