在 XSD 级别,我可以根据文档中另一个元素的存在来定义元素要求吗?
例如,我想<firstname />
在元素也存在时要求提供该<id />
元素,否则名字是可选的。
如果这不能在 XSD 级别强制执行,那么我是否应该将这两个元素都设为可选并通过不同级别的检查来强制执行要求?
欢迎选择。
在 XSD 级别,我可以根据文档中另一个元素的存在来定义元素要求吗?
例如,我想<firstname />
在元素也存在时要求提供该<id />
元素,否则名字是可选的。
如果这不能在 XSD 级别强制执行,那么我是否应该将这两个元素都设为可选并通过不同级别的检查来强制执行要求?
欢迎选择。
这不能在 XSD 级别强制执行。
使这两个元素成为可选元素并在应用程序架构中的不同级别强制执行对我来说是一个不错的选择。
这是在 DTD 中完成的示例。(注意:测试实例使用 oXygen XML 编辑器(使用 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>