在文档中调用XML模式

时间:2017-02-01 17:34:59

标签: xml xsd

我创建了一个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 -->

1 个答案:

答案 0 :(得分:0)

xsi:schemaLocation有两部分,一个名称空间URI和一个用于检索XML模式文档的URL。在您的情况下,两者都是完全相同的字符串,因此以下工作:

引用远程架构文档

<?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命名空间(sourcefonts)和元素缺失(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>