规范XML:仅元素容器中的空白?
我有一个带有XSD模式的简单XML文件,其中一些元素只允许包含某些元素,例如。规范XML:仅元素容器中的空白?,xml,xsd,removing-whitespace,xml-signature,canonicalization,Xml,Xsd,Removing Whitespace,Xml Signature,Canonicalization,我有一个带有XSD模式的简单XML文件,其中一些元素只允许包含某些元素,例如。 以及XML代码: 2016-08-21 2016-10-21 如果在间隔标记内键入除空格或天以外的任何内容,它将(正确地)无法验证。现在,在python中使用lxml,我提取了这种XML的规范版本(C14N),发现保留了空格(这4个缩进空格)(如图所示) 然后我需要查看此文档,但我不明白为什么会有人在空白处签名。对我来说,这似乎是一个弱点:不同的缩进意味着不同的规范XML(以及不匹配的签名);但这是一个明确
以及XML代码:
2016-08-21
2016-10-21
如果在间隔
标记内键入除空格或天以外的任何内容
,它将(正确地)无法验证。现在,在python中使用lxml
,我提取了这种XML的规范版本(C14N),发现保留了空格(这4个缩进空格)(如图所示)
然后我需要查看此文档,但我不明白为什么会有人在空白处签名。对我来说,这似乎是一个弱点:不同的缩进意味着不同的规范XML(以及不匹配的签名);但这是一个明确的例子,其中空白与表示的数据无关(更重要的是,模式不会针对任何有意义的内容进行验证)
- 为什么空白是数字签名中涉及的XML规范表示的一部分?
- 有没有办法在XSD中强制删除这些无用的空格?
collapse
验证时应删除空白;但是,空白
似乎不能应用于复杂类型
,我也找不到将其与序列
相结合的方法
- 我可以将
方面应用于空白
(仅限元素)节点吗?complexType
java net.sf.saxon.Query -s:input.xml -xsd:input.xsd -val:strict -qs:.
(此处的查询“.”在验证后返回输入文档)
我可以将空白方面应用于complexType(仅元素)节点吗
不,您也不需要。以下信息是由Pietro Saccardi在对我的答案进行编辑时提供的,我已将其分开,以便我看起来不是作者 在使用lxml的python中,有一个remove_blank_text选项,在解析时会将其删除:
parser = etree.XMLParser(remove_blank_text=True)
xml = etree.parse('file.xml', parser=parser)
MHK观察(来自文件):
请注意,如果remove_blank_text选项对文档的可忽略空白没有明确的了解,那么它也会使用启发式。它将使出现在非空白文本节点之后的空白文本节点保持在同一级别。这是为了防止文档样式XML丢失内容
这意味着remove_blank_text不是查看模式或DTD来识别仅元素的内容,而是从实例数据中猜测。这意味着它可能会从元素中删除空格,如
<padding> </padding>
它有简单的内容,而不是只包含元素的内容。感谢您抽出并添加这些详细信息!