Example #1
0
        private RelaxngName ReadNameClassName()
        {
            string      name  = ReadString().Trim();
            RelaxngName rName = resolvedName(name);

            expectEnd("name");
            return(rName);
        }
Example #2
0
        private RelaxngName resolvedName(string nameSpec)
        {
            int    colonAt = nameSpec.IndexOf(':');
            string prefix  = (colonAt < 0) ? "" : nameSpec.Substring(0, colonAt);
            string local   = (colonAt < 0) ? nameSpec : nameSpec.Substring(colonAt + 1, nameSpec.Length - colonAt - 1);
            string uri     = ContextNamespace;

            if (prefix != "")
            {
                uri = LookupNamespace(prefix);
                if (uri == null)
                {
                    throw new RelaxngException("Undeclared prefix in name component: " + nameSpec);
                }
            }
            RelaxngName n = new RelaxngName(local, uri);

            FillLocation(n);
            return(n);
        }
Example #3
0
		private RelaxngAttribute ReadAttributePattern ()
		{
			RelaxngAttribute attr = new RelaxngAttribute ();
			FillLocation (attr);

			if (MoveToFirstAttribute ()) {
				do {
					if (NamespaceURI != String.Empty)
						continue;
					switch (LocalName) {
					case "datatypeLibrary":
					case "name":
					case "ns":
						break;
					default:
						throw new RelaxngException ("Invalid attribute.");
					}
				} while (MoveToNextAttribute ());
				MoveToElement ();
			}

			string ns = GetSpaceStrippedAttribute ("ns", String.Empty);

			// try to get name from attribute.
			if (MoveToAttribute ("name", String.Empty)) {
//				attr.NameClass = resolvedName (XmlConvert.VerifyName (Value.Trim ()), false);
				RelaxngName nc = new RelaxngName ();
				string name = XmlConvert.VerifyName (Value.Trim ());
				if (name.IndexOf (':') > 0)
					nc = resolvedName (name);
				else {
					nc.LocalName = name;
					nc.Namespace = ns == null ? String.Empty : ns;
				}
				attr.NameClass = nc;
			}

			MoveToElement ();
			if (!IsEmptyElement) {
				Read ();
				// read nameClass from content.
				if (attr.NameClass == null)
					attr.NameClass = ReadNameClass ();

				if (NodeType == XmlNodeType.Element)
					attr.Pattern = ReadPattern ();

				expectEnd ("attribute");
			} else
				Read ();

			if (attr.NameClass == null)
				throw new RelaxngException ("Name class was not specified.");
			return attr;
		}
Example #4
0
		private RelaxngName resolvedName (string nameSpec)
		{
			int colonAt = nameSpec.IndexOf (':');
			string prefix = (colonAt < 0) ? "" : nameSpec.Substring (0, colonAt);
			string local = (colonAt < 0) ? nameSpec : nameSpec.Substring (colonAt + 1, nameSpec.Length - colonAt - 1);
			string uri = ContextNamespace;

			if (prefix != "") {
				uri = LookupNamespace (prefix);
				if (uri == null)
					throw new RelaxngException ("Undeclared prefix in name component: " + nameSpec);
			}
			RelaxngName n = new RelaxngName (local, uri);
			FillLocation (n);
			return n;
		}
Example #5
0
        private RelaxngAttribute ReadAttributePattern()
        {
            RelaxngAttribute attr = new RelaxngAttribute();

            FillLocation(attr);

            if (MoveToFirstAttribute())
            {
                do
                {
                    if (NamespaceURI != String.Empty)
                    {
                        continue;
                    }
                    switch (LocalName)
                    {
                    case "datatypeLibrary":
                    case "name":
                    case "ns":
                        break;

                    default:
                        throw new RelaxngException("Invalid attribute.");
                    }
                } while (MoveToNextAttribute());
                MoveToElement();
            }

            string ns = GetSpaceStrippedAttribute("ns", String.Empty);

            // try to get name from attribute.
            if (MoveToAttribute("name", String.Empty))
            {
//				attr.NameClass = resolvedName (XmlConvert.VerifyName (Value.Trim ()), false);
                RelaxngName nc   = new RelaxngName();
                string      name = XmlConvert.VerifyName(Value.Trim());
                if (name.IndexOf(':') > 0)
                {
                    nc = resolvedName(name);
                }
                else
                {
                    nc.LocalName = name;
                    nc.Namespace = ns == null ? String.Empty : ns;
                }
                attr.NameClass = nc;
            }

            MoveToElement();
            if (!IsEmptyElement)
            {
                Read();
                // read nameClass from content.
                if (attr.NameClass == null)
                {
                    attr.NameClass = ReadNameClass();
                }

                if (NodeType == XmlNodeType.Element)
                {
                    attr.Pattern = ReadPattern();
                }

                expectEnd("attribute");
            }
            else
            {
                Read();
            }

            if (attr.NameClass == null)
            {
                throw new RelaxngException("Name class was not specified.");
            }
            return(attr);
        }
Example #6
0
		RelaxngPattern CreateAttribute (XmlSchemaAttribute attr)
		{
			RelaxngAttribute ra = new RelaxngAttribute ();
			RelaxngName name = new RelaxngName ();
			name.LocalName = attr.Name;
			ra.NameClass = name;
			ra.Pattern = attr.SchemaType != null ?
				CreatePatternFromType (attr.SchemaType) :
				CreatePatternFromTypeName (attr.SchemaTypeName);

			RelaxngPattern ret = ra;

			if (attr.Use == XmlSchemaUse.Optional) {
				RelaxngOptional opt = new RelaxngOptional ();
				opt.Patterns.Add (ra);
				ret = opt;
			}
			return ret;
		}
Example #7
0
		RelaxngPattern CreateElement (XmlSchemaElement xse)
		{
			if (xse.RefName != XmlQualifiedName.Empty) {
				RelaxngRef r = new RelaxngRef ();
				r.Name = xse.RefName.Name;
				// namespace means nothing here.
				return r;
			}

			RelaxngElement re = new RelaxngElement ();
			RelaxngName name = new RelaxngName ();
			name.LocalName = xse.Name;
			re.NameClass = name;

			XmlSchemaComplexType ct = xse.SchemaType as XmlSchemaComplexType;

			foreach (XmlSchemaAttribute a in ct.Attributes)
				re.Patterns.Add (CreateAttribute (a));

			RelaxngPattern rpart;
			if (ct.Particle == null)
				rpart = new RelaxngEmpty ();
			else
				rpart = CreatePatternFromParticle (ct.Particle);

			if (ct.IsMixed) {
				if (rpart.PatternType != RelaxngPatternType.Empty) {
					RelaxngMixed mixed = new RelaxngMixed ();
					mixed.Patterns.Add (rpart);
					rpart = mixed;
				} else {
					rpart = new RelaxngText ();
				}
			}

			re.Patterns.Add (rpart);

			return re;
		}
Example #8
0
		public void WriteName (RelaxngName n)
		{
			WriteQName (n.LocalName, n.Namespace);
		}