在 w3schools 页面中,以下为一种 schema 声明形式。
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
...
...
</xs:schema>
在这里,
targetNamespace 定义了正在定义的 XML 文档的命名空间——可以在“此”XSD 中使用哪些标签(元素)和哪些属性。
xmlns=http://www.w3schools.com/schema/schema_schema.asp
另一方面,<p>
定义了 XML 文档中的名称的默认命名空间,那些没有在 "这个" XSD 中定义的名称。因此,解析器首先查找在 targetNamespace 中声明的命名空间。如果它不能在其中找到名称,则继续尝试在 xmlns 中找到下一个名称。
如果我在模式声明中跳过 targetNamespace 属性,那么我会错过什么?虽然我有 xmlns 和 targetNamespace,但对我来说它们是多余的,因为它们引用的是相同的命名空间。
注意:我看过了What does "xmlns" in XML mean?以及其他一些讨论。