>我有一个XML文件,看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<POSLog xmlns="http://www.nrf-arts.org/IXRetail/namespace/" xmlns:FB="http://blabla.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Transaction>
<RetailTransaction>
...
<FB:Foobar>Allowed here</FB:Foobar>
...
</RetailTransaction>
<FB:Foobar>Not allowed here</FB:Foobar>
...
</Transaction>
</POSLog>
POSLog/IXRetail 是一个行业标准,我没有(合理的(方法来更改我收到的 XSD 或 XML。 供应商提供具有自定义附加命名空间的 XML 文件(示例中FB
(。 它们还提供了一个XSD文件,该文件定义了一大堆元素,如下所示:
<xs:element name="Foobar" type="xs:string"/>
不幸的是,两个命名空间之间没有连接,但实际上,这些附加元素只有某些可以在 POSLog 中使用的地方(请参阅示例(。
有没有办法为"FB"元素创建一个 XSD,以限制它们可以在 IXRetail 命名空间中使用的位置。
总结一下:
我有
- 上面的 XML 文件
- POSLog XSD
- 供应商 XSD (
FB
(
我唯一可能影响的是3。
3中定义的元素旨在扩展(即为(2中的某些元素提供附加信息。 不幸的是,目前的方式是3中的元素可以在2中使用的地方,无法使用 XSD 强制执行/验证。
我正在寻找一种基本上扩展2( 的方法(。
您正在验证的结构是PosLog/IXRetail"事务"。
这些附加元素仅在 POSLog 中使用它们的某些位置
POSLog XSD 是否允许这些额外的元素出现在这些特定位置?如果是这样,那么答案取决于该扩展机制的确切含义。如果不是,则 XML 与 POSLog 架构不匹配,并且无效。
有没有办法为"FB"元素创建一个 XSD,以限制它们可以在 IXRetail 命名空间中使用的位置。
不。FB 元素的架构将描述 FB 元素允许的名称和内容。但它永远无法指定它们可以在完全不同的架构中使用的位置。因此,需要在 POSLog xsd 中指定"在 IXRetail 中的位置"部分。