XSD - 如何强制精确收集属性值

时间:2015-07-10 08:30:24

标签: xml xsd

我有一个无法更改的已定义XML结构。语义定义和值的真实内容包含在同一XML元素中,但具有属性:

    <FIELD Name="ID" value="non-empty">

    </FIELD>

    <FIELD Name="DATE" value "">

    </FIELD>

我希望能够在XSD中描述这些属性“ID”和“DATE”在我的XML中。

有可能吗?

1 个答案:

答案 0 :(得分:2)

你的意思是,你想要将第一个FIELD限制为Name =&#34; ID&#34;,第二个要限制Name =&#34; DATE&#34;,依此类推?

你不能直接用XSD 1.0做到这一点(如果两个同名的元素都是兄弟姐妹,它们必须具有相同的类型,这意味着你不能应用不同的规则对他们的限制)。

两种可能的解决方案是(a)使用不同的验证技术,例如带有断言或Schematron的XSD 1.1,或(b)创建验证管道,其中步骤1将结构转换为类似

的结构
<ID>non-empty</ID>
<DATE/>

和步骤2根据模式验证此转换后的结构。

第二种方法的另一个好处是,转换后的XML比原始XML更容易使用。