2017-02-01 2 views
0

Я создал схему XML и загрузил ее. Это подтверждается. Когда я пытался использовать его для создания документа, он не распознается. Я пробовал различные комбинации атрибутов схемы. Цель состоит не в использовании префиксов пространства имен в тегах в документе. Вот начало тестового документа:вызов схемы XML в документе

<?xml version="1.0" encoding="UTF-8"?> 
<indexdata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.LevTechInc.com/Schemas/IXML.xsd" 
    xmlns="http://www.LevTechInc.com/Schemas/IXML.xsd"> 
    <source creator="Txt2Arc" version="3.0" time="2017-01-20T14:41:49"/> 
    <fonts> 
    <font id="0"> 
    <fname>Arial</fname> 
    <aname>Arial</aname> 
    </font> 
    </fonts> 
    ... 
</indexdata> <!-- added by edit to complete the XML --> 

ответ

0

xsi:schemaLocation состоит из двух частей пространства имен URI и URL, который используется для получения документа XML-схемы. В вашем случае, как точно такие же строки, поэтому следующие работы:

ссылающихся на документ удаленной схемы

<?xml version="1.0" encoding="UTF-8"?> 
<indexdata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.LevTechInc.com/Schemas/IXML.xsd http://www.LevTechInc.com/Schemas/IXML.xsd" 
xmlns="http://www.LevTechInc.com/Schemas/IXML.xsd"> 
    <source creator="Txt2Arc" version="3.0" time="2017-01-20T14:41:49"/> 
    <fonts> 
     <font id="0"> 
      <fname>Arial</fname> 
      <aname>Arial</aname> 
     </font> 
    </fonts> 
</indexdata> 

Но тестовый документ не является действительным по отношению к схеме на http://www.LevTechInc.com/Schemas/IXML.xsd, потому что некоторые элементы не должны находиться в пространстве имен http://www.LevTechInc.com/Schemas/IXML.xsd (source и fonts), и элемент отсутствует (records).


Наивный способ исправить ваш тестовый документ будет ввести xmlns="" в нескольких местах, чтобы избежать элементов, оканчивающиеся в пространстве имен по умолчанию. Но лучшее решение, чтобы превратить декларации пространства имен по умолчанию:

xmlns="http://www.LevTechInc.com/Schemas/IXML.xsd" 

в декларацию с префиксом:

xmlns:ixml="http://www.LevTechInc.com/Schemas/IXML.xsd" 

и использовать его только на одном элементе, который должен быть в этом пространстве имен, indexdata. Затем документ становится

действительный экземпляр этой схемы

<?xml version="1.0" encoding="UTF-8"?> 
<ixml:indexdata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.LevTechInc.com/Schemas/IXML.xsd http://www.LevTechInc.com/Schemas/IXML.xsd" 
xmlns:ixml="http://www.LevTechInc.com/Schemas/IXML.xsd"> 
    <source creator="Txt2Arc" version="3.0" time="2017-01-20T14:41:49"/> 
    <fonts> 
     <font id="0"> 
      <fname>Arial</fname> 
      <aname>Arial</aname> 
     </font> 
    </fonts> 
    <records></records> 
</ixml:indexdata> 
+0

спасибо, что, кажется, работал. –

+0

@DaveReam Рад это услышать. Если мой пост ответил на ваш вопрос, пожалуйста, подумайте о его принятии. Благодаря! Дополнительная помощь при принятии ответа: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work. –

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