Re: prep.xsl
James Clark <[email protected]>
| Newsgroups | gmane.text.xml.relaxng.general |
|---|---|
| Message-ID | <[email protected]> |
Cheng-Chang Wu wrote: > My program can still not handle all of the relaxng > constructs, but it can already read the relaxng file I > am using in my project. > > I've had problems to determine the nullability of ref > element. In section 4.19 of the specification it says > one can replace the expandable ref element with its > definition. THIS MUST NOT RESULT IN A LOOP. I can't > grasp this well. Typically, an implementation represents each type of pattern by an object. The schema is thus initially a tree of objects. At a convenient point, the implementation typically resolves references: it checks that there's a define for each ref and makes each ref pattern point directly to that define, and each grammar becomes just a reference to its start pattern. At this stage, you have a directed graph of objects. This graph may have cycles (where every cycle passes through a ref pattern). What your implementation has to do is check that every cycle passes through an element pattern. You can do this by having a recursive function with a single depth parameter that walks the graph, recording at each ref node the depth at which it last visited the node, and incrementing the depth when it passes through an element node. See com.thaiopensource.relaxng.impl.RefPattern.checkRecursion() in Jing. James