Ryan, Here is an example of how we use it in JUnit: https://github.com/eclipse/lyo/blob/aa3b18e4f28f3960d3a86a0b54151dccec2f139f/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/JenaModelHelperTest.java#L64
And here is an AssertJ helper we wrote: https://github.com/eclipse/lyo/blob/aa3b18e4f28f3960d3a86a0b54151dccec2f139f/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/helpers/JenaAssert.java /Andrew On 2022-02-09, 17:10, "Shaw, Ryan" <ryans...@unc.edu> wrote: Thank you, Andy. I agree that working on the triple level is the correct way to approach this. I was looking for something quick and dirty that would work with textual diffing by a VCS, hence my focus on the blank node labels. Are there any examples of how to use the isomorphism utilities in Jena? > On Feb 5, 2022, at 12:48 PM, Andy Seaborne <a...@apache.org> wrote: > > > > On 04/02/2022 19:09, Shaw, Ryan wrote: >> Hello, >> I am trying to experiment with generating diffable N-Triples or flat Turtle files. > ... >> Thanks, >> Ryan > > > Info: There is work on a charter for > > "RDF Dataset Canonicalization and Hash Working Group" > > https://w3c.github.io/rch-wg-charter/ > > The end of section 1 has some links to related work. > > Given RDF is inherently unordered, canonicalization and "diff of triples" are related. > > > For diff-able files, what counts as "different" between two files? > > Instead of changing the bnode algorithm, have you considered making use of bnode-isomorphism? That is, during a diff, maintain a growing mapping from bnodes in one list of triples to bnodes in the other list? > Iso.isomorphicTriples > > (The list being the triples in encounter order during parsing). It is working not so much on the syntax as the abstraction of triples. e.g A Turtle file and an NT file produced by parsing the TTL file can be defined to be "the same". > > It's fairly portable across files generated by other systems as well except for Turtle lists - Jena as a fixed order for triple generation for a list but it isn't necesasrily the same for all systems. > > Jena's Turtle algorithm, which is in LangTurtleBase, generates in list order, with rdf:first, then rdf:rest; the triple the referencing the list appears after the list. It happens to be the way the spec explains it: > https://www.w3.org/TR/turtle/#sec-parsing-triples > but that is defining the outcome and isn't a requirement. > > Andy