質問
私はXMLスキーマをフォローしています:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="content" type="contentType"/>
<xs:complexType name="contentType">
<xs:complexContent>
<xs:extension base="versionedElementType">
<xs:sequence>
<xs:element name="item" type="itemType" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="itemType" mixed="true">
<xs:complexContent>
<xs:extension base="itemTypeBase">
<xs:sequence>
<xs:element name="order" type="xs:unsignedInt"/>
<xs:element name="id" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Simple type convert to complex type -->
<xs:complexType name="itemTypeBase" mixed="true">
<xs:simpleContent>
<xs:extension base="itemDescriptionType">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Simple type -string restriction -->
<xs:simpleType name="itemDescriptionType" >
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="versionedElementType">
<xs:attribute name="version" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
このXMLインスタンスを検証するために使用します(「アイテム」要素のテキストをサブエレメント「注文」と「ID」と組み合わせたい):
<?xml version="1.0" encoding="UTF-8"?>
<content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Content.xsd"
version ="1.0">
<item>Description here...
<order>2</order>
<id>2</id>
</item>
</content>
私が何をしたとしても、検証はまだエラーがあると言っています:
派生タイプのコンテンツタイプとそのベースのタイプのタイプは、両方とも混合するか、両方とも要素のみでなければなりません。タイプ「アイテムタイプ」は混合されていますが、そのベースタイプは混合されていません。
しかし、私は両方のタイプ-ItemTypeとitemTypebaseが混合されていることがわかります!!
ありがとうございました
解決
まず、Visual Studio 2010でスキーマを開くかどうかを確認するエラーは次のとおりです。
派生タイプとベースのタイプには、同じコンテンツタイプが必要です。
あなたの現在のスキーマタイプ itemTypeBase
の点で定義されています <xs:simpleContent>
および派生タイプ itemType
の敬意を持って <xs:complexContent>
許可されていません。サブ要素を許可しないか、使用します <xs:simpleContent>
または、子供の要素を使用して使用します <xs:complexContent>
.
私は個人的には、混合タイプが好きではなく、使用しません。私があなたが修正したことを理解しているなら、あなたはコンテンツからテキストにいくつかの制限を作りたいです。 1〜64文字のコンテンツの長さを望んでいます。だが <order>2</order>
, <id>2</id>
そして、新しいライン文字を含むすべての空白もコンテンツの一部です。あなたがそれを望むなら <item>
シンプルなコンテンツがあり、その後、内部に子供の要素を挿入できません。
したがって、実用的なソリューションは混合モデルから離れ、フォームでXMLドキュメントを使用します
<?xml version="1.0" encoding="utf-8"?>
<content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Content.xsd"
version ="1.0">
<item>
<description>Description here...</description>
<order>2</order>
<id>2</id>
</item>
</content>
Content.xsdはここで
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="content" type="contentType"/>
<xs:complexType name="contentType">
<xs:sequence>
<xs:element name="item" type="itemType"
minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="version" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="itemType">
<xs:sequence>
<xs:element name="description" type="itemDescriptionType"/>
<xs:element name="order" type="xs:unsignedInt"/>
<xs:element name="id" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="itemDescriptionType" >
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
すべてが非常にシンプルで明確になります。