Requiring an attribute be defined if and only if a child element is not present for an element in a DTD
Consider the following definition from a DTD:
<!ELEMENT application (calculator)?&开发者_如何学JAVAgt;
<!ATTLIST application
uri CDATA #REQUIRED
>
My problem is that I want the uri
attribute to be defined if and only if there is not a calculator
element.
Is there a way to require this?
@Alejandro is right. That's not possible with a DTD nor is it possible with XML Schema. You can do this using a co-occurrence constraint with a RelaxNG schema or you could use Schematron in conjunction with any of those schema languages.
I've resolved issues like this before by using embedded schematron rules with schemas (good discussion of this with XSD on XFront and with RelaxNG on XML.com). I've recently been doing something similar in pure RelaxNG but then you have a schema that can only be expressed in that one form.
精彩评论