如何将 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有效。
我想在 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>
但是当我尝试在 <
<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有效。