【问题标题】:Parsing vs Validation in Message BrokerMessage Broker 中的解析与验证
【发布时间】:2015-04-29 15:46:17
【问题描述】:

解析和验证之间的实际区别是什么? 解析本身可以识别消息结构,为什么要进行验证呢?

如果消息不符合为 MRM 解析器定义的结构,解析本身会引发错误,那么为什么验证属性必须设置为“内容和值”?

【问题讨论】:

    标签: messagebroker


    【解决方案1】:

    首先只有带有消息模型的解析器才能验证,即 XMLNSC/SOAP(带有模式)、MRM、DFDL 和 DataObject。

    对于未经验证的基于 XMLNSC 的解析器,消息将被视为自定义,仅当消息格式不正确时才会引发异常。

    启用验证后,基于 XMLNSC 的解析器将验证消息是否符合消息模型,并将检查架构中定义的所有限制/架构方面的有效性。

    DFDL 和 MRM 是基于模型的解析器,没有消息模型就无法使用这些解析器,因此它们总是根据模型检查消息内容。使用这些解析器的非验证解析比基于 XMLNSC 的解析器具有更强的约束。禁用验证后,这些解析器会检查数据是否可以解释为模型的实例。

    在验证 MRM 和 DFDL 解析器时,将额外检查值约束、正确数据的类型是否正确并检查排序约束。

    【讨论】:

    • 正如您所解释的,如果数据在仅仅解析自身时被解释为模型的实例,看起来,它仍然会验证内容、值和顺序。否则,实例将失败模态,那为什么还需要“内容和价值”验证?
    • 对于 MRM 和 DFDL 解析确实会针对模型进行验证,但只有在启用验证时才会检查限制。因此,例如,对于模型的非验证解析,它只会检查某个字段是否可以解释为 in,使用 Content 和 Value 它可能会检查 int 是否在 10 到 15 之间。
    猜你喜欢
    • 2012-06-14
    • 2016-09-23
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多