2009-09-09 2 views
6

Я собираю 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> 

ответ

2

Атрибут маркированной фаской устанавливается в хз: ID и это не позволяет пространства. Вместо этого вы можете использовать xs: string.

+0

Alex, я принимаю ваш ответ, потому что это правильно. Я все еще хотел бы понять, что означает часть модели контента. Есть идеи? – Boaz

+2

Информация о файле Содержание Модели: http://www.stylusstudio.com/w3c/schema0/groups.htm –

0

Ваш section элемент определяется как тип sectionBase и определение sectionBase тип определяет только один атрибут. В схеме нет ссылки на тип sectionFacets, который, вероятно, вам нужен.

Попробуйте изменить тип section элемента sectionFacets

+0

ОК - что будет работать, но я подготовил базовый тип sectionBase для разрешить несколько типов разделов, из которых теперь только один - sectionFacets. То, что предлагает, не позволит этого. – Boaz

+0

Кажется, вам нужна группа замещения – skaffman

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

Thanks janko. В идеале я бы избежал установки типа в xml, поскольку точкой схемы является проверка структуры xml/give. Я не хочу иметь двухстороннюю зависимость между ними. – Boaz

 Смежные вопросы

  • Нет связанных вопросов^_^