2017-01-16 8 views
0

XSD-файл не может проверить XML-файлы, содержащие атрибут dt:dt. Атрибут dt:dt не принимается в XSD-файле.XSD не может проверить XML, содержащий атрибут dt: dt

Например.

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

В выше хз: атрибут dt:dt имя не принято. Следовательно, XML-файлы, содержащие атрибут dt:dt="10", не могут быть проверены.

Есть ли решение для изменения 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

Обычно раствор должен исправить код, который сгенерировал Invalid XML. – jdweng

+0

Было бы очень полезно предоставить файл XML и XSD-файл, с которым вы работаете, чтобы мы могли понять проблему и помочь вам. Благодаря! –

+0

@GhislainFourny Я вставил файл XML и XSD, с которым я работаю. –

ответ

1

Значение атрибута name на элементе xs:attribute должно быть только локальным названием (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. например . Пожалуйста, предоставьте ответ. –