2017-01-16 77 views
0

XSD文件無法驗證包含dt:dt屬性的XML文件。在XSD文件中不接受dt:dt屬性。XSD無法驗證包含dt:dt屬性的XML

例如。

<xs:attribute name="dt:dt" type="xs:nonNegativeInteger" use="optional"/> 

在上面的xs:屬性中,dt:dt名稱不被接受。因此,包含屬性dt:dt="10"的XML文件無法驗證。

是否有解決方案修改XSD,以便dt:dt屬性得到驗證?

XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<OperationalTopology xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:dt="urn:schemas-microsoft-com:datatypes" 
        xsi:noNamespaceSchemaLocation="xsd.xsd"> 
    <Element1> 
     <Element1_In ID="xx" dt:dt="string"/> 
    </Element1> 
</OperationalTopology> 

XSD文件:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="OperationalTopology"> 
     <xs:annotation> 
      <xs:documentation>Comment describing your root element</xs:documentation> 
     </xs:annotation> 
     <xs:complexType> 
      <xs:all> 
       <xs:element name="Element1" minOccurs="0"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded"> 
           <xs:complexType> 
           <xs:attribute name="ID" use="optional"/> 
           <xs:attribute name="dt" use="optional"/> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:all> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

在XSD上面給出的錯誤,同時驗證XML。 dt:dt屬性發生錯誤。

+0

一般的解決方案是修復所產生的無效的XML代碼。 – jdweng

+0

提供您正在使用的XML文件和XSD文件將非常有幫助,以便我們可以瞭解問題併爲您提供幫助。謝謝! –

+0

@GhislainFourny我粘貼了我正在使用的XML和XSD文件。 –

回答

1

xs:attribute元素上的name屬性的值必須僅爲本地名稱(dt)。它應該在自己的模式(比如,xsd2.xsd)聲明,因爲它有不同的命名空間(除非這個模式已經存在的地方當然):然後

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="urn:schemas-microsoft-com:datatypes"> 
    <xs:attribute name="dt"/> 
</xs:schema> 

原來的模式可以導入上述模式,綁定的命名空間到dt前綴,使用屬性參考dt:dt用來代替它聲明:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:dt="urn:schemas-microsoft-com:datatypes" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified"> 
    <xs:import namespace="urn:schemas-microsoft-com:datatypes" schemaLocation="xsd2.xsd"/> 
    <xs:element name="OperationalTopology"> 
     <xs:annotation> 
      <xs:documentation>Comment describing your root element</xs:documentation> 
     </xs:annotation> 
     <xs:complexType> 
      <xs:all> 
       <xs:element name="Element1" minOccurs="0"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Element1_In" minOccurs="0" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:attribute name="ID" use="optional"/> 
            <xs:attribute ref="dt:dt" use="optional" /> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:all> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

我很抱歉。我不知道我的問題是如何編輯的。屬性名稱不是「名稱」,但屬性名稱是dt:dt。例如<元素名稱=「xxx」dt:dt =「i4」>。請爲此提供答案。 –