如何将 targetNamespace 添加到 XSD?

How to add targetNamespace to XSD?

我想在 XML 文件中使用命名空间。当前代码在没有使用 xsi:noNamespaceSchemaLocation.

的命名空间的情况下工作正常

(工作代码) 测试-document.xml:

<?xml version="1.1" encoding="UTF-8"?>
<root-element
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="./test-schema.xsd">
    <sizeElement>T1 T2 T1</sizeElement>
</root-element>

测试-schema.xml:

<?xml version="1.1" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root-element">
        <xs:complexType>
            <xs:all>
                <xs:element name="sizeElement" type="sizeList"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="size">
        <xs:restriction base="xs:token">
            <xs:enumeration value="T1"/>
            <xs:enumeration value="T2"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="sizeList">
        <xs:list itemType="size" />
    </xs:simpleType>
</xs:schema>

但是当我尝试在 <> 标签中添加 targettargetNamespace="ns" 作为属性时 它显示错误在:

<xs:list itemType="size" />

错误:

src-resolve: Cannot resolve the name 'size' to a(n) 'type definition' component.xsd(src-resolve)

我正在使用 vs-code。

在命名空间中验证 XML 涉及多个概念:

  • How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
  • What does elementFormDefault do in XSD?

以下是适用于您的 XML 和 XSD 的上述概念:

XML

<?xml version="1.0" encoding="UTF-8"?>
<root-element
    xmlns="http://example.com/ns"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://example.com/ns test-schema.xsd">
    <sizeElement>T1 T2 T1</sizeElement>
</root-element>

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           xmlns="http://example.com/ns"
           targetNamespace="http://example.com/ns">
  <xs:element name="root-element">
    <xs:complexType>
      <xs:all>
        <xs:element name="sizeElement" type="sizeList"/>
      </xs:all>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="size">
    <xs:restriction base="xs:token">
      <xs:enumeration value="T1"/>
      <xs:enumeration value="T2"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="sizeList">
    <xs:list itemType="size" />
  </xs:simpleType>
</xs:schema>

上面的XML对上面的XSD有效。