如何跨多个元素共享注释
How to share an annotation across multiple elements
我的 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
属性(也在 int2
、int4
... 中)属于不同类型,但具有相同的含义,因此注释应该相同。
有什么方法可以在所有 step
属性中共享一个注释?
或者在外部定义 step
,连同注解并重用它(就像 attributeGroup
),但允许不同的属性类型?
正如 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;
可以在多个地方使用,因此可以重复使用文档。另一个不错的功能是它允许在一个地方收集所有文档字符串 - 非常适合维护。
我的 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
属性(也在 int2
、int4
... 中)属于不同类型,但具有相同的含义,因此注释应该相同。
有什么方法可以在所有 step
属性中共享一个注释?
或者在外部定义 step
,连同注解并重用它(就像 attributeGroup
),但允许不同的属性类型?
正如 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;
可以在多个地方使用,因此可以重复使用文档。另一个不错的功能是它允许在一个地方收集所有文档字符串 - 非常适合维护。