2013-05-08 45 views
0

這是我的模式。我將它作爲XML Doc中的一個屬性。電話號碼的XSD限制出錯

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://xml.netbeans.org/schema/ThueBao" 
     xmlns:tns="http://xml.netbeans.org/schema/ThueBao" 
     elementFormDefault="qualified"> 

<xsd:simpleType name="tTen"> 
    <xsd:restriction base="xsd:string"/> 
</xsd:simpleType> 
<xsd:simpleType name="tSDT"> 
    <xsd:restriction base="xsd:ID"> 
     <xsd:pattern value="[0]{1}[0-9]{9}[0-9]*"/> 
    </xsd:restriction> 
</xsd:simpleType> 
<xsd:simpleType name="tSDTGoiDi"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:pattern value="[0]{1}[0-9]{9}[0-9]*"/> 
    </xsd:restriction> 
</xsd:simpleType> 
<xsd:simpleType name="tDiaBan"> 
    <xsd:restriction base="xsd:string"/> 
</xsd:simpleType> 
<xsd:simpleType name="tThoiGianGoi"> 
    <xsd:restriction base="xsd:duration"/> 
</xsd:simpleType> 
<xsd:complexType name="tThueBao"> 
    <xsd:sequence> 
     <xsd:element name="HoTen" type="tns:tTen"></xsd:element> 
     <xsd:element name="DiaBan" type="tns:tDiaBan"></xsd:element> 
     <xsd:element name="SoDienThoaiGoiDi" type="tns:tSDTGoiDi"></xsd:element> 
     <xsd:element name="ThoiGianGoi" type="tns:tThoiGianGoi"></xsd:element> 
    </xsd:sequence> 
    <xsd:attribute name="SDT" type="tns:tSDT"/> 
</xsd:complexType> 
<xsd:element name="DSThueBao"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="ThueBao" type="tns:tThueBao"></xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

這是我的XML。

<ns0:ThueBao SDT="0984224932"> 
    <ns0:HoTen>Pham Tuan Manh</ns0:HoTen> 
    <ns0:DiaBan>Ha Noi</ns0:DiaBan> 
    <ns0:SoDienThoaiGoiDi>01635981989</ns0:SoDienThoaiGoiDi> 
    <ns0:ThoiGianGoi>PT2M</ns0:ThoiGianGoi> 
</ns0:ThueBao> 

在驗證上,NetBeans總是顯示此錯誤:

cvc-datatype-valid.1.2.1: '0984224932' is not a valid value for 'NCName'. [15] 
cvc-attribute.3: The value '0984224932' of attribute 'SDT' on element 'ns0:ThueBao' is not valid with respect to its type, 'tSDT'. [15] 

我有兩個電話號碼在我的XML。第二個被接受,但是第一個。我不知道這是如何發生的。 我該如何解決這個問題? 在此先感謝!

回答

1

您已經聲明SDT以限制XS模式方面:ID,這反過來又限制的xs:NCName來;一個xs:NCName必須以一個字母開始(鬆散地說)。它不能以數字開頭(這正是你的正則表達式所要求的) - 所以沒有任何值會匹配這種類型。

的第二電話號碼被定義爲x s的限制:字符串,所以,一個是OK。

我不知道你是否知道,模式[0]{1}[0-9]{9}[0-9]*可以簡化成0[0-9]{9,}

+0

非常感謝您的明確的解釋,Mr.Kay。 我編輯了我的代碼,它與完美配合。 再一次,非常感謝! – Manhhailua 2013-05-08 11:45:21