2009-09-09 82 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

小面的标签属性被设置为的xs:ID和这不允许空格。您可能需要使用xs:string。

+0

亚历克斯,我接受你的答案,因为它是正确的。我仍然想了解内容模型部分的含义。任何想法? – Boaz 2009-11-04 21:56:11

+2

阅读关于内容模型的资料:http://www.stylusstudio.com/w3c/schema0/groups.htm – 2009-11-05 08:15:19

0

section元素被定义为类型sectionBase和sectionBase类型定义只定义单一的属性。模式中的任何地方都没有参考sectionFacets类型,这可能是您需要的。

尝试改变section元件的类型sectionFacets

+0

确定 - 将工作,但我准备的基本类型sectionBase到允许多节类型,其中现在只有一节节段。什么建议不会允许。 – Boaz 2009-09-09 13:34:44

+0

听起来像你需要一个替代组 – skaffman 2009-09-09 13:36:54

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

谢谢janko。理想情况下,我会避免在xml中设置类型,因为模式的要点是验证xml/give结构。我不想在两者之间产生双向依赖关系。 – Boaz 2009-09-09 14:14:34

相关问题