xmln:tns和targetNamespace

Mar*_*tus 21 xsd xml-namespaces

我看到一些XSD架构文档在其顶部元素中声明了a targetNamespacexmlns:tns属性schema.例如下面的一个从这里开始.它们似乎也具有相同的字符串值.我理解的角色,targetNamespace但最重要的是xmlns:tns做什么?

<?xml version="1.0" encoding="UTF-8"?>
<schema
    xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/Product"
    xmlns:tns="http://www.example.org/Product"
    elementFormDefault="qualified">
...
Run Code Online (Sandbox Code Playgroud)

Ian*_*rts 36

它允许您稍后在架构中引用命名空间.例如,如果声明了一个命名类型,然后又想声明该类型的元素

<complexType name="someType">
  <!-- ... -->
</complexType>

<element name="someElement" type="tns:someType" />
Run Code Online (Sandbox Code Playgroud)

简单地说type="someType"不起作用,因为那将指someType的是http://www.w3.org/2001/XMLSchema命名空间(xmlns="..."模式文件)中的(不存在的)而不是命名空间中的(不存在的)http://www.example.org/Product.

  • @MarcusJuniusBrutus 确实,您可以使用任何您喜欢的前缀。前缀“tns”在这种情况下很常见,作为“目标名称空间”的助记符,但您也可以使用“product”、“ns0”或其他任何名称。 (2认同)