Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
规范XML:仅元素容器中的空白?_Xml_Xsd_Removing Whitespace_Xml Signature_Canonicalization - Fatal编程技术网

规范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(以及不匹配的签名);但这是一个明确

我有一个带有XSD模式的简单XML文件,其中一些元素只允许包含某些元素,例如。


以及XML代码:


2016-08-21
2016-10-21
如果在
间隔
标记内键入除空格或
天以外的任何内容
,它将(正确地)无法验证。现在,在python中使用
lxml
,我提取了这种XML的规范版本(C14N),发现保留了空格(这4个缩进空格)(如图所示)

然后我需要查看此文档,但我不明白为什么会有人在空白处签名。对我来说,这似乎是一个弱点:不同的缩进意味着不同的规范XML(以及不匹配的签名);但这是一个明确的例子,其中空白与表示的数据无关(更重要的是,模式不会针对任何有意义的内容进行验证)

  • 为什么空白是数字签名中涉及的XML规范表示的一部分?
  • 有没有办法在XSD中强制删除这些无用的空格?
我想得更具体一些。通过指定
collapse
验证时应删除空白;但是,
空白
似乎不能应用于
复杂类型
,我也找不到将其与
序列
相结合的方法

  • 我可以将
    空白
    方面应用于
    complexType
    (仅限元素)节点吗?
为什么空白是XML规范表示的一部分 参与数字签名

很难回答“为什么”的问题,即使你是发布规范的工作组的成员(我不是)。我不知道规范作者为什么会做出这样的决定,但我认为无论哪种方式,做出这样的决定都会给一些用户带来不便,而损害其他用户的利益

有没有办法在XSD中强制删除这些无用的文件 空白

在PSVI中,仅元素内容模型中元素之间的空白被认为是不重要的。如果要从物理上删除它,一种实用的方法是使用支持模式的XSLT或XQuery处理器复制经过验证的文档

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>


它有简单的内容,而不是只包含元素的内容。

感谢您抽出并添加这些详细信息!