public RelaxngGrammar InferSchema(XmlReader xmlReader, RelaxngGrammar grammar) { return(RngInference.Process(xmlReader, grammar, occurrence == InferenceOption.Relaxed, typeInference == InferenceOption.Relaxed)); }
public void WriteGrammar(RelaxngGrammar g) { w.WriteLine("grammar {"); WriteGrammarIncludeContents(g.Starts, g.Defines, g.Divs, g.Includes); w.WriteLine('}'); }
public static RelaxngGrammar Process(XmlReader xmlReader, RelaxngGrammar grammar, bool laxOccurence, bool laxTypeInference) { RngInference impl = new RngInference(xmlReader, grammar, laxOccurence, laxTypeInference); impl.Run(); return(impl.grammar); }
private RngInference(XmlReader xmlReader, RelaxngGrammar grammar, bool laxOccurence, bool laxTypeInference) { this.source = xmlReader; this.grammar = grammar; this.laxOccurence = laxOccurence; this.laxTypeInference = laxTypeInference; nsmgr = new XmlNamespaceManager(source.NameTable); foreach (RelaxngDefine def in grammar.Defines) { if (def.Patterns.Count != 1) { continue; } RelaxngElement e = def.Patterns [0] as RelaxngElement; RelaxngAttribute a = def.Patterns [0] as RelaxngAttribute; if (e == null && a == null) { continue; } RelaxngName rn = e != null ? e.NameClass as RelaxngName : a.NameClass as RelaxngName; if (rn == null) { continue; } QName qname = new QName(rn.LocalName, rn.Namespace); if (e != null) { elements.Add(qname, def); } else { attributes.Add(qname, def); } } }
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); }