xmllint:由于prettyprinter插入的空格,XML不会验证

时间:2013-11-16 12:22:51

标签: xml validation scala whitespace pretty-print

我创建了一个Scala应用程序,它使用scala.xml.PrettyPrinter从少数几个来源读取信息并将其作为XML文件输出。此文件必须向XML Schema确认,因为我还编写了一个R脚本,它将使用实现该架构的文件。

架构包含一些枚举,验证失败,消息如下:

xmllint --noout studies-clean.xml --schema ../litsuche-satisfaction.xsd 
studies-clean.xml:
9: element satisfactionCorrelation: Schemas validity error : 
Element '{http://rumtscho/dissertation/litusersat}satisfactionCorrelation': 
[facet 'enumeration'] The value '
        observed user reactions
      ' is not an element of the set {'satisfaction', 'usability', 
'product quality', 'task process quality', 'absence of negative reactions', 
'task result quality', 'expectation disconfirmation', 'preference for a version', 
'enjoyment', 'observed user reactions', 'technology acceptance', 'likelihood of 
referral', 'user state', 'attribute performance', 'user choice of action', 'time 
spent doing a task', 'user's impression of the system', 'impact of IS', 
'user characteristics', 'organisation context', 'task parameters', 'need fit', 
'cost', 'cognitive load'}.

如您所见,observed user reactions是我的枚举的成员,但是无法识别带有前导和尾随空格的相同字符串。这个空白由漂亮的打印机插入;值为usability的另一行打印在一行上,验证器不会在那里抱怨。

使用xmllint的--noblanks选项不会改变任何内容。

我不知道要改变什么,以便整个过程有效。我看到两种选择:

  1. 我可以停止使用漂亮的打印机,而是使用格式化程序,在将其写入文件之前删除节点中元素之间的所有空白区域。这应该验证,但如果我必须打开文件来手动检查事物,没有换行将是有问题的。
  2. 我可以尝试重写XML模式以接受枚举元素文本之前和之后的空格。
  3. 我可以尝试以某种方式让xmllint在验证时不注意空白问题。
  4. 选项2和3也要求我在加载时对任何文本进行R修剪,但这是一个单行更改。所以我非常喜欢使用其中之一。

    我的问题

    1. 选项3是否可行? xmllint在验证时是否有忽略空格的选项?如果是,它是如何打开的?如果不是,是一个可以使用shell命令快速验证我的文件的替代工具吗?
    2. 选项2是否可行? XML Schema是否允许混合空白facet和枚举facet? (可能是一个新问题,但这是我第一次写一个模式)
    3. 我是否忽略了选项2和/或3的一些缺点,这会使选项1成为更好的解决方案?
    4. 更新以响应评论这是漂亮的打印机输出。它在长值周围插入换行符,但不包括短值换行符。我认为这对于漂亮的打印机来说是正常的行为,但即使它不是,API也不包括阻止它插入这些中断的选项。

      <st:satisfactionCorrelations>
        <st:satisfactionCorrelation>
          observed user reactions
        </st:satisfactionCorrelation>
        <st:satisfactionCorrelation>usability</st:satisfactionCorrelation>
      </st:satisfactionCorrelations>
      

1 个答案:

答案 0 :(得分:0)

使用选项1并在需要查看文件时使用漂亮的打印过滤器。例如

xmllint --format foo.xml|less

xmllint --format foo.xml > foo-pretty-printed.xml