private RelaxngName ReadNameClassName() { string name = ReadString().Trim(); RelaxngName rName = resolvedName(name); expectEnd("name"); return(rName); }
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); }
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; }
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; }
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); }
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; }
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; }
public void WriteName (RelaxngName n) { WriteQName (n.LocalName, n.Namespace); }