2009-09-09 9 views
6

Ich stelle ein XML-Schema für ein einfaches XML zusammen (siehe unten für XML und Schema). Aber ich bekomme immer den folgenden Fehler in Bezug auf den Abschnitt Knoten: "Das Element kann keinen Leerraum enthalten. Content-Modell ist leer." . Beim Surfen im Internet konnte ich keine präzise Erklärung finden, was es bedeutet, damit ich es beheben kann. Kann jemand helfen?Was bedeutet der Fehler "Das Element kann keinen Leerraum enthalten. Das Inhaltsmodell ist leer." bedeuten?

Edit: Danke für alle für das Angebot von Hilfe mit dem Schema. Ich denke, es würde helfen, eine kurze Beschreibung dessen zu haben, was das Inhaltsmodell ist und warum es hier leer ist.

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> 

Schema:

<?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> 

Antwort

2

Das Label Attribut Facette Wechsel auf xs gesetzt: ID und diese Bereiche sind nicht gestattet. Vielleicht möchten Sie stattdessen xs: string verwenden.

+0

Alex, ich akzeptiere Ihre Antwort, weil sie korrekt ist. Ich würde immer noch gerne verstehen, was der Inhaltsmodellteil bedeutet. Irgendeine Idee? – Boaz

+2

Lesen von Material über Content-Modelle: http://www.stylusstudio.com/w3c/schema0/groups.htm –

0

Ihre section Elemente als Typ sectionBase definiert, und die sectionBase Typdefinition definiert nur ein einzelnes Attribut. Es gibt keinen Verweis irgendwo im Schema zum sectionFacets Typ, der vermutlich ist, was Sie benötigen.

versuchen, die Art des section Element sectionFacets

+0

ok - das funktionieren würde, aber ich bereit, den Basistyp sectionBase zu Erlaube mehrere Sektionstypen, von denen es nur noch eine - sectionFacets gibt. Was schlägt vor, würde es nicht erlauben. – Boaz

+0

Klingt so, als ob Sie eine Ersatzgruppe brauchen. – skaffman

1

Es gibt einige Probleme in unserem Schema, wie andere bereits erwähnt haben. Probieren Sie etwas wie folgt aus:

Das dehnbare Schema:

<?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> 

Wie das Schema verwenden:

<?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

Danke janko. Idealerweise würde ich es vermeiden, den Typ in der XML-Datei festzulegen, da der Punkt des Schemas darin besteht, eine xml/give-Struktur zu validieren. Ich möchte keine Zwei-Wege-Abhängigkeit zwischen den beiden haben. – Boaz