示例#1
0
 public RelaxngGrammar InferSchema(XmlReader xmlReader,
                                   RelaxngGrammar grammar)
 {
     return(RngInference.Process(xmlReader, grammar,
                                 occurrence == InferenceOption.Relaxed,
                                 typeInference == InferenceOption.Relaxed));
 }
示例#2
0
 public void WriteGrammar(RelaxngGrammar g)
 {
     w.WriteLine("grammar {");
     WriteGrammarIncludeContents(g.Starts,
                                 g.Defines, g.Divs, g.Includes);
     w.WriteLine('}');
 }
示例#3
0
        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);
        }
示例#4
0
        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);
                }
            }
        }
示例#5
0
        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);
        }