编辑:稍作修改。我想我离得更近了,但还是不行。所有当前信息如下:
我成功创建了一个XSD文件来验证XML文件,但是我想将XSD文件拆分成另一个文件。我相信我需要在XML文件中使用import元素来做到这一点,但我很难让它工作。以下是我现在在XML文件顶部的内容:
<?xml version="1.0" encoding="UTF-8"?>
<presentations xmlns="http://www.brett.com/presentations"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.brett.com/presentations presentations_vb.xsd"
>
以下是主XSD文件的顶部:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.brett.com/presentations"
targetNamespace="http://www.brett.com/presentations"
elementFormDefault="qualified">
<!-- Here is the line in question -->
<xs:import namespace="http://www.brett.com/presentations/topic" schemaLocation="http://www.brett.com/presentations topic_vb.xsd" />
以下是我要导入的新XSD文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.brett.com/presentations/topic"
targetNamespace="http://www.brett.com/presentations/topic"
elementFormDefault="qualified">
<!-- Topic Element -->
<xs:complexType name="topicType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="genre" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="ART" />
<xs:enumeration value="Music" />
<xs:enumeration value="Science" />
<xs:enumeration value="Technology" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="topic" type="topicType" />
</xs:schema>
在将XSD分解为两个文件之前,所有内容都已经过完善和验证。我很确定我输错了,但我无法弄清楚正确的方法。我在尝试验证XML文件时遇到以下错误(XSD文件仍然有效):“第0行的FatalError,第0列:URL中不支持的协议”
有人可以帮忙吗?
答案 0 :(得分:2)
此处的问题是xs:import/@schemaLocation
与xs:schema/@xsi:schemaLocation
不同:
xs:import/@schemaLocation
必须是架构的URI
位置,但xs:schema/@xsi:schemaLocation
必须是一组namespace-URI
对因此,删除xs:import/@schemaLocation
值的命名空间部分,并将URI保留到XSD。
具体而言,更改:
<xs:import namespace="http://www.brett.com/presentations/topic"
schemaLocation="http://www.brett.com/presentations topic_vb.xsd" />
以强>
<xs:import namespace="http://www.brett.com/presentations/topic"
schemaLocation="topic_vb.xsd" />
(或者topic_vb.xsd
的实际URI当然是。)