温馨提示:本文翻译自stackoverflow.com,查看原文请点击:xml - xsd: define an array of (not predefined) attributes for a given tag
xml xsd

xml - xsd:为给定标签定义一个(未预定义的)属性数组

发布于 2020-04-17 14:11:16

我需要将本地化添加到XML中的多种语言中。包含文本的标签称为“ saluto”,此刻看起来像:

<saluto>buon giorno</saluto>

为了添加新的翻译,我认为最紧凑的解决方案之一是使用属性来传递不同的翻译,因此我将避免标签重复:

<saluto IT="buon giorno" EO="bonan tagon" EN="good morning" CN="早安" PL="dzień dobry" />

问题在于,考虑到将来可以添加新的语言,而我不想更改XSD,如何编写允许这样做的XSD规则。可能吗?

查看更多

提问者
fresko
被浏览
35
kimbert 2020-02-07 04:50

我能想到的最紧凑的解决方案之一是使用属性来传递不同的翻译,因此我将避免标签重复

我要谦虚地建议,紧凑性虽然很不错,但不应成为您的主要考虑因素。如果紧凑性确实是最重要的标准,那么XML可能是文件格式的错误选择。

问题是如何编写允许这样做的XSD规则,考虑到将来可以添加新的语言,而我不想更改XSD

如果您在XSD中指定有效语言名称的列表,则任何新的语言名称都将无法针对XSD的v1进行验证。通常的解决方案是在出现新要求时扩展XSD。为什么对于您的用例而言,这不是可行的方法?

一种几乎紧凑的替代方法是:

<saluto lang="EN">Good morning</saluto>

lang然后,可以通过简单的类型限制来指定属性的允许值列表,<xs:enumeration>每种语言都可以使用一个限制XSD的未来版本可能会简单地添加新的枚举。