1

目標:

  1. スキーマで定義されたすべての xs:element に「type」属性が必要な XSD を作成します

  2. 他のスキーマで再定義されたものを再利用して、定義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 (サービス パックなし) にはいくつかの奇妙な動作があります:

  1. 「テキスト」ビューで保存しようとすると、XMLSpy はスキーマが「無効」であることを示します

  2. 「スキーマ」ビューで保存しようとすると、XMLSpy はスキーマが有効であることを示します

  3. XMLSpy でサンプル XML ファイルを作成しようとすると、スキーマが無効であることを示すエラーが発生します。

  4. 有効であってはならないスキーマの唯一の部分は<xs:element name="SomeElement">、「タイプ」属性で定義されていないためです。

  5. 発生するエラーは、宣言の重複に関連しています。しかし、試みられているのは、別の宣言ではなく再定義です。

質問:

  1. <xs:complexType name="element">「type」属性を要求するように再定義することは可能ですか?
  2. この再定義された型を別の「targetNamespace」を持つ他の XSD で使用することは可能ですか?
4

1 に答える 1