0

我正在尝试验证应该包含一个文本节点的混合内容元素。例如,这应该验证:

<corner description="ff models, bc RC; high temperature,high vdd">
  <modelSection>fff_pre</modelSection>
  <var value="high">temperature</var>
  <var value="high">vdd</var>
  fff_pre_Thi_Vhi_Vhi
</corner>

但这不应该:

<corner description="ff models, bc RC; high temperature,high vdd">
  <modelSection>fff_pre</modelSection>
  <var value="high">temperature</var>
  <var value="high">vdd</var>
  <!-- no text, invalid! -->
</corner>

我试过了

corner = element corner {
  description,
  (
    modelSection
    & var+
    & xsd:string
  )
}

(其中description,modelSectionvar是先前定义的)但是在验证上面的第一个示例时 rnv 报告 fff_pre_Thi_Vhi_Vhi 的“文本不允许”错误。替换& text& xsd:string验证<corner>我不想要的 textless 。感觉这一定很简单,我忽略了一些东西......感谢您的任何建议。

4

2 回答 2

2

当我尝试jing使用您的架构运行时(在添加丢失的位并从 rnc 转换为 rng 之后),我收到此错误:

/tmp/t2/test.rng:4:28: error: interleave of "string" or "data" element

此错误对应于定义corner元素内容的 rng 部分。

这向我表明,您正在运行 smack dab 到Relax NG 规范第 7.2 节中指定的限制。在您的情况下,您正在尝试拥有一个元素,该元素将接受其他元素和data模式作为子元素。规范不允许。

如果您正在生成 XML,则可以通过生成如下结构来解决问题:

<corner description="ff models, bc RC; high temperature,high vdd">
  <modelSection>fff_pre</modelSection>
  <var value="high">temperature</var>
  <var value="high">vdd</var>
  <data>fff_pre_Thi_Vhi_Vhi</data>
</corner>

使用这样的 rnc:

corner = element corner {
  description,
  (
    modelSection
    & var+
    & data
  )
}

data = element data { xsd:string { minLength = "1" } }

我用作data元素的名称,但在最终解决方案中我想要比这更具体的东西。

于 2014-08-26T23:24:51.407 回答
0

使用xsd:string和设置最小长度为 1 怎么样?有关 RNG 中的答案,请参阅https://stackoverflow.com/a/21709260/1712389

于 2014-08-26T22:06:03.190 回答