public void Compile() { RelaxngGrammar g = null; if (this is RelaxngGrammar) { g = (RelaxngGrammar)this; } else { g = new RelaxngGrammar(); g.XmlResolver = this.Resolver; g.BaseUri = this.BaseUri; g.LineNumber = this.LineNumber; g.LinePosition = this.LinePosition; RelaxngStart st = new RelaxngStart(); st.BaseUri = this.BaseUri; st.LineNumber = this.LineNumber; st.LinePosition = this.LinePosition; st.Pattern = this; g.Starts.Add(st); g.Provider = provider; } startRelaxngPattern = g.Compile(null); this.IsCompiled = true; }
// Other than name class and pattern. private RelaxngStart ReadStart() { RelaxngStart s = new RelaxngStart(); FillLocation(s); expect("start"); if (MoveToFirstAttribute()) { do { if (NamespaceURI != String.Empty) { continue; } switch (LocalName) { case "datatypeLibrary": case "combine": break; default: throw new RelaxngException("Invalid attribute."); } } while (MoveToNextAttribute()); MoveToElement(); } if (MoveToAttribute("combine")) { s.Combine = Value.Trim(); if (s.Combine != "choice" && s.Combine != "interleave") { throw new RelaxngException("Invalid combine attribute: " + s.Combine); } } MoveToElement(); Read(); s.Pattern = ReadPattern(); expectEnd("start"); return(s); }
// Other than name class and pattern. private RelaxngStart ReadStart () { RelaxngStart s = new RelaxngStart (); FillLocation (s); expect ("start"); if (MoveToFirstAttribute ()) { do { if (NamespaceURI != String.Empty) continue; switch (LocalName) { case "datatypeLibrary": case "combine": break; default: throw new RelaxngException ("Invalid attribute."); } } while (MoveToNextAttribute ()); MoveToElement (); } if (MoveToAttribute ("combine")) { s.Combine = Value.Trim (); if (s.Combine != "choice" && s.Combine != "interleave") throw new RelaxngException ("Invalid combine attribute: " + s.Combine); } MoveToElement (); Read (); s.Pattern = ReadPattern (); expectEnd ("start"); return s; }
RelaxngGrammar DtdXsd2Rng (XmlSchema xsd, string ns) { g = new RelaxngGrammar (); g.DefaultNamespace = ns; RelaxngStart start = new RelaxngStart (); g.Starts.Add (start); RelaxngChoice choice = new RelaxngChoice (); start.Pattern = choice; // There are only elements. foreach (XmlSchemaElement el in xsd.Items) { RelaxngDefine def = DefineElement (el); g.Defines.Add (def); RelaxngRef dref = new RelaxngRef (); dref.Name = def.Name; choice.Patterns.Add (dref); } return g; }
public void Compile () { RelaxngGrammar g = null; if (this is RelaxngGrammar) g = (RelaxngGrammar) this; else { g = new RelaxngGrammar (); g.XmlResolver = this.Resolver; g.BaseUri = this.BaseUri; g.LineNumber = this.LineNumber; g.LinePosition = this.LinePosition; RelaxngStart st = new RelaxngStart (); st.BaseUri = this.BaseUri; st.LineNumber = this.LineNumber; st.LinePosition = this.LinePosition; st.Pattern = this; g.Starts.Add (st); g.Provider = provider; } startRelaxngPattern = g.Compile (null); this.IsCompiled = true; }
private void Run () { // move to top-level element source.MoveToContent (); int depth = source.Depth; if (source.NodeType != XmlNodeType.Element) throw new ArgumentException ("Argument XmlReader content is expected to be an element."); QName qname = new QName (source.LocalName, source.NamespaceURI); RelaxngDefine el = GetGlobalElement (qname); if (el == null) { el = CreateGlobalElement (qname); InferElement (el, true); } else InferElement (el, false); RelaxngStart start = new RelaxngStart (); start.Combine = "choice"; RelaxngRef topRef = new RelaxngRef (); topRef.Name = el.Name; start.Pattern = topRef; grammar.Starts.Add (start); }
// Note that it might not be used directly when a grammar // contains more than one "start" (compact syntax does not // support "combine" attribute). public void WriteStart (RelaxngStart start) { w.Write ("start"); if (start.Combine == null) w.Write (" = "); else w.Write (start.Combine.Trim () == "interleave" ? " &= " : " |= "); start.Pattern.WriteRnc (this); w.WriteLine (); }