2009-09-09 38 views
6

私は単純なXMLのためのXMLスキーマをまとめています(xmlとスキーマの両方については以下を参照してください)。しかし、私はセクションノードに関して次のようなエラーを受けています: "要素に空白を含めることはできません。コンテンツモデルは空です。" 。インターネットを閲覧すると、それが何を意味するかについて簡潔な説明が見つかりませんでしたので、修正することができます。誰も助けることができますか?"要素に空白を含めることはできません。コンテンツモデルは空です。"平均?

編集:スキーマのヘルプを提供してくれてありがとう。私は、コンテンツモデルが何であるか、なぜそれが空であるのかを簡潔に説明するのに役立つと思います。

XML:

<config> 
    <section name="facets"> 
     <facet type="format" label="Format" max="4"/> 
     <facet type="language" max="4"/> 
     <facet type="pubdate" max="6" submax="8"/> 
     <facet type="ice_topic" label="Fiction: Topic"/> 
    </section> 
</config> 

スキーマ:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="config"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="section" type="sectionBase"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:complexType name="sectionBase"> 
     <xs:attribute name="name" type="xs:ID"/> 
    </xs:complexType> 


    <xs:complexType name="sectionFacets" > 
     <xs:complexContent> 
     <xs:extension base="sectionBase"> 
      <xs:sequence> 
       <xs:element name="facet" type="sectionFacetsBaseFacet"/> 
      </xs:sequence> 
     </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:complexType name="sectionFacetsBaseFacet"> 
     <xs:attribute name="label" type="xs:ID"/> 
     <xs:attribute name="max" type="xs:positiveInteger"/> 
    </xs:complexType> 
    <xs:complexType name="sectionFacetsFormat"> 
     <xs:complexContent> 
     <xs:extension base="sectionFacetsBaseFacet"/> 
     </xs:complexContent> 
    </xs:complexType> 
    <xs:complexType name="sectionFacetsPubdate"> 
     <xs:complexContent> 
     <xs:extension base="sectionFacetsBaseFacet"> 
      <xs:attribute name="submax" type="xs:positiveInteger"/> 
     </xs:extension> 
     </xs:complexContent> 

    </xs:complexType> 
</xs:schema> 

答えて

2

section要素の種類を変更してみてください。代わりにxs:stringを使用することもできます。

+0

アレックス、私は正しいのであなたの答えを受け入れます。私はまだコンテンツモデルの部分が何を意味するのか理解したいと思います。何か案が? – Boaz

+2

コンテンツモデルに関する資料を読む:http://www.stylusstudio.com/w3c/schema0/groups.htm –

0

あなたsection要素が型sectionBaseとして定義され、sectionBase型定義は、単一の属性を定義しています。スキーマにはsectionFacetsタイプの参照はありません。これはおそらく必要なものです。 IDと、これはスペースを許可しない:

は、ファセットのlabel属性は、xsに設定されているsectionFacets

+0

OK - 働くだろうが、私は基本型のsectionBaseを準備複数のセクションタイプを許可します。そのうちの1つのセクションファセットしか存在しません。それが許されないと示唆しているもの – Boaz

+0

代替グループが必要なように聞こえます – skaffman

1

私たちのスキーマにはいくつかの問題があります。このような何かを試してみてください:

拡張可能なスキーマ:

スキーマを使用する方法
<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <!-- never used; just to be extended --> 
    <xs:complexType name="sectionBaseType" abstract="true"> 
     <xs:attribute name="name" type="xs:ID"/> 
    </xs:complexType> 

    <!-- extension of the sectionBaseType --> 
    <xs:complexType name="sectionSpecialized"> 
     <xs:complexContent> 
      <xs:extension base="sectionBaseType"> 
       <xs:sequence> 
        <xs:element name="facet" type="leftToTheReaderType" 
         maxOccurs="unbounded"/> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 

    <!-- config may contain a single section or one of its extensions --> 
    <xs:complexType name="configType"> 
     <xs:sequence> 
      <xs:element name="section" type="sectionBaseType"/> 
     </xs:sequence> 
    </xs:complexType> 

    <!-- a single root node called "config" --> 
    <xs:element name="config" type="configType"/> 
</xs:schema> 

<?xml version="1.0" encoding="UTF-8"?> 
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <!-- note the xsi:type to specify the actual type of the section!! --> 
    <section name="facets" 
     xsi:type="sectionSpecialized"> 
     <facet .../> 
     <facet .../> 
     <facet .../> 
     <facet .../> 
    </section> 
</config> 
+0

ありがとうございました。理想的には、XMLの型を設定することを避けます。スキーマのポイントはxmlを検証する/構造を与えることです。私は両者の間に双方向の依存関係を持たせたくありません。 – Boaz

関連する問題