Requiring an attribute be defined if and only if a

2019-09-06 08:53发布

问题:

Consider the following definition from a DTD:

<!ELEMENT application (calculator)?>
<!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?

回答1:

@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.



标签: xml dtd