我创建了一个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 :(得分: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
命名空间(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>