2014-09-10 7 views
1

Я делаю файлы схемы для большого XML-файла, где его XSD-файл использует множество других файлов схемы, которые он включает в себя из других младших файлов схемы. Каждый раз, когда я пытаюсь проверить его, он приходит и говорит, что он не может найти информацию о схеме для элемента.Почему XML-проверка не находит мой XSD?

Я попытался добавить targetNamespaces или использовать import, но он продолжает придумывать ошибки. Файл Config XSD содержит все другие файлы меньшей схемы без каких-либо проблем.

<Config xmlns="C:\Users\xs\Desktop\Config.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="C:\Users\xs\Desktop\Config.xsd"> 
    <test> 
    <test2> 
     <TestDatabase Key="no"> 
     <Class>blablabla</Class> 
     </TestDatabase> 
     <TestTimetable Key="no"> 
     <Class>blablabla</Class> 
     <Report> 
      <Component>1</Component> 
      <Connection>1</Connection> 
     </Report> 
     <Connect> 
      <Delay>15</Delay> 
      <Period>30</Period> 
     </Connect> 
     <Abc> 
      <Factory>jk</Factory> 
      <Url>www.jk.com</Url> 
      <Topic>a</Topic> 
      <Queue>1</Queue> 
      <User>p1</User> 
      <Password>xxx</Password> 
     </Abc> 
     </TestTimetable> 
    </test2> 
    </test> 
</Config> 

Файл схемы для файла XML Config:

<?xml version="1.0" encoding="utf-8" ?> 
<xs:schema elementFormDefault="qualified" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:include schemaLocation="file:///C:\Users\xs\Desktop\TestDatabase.xsd" /> 
    <xs:include schemaLocation="file:///C:\Users\xs\Desktop\TestTimetable.xsd" /> 
    <xs:element name="Config"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Test"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Test2"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="TestDatabase" type="TestDatabaseType" /> 
        <xs:element name="TestTimetable" type="TestTimetableType" /> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

И TestTimetableType иметь свой собственный включает в себя от схем, как Report и Connect.

+0

Это может помочь, если вы показать весь файл Config.xsd (вы вышли из хз: элемент схемы и его атрибуты), и если вы сообщаете конкретные сообщения об ошибках. Возможно, проблема связана с пространствами имен. – Kevin

ответ

0

Похоже, что вы хотите сделать это без пространств имен ...

(1) Удалить эту строку в файл XML:

xmlns="C:\Users\xs\Desktop\Config.xsd" 

(2) изменить эту строку в вашем XML-файл:

xsi:schemaLocation="C:\Users\xs\Desktop\Config.xsd"> 

к этому:

xsi:noNamespaceSchemaLocation="file:///C:\Users\xs\Desktop\Config.xsd"> 

Объяснение:

  • Атрибут xsi:schemaLocation это когда у вас есть пространство имен. Требуется namespace-URI пары; используйте xsi:noNamespaceSchemaLocation, чтобы указать XSD без пространства имен.
  • Используйте file:///, если вы хотите указать полный путь к локальному XSD.

Заметим также, что XML чувствителен к регистру, поэтому test не то же самое, как Test и т.д.

+0

Спасибо за помощь и разъяснение схемы schemaLocation, ошибка была в опечатке в include других схем далеко вниз по цепочке. – SimpleJack

Смежные вопросы