我想解耦两个共享一组 XML 类型的开发团队的关注点。共享类型在共享 XSD 中定义。但是,第二个团队需要在共享 XML 类型中的大多数字段上添加一组额外的属性,这些属性只与他们的一组需求相关。目前,这些专有属性嵌入在共享 XSD 的大部分字段中。
我想将这些属性隔离为一组扩展共享 XML 类型的 XML 类型,就像您在简单的 OO 语言中所做的那样。Ayesha Malik 有一些想法让我开始使用在面向对象框架中构建 XML 模式的技术
感谢添加属性...添加方面,我能够将属性添加到各个字段的 complexTypes。但是,当我尝试覆盖其中一种复杂的共享类型中的子元素的类型时,Eclipse 中的验证会抱怨说
粒子类型不是对基础粒子的有效限制。
如果我将各个子元素类型保持不变,则验证效果很好。但是如果我将它们的类型更改为新的派生类型,验证将失败。这是令人沮丧的,因为各个子元素的类型与父类型不同的事实是练习的重点。我想为父类型中的每个字段/子元素添加一组属性,但我没有看到任何方法。
我隔离了一个示例,该示例演示了您可以使用 simpleContent 将属性添加到 simpleType 和 complextType。但我无法使用 complextContent 将属性添加到派生的 complexType。例如,在下面的 complexType“SearchPamphlet”中,我尝试同时使用 <xs:extension> 和 <xs:restriction>。我还尝试将“基础”设置为“书”和“小册子”。所有这些方法都会产生相同的错误。有没有人有什么建议?
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="Book">
<xs:sequence>
<xs:element name="Title" type="xs:string" />
<xs:element name="Author" type="xs:string" />
<xs:element name="ISBN" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Pamphlet">
<xs:complexContent>
<xs:restriction base="Book">
<xs:sequence>
<xs:element name="Title" type="xs:string" />
<xs:element name="Author" type="xs:string" />
<xs:element name="ISBN" type="PamphletISBN" />
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name="ISBNType">
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:simpleType name="PamphletISBN">
<xs:restriction base="ISBNType">
<xs:maxLength value="5" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="SearchablePamphlet">
<xs:complexContent>
<xs:restriction base="Book">
<xs:sequence>
<xs:element name="Title" type="SearchableString" />
<xs:element name="Author" type="SearchableString" />
<xs:element name="ISBN" type="SearchablePamphletISBN" />
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SearchablePamphletISBN">
<xs:simpleContent>
<xs:extension base="PamphletISBN">
<xs:attributeGroup ref="searchableAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="SearchableString">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="searchableAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:attributeGroup name="searchableAttributes">
<xs:attribute name="caseMatches" type="xs:boolean" />
<xs:attribute name="spellingMatches" type="xs:boolean" />
<xs:attribute name="checksum" type="xs:integer" />
</xs:attributeGroup>
</xs:schema>