导入XML架构

时间:2014-07-25 20:23:25

标签: xml import xsd

编辑:稍作修改。我想我离得更近了,但还是不行。所有当前信息如下:

我成功创建了一个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中不支持的协议”

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

此处的问题是xs:import/@schemaLocationxs:schema/@xsi:schemaLocation不同:

因此,删除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当然是。)