XSD错误:URL中不支持的协议

时间:2018-06-22 13:41:33

标签: xml xsd xhtml xsd-validation xml-validation

我的XML和XSD有问题。

我正在尝试在架构中使用XHTML标记<img>,但是无法导入XHTML架构。验证者给我的错误是:

  

第0行第0列出现致命错误,URL中的协议不受支持。

接下来是复制我的问题的最小示例。

这是file.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xhtml="http://www.w3.org/1999/xhtml">

<xsd:import namespace="http://www.w3.org/1999/xhtml" 
schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd" />

<xsd:element name="tag" >
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element ref="xhtml:img" />    
  </xsd:sequence>  
 </xsd:complexType>
</xsd:element>
</xsd:schema>

还有这个file.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<tag xmlns:xsi="w3.org/2001/XMLSchema- instance" 
xmlns:xhtml="w3.org/1999/xhtml"; xsi:noNamespaceSchemaLocation="file.xsd"> 
  <xhtml:img href="http://" /> 
</tag>

1 个答案:

答案 0 :(得分:0)

您不想将整个XML文件放在XHTML命名空间中。 (并且xsi:noNamespaceSchemaLocation用于没有命名空间的情况。)

所以改变

<file xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="http://www.w3.org/1999/xhtml" 
      xsi:noNamespaceSchemaLocation="file.xsd">

<file xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xhtml="http://www.w3.org/1999/xhtml" 
      xsi:noNamespaceSchemaLocation="file.xsd">

,然后仅在XHTML元素上选择性地使用xhtml名称空间前缀。


更新

现在已经向问题中添加了完整的MCVE,您的XSD和XML存在许多明显的问题:

  • xmlns:xhtml="w3.org/1999/xhtml";不应以;结尾。
  • xmlns:xsi声明有多种用法。

这是工作正常的XSD / XML对,可以解决上述问题和其他问题:

XML

<?xml version="1.0" encoding="UTF-8"?> 
<tag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:xhtml="http://www.w3.org/1999/xhtml" 
     xsi:noNamespaceSchemaLocation="file.xsd"> 
  <xhtml:img src="http://" alt=""/> 
</tag>

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:xhtml="http://www.w3.org/1999/xhtml"
            elementFormDefault="qualified">

  <xsd:import namespace="http://www.w3.org/1999/xhtml" 
              schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd" />

  <xsd:element name="tag" >
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="xhtml:img" />    
      </xsd:sequence>  
    </xsd:complexType>
  </xsd:element>
</xsd:schema>