2016-11-11 28 views
1

我已將名爲Classroom的屬性插入名爲Lecture的元素中。這裏的XML模式:爲什麼我的XSD允許在我的XML中使用禁止的屬性?

<xsd:attribute name="Classroom" use="required"> 
<xsd:simpleType> 
    <xsd:restriction base="xsd:string"> 
     <xsd:minLength value="0"/> 
     <xsd:maxLength value="7"/> 
    </xsd:restriction> 
</xsd:simpleType> 

. 
. 
. 
<xsd:complexType name="labType"> 
     <xsd:complexContent> 
      <xsd:restriction base="eventType"> 
       <xsd:sequence> 
        <xsd:element name="Title" type="xsd:string"/> 
        <xsd:element name="Lecture" maxOccurs="10" minOccurs="1"/> 
       </xsd:sequence> 
         <xsd:attribute name="Clasroom" use="prohibited"/> 
       </xsd:restriction> 
     </xsd:complexContent> 
    </xsd:complexType> 
. 
. 
. 
<xsd:element name="Lab" substitutionGroup="Event" type="labType"/> 

我遇到的問題是,這種模式並不適用於該屬性的限制。 我試圖驗證此XML代碼:

<Lab> 
       <Title>Artificial Intelligence</Title> 
       <Lecture Classroom="BA">  
        <Day>Friday</Day> 
        <Time>17:00-18:00</Time> 
       </Lecture>     
    </Lab> 

我的問題是,這個XML報告爲有效,即使它使用屬性「課堂」(它不應該是能夠做到)。 我是新來的XML,所以請不要苛刻。 提前謝謝!

回答

1

你的Lecture聲明,

<xsd:element name="Lecture" maxOccurs="10" minOccurs="1"/> 

沒有聲明類型Lecture,讓你有效地允許任何內容和任何屬性Lecture,無論任何限制,你可能已經在Classroom其他地方定義在XSD中。

下面是一個完整XSD能夠成功驗證XML:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Lab"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Title" type="xs:string"/> 
     <xs:element name="Lecture"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Day" type="xs:string"/> 
       <xs:element name="Time" type="xs:string"/> 
      </xs:sequence> 
      <xs:attribute name="Classroom"> 
       <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:minLength value="0"/> 
        <xs:maxLength value="7"/> 
       </xs:restriction> 
       </xs:simpleType>    
      </xs:attribute> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

上述XSD將允許LectureClassroom屬性,但將限制值設置爲0和7之間,包括端點是長度的字符串。

您還可以添加xs:attribute/use="prohibited"防止@Classroom出現在Lecture,但你的原題,和你的問題的一部分,

我遇到的問題是,這種模式不適用 限制屬性。

暗示您的問題的焦點在於爲什麼限制沒有效果。也許你的意思是任何限制在一般意義上 - xs:restrictionuse="prohibit"。那麼,答案是一樣的:通過不分配類型到Lecture,你允許它是任何類型和任何屬性。

2

錯字在Clasroom(僅1「S」)

<xsd:attribute name="Clasroom" use="prohibited"/> 

問題的另一部分是該屬性限制被施加到Lab元件而非Lecture元件。

+0

「禁止」(+ 1)的好結果。原來的標題提到了「限制」,但您可能是正確的,OP在想,爲什麼限制泛型意義上的屬性,包括'use ='禁止',對XML沒有影響。我認爲,根本原因是未能爲'講座'指定一種類型。 – kjhughes

相關問題