See also:
Options:
Shared UUID
Advantages:
- Referencing a node without specifying the language is possible (e.g., fallback to the default language if a translation doesn't exist)
Issues:
- JCR allows only one node with a particular UUID
- Either use a referenceable language-independent node
- Or don't use JCR UUIDs for references, but custom String-value properties
- With JCR UUIDs and a common referenceable parent node, structures like /en/welcome, /de/willkommen are not possible (would require separating the content hierarchy from the URI structure)
Non-Shared UUID
Advantages:
- JCR UUIDs could be used
- Arbitrary content hierarchies / URI structures
- Automatic referencial integrity check with respect to language version (i.e., /foo_de can't be removed if /bar_de points to it)
Issues:
- References can only point to a particular translation
- A. Common parent node or artificial node
- Influences content hierarchy (and maybe URL structure)
Obtain all translations of an artificial common node using Node.getReferences()
- B. No common parent node: relations between translations have to be maintained (or is this optional?)
- B.1. via multi-value reference property at each translation
- B.2. via language-independent node
- In either case, translations are not self-contained anymore
Examples:
Non-shared UUID, arbitrary structure
/de
/willkommen
/jcr:uuid = 1
/jcr:language = "de"
/lenya:translations = { 2 }
/en
/welcome
/jcr:uuid = 2
/jcr:language = "en"
/lenya:translations = { 1 }Non-shared UUID, arbitrary structure, explicit translation references
/welcome_de
/jcr:uuid = 1
/jcr:language = "de"
/lenya:translations = { 2 }
/welcome_en
/jcr:uuid = 2
/jcr:language = "en"
/lenya:translations = { 1 }Non-shared UUID, arbitrary structure, implicit translation references via URL structure (String operations)
/welcome_de /jcr:uuid = 1 /jcr:language = "de" /welcome_en /jcr:uuid = 2 /jcr:language = "en"
Non-shared UUID, common parent node
/welcome
/de
/jcr:uuid = 1
/jcr:language = "de"
/en
/jcr:uuid = 2
/jcr:language = "en"Shared UUID, common parent node
/welcome
/jcr:uuid = 1
/de
/jcr:language = "de"
/en
/jcr:language = "en"Shared UUID, artificial shared node
/de
/willkommen
/lenya:sharedDocumentNode = 1
/jcr:language = "de"
/en
/welcome
/lenya:sharedDocumentNode = 1
/jcr:language = "en"
/lenya:sharedDocumentNodes
/welcome
/jcr:uuid = 1Shared UUID, default language node is referenceable
- Optional node type mix:referenceable assigned only to default-language nodes
- Default-language node must exist
/de
/willkommen
/lenya:defaultLanguageNode = 1
/jcr:language = "de"
/en
/welcome
/jcr:uuid = 1
/jcr:language = "en"Shared custom UUIDs
/welcome_de /lenya:uuid = 1 /jcr:language = "de" /welcome_en /lenya:uuid = 1 /jcr:language = "en"