2009-09-09 5 views
6

Je suis en train de mettre en place un schéma XML pour un XML simple (voir ci-dessous pour xml et schéma). Mais je continue à obtenir l'erreur suivante en ce qui concerne le nœud de section: "L'élément ne peut pas contenir d'espace blanc.Modèle de contenu est vide." . Surfer sur le net je n'ai pas trouvé d'explication concise quant à ce que cela signifie pour que je puisse le réparer. Quelqu'un peut-il aider? Edit: merci à tous d'avoir offert de l'aide pour le schéma. Je pense que cela aiderait à avoir une description concise du modèle de contenu et pourquoi il est vide ici.Qu'est-ce que l'erreur "L'élément ne peut pas contenir d'espace blanc Le modèle de contenu est vide." signifier?

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> 

Schéma:

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

Répondre

2

L'attribut label de facette est définie sur xs: ID et cela ne permet pas d'espaces. Vous pouvez utiliser xs: string à la place.

+0

Alex, j'accepte votre réponse parce que c'est correct. Je voudrais toujours comprendre ce que signifie la partie du modèle de contenu. Une idée? – Boaz

+2

Matériel de lecture sur les modèles de contenu: http://www.stylusstudio.com/w3c/schema0/groups.htm –

0

Votre élément section est défini comme le type sectionBase, et la définition de type sectionBase ne définit qu'un seul attribut. Il n'y a aucune référence dans le schéma au type sectionFacets, ce qui est probablement ce dont vous avez besoin.

Essayez de changer le type de l'élément section-sectionFacets

+0

ok - qui fonctionnerait, mais je préparais le type de base sectionBase à autoriser plusieurs types de section, dont il n'existe plus qu'un seul - sectionFacets. Ce qui suggère ne le permettrait pas. – Boaz

+0

On dirait que vous avez besoin d'un groupe de substitution – skaffman

1

Il y a plusieurs problèmes dans notre schéma comme d'autres l'ont déjà mentionné. Essayez quelque chose comme ceci:

Le schéma extensible:

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

Comment utiliser le schéma:

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

Merci janko. Idéalement, j'éviterais de définir le type dans le xml, car le point du schéma est de valider une structure xml/give. Je ne veux pas avoir une dépendance bidirectionnelle entre les deux. – Boaz

Questions connexes