如何使用 xsd 命名空间

how to use xsd namespace

我在很多地方搜索了命名空间,但没有得到满意的答案

以下 xsd 个文件

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="http://www.example.org/schema" 
           xmlns="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

           <xs:element name="product"/>

</xs:schema>

对于上面的代码,我的理解如下。如果我错了,请纠正我。我也有一些关于相同的问题:

  1. xmlns:xs="http://www.w3.org/2001/XMLSchema" 是存储我在当前文档中使用的所有元素和数据类型的定义的地方。

  2. targetNamespace="http://www.example.org/schema其实就是当前文件要存放的包名

  3. xmlns="http://www.w3.org/2001/XMLSchema" : 不知道这是什么

  4. **xmlns:tns** 与 targetNamespace 相同。那为什么要单独使用呢?

  5. 第一行和第三行有什么用

首先,两个声明:

xmlns:xs="http://www.w3.org/2001/XMLSchema"  
xmlns="http://www.w3.org/2001/XMLSchema"

表示前缀为"xs"和不带前缀的名称,表示其含义在W3C XSD规范中定义的名称。这使您可以选择写 <xs:element> 或简单地写 <element>。没有特别的理由声明两者;最好始终如一地使用一种形式。

属性 targetNamespace="http://www.example.org/schema" 表示此模式正在定义命名空间 http://www.example.org/schema 中元素(可能还有属性)的结构,这可能是您作为设计控制的命名空间(通过我的意思是,除非在示例中,否则您不应该使用该特定名称空间,因为它不是您的名称空间)。

这样的声明很常见
xmlns:tns="http://www.example.org/schema"

将前缀(在本例中为 "tns")绑定到架构的目标命名空间。如果您有一个架构组件引用同一目标命名空间中的另一个架构组件(例如引用类型的元素声明),那么有两种方法可以做到这一点:

(1) <xs:element name="e" type="t"/>

当 "xs" 前缀绑定到“http://www.w3.org/2001/XMLSchema”并且默认命名空间与目标命名空间相同时,这有效。

(2) <element name="e" type="tns:t"/>

这在默认命名空间为“http://www.w3.org/2001/XMLSchema”且 "tns" 前缀绑定到目标命名空间时有效。