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.

In our TP2 implementation, I simplified things by only supporting unordered
sets for multi-valued properties.  This is because triples are distinct and
kept in natural index order, not a user-specified order.  So when someone
sets a property like so:

element.prop = ["c", "a", "b", "a"]

They get the following RDF data:

<element> <prop> "a" .
<element> <prop> "b" .
<element> <prop> "c" .

And then when they retrieve the element they get:

element.prop = ["a", "b", "c"]

I was planning on supporting ordered lists in TP3 by using RDR:

element.prop = ["c", "a", "b", "a"]

=>

<element> <prop> "a" .
<element> <prop> "b" .
<element> <prop> "c" .
<< <element> <prop> "a" >> <order> 1 .
<< <element> <prop> "a" >> <order> 3 .
<< <element> <prop> "b" >> <order> 2 .
<< <element> <prop> "c" >> <order> 0 .

All fine and good.  My question is how to deal with so-called
"multi-properties".

1. Can you have multi-valued multi-properties?

element.prop = ["a", "b", "c"],  element.prop = ["b", "c", "d"]

2. Can you have single-valued multi-properties with the same value?

element.prop = "a", element.prop = "a"

2a. If so, can you attach different property-properties (provenance) to
each instance?

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"

Thanks,
Mike

Reply via email to