Exemple #1
0
        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;
        }
Exemple #2
0
        // 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);
        }
Exemple #3
0
		// 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;
		}
Exemple #4
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;
		}
Exemple #5
0
		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);
		}
Exemple #7
0
		// 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 ();
		}