「フィールド」と呼ばれる要素と「複合フィールド」と呼ばれるその拡張を含むxmlスキーマを定義しました。次のように定義されています。
<xs:complexType name="field">
<xs:sequence>
<xs:element name="value" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="composite-Field">
<xs:complexContent>
<xs:extension base="field">
<xs:sequence>
<xs:element name="length" type="xs:integer" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
私のXML utでそれを使用するには、次のようにする必要があります。
<field xsi:type="composite-Field">
<value>enjoy</value>
<length>30</length>
</field>
XML ユーザーにxsi :type=... などのスキーマ構文を使用してほしくない」
<composite-Field>
<value>enjoy</value>
<length>30</length>
</composite-Field>
したがって、要素の名前はその継承を暗示し、ユーザーに type 属性の追加を強制しませんか??
私はこれを試しました:
<xs:element name="MyCompositeField" type="composite-field"/>
その後:
<MyCompositeField>
<value>enjoy</value>
<length>30</length>
</MyCompositeField>
しかし、XSD スキーマ検証にも合格しませんでした
12/09/2010:提案された回答に応えて、質問を少し洗練させました。
スキーマは次のようになります。
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="general">
<xs:complexType>
<xs:sequence>
<xs:element name="field" type="field" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="field">
<xs:sequence>
<xs:element name="value" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="composite-Field" >
<xs:complexContent>
<xs:extension base="field" >
<xs:sequence>
<xs:element name="length" type="xs:integer" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="MyCompositeField" type="composite-Field"/>
</xs:schema>
必要な xml は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<general xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema2.xsd">
<MyCompositeField>
<value>enjoy</value>
<length>30</length>
</MyCompositeField>
</general>
この組み合わせを使用すると、次のエラー メッセージが表示されます。
cvc-complex-type.2.4.a: 要素「MyCompositeField」で始まる無効なコンテンツが見つかりました。「{field}」のいずれかが必要です。