这个XSD导入命名空间是什么用的?

时间:2010-01-22 21:13:59

标签: xsd xml-namespaces

我有一个以:

开头的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 namespace标签,它抱怨xs:attribute ref =“xml:space”标签。所以,我删除它,它似乎工作正常(至少不会爆炸)。

我的问题是,那些标签是什么?通过删除它我打破了xsd?

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

1 个答案:

答案 0 :(得分:8)

<xs:import />元素将XML名称空间导入到模式中。导入的命名空间包含“space”属性的定义。 <xs:attribute ref="xml:space" use="required"/>位通过引入的模式引用为“T_segment”复杂类型定义了所需的“space”属性(即,您不必重写定义)。 space属性基本上使您能够定义whitespace is significant for the element or not

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