XML 型のセットを共有する 2 つの開発チームの懸念を切り離したいと思います。共有タイプは、共有 XSD で定義されます。ただし、2 番目のチームは、一連の要件にのみ関連する共有 XML 型のほとんどのフィールドに追加の属性グループを必要とします。現在、これらの妥当性属性は、共有 XSD のほとんどのフィールドに埋め込まれています。
単純な OO 言語の場合と同様に、共有 XML 型を拡張する一連の XML 型にこれらの属性を分離したいと考えています。オブジェクト指向フレームワークで XML スキーマを構築する のテクニックを使用して、Ayesha Malik がいくつかのアイデアを思いつきました。
属性を追加したおかげで... ファセットを追加できたので、個々のフィールドの complexTypes に属性を追加することができました。しかし、複雑な共有型の 1 つでサブ要素の型をオーバーライドしようとすると、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>