Re: Can XML Schemas do this?
From: "Brian Burridge" <maillist@b...> > I have an xml document, where we want elements to be able to appear in > any order. Some are required, others aren't. And in many cases if you > have tag A then you don't need tag B, and vice versa. > > Problem is, I need to use the ALL tag and have choices and groups within > it, but you can't. If you have choices and groups, then how can you need the ALL tag? If you really need the strong constraints, you may have to just make an enormous content model. Cheers Rick Jelliffe? P.S. If you want to do this kind of thing using Schematron (or some mix of XML Schemas and Schematron) you can use the following idioms <rule context="myElement"> <assert test="count(x) + count(y) + count(z) = count(*)"> myElement can only contain the elements x,y,z <!-- n.b. in any order--> </assert> <assert test="x"> myElement must contain at least one x <!-- n.b. anywhere --> </assert> <assert test="count(y)=1"> myElement must contain a single y <!-- n.b. anywhere --> </assert> <assert test="count(z) = count(z[previous-sibling::y])"> a z element can only follow a y </assert> </rule> Grammars allow exquisite modelling of sequence, at the cost that they generally are weak when sequence is only occasionally important in a content model. XPath-based constraint languages (such as Schematron) are strong for that, but are weaker (or, at least, more verbose) when elements re-appear in content models with different requirements. However, complex content models are usually either a sign of a missing element, or that there is some simple constraint required that cannot be well expressed by a regular expression. In the latter case, it is better engineering to express the constraint more directly, using explicit rules rather than simulate them using a grammar.
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format