Subject: RE: About XML to multiple language/multiple outputs From: "Frank A. Christoph" <christo@xxxxxxxxxxxxxxxxxx> Date: Fri, 27 Aug 1999 11:09:27 +0900 |
> > > > > > > One can, perhaps, define both query and element rules on terms of an > > > abstract query rule, not present in the language specification. > > > > > Actually, I believe (without having worked out all the details, of > > course), that the existing query rule would be sufficient for this. > > We know, for sure, that any other type of rule can be rewritten as a > > query rule because the query rule allows node selection via an > > arbitrary SDQL expression. The only potential problem is enforcing > > the specificity rules that DSSSL requires. > > I believe this can be done with the priority expression part of the > > query rule by calculating a priority for each rule (thus, the basic > > query rule itself would be translated into our "baseline" query rule, > > so that we can alter the priority expression result). For instance, > > we would automatically just add a large constant on to the result of a > > query rule's priority expression, and we would calculate the priority > > of an element rule based on the specificity of its gi or qualified-gi > > argument. ... > > I think a proper way to transform all rules into query rules > without risking overflows would need a slight extension of > the priority expression: Allow it to be a pair (or even list) > of numbers, sort them lexicographically. Maybe that > is the `abstract query rule' Avi was thinking of. This looks way too specific. It will end up making the language more esoteric, not less. Who would ever have a practical use for it? Here is a different idea. It has to do with what I consider another deficiency in the standard. Suppose that nl is an element node with GI B and we evaluate the fragment (with-mode X (with-mode Y (process-node-list nl)) in the scope of the following declarations: (element B (literal "initial")) (mode X (element B (literal "X"))) (mode Y (element C (literal "Y"))) You might expect it to be formatted as "X", but the result will be "initial", because modes don't nest: if there is no match in the current mode, the engine falls back to the initial mode, instead of the dynamic parent. I find this pretty odd behavior, and it makes me want to avoid modes, period. So suppose instead that we stipulate that modes nest dynamically. Then we define a primitive mode for each kind of construction rule, and rewrite a rule so it belongs to that mode. For example: (element s body) ==> (mode %element (query (node-list-filter (lambda (nl) (string=? (gi nl) s) (all-elements)) body)))) (query e body) ==> (mode %query (query e body)) (root body) ==> (query (document-root) (with-mode %default (with-mode %element (with-mode %id (with-mode %query body)))) However, this requires that mode declarations can also be nested syntactically. If the user writes: (mode X (element s body)) the translation is (mode X (mode %element (query ... body))) What this should mean is that the rule only matches when the current mode is X, and one of X's ancestor modes is %element (which is always true). In general, any definitions inside the ellipsis in (mode A (mode B ...)) would match only if both modes are active, and B is an ancestor of A. There is obviously a similarity to qualified GIs in an element rule, but it doesn't make sense for my translation to insist that B be a parent mode of A here. (Maybe someone sees how to fix that?) --FC DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: About XML to multiple language/, Brandon Ibach | Thread | Re: About XML to multiple language/, Adam Di Carlo |
Misattributions, Frank A. Christoph | Date | RTF output in MS Office 2000, Jakub Nosek |
Month |