xml - 根据比 http://www.w3.org/2001/XMLSchema 更严格的另一个 XML 模式验证 XML 模式
问题描述
我正在尝试针对另一个 XML 模式(称为“schema_of_schema”)验证 XML 模式(称为“模式”)。“模式”符合http://www.w3.org/2001/XMLSchema但有进一步的限制。
背景:“模式”作为代码生成器的输入,但代码生成器并不了解http://www.w3.org/2001/XMLSchema的所有可能性,而是仅了解“模式”的非常有限的结构. 因此,我想确保“模式”在将其输入生成器之前符合这种限制性结构。
例子:
schema_for_schema.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="xs:schema">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:element" use="required" fixed="data">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:complexType">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:sequence">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:element" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="xs:complexType">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="xs:attribute">
<xs:complexType>
<xs:attribute name="name" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="xmlns:xs" use="required" fixed="http://www.w3.org/2001/XMLSchema"/>
</xs:complexType>
</xs:element>
</xs:schema>
一个可能的“模式”(应该针对 schema_for_schema.xsd 进行验证):schema_a.xsd
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="a">
<xs:complexType>
<xs:attribute name="value"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
另一个可能的“模式”(也应该针对 schema_for_schema.xsd 进行验证):schema_b.xsd(注意与 schema_a.xsd 的区别:data/a 与 data/b)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="b">
<xs:complexType>
<xs:attribute name="value"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
针对 schema_a.xsd 进行验证的 XML 文件:data_a.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<a value="1"/>
</data>
以及一个针对 schema_b.xsd 进行验证的 XML 文件:data_b.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<b value="2"/>
</data>
XML 文件 data_a.xml/data_b.xml 针对 schema_a.xsd/schema_b.xsd 正确验证。但是,当我尝试针对 schema_for_schema.xsd(使用 xmllint)验证 schema_a.xsd/schema_b.xsd 时,出现以下错误:
attribute 'name': 'xs:schema' is not a valid value of the atomic type 'xs:NCName'
如何处理“模式”元素名称中的冒号?
解决方案
推荐阅读
- azure - Filebeat - 不存在这样的输入类型:'azure-eventhub'
- android-ndk - Android NDK clang 未定义对“memcpy”的引用,版本“GLIBC_2.2.5”
- android - 是否可以在 Windows 上从 AAR 执行代码?
- r - 为什么`renv`符号链接到旧的软件包版本?
- python - 由于某种原因,WTForm validate() 或 validate_on_submit() 始终为 False。(可能重复)
- javascript - 通过图层可排序选项 JQUERY UI 在“画布”中排序图像
- mongodb - 如何将两个数组转换为mongoDB中的一个对象,其中第一个数组具有多个相同的值
- python - Multiprocessing Pool fork启动方法和每个进程中大型全局变量(dataframe,geodataframe)的深拷贝
- c++ - 初始化多级指针指向指针并发生编译错误
- reactjs - 禁止您无权访问此资源。使用 apache2 在 digitalocean 上部署时