2009-09-09 8 views
6

Scalam xml dla prostego xml (zobacz poniżej dla xml i schematu). Ale nadal pojawia się następujący błąd w odniesieniu do węzła sekcji: "Element nie może zawierać spacji. Model zawartości jest pusty." . Przeglądając sieć, nie mogłem znaleźć żadnego zwięzłego wyjaśnienia, co to znaczy, więc mogę to naprawić. Czy ktoś może pomóc?Co oznacza błąd "Element nie może zawierać spacji, model zawartości jest pusty." oznaczać?

Edycja: dzięki za wszystkie za oferowanie pomocy w schemacie. Myślę, że pomogłoby to w zwięzłym opisie tego, czym jest model zawartości i dlaczego jest tutaj pusta.

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> 

Odpowiedz

2

atrybutu label aspekt jest ustawiony na xs: ID, a to nie pozwala na spacje. Zamiast tego możesz użyć xs: string.

+0

Alex, akceptuję twoją odpowiedź, ponieważ jest poprawna. Nadal chciałbym zrozumieć, co oznacza część dotycząca modelu zawartości. Dowolny pomysł? – Boaz

+2

Materiały do ​​czytania na temat modeli zawartości: http://www.stylusstudio.com/w3c/schema0/groups.htm –

0

Twój section element jest zdefiniowany jako typ sectionBase, a definicja sectionBase typ określa tylko jeden atrybut. W schemacie nie ma żadnego odwołania do typu sectionFacets, co prawdopodobnie jest potrzebne.

Spróbuj zmienić typ elementu section do sectionFacets

+0

OK - to będzie działać, ale przygotowałem typu bazowego sectionBase do zezwól na wiele typów przekrojów, z których jest tylko jeden - sekcjaFacets. Jaka sugestia nie pozwoliłaby na to. – Boaz

+0

Wygląda na to, że potrzebujesz grupy zastępczej – skaffman

1

Jest kilka problemów w naszym schemacie, o czym już wspomniały inni. Spróbuj czegoś takiego:

Rozszerzalna schematu:

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

Jak używać schematu:

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

Dzięki Janko. Idealnie byłoby uniknąć ustawienia typu w xml, ponieważ punktem schematu jest sprawdzenie poprawności struktury xml/give. Nie chcę mieć dwukierunkowej zależności między tymi dwoma. – Boaz