gpt4 book ai didi

xml - 如何将 XML 架构导入 "no namespace"

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

我这里有一个模式,我试图在其中包含/导入另一个没有命名空间的模式(这无法更改,因为它来自另一个供应商,并且不再验证他们的 XML)。这是第一个架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:samp="http://sample/namespace"
targetNamespace="http://sample/namespace"
elementFormDefault="unqualified" attributeFormDefault="unqualified"
xmlns:otr1="http://sample/import/namespace1"
xmlns:otr2="http://sample/import/namespace2">

<xs:import namespace="http://sample/import/namespace1" schemaLocation="other1.xsd" />
<xs:import namespace="http://sample/import/namespace2" schemaLocation="other2.xsd" />
<!-- This one below is having problems, it is valid XML, and I am able to use it
but I am not meeting the actual requirments I have (explained later) -->
<xs:include schemaLocation=="NO_NAME_SPACE_PROBLEM.xsd"/>

...
<xs:element ref="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"/>
...


</xs:schema>

还有“NO_NAME_SPACE_SHEMA_PROBLEM.xsd”可以在一定程度上改变,但不能有命名空间。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified" attributeFormDefault="unqualified">

<xsd:element name="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"
type="xsd:string" nillable="true"/>

</xs:schema>

问题是 some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA正在放入 samp命名空间。因此,当我尝试将其编码为 XML 时,它会打印出 <samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA><child-elem/></samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA>这是一个大问题,因为该 XML 不会验证,因为它不应该有。所以我的目标是简单地将元素导入到无命名空间的命名空间中。

更新 1:对于造成的混淆,我深表歉意,我过去和现在都在使用 xs:include,而不是 xs:import 用于无命名空间架构。问题语法已更新。我还使用 JiBX codegen 生成域对象和 JiBX 绑定(bind)以进行编码。所以它也必须与 JiBX 兼容。

更新 2:根据 skaffman 的回答,我现在将使用 xs:import。我想我会把它分成一个新问题。

最佳答案

你试过吗

<xs:import namespace="" schemaLocation="NO_NAME_SPACE_PROBLEM.xsd"/>

有趣的是,XML 模式规范 strongly suggests那个

<xs:import schemaLocation="NO_NAME_SPACE_PROBLEM.xsd"/>

应该导入 NO_NAME_SPACE_PROBLEM.xsd进入“无命名空间”。如果您的环境改为将其导入到封闭架构文档的命名空间中,那么我很确定这是您平台中的错误。


更新:好的,您的更新表明您正在尝试使用 <xs:include>引用不同命名空间中的类型。你不能这样做 - <xs:include> 总是 将包含的项放入与父架构文档相同的 namespace 中。如果它们用于不同的命名空间,则必须使用 <xs:import> .

如果要引用导入的无命名空间模式中的元素定义之一,则需要找到一种为“无命名空间”命名空间分配前缀的方法。如果它有前缀,您可以这样引用它们:

<xs:element ref="nn:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"/>

尝试添加属性 xmlns:nn=""到父架构文档,看看是否可行。

关于xml - 如何将 XML 架构导入 "no namespace",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3550459/

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