目標:
スキーマで定義されたすべての xs:element に「type」属性が必要な XSD を作成します
他のスキーマで再定義されたものを再利用して、定義
http://www.w3.org/2001/XMLSchema
されたすべての xs:element(s) に「type」属性を要求するように強制できます。
たとえば、XSD (XMLSpy など) で以下を「無効」にしたいと考えています。
<xs:element name="SomeElement"/>
一方、以下は有効です
<xs:element name="SomeElement" type="abc:SomeType"/>
<xs:complexType name="element">
「type」属性を要求するように再定義しようとしたスキーマの例を次に示します。
<?xml version="1.0"?>
<!-- edited with XMLSpy v2013 (http://www.altova.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:redefine schemaLocation="http://www.w3.org/2001/XMLSchema.xsd">
<xs:complexType name="element" abstract="true">
<xs:complexContent>
<xs:restriction base="xs:element">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:QName"/>
</xs:simpleType>
</xs:attribute>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="topLevelElement">
<xs:complexContent>
<xs:restriction base="xs:topLevelElement"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="localElement">
<xs:complexContent>
<xs:restriction base="xs:localElement"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="narrowMaxMin">
<xs:complexContent>
<xs:restriction base="xs:narrowMaxMin"/>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
<xs:element name="SomeElement"/>
</xs:schema>
さて、このスキーマにはいくつかの興味深い側面があり、XMLSpy 2013 (サービス パックなし) にはいくつかの奇妙な動作があります:
「テキスト」ビューで保存しようとすると、XMLSpy はスキーマが「無効」であることを示します
「スキーマ」ビューで保存しようとすると、XMLSpy はスキーマが有効であることを示します
XMLSpy でサンプル XML ファイルを作成しようとすると、スキーマが無効であることを示すエラーが発生します。
有効であってはならないスキーマの唯一の部分は
<xs:element name="SomeElement">
、「タイプ」属性で定義されていないためです。発生するエラーは、宣言の重複に関連しています。しかし、試みられているのは、別の宣言ではなく再定義です。
質問:
<xs:complexType name="element">
「type」属性を要求するように再定義することは可能ですか?- この再定義された型を別の「targetNamespace」を持つ他の XSD で使用することは可能ですか?