[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: RelaxNG question
Tim Bray wrote: > Dare Obasanjo wrote: > >> Anyway the point is that there are XML vocabularies that have this >> characteristic which unfortunately cannot be described by any of the >> popular XML schema languages. > > > I'm probably missing something, but it seems on the face of it that you > can disallow non-namespaced names in RelaxNG. > > namespace NoNS = "" > > HasNS = element * - ( NoNS:* ) > { > attribute * { text }*, > mixed { HasNS* } > } > > element package { mixed HasNS* } Not sure that'll work. I get a syntax error for the last line there, but the HasNS structure blows out to: <define name="HasNS"> <element> <anyName> <except> <nsName ns=""/> </except> </anyName> <zeroOrMore> <attribute> <anyName/> </attribute> </zeroOrMore> <mixed> <zeroOrMore> <ref name="HasNS"/> </zeroOrMore> </mixed> </element> </define> [sorry, I'm not great with the rnc] which allows children to be in the parent namespace against the fragments I'll playing with. I changed it to include the specd namespace <define name="HasNS"> <element> <anyName> <except> <nsName ns=""/> <nsName ns="http://www.example.com"/> </except> </anyName> <zeroOrMore> <attribute> <anyName/> </attribute> </zeroOrMore> <mixed> <zeroOrMore> <ref name="HasNS"/> </zeroOrMore> </mixed> </element> </define> and blew this out: namespace local = "" namespace ns1 = "http://www.example.com" HasNS = element * - (local:* | ns1:*) { attribute * { text }*, mixed { HasNS* } } which I think stops non-ns names (why I am doing this? ;) and the specified ns on the parent. Full structures with all the other attribute stuff attached. Bill de hÓra -- Technical Architect Propylon http://www.propylon.com <?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0" > <start> <ref name="anyWithNS"/> </start> <define name="anyWithNS"> <element name="grammar" ns="http://www.example.com"> <zeroOrMore> <attribute> <anyName> </anyName> </attribute> </zeroOrMore> <zeroOrMore> <choice> <text/> <ref name="inverseNS" /> </choice> </zeroOrMore> </element> </define> <define name="HasNS"> <element> <anyName > <except> <nsName ns=""/> <nsName ns="http://www.example.com"/> </except> </anyName > <zeroOrMore> <attribute> <anyName> <except> <nsName ns="" /> <nsName ns="http://www.example.com" /> </except> </anyName> </attribute> </zeroOrMore> <zeroOrMore> <choice> <text/> <ref name="HasNS" /> </choice> </zeroOrMore> </element> </define> </grammar> namespace local = "" default namespace ns1 = "http://www.example.com" start = anyWithNS anyWithNS = element grammar { attribute * { text }*, (text | inverseNS)* } HasNS = element * - (local:* | ns1:*) { attribute * - (local:* | ns1:*) { text }*, (text | HasNS)* }
|
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
|