我为元素定义了此类型"标记",标记可以是图片,引用或格式
<complexType name="Tag">
<choice minOccurs="0" maxOccurs="unbounded">
<element name="quote" type="rel:Quote" maxOccurs="1"
minOccurs="0">
</element>
<element name="image" type="rel:Image" minOccurs="0"
maxOccurs="1">
</element>
<element name="format" type="rel:Format" minOccurs="0"
maxOccurs="1">
</element>
</choice>
</complexType>
我如何使用例如
<rel:image></rel:image>
而不是
<rel:tag><rel:image></rel:image></rel:tag>
答案 0 :(得分:1)
如果Tag
是元素tag
的类型,那么您定义它的方式,tag
元素可以包含quote
,{{1}的序列},或image
个孩子。
如果您希望format
代替image
,则应将tag
元素定义为替换组的成员,其中image
为其头部
答案 1 :(得分:1)
XML Schema具有替代组的构造,允许某些元素替换其他元素。这可能就是你想要的。
例如,您可以定义tag
类型的元素Tag
:
<xs:element name="tag" type="Tag"/>
并在某处使用它:
<xs:complexType name="Tags">
<xs:sequence>
<xs:element ref="tag"/>
</xs:sequence>
</xs:complexType>
现在,您可以定义元素quote
,image
和format
,以便能够替换tag
:
<xs:element name="quote" type="Quote" substitutionGroup="tag"/>
<xs:element name="image" type="Image" substitutionGroup="tag"/>
<xs:element name="format" type="Format" substitutionGroup="tag"/>
Quote
,Image
和Format
必须来自Tag
类型。
现在,在使用tag
元素的每个地方(每个引用),它都可以被quote
,image
或format
元素替换。
Geography Markup Language(地理标记语言)使用此模式的模式示例,这里是指向过时(但简洁)版本2.1.2的链接。
架构定义了一个抽象元素_Geometry
:
<element name="_Geometry" type="gml:AbstractGeometryType" abstract="true"/>
<complexType name="AbstractGeometryType" abstract="true">
<annotation>
<documentation>
All geometry elements are derived from this abstract supertype;
a geometry element may have an identifying attribute (gid).
It may be associated with a spatial reference system.
</documentation>
</annotation>
<complexContent>
<restriction base="anyType">
<attribute name="gid" type="ID" use="optional"/>
<attribute name="srsName" type="anyURI" use="optional"/>
</restriction>
</complexContent>
</complexType>
然后定义一个可以替换Polygon
的元素_Geometry
:
<element name="Polygon" type="gml:PolygonType" substitutionGroup="gml:_Geometry"/>
<complexType name="PolygonType">
<annotation>
<documentation>
A Polygon is defined by an outer boundary and zero or more inner
boundaries which are in turn defined by LinearRings.
</documentation>
</annotation>
<complexContent>
<extension base="gml:AbstractGeometryType">
<sequence>
<element ref="gml:outerBoundaryIs"/>
<element ref="gml:innerBoundaryIs" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
现在您可以使用Polygon
以及引用_Geometry
的其他元素:
<complexType name="GeometryAssociationType">
<annotation>
<documentation>
An instance of this type (e.g. a geometryMember) can either
enclose or point to a primitive geometry element. When serving
as a simple link that references a remote geometry instance,
the value of the gml:remoteSchema attribute can be used to
locate a schema fragment that constrains the target instance.
</documentation>
</annotation>
<sequence minOccurs="0">
<element ref="gml:_Geometry"/>
</sequence>
<attributeGroup ref="xlink:simpleAttrs"/>
<attribute ref="gml:remoteSchema" use="optional"/>
<!-- <attributeGroup ref="gml:AssociationAttributeGroup"/> -->
</complexType>