2016-11-11 21 views
1

私はLectureという要素にClassroomという属性を挿入しました。ここでは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で

<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までの間の長さの文字列であることを値を制限します:ここでは

は正常にXMLを検証します完全なXSDです。

またLectureに表示され@Classroomを防ぐためにxs:attribute/use="prohibited"を追加することができますが、あなたの元のタイトル、そしてあなたの質問のこの部分、

私がいる問題は、このスキーマは を適用していないということです属性に対する制限。

あなたの質問の焦点は、制限が効果をもたらさなかった理由にあることを暗示しています。おそらく、という意味のという制限があります。xs:restrictionまたはuse="prohibit"です。さて、答えは同じです:タイプをLectureに割り当てないと、そのタイプを任意の属性にすることができました。 Clasroom(のみ1「はS」)で

2

タイポ

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

問題の他の部分は、属性制約がLab素子なくLecture素子に印加されることです。

+0

「禁止」(+1)の良いキャッチ。元のタイトルには "制限"が書かれていましたが、OPがXMLに何の影響も与えていないという理由で、根本的な原因は、「講義」のタイプを指定しなかったことです。 – kjhughes

関連する問題