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 = 1
Shared 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"