Hi,

I find this very cool: when outputing to JSON-LD, setNSPrefix can be used to 
benefit from JSON-LD's unorthodox but very nice use of “namespaces”.

I have some minor related remarks, summarized in the following tests. test1() 
is the most annoying one, in my point of view.
(Tested with latest Jena)

Best,

fps

package sometests;

import org.junit.Test;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;

public class JsonLDWriterTest {

@Test
/**
 * setNSPrefix works great wrt JSON-LD very nice interpretation of "namespaces"
 * That's cool! (No problem here) */
public final void test0() {
        Model m = ModelFactory.createDefaultModel();
        String url = "http://www.a.com/foo?";;
        Resource s = m.createResource(url + "param=s");
        Property p = m.createProperty("http://www.a.com/p";);
        Resource o = m.createResource(url + "param=o");
        m.add(s,p,o);
        m.setNsPrefix("ex",url);
        m.write(System.out, "JSON-LD");
        System.out.println();
        m.write(System.out, "TTL");
}

@Test
/**
 * if the URI of a resource exactly matches one prefix,
 * its @id is set to its long URI, not to the short form "prefix:"
 */
public final void test1() {
        Model m = ModelFactory.createDefaultModel();
        String url = "http://www.a.com/foo";;
        Resource s = m.createResource(url);
        Property p = m.createProperty(url + "/p");
        Resource o = m.createResource(url + "/o");
        m.add(s,p,o);
        m.setNsPrefix("ex",url);
        m.write(System.out, "JSON-LD");
        
        // we get:
        
        /*
        {
          "@id" : "http://www.a.com/foo";,
          "p" : "ex:/o",
          "@context" : {
            "p" : {
              "@id" : "http://www.a.com/foo/p";,
              "@type" : "@id"
            },
            "ex" : "http://www.a.com/foo";
          }
        }
        */
        
        // why not:
        
        /*
        {
          "@id" : "ex:",
          "p" : "ex:/o",
          "@context" : {
            "p" : {
              "@id" : "http://www.a.com/foo/p";,
              "@type" : "@id"
            },
            "ex" : "http://www.a.com/foo";
          }
        }
  */
        
        System.out.println("no such problem in turtle:");
        m.write(System.out, "TTL");
}

@Test
/** short URIs are not used inside the @context node */
public final void test2() {
        Model m = ModelFactory.createDefaultModel();
        // String url = "http://www.a.com/foo/s?param1=val1&param2=val2";;
        String url = "http://www.a.com/foo/";;
        Resource s = m.createResource(url + "s");
        Property p = m.createProperty(url + "p");
        Resource o = m.createResource(url + "o");
        m.add(s,p,o);
        m.setNsPrefix("ex",url);
        m.write(System.out, "JSON-LD");
        System.out.println();
        
        // we get 
        
        /*
        {
          "@id" : "ex:s",
          "p" : "ex:o",
          "@context" : {
            "p" : {
              "@id" : "http://www.a.com/foo/p";,
              "@type" : "@id"
            },
            "ex" : "http://www.a.com/foo/";
          }
        }
        */
        
        // why not:
        
        /*
        {
          "@id" : "ex:s",
          "p" : "ex:o",
          "@context" : {
            "p" : {
              "@id" : "ex:p",
              "@type" : "@id"
            },
            "ex" : "http://www.a.com/foo/";
          }
        }
  */
}

@Test
/**
 * if a prefix is set to "", we get an output that is not correct JSON-LD
 * (according to the JSON-LD playground: "Invalid JSON-LD syntax; a term cannot 
be an empty string."
 * 
ld.org/playground/jsonld.js:324:25\nhttp://json-ld.org/playground/jsonld.js:303:11";,
 "name": "jsonld.SyntaxError", "message": "Invalid JSON-LD syntax; a term 
cannot be an empty string.", "details": { "code": "invalid term definition", 
"context": { "p": { "@id": "http://www.a.com/foo/p";, "@type": "@id" }, "": 
"http://www.a.com/foo"; } }, "line": 5207, "column": 60, "sourceURL": 
"http://json-ld.org/playground/jsonld.js"; } } } }, "line": 0, "column": 0 }
 */
public final void test3() {
        Model m = ModelFactory.createDefaultModel();
        String url = "http://www.a.com/foo/";;
        Resource s = m.createResource(url + "s");
        Property p = m.createProperty(url + "p");
        Resource o = m.createResource(url + "o");
        m.add(s,p,o);
        m.setNsPrefix("",url);
        m.write(System.out, "JSON-LD");
        System.out.println("Things are OK in Turtle: ");
        m.write(System.out, "TTL");
}


}

Reply via email to