gpt4 book ai didi

xml - XInclude 架构/命名空间验证?

转载 作者:数据小太阳 更新时间:2023-10-29 02:16:59 25 4
gpt4 key购买 nike

我正在尝试使用 XML Includes 来帮助管理需要供人和机器使用的大型 XML 结构。

但是在尝试构建可针对现有模式进行验证的 XML 文件时,我遇到了无数问题。这是我正在尝试做的事情的简化示例。

我的“main.xml”文件未通过验证。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Main.xml - This fails to validate. -->
<ns1:main xsi:schemaLocation="http://www.example.com/main main.xsd"
xmlns:ns1="http://www.example.com/main"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude">

<name>String</name>
<xi:include href="child.xml"/> <!-- What I'm trying to do. -->

</ns1:main>

“child.xml”文件可以作为独立文件进行验证。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Child.xml - This validates fine, as a standalone file. -->
<ns1:child xsi:schemaLocation="http://www.example.com/main main.xsd"
xmlns:ns1="http://www.example.com/main"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<name>String</name>
<age>String</age>

</ns1:child>

这是我的架构:

 <?xml version="1.0" encoding="UTF-8"?>
<!-- Main.xsd - My Simplified Schema -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="http://www.example.com/main"
targetNamespace="http://www.example.com/main">

<!-- Main Element (References Child) -->
<xs:element name="main">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element ref="ns1:child"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<!-- Child Element -->
<xs:element name="child">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

我的问题几乎显然与 namespace 有关,但我不知道如何解决我的问题。

最佳答案

正如 skaffman 已经指出的,XML Schema 和 XInclude 不兼容。

来自 xmllint 的验证错误消息明确指出:

main.xml:9: element include: Schemas validity error : Element  '{http://www.w3.org/2001/XInclude}include': This element is not expected. Expected is ( {http://www.example.com/main}child ).
main.xml fails to validate

引用W3C Recommendation :“XInclude 定义与通过应用 XML 模式生成的扩充信息集没有任何关系。这样一个扩充信息集可以作为输入信息集提供,或者这样的扩充可以应用于由包含产生的信息集。”

因此,您应该首先通过应用 XIncludes 构建整个 XML 文件,然后再验证此文件。

编辑:您可以使用 xmllint 和 --xinclude 来验证 main.xml。

关于xml - XInclude 架构/命名空间验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1098116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com