2014-04-15 76 views
2

我想與一些限制的文本和屬性XML架構:元素與屬性包含「限制」文本僅

<some_element my_attr="data">some restricted text</some_element> 

如何創建這樣一個元素定義元素?

我想:

<complexType> 
    <simpleContent> 
     <restriction base="string"> 
      <pattern value="AAA"></pattern> 
      <attribute name="newattr" type="string"></attribute> 
     </restriction> 
    </simpleContent> 
</complexType> 

但要錯誤消息:

複雜類型定義表示錯誤類型 '#AnonType_childparent'。何時使用,基類 類型必須是其內容類型很簡單的complexType,或者僅在指定了限制時才具有混合內容和複製類型,或者只有在指定了擴展名的情況下才是簡單類型。 '字符串'不滿足這些條件。

,然後試圖像這樣

<complexType> 
    <complexContent> 
     <extension base="string"> 
      <attribute name="attr" type="string"></attribute> 
     </extension> 
    </complexContent> 
</complexType> 

這次錯誤是(這次我沒加任何限制,這是僅用於測試目的):

複雜類型 '#AnonType_childparent'類型的定義表示錯誤。何時使用,基地 類型必須是complexType。 'string'是一個simpleType。

我不清楚錯誤是什麼意思?有沒有更好的錯誤文字說明?

回答

4

你的問題或多或少是這個問題的重複(只是answered它)。

認爲在這些方面:

  • ,如果你的元素有屬性和/或嵌套元素,它必須是一個複雜的類型。
  • ,如果你的元素可以有文字,但沒有標記(嵌套元素),那麼它必須是簡單文本
  • 簡單文本只能從一個簡單的類型進行擴展(如果你需要添加一個屬性)的。如果您需要簡單類型的附加約束,則需要專門創建一個新的簡單類型,限制基本類型,然後將其擴展到簡單的內容中。

This post在SO上向您展示了上述解釋的端到端示例。爲了您的具體情況:

<?xml version="1.0" encoding="utf-8" ?> 
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) --> 
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:simpleType name="tSomeRestrictedText"> 
     <xsd:restriction base="xsd:string"> 
      <xsd:pattern value="AAA"/> 
     </xsd:restriction> 
    </xsd:simpleType> 
    <xsd:element name="some_element"> 
     <xsd:complexType> 
      <xsd:simpleContent> 
       <xsd:extension base="tSomeRestrictedText"> 
        <xsd:attribute name="my_attr" type="xsd:string"/> 
       </xsd:extension> 
      </xsd:simpleContent> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 
+0

我現在面臨的問題是,我知道如何與屬性添加文本內容的元素,但我不能爲受限制的內容做。 –

+0

@MasterChief,不知道我明白了;看看最新的迴應;對你起作用嗎?如果沒有,請澄清。 –

+0

我已經標記爲答案,因爲它的工作。但是,你能澄清一下,爲什麼我們需要分成兩部分。爲什麼我們不能直接擴展受限類型(使用嵌套)? –