11

我有一个以以下开头的 xsd 文档:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import namespace="http://www.w3.org/XML/1998/namespace"     schemaLocation="http://www.w3.org/2001/xml.xsd"/>
    <xs:complexType name="T_segment">
        <xs:sequence>
            <xs:element ref="element" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="xml:space" use="required"/>
        <xs:attribute ref="id" use="required"/>
    </xs:complexType>
...

当我尝试在像 BizTalk 这样的映射应用程序中使用这个 xsd 时,它会抱怨命名空间。因此,我删除了 xs:import 命名空间标记,它抱怨 xs:attribute ref="xml:space" 标记。所以,我删除了它,它似乎工作正常(至少不会爆炸)。

我的问题是,这些标签是做什么用的?通过删除它们,我是否破坏了 xsd?

据我所知,命名空间是为了避免冲突。但是在 xsd 中,所有内容都以 xs 为前缀,并且架构本身具有 xmlns:xs="http://www.w3.org/2001/XMLSchema"。我不确定那个导入是为了什么。

4

1 回答 1

11

<xs:import />元素将 XML 命名空间导入到模式中。导入的命名空间包含“space”属性的定义。该<xs:attribute ref="xml:space" use="required"/>位通过引用导入的模式为“T_segment”复杂类型定义了一个必需的“空格”属性(即,您不必重写定义)。space 属性本质上使您能够定义空格对元素是否重要

现在,根据应用程序,您实际上可能会破坏事情,因为本质上您正在从复杂类型中删除可能与使用此模式描述的文档的应用程序相关的约束。在不了解更多应用程序的情况下,很难说这对您的情况是否重要。

于 2010-01-22T21:29:33.017 回答