xml - 导入另一个命名空间并使用其类型声明的 XSD 问题
问题描述
我已经习惯了 XML 模式,并尝试将另一个模式导入我自己的模式。
初始架构文件test.xsd
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="test"
xmlns="test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" >
<xs:complexType name="Test">
<xs:all>
<xs:element name="test-import" minOccurs="0" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:schema>
导入架构test2.xsd
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="test2"
xmlns="test2"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:test="test"
elementFormDefault="qualified" >
<xs:import namespace="test" schemaLocation="./test.xsd" />
<xs:element name="project">
<xs:complexType>
<xs:sequence>
<xs:element name="test" type="test:Test" />
<xs:element name="test2" type="Model" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Model">
<xs:all>
<xs:element name="model-test" minOccurs="0" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:schema>
最后是导入命名空间的 test.xml 文件test.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<file xmlns="test2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="./test2.xsd">
<test>
<test-import>Text</test-import>
</test>
<test2>
<model-test>Text</model-test>
</test2>
</file>
最后,标签 test2 可以正常工作,但<test-import>Text</test-import>
我会收到错误消息:
- test-import
One of the following is expected:
- test-import
Error indicated by:
{test}
with code:xml(cvc-complex-type.2.4.a)```
解决方案
太多的问题要列出来,但您可以在下面找到所有已纠正的错误,以便您的 XML 能够成功地针对您的 XSD 进行验证。
也可以看看
- xmlns、xmlns:xsi、xsi:schemaLocation 和 targetNamespace?
- 如何使用 schemaLocation 或 noNamespaceSchemaLocation 将 XML 链接到 XSD?
- 为什么 XML 命名空间是 HTTP 地址?
已纠正所有错误的文件集
测试.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://example.com/test2"
xmlns:test="https://example.com/test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://example.com/test2 test2.xsd">
<test>
<test:test-import>Text</test:test-import>
</test>
<test2>
<model-test>Text</model-test>
</test2>
</project>
test2.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="https://example.com/test2"
xmlns="https://example.com/test2"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:test="https://example.com/test"
elementFormDefault="qualified" >
<xs:import namespace="https://example.com/test" schemaLocation="test.xsd" />
<xs:element name="project">
<xs:complexType>
<xs:sequence>
<xs:element name="test" type="test:Test" />
<xs:element name="test2" type="Model" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Model">
<xs:all>
<xs:element name="model-test" minOccurs="0" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:schema>
测试.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="https://example.com/test"
xmlns="https://example.com/test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" >
<xs:complexType name="Test">
<xs:all>
<xs:element name="test-import" minOccurs="0" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:schema>
推荐阅读
- php - 在 Laravel 关系对象上将字符串转换为整数
- windows - 如何使用新的 HLK 测试签署微型筛选器驱动程序
- python - 使用 Python Selenium 进行公司搜索
- python - Python:FileNotFoundError,来自 glob 输出,文件的完整路径是正确的
- python - 在唯一值上合并数据框
- python - 如何根据其他 2 列中的数据条件为列中的数据生成折线图
- ruby - Ruby:我有一个散列,其中键 = str.split(//) 和值 = 这些字符的索引。如果存在超过 1 个字符,我如何将多个索引添加到值
- swift - 如何在 Swift 中检查字符串是否包含字符串数组中的子字符串?
- groovy - ModelMapper 2.4.4 和 Groovy 3.0 兼容性问题
- javascript - 防止 SweetAlert2 提示关闭