如何在多个元素之间共享注释

时间:2018-06-28 08:24:51

标签: xml xsd xsd-validation

我的XSD中有这个(摘录):

<xs:choice maxOccurs="unbounded" minOccurs="0">
  <xs:element name="int1">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="baseStructMember">
          <xs:attribute name="min" type="xs:byte" use="optional" />
          <xs:attribute name="max" type="xs:byte" use="optional" />
          <xs:attribute name="step" type="xs:byte" use="optional">
            <xs:annotation>
              <xs:documentation xml:lang="en">
                *** Description of the step goes here. ***
              </xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="int2">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="baseStructMember">
          <xs:attribute name="min" type="xs:short" use="optional" />
          <xs:attribute name="max" type="xs:short" use="optional" />
          <xs:attribute name="step" type="xs:short" use="optional" />
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="int4">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="baseStructMember">
          <xs:attribute name="min" type="xs:int" use="optional" />
          <xs:attribute name="max" type="xs:int" use="optional" />
          <xs:attribute name="step" type="xs:int" use="optional" />
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:choice>

我想为step属性添加注释。如您所见,我将其添加到int1中。所有step属性(也在int2int4 ...中)具有不同的类型,但含义相同,因此注释应相同。

我可以通过所有step属性共享一个注释吗?

还是在外部定义step以及注释并重用(例如与attributeGroup一样),但是允许使用不同的属性类型?

1 个答案:

答案 0 :(得分:0)

如lexicore所建议,这对于实体是可能的。这是任何XML文档的功能,而不仅仅是XSD。

实体需要在DTD部分中定义。就我而言,我的XSD文件的开头看起来像这样:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xs:schema [
  <!ENTITY Doc-Step "*** Description of the step goes here. ***">
]>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...

从现在开始,Doc-Step可以&Doc-Step;的形式在文档中的任何位置使用,并且它将由XML解析器替换为适当的字符串:

<xs:attribute name="step" type="xs:byte" use="optional">
    <xs:annotation>
        <xs:documentation xml:lang="en">&Doc-Step;</xs:documentation>
    </xs:annotation>
</xs:attribute>

由于@Doc-Step;可以在多个地方使用,因此可以重复使用文档。另一个不错的功能是,它允许将所有文档字符串集中在一个地方-非常便于维护。