XSD和元素存在要求,或其他选项

时间:2011-03-04 19:23:39

标签: xsd xml-validation

在XSD级别,我可以根据文档中另一个元素的存在来定义元素需求吗?

例如,我想要在<firstname />元素也存在时提供元素<id />,否则名字是可选的。

如果无法在XSD级别强制执行此操作,那么我是否应该将这两个元素设置为可选,并通过不同级别的检查强制执行该要求?

欢迎选项。

2 个答案:

答案 0 :(得分:1)

这不能在XSD级别强制执行。

使两个元素都可选并在应用程序架构中的不同级别强制执行需求听起来对我来说是个不错的选择。

答案 1 :(得分:1)

以下是在DTD中完成此操作的示例。 (注意:使用oXygen XML Editor(使用Xerces)验证测试实例。)

DTD(test.dtd)

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT user ((firstname?|(firstname,id)),lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT id (#PCDATA)>

以下是一些示例XML实例(有效和无效):

<强>有效

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
  <firstname/>
  <id/>
  <lastname/>
</user>

<强>无效

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
  <id/>
  <lastname/>
</user>

<强>有效

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
  <firstname/>
  <lastname/>
</user>