我的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>
答案 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 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>
<?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>