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

相關問題