2017-01-16 97 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”>。请为此提供答案。 –