Marko,
Thanks for your response. One additional question. With multi-properties,
how does the implementation know when the caller is trying to replace the
current value of the property (like in TP2) versus add a new value for the
property? Or does it become the responsibility of the caller to remove old
value(s) before setting the new value when working in a multi-property
paradigm?
For example, in TP2, a e.setProperty("prop", "x") call would result
logically in a remove and an add:
e.prop = "x"
=>
// '?' is a wildcard - remove all old values for e.prop
remove(<e>, <prop>, ?)
add(<e>, <prop>, "x")
Thanks,
Mike
Hello Mike,
> I'm working our Blazegraph / TP3 integration and I have a few questions
> about how to deal with multi-properties / multi-valued properties.
> Blazegraph is an RDF database at its core, so everything gets converted
> into triples. Blazegraph also supports the RDR specification, which
allows
> triples to be used inside of other triples.
K. Just read your post on RDR.
https://wiki.blazegraph.com/wiki/index.php/Reification_Done_Right
First thing. Note that you do NOT have to support multi-properties nor
meta-properties if
you don't want to. However, its strongly recommended.
http://tinkerpop.incubator.apache.org/docs/3.0.1-incubating/#_features
Okay, now moving on…
> 1. Can you have multi-valued multi-properties?
>
> element.prop = ["a", "b", "c"], element.prop = ["b", "c", "d"]
This depends on your Features. See
VertexPropertes.Features.UniformListValues and
VertexProperties.Features.MixedListValues.
Thus, whatever you do support, be sure to make it explicit in your Features.
> 2. Can you have single-valued multi-properties with the same value?
>
> element.prop = "a", element.prop = "a"
Yes. However, I just realized (and talking with Stephen) that TinkerGraph
doesn't support
it and its not an explicit Feature -- thus, we don't test for it.
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> v = graph.addVertex()
==>v[0]
gremlin> v.property("name","marko")
==>vp[name->marko]
gremlin> v.property("name","marko")
==>vp[name->marko]
gremlin> v.properties("name")
==>vp[name->marko]
I just added this ticket:
https://issues.apache.org/jira/browse/TINKERPOP3-919
If you can support it, support it.
> 2a. If so, can you attach different property-properties (provenance) to
> each instance?
Yes.
> 3. Can you have multi-properties with different cardinalities - e.g. one
> single-valued, one list, and one set?
>
> element.prop = set["a", "b", "c"], element.prop = list["b", "c", "d",
> "b"], element.prop = "a"
No. The cardinality is determined by the Feature.getCardinatlity(String
key). Thus, its per
key.
I'm not sure we have a test suite case for this either. I just made this
ticket:
https://issues.apache.org/jira/browse/TINKERPOP3-920
Those are really good questions with two potential holes in our test suite
identified.
Thank you for your comments and good luck with BlazeGraph/TP3,
Marko.
http://markorodriguez.com