在XML Schema中,只允许元素在不同语言中重复?

时间:2014-09-11 13:32:16

标签: xml internationalization xsd

如果某个元素仅限发生一次,如果您使用全局xml:lang属性,是否仍然可以使用多种语言?

一方面,我知道你是否能做到。另一方面,它只是用不同的语言提供相同的信息。因此,如果lang属性不同,能够多次使用该元素将会很有帮助。

否则你必须将其设置为unbounded,这不是我想要的。那个案子有解决方案吗?

1 个答案:

答案 0 :(得分:1)

允许元素重复的简单方法当且仅当它们具有不同的xml:lang值时才会重复:

  1. 在父元素的内容模型中(称之为P),允许孩子重复:

    <xsd:complexType name="parent">
      <xsd:sequence>
        ...
        <xsl:element ref="tns:C" 
          minOccurs="0" maxOccurs="unbounded"/>
        ...
      </
    </
    
  2. 在P的元素声明中,对tns:C / @ xml:lang施加唯一性约束。

    <xsd:element name="P" type="tns:parent">
      <xsd:unique name="unique-lang-for-C">
        <xsd:selector xpath="tns:C"/>
        <xsd:field xpath="@xml:lang"/>
      </
    </
    
  3. 最终结果:您可以拥有多个C元素,只要它们具有xml:lang的不同值。

    如果您的心脏被设置为使用maxOccurs =“1”引用C,那么允许多种语言的一种简单方法是使C成为语言特定信息的包装器:

    <C>
      <en>Hi, mom.</en>
      <fr>Bonjour, maman!</fr>
      <es>¡Hola, mamacita!</es>
    </C>