什么是错误“元素不能包含空格。内容模型是空的。”意思?

时间:2009-09-09 13:23:54

标签: xml xsd schema

我正在为一个简单的xml整理一个xml架构(请参阅下面的xml和schema)。但是我继续收到有关节节点的以下错误:“元素不能包含空格。内容模型为空。” 。浏览网络我找不到任何简洁的解释,这意味着我可以解决它。有人可以帮忙吗?

编辑:感谢所有人提供有关架构的帮助。我认为这将有助于简要描述内容模型是什么以及为什么它在这里是空的。

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>

3 个答案:

答案 0 :(得分:2)

facet的label属性设置为xs:ID,这不允许使用空格。您可能希望使用xs:string。

答案 1 :(得分: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>

答案 2 :(得分:0)

您的section元素定义为类型sectionBase,sectionBase类型定义仅定义单个属性。架构中任何地方都没有sectionFacets类型的引用,这可能就是您所需要的。

尝试将section元素的类型更改为sectionFacets