我正在尝试为以下XML构建XSD,并且我正在使用JAXB通过验证解组到Java Object。
验证规则是<JobParam>
中type = jobType
和type = customer
中的前2个元素是必需的。 JobParam
中的所有其他人都是可选的。
如何为此创建XSD?
<job>
<jobName>core</jobName>
<jobParams>
<jobParam type="jobType">Scheduler</jobParam>
<jobParam type="customer">Alphabet</jobParam>
<jobParam type="mode">music</jobParam>
</jobParams>
</job>
答案 0 :(得分:1)
您无法在XSD 1.0中表达验证规则。您必须使用Java对照JAXB创建的对象,或者转到XSD 1.1,您可以使用断言或条件类型赋值。
但是,最好的解决方案是修复XML设计:
以上是对您的XML进行的上述改进:
<job>
<name>core</name>
<params>
<type>Scheduler</type>
<customer>Alphabet</customer>
<mode>music</mode>
</params>
</job>
您可能会考虑的其他两项改进:
params
包装器,将其子级提升为job
的子级。customParams
包装。例如:
<job>
<name>core</name>
<type>Scheduler</type>
<customer>Alphabet</customer>
<customParams>
<customParam type="mode">music</customParam>
</customParams>
</job>
通过XSD 1.0中的基本出现限制,可以简单地将此问题与关于customer
和mode
的验证规则一起表示。