Comments (4)
Hi @tmciver and @koslambrou (from #106),
We have two options:
- Validate blank node labels in the
bnode
function e.g.
bnode "_:foo" => Just (BNode "_:foo")
bnode "foo" => Nothing
bnode "_foo" => Nothing
bnode ":foo" => Nothing
- 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.
@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.
@tmciver and @koslambrou
This is addressed in the bnodeGen
branch. See this commit message: 3da3a9f
Thoughts?
from rdf4h.
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)
- Cannot use parseFile with RDF that does not have a base URI and URI without "http:"
- Invalid RDF format when writing to file
- Invalid blank node creation when using BNode or bnode HOT 1
- Have common Vocabularies compiled into the library HOT 12
- Use rdfs:comment string to generate documentation in genVocabulary
- Parser not handling correct turtle file HOT 5
- Implement RDF Canonicalization algorithm HOT 1
- Base URI not detected with TurtleParser HOT 1
- Corner case property failure for query_match_spo
- Another corner case property failure for query_match_spo
- Can't override default prefixes in TurtleSerializer HOT 1
- TurtleSerializer baseUrl and prefix mappings effect HOT 8
- mkRdf using default prefixes HOT 5
- Build failure due to GHC option "-threaded" HOT 1
- Add a Namespace for schema.org HOT 2
- Exclude GPL hgal dependency HOT 10
- Aliased URI Not Properly Serialized
- Non-URI Nodes (TurtleSerializer)? HOT 2
- Bug: TurtleSerializer Does Not Properly Group Common Subjects HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rdf4h.