我一直對此感到震驚,因爲我已經有一段時間沒有接近答案了。XSD complexType - 將cdata限制爲僅限某些字符和2個子元素
我試圖創建一個XML Schema文件,以允許更精確的驗證AIML文件,基於AIML 1.0.1 specification,並且我遇到了一個障礙。根據本說明書中,<pattern>
和(輸入側)<that>
標籤可以只允許幾個子元素(<bot>
和/或<eval
>) - 或 - CDATA只能包括:
- 字母數字字符(az,AZ,或0-9)
- 空間
- 一個(或兩個)的兩個 '通配符' 字符(*或_)有效和無效0的
實例個標籤可能是這樣的:
<!-- valid PATTERN -->
<pattern>HELLO</pattern>
<pattern>HELLO *</pattern>
<pattern>_ IS FOR SALE</pattern>
<!-- invalid PATTERN -->
<pattern>HOW ARE YOU TODAY?</pattern> <!-- note the question mark -->
<pattern>50%</pattern> <!-- note the percent sign -->
順便說一句,在XSD爲<pattern>
標籤的當前狀態是低於,並努力將CDATA限制字符所需的列表:
<xs:element name="pattern">
<xs:complexType mixed="true">
<xs:simpleContent>
<xs:extension base="aiml:InputPatternType">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="InputPatternType">
<xs:restriction base="xs:string">
<xs:pattern value="[\w| |_|\*]*"/>
</xs:restriction>
</xs:simpleType>
然而,這不允許使用必要的子元素,爲其代碼是在這裏:
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="aiml:bot"/>
<xs:element ref="aiml:eval"/>
</xs:choice>
當我嘗試將這一雙t根據我試圖添加此代碼的方式,從「意外的子元素」到關於「如果<complexType>
替代選擇......」等投訴,我會得到各種錯誤。我讀過幾篇文章(最有幫助的是this one,但正如我剛纔提到的那樣,上週我沒有比我剛開始時更接近解決這個問題。我知道我只是想念一些簡單的東西,但我看不到它,所以許多與此相關的SO文章都沒有收到任何有用的結果,因爲它們大多隻涉及子元素,而不涉及如何將CDATA限制爲某些字符。
我很清楚的,上面的代碼使用simpleType
和simpleContent
代替complexType
和complexContent
,但我使用這些努力都沒有遇到任何成功的事實,所以我貼的是目前(部分)工作。任何與此有關的幫助將被虛心讚賞。謝謝。
感謝您的回答。我贊成它,因爲它給了我一個研究的方向,但因爲它實際上並沒有幫助解決問題,所以我不能接受它作爲答案。儘管如此,我仍然在努力,所以我很有希望。 –
我應該在我的評論中加入解釋。抱歉。可悲的是,選項2對於這個項目不可行,因爲我在一個已經存在的規範中工作,只允許一個''元素,而沒有別的。選項1可能是可能的,但它超出了我目前的經驗,所以在我嘗試實施它之前,我必須學習更多。 –