Github user stain commented on the issue:

    https://github.com/apache/commons-rdf/pull/32
  
    The Commons RDF marker for the default graph (as of today) is 
`Optional.empty()` and not an `RDFNode` (and thus can only be used in the 
`Quad.getGraphName()` position).
    
    There are four boundaries that can create Commons RDF Quad instances from 
Jena:
    
    * **Retrieving:** 
[Dataset.stream()](https://commons.apache.org/proper/commons-rdf/apidocs/org/apache/commons/rdf/api/Dataset.html#stream--),
 `.iterate()` and friends
    * **Adapting:** 
[JenaRDF.asQuad(jenaQuad)](https://commons.apache.org/proper/commons-rdf/apidocs/org/apache/commons/rdf/jena/JenaRDF.html#asQuad-org.apache.jena.sparql.core.Quad-)
    * **Creating:** 
[JenaRDF](https://commons.apache.org/proper/commons-rdf/apidocs/org/apache/commons/rdf/jena/JenaRDF.html#createQuad-org.apache.commons.rdf.api.BlankNodeOrIRI-org.apache.commons.rdf.api.BlankNodeOrIRI-org.apache.commons.rdf.api.IRI-org.apache.commons.rdf.api.RDFTerm-)
  with a graph `IRI` adapted from a Node using 
[JenaRDF.asRDFTerm(Quad.defaultGraph)](https://commons.apache.org/proper/commons-rdf/apidocs/org/apache/commons/rdf/jena/JenaRDF.html#asRDFTerm-org.apache.jena.graph.Node-)
      *  ..in worst case, `IRI` from `RDF.createIRI("urn:x-arq:DefaultGraph")
    * **Parsing:** JenaRDFParser - which uses JenaRDF.asQuad (experimental)
    
    I think we MUST do the _Retrieving_ - triples in the default graph 
according to the RDF 1.1 should still be in the default graph according to 
[org.apache.commons.rdf.api.Quad](https://commons.apache.org/proper/commons-rdf/apidocs/org/apache/commons/rdf/api/Quad.html)
 - importantly it must be `.equals()` an equivalent quad statement in a 
different implementation. I think we all agree on this.  
    
    Similarly _Parsing_ we MUST handle - at least when it's no longer 
experimental.
    
    The question is how helpful we should be in the other cases. If someone is 
_adapting_ a Jena Quad, then I think it also MUST convert to `Optional.empty()` 
although it keeps the original Jena quad underneath, which can distinguish 
between the two default variants, if needed.
    
    Now that leaves _creating_ which is a bit more speculative - we don't know 
where the graph `IRI` comes from, and other `RDF` implementations do of course 
not do anything special with `urn:x-arq:DefaultGraph`. However it is unlikely 
that such an IRI would be used in a non-Jena context. 
    
    So here are three options for what `RDF.createQuad(g,s,p,o) should do if g 
is `urn:x-arq:DefaultGraph` or `urn:x-arq:DefaultGraphNode`:
    
    1) Always recognize `urn:x-arq:DefaultGraph` and friends (either by 
comparing of IRI string against the `Quad.defaultGraph` and 
`Quad.defaultGraphNode` constants  (this PR), or adapting/unwrapping to the 
equivalent Jena `Node` and then checking with `Quad.isDefaultGraph(Node)`  
(might be less efficient)
    2) Only recognize if it is a `org.apache.commons.rdf.jena.JenaIRI` instance 
by using `Quad.isDefaultGraph(iri.asJenaNode())`
    3) Never recognize it, IRI will be left as-is. Insertion of such a `Quad` 
to a Jena-backed Dataset will then have different semantics then in other 
`Dataset`s
    
    I think it's an edge-case with people creating it by hand from the IRI 
string with `RDF.createIRI()` - particularly with a non-Jena `RDF` instance, 
although that could be the case in queries against the union graph. (but that 
would only be in SPARQL world, right?).
    
    However it might be conceivable that `Node` from `Quad.defaultGraph` is 
used in Jena-centric code that adds Commons RDF at the edge.
    
    
    Boundaries from Commons RDF to Jena are simpler, as we just always use 
`urn:x-arq:DefaultGraph` (not `null`!) except where there's a pre-existing Jena 
`Quad` which is left as-is.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to