我正在尝试验证应该只包含一个文本节点的混合内容元素。例如,这应验证:
<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
,modelSection
和var
)但在验证上面的第一个示例时,rnv报告了fff_pre_Thi_Vhi_Vhi的“文本不允许”错误。用& text
代替& xsd:string
验证无文字<corner>
,我不想要。这样的感觉必须简单,我忽视了一些事情......感谢您的任何建议。
答案 0 :(得分:2)
当我尝试使用您的架构运行jing
时(在添加缺失的位并从rnc转换为rng之后),我收到此错误:
/tmp/t2/test.rng:4:28: error: interleave of "string" or "data" element
此错误对应于定义corner
元素内容的rng部分。
这告诉我你正在运行轻松进入Relax NG规范的Section 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>
这样的人:
corner = element corner {
description,
(
modelSection
& var+
& data
)
}
data = element data { xsd:string { minLength = "1" } }
我使用data
作为元素的名称,但我希望在最终解决方案中有更具体的内容。
答案 1 :(得分:0)
如何使用xsd:string
并将最小长度设置为1?有关RNG的答案,请参阅https://stackoverflow.com/a/21709260/1712389。