Git Product home page Git Product logo

Comments (4)

robstewart57 avatar robstewart57 commented on July 20, 2024

Hi @tmciver and @koslambrou (from #106),

We have two options:

  1. Validate blank node labels in the bnode function e.g.
bnode "_:foo" => Just (BNode "_:foo")
bnode "foo"   => Nothing
bnode "_foo"  => Nothing
bnode ":foo"  => Nothing
  1. Generate a valid blank from an arbitrary label e.g.
bnode "foo" => BNode "_:foo"

The issue with the 2nd option is that the blank node label should be unique in a graph, but the bnode function is not associated with an RDF graph:

bnode :: Text -> Node

There could be a method added to the Rdf type class to associate bnode with graphs to allow option 2:

class (Generic rdfImpl, NFData rdfImpl) => Rdf rdfImpl where
   ...
   bnodeGen :: RDF rdfImpl -> Text -> (Node, RDF rdfImpl)

e.g. something like

let g1 = empty
let (n1, g2) = bnodeGen g1 "foo"
let (n2, g3) = bnodeGen g2 "foo"

where n1 == "_:foo1" and n2 == "_:foo2".

but this burdens all instances of Rdf so my instinct is to go for option 1 instead. The main limitation of option 1 is that the burden is on the programmer to ensure that blank node labels are unique, when used in triples added to an RDF graph.

Thoughts?

from rdf4h.

koslambrou avatar koslambrou commented on July 20, 2024

@robstewart57 I don't mind option 1 with bnode. However, what about BNodeGen ? I doesn't seem to autogenerate a an identifier. Should it be removed ?

from rdf4h.

robstewart57 avatar robstewart57 commented on July 20, 2024

@tmciver and @koslambrou

This is addressed in the bnodeGen branch. See this commit message: 3da3a9f

Thoughts?

from rdf4h.

tmciver avatar tmciver commented on July 20, 2024

I'd like to see a solution that guarantees blank node uniqueness for a given graph and so I'm in favor of the solution that adds a blank node creation function to the type class. But the sample code provided by @robstewart57:

let g1 = empty
let (n1, g2) = bnodeGen g1 "foo"
let (n2, g3) = bnodeGen g2 "foo"

suggests use of State or StateT which was also suggested by @koslambrou here. I like this solution as it solves the unique blank node issue as well as giving a nice interface for graph manipulation.

Thoughts on such a solution?

from rdf4h.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.