Reference 如何在jcr中引用属性

Reference 如何在jcr中引用属性,reference,nodes,jcr,Reference,Nodes,Jcr,假设我在JCR中有一个节点,它用英语提供电影的属性,如标题、导演和演员。然后我有另一个节点存储相同的属性,但使用另一种语言,比如法语。有没有办法让法语节点引用英语节点,这样第二个节点上实际上只存储需要翻译的属性。例: -英语字母 性质 标题:石头中的剑 导演:沃尔夫冈·雷瑟曼 演员:塞巴斯蒂安·卡伯特 -系带 性质 标题:梅林·L'Enchanteur 但是,导演和演员属性将从english节点检索,因为它们不需要翻译。不过,调用frenchNode.getProperty(“director”

假设我在JCR中有一个节点,它用英语提供电影的属性,如标题、导演和演员。然后我有另一个节点存储相同的属性,但使用另一种语言,比如法语。有没有办法让法语节点引用英语节点,这样第二个节点上实际上只存储需要翻译的属性。例:

-英语字母 性质 标题:石头中的剑 导演:沃尔夫冈·雷瑟曼 演员:塞巴斯蒂安·卡伯特

-系带 性质 标题:梅林·L'Enchanteur

但是,导演和演员属性将从english节点检索,因为它们不需要翻译。不过,调用frenchNode.getProperty(“director”)需要从englishNode检索属性


我知道我可以使法语节点成为英语节点的子节点,并将其属性继承下来,但我需要一个结构,其中所有英语电影都位于英语节点下,所有法语电影位于法语节点下,因此法语电影不能是英语电影的兄弟,而应该是“表亲”.

据我所知,JCR中没有任何内容能够直接适应这种情况。但我可以想出几个可能的选择。每种方法都有其自身的优点,一种解决方案可能在一种情况下效果良好,而在另一种情况下效果不佳

本地特定子节点 使一种语言成为主要语言(例如,无论回退或更流行的本地语言是什么),并将本地特定属性放置在该节点下的本地特定子节点上。因此,如果英语是主要语言,那么电影属性可能存储在电影节点上。法语属性可能存储在“fr”子级上,德语属性存储在“de”子级上,等等。一个优点是您的应用程序只需加载它使用的区域设置

回退参考 创建一个从一个节点到“回退”的引用属性,并让您的逻辑在检索属性时考虑到这一点。如果属性不在节点上,请从回退中获取它,在回退中可以使用
movie.getProperty(“回退”).getNode()
检索回退节点。(注意,在回退可能有回退的情况下,很容易进行递归。)这允许将节点存储在单独的位置。不过,要注意循环回退参考(英语的回退是法语,法语的回退是英语);这是可以处理的,但需要跟踪某些状态。同样,应用程序仅根据需要加载具有特定于语言环境属性的节点

本地特定属性 在“电影”节点上存储所有属性,包括英文、法文和任何其他语言的标题。在属性名称上使用后缀或前缀表示区域设置(例如,
en title
fr title
)。加载单个节点往往会加载所有属性的所有区域设置变体。因此,这适用于较少的语言、较少的本地特定属性和较少的总体属性

每个“属性”的子节点
将每个“属性”(如“title”)作为子节点放置,每个特定于语言环境的值存储为属性。同样,由于加载节点将加载所有语言环境的值,因此使用较少的语言和特定于语言环境的值会更好。

我也不认为JCR提供了现成的功能

在中,我们使用类似的机制允许“用户”脚本覆盖“系统”脚本:要处理给定的请求,可能会发现/libs/foo/foo.esp上的脚本是一个很好的候选脚本,但如果/apps/foo/foo.esp上有另一个脚本,则将使用它

如果存在/content/books/fr/title属性,则可以通过将/content/books/en/title属性重写为/content/books/fr/title来执行相同的操作。您必须在应用程序级别执行此操作,但这种“并行路径”结构清晰且易于理解和管理,您只需定义路径的哪一部分表示内容的区域设置