I am trying to model complex product descriptions and got a bit stuck, so I could need some pushing into the right direction.
What do I mean by complex product description? The data I want to model is modelled according to the ISO 13584 / IEC 61360 dictionary meta model. This means I have instances of particular entities that together make up a structured model of classes of products and their classification.
The classification part was easily solved, it is a tree of (:CategorizationClasses) with [:IS_A] hierarchical relationships between them. When I want to classify a product I can link it to the best matching (:CategorizationClass) and am done. Actually it feels sort of wrong to directly connect "instances" with the "model" in one graph without some separation layer or mechanism, but I can stand this pain for the while.
The characterization part was much more difficult to handle and to make it easier to understand I reduce the model for now to: (:CharacterizationClass) that have a [:DESCRIBED_BY]-> relationship with (:Characteristic) and they can have a [:CLASSIFIED_AS]-> relationship to an (:CategorizationClass). Some of the (:Characteristic) have again a [:REFERENCED_CLASS]-> relationship with another (:CharacterizationClass). By these two relationships we get an arbitrarily deep tree-ish graph which ends in a lot of (:Characteristics) nodes or "contexts". I say tree-ish because there is lot of re-use of elements ongoing inside the graph, so in most cases it isn't really a tree anymore.
Now I have to Model my products and somehow need to relate elegantly to paths to a (:Characteristic). Such paths start at an (:CharacterizationClass)-[:CLASSIFIED_AS]->(:CategorizationClass] and end in (:Characteristic) leaf nodes that have no further [:REFERENCED_CLASS]. The path context is where values of the characteristic would need to be recorded for the product description but I have not yet found a graphy and elegant solution on how to get this done properly. So ideas / pointers for reading would be very much appreciated.
To have an example with more real world data: Assume we have a (Table:CharacterizationClass). It is [:DESCRIBED_BY]->(board:Characteristic)-[:REFERENCED_CLASS]->(board:CharacterizationClass)-[:DESCRIBED_BY]->(length:Characteristic) and [:DESCRIBED_BY]->(leg:Characteristic)-[:REFERENCED_CLASS]->(leg:CharacterizationClass)-[:DESCRIBED_BY]->(length:Characteristic). I get values for the length of the leg and of the board that i need to store separately and distinctively.
What I could of course do is create properties on my (:ProductDescription) that literally correspond to the path I need to traverse. While this strategy is proven to work in other representations, it feels more forced to fit than convenient or graphy.
What I could also do is replicate the model structure in my (:ProductDescription) and maybe make back relationships with the model at each level but this still feels inelegant and inconvenient, though -at least on paper- somewhat graphy.