RelaxngPattern CreatePatternFromTypeName(XmlQualifiedName name) { if (name == XmlQualifiedName.Empty) { return(new RelaxngText()); } RelaxngData data = new RelaxngData(); data.Type = name.Name; data.DatatypeLibrary = RemapDatatypeLibrary( name.Namespace); return(data); }
private RelaxngPattern CreateSimplePattern(QName typeName) { if (typeName == QNameString) { return(new RelaxngText()); } RelaxngData data = new RelaxngData(); data.Type = typeName.Name; data.DatatypeLibrary = typeName.Namespace == NamespaceXmlSchema ? NamespaceXmlSchemaDatatypes : typeName.Namespace; return(data); }
// validate string value agains attr and // if invalid, then relax the type. private void InferMergedAttribute(RelaxngPattern ap) { switch (ap.PatternType) { case RelaxngPatternType.Ref: string refName = ((RelaxngRef)ap).Name; RelaxngDefine def = GetDefine(refName); InferMergedAttribute(def.Patterns [0]); return; case RelaxngPatternType.Optional: InferMergedAttribute( ((RelaxngOptional)ap).Patterns [0]); return; } RelaxngAttribute attr = (RelaxngAttribute)ap; RelaxngPattern p = attr.Pattern; if (p is RelaxngText) { return; // We could do nothing anymore. } if (p is RelaxngEmpty) { if (source.Value.Length == 0) { return; // We can keep empty. } // We still could infer a choice of empty and // data, but it's being too complicated. So // here we just set text. attr.Pattern = new RelaxngText(); return; } RelaxngData data = p as RelaxngData; if (data == null) { throw Error(p, "This inference implementation only allows text, empty and data for an attribute."); } attr.Pattern = CreateSimplePattern( InferMergedType(source.Value, new QName(data.Type, data.DatatypeLibrary))); }
public void WriteData(RelaxngData data) { WriteQName(data.Type, data.DatatypeLibrary, datansmgr); if (data.ParamList.Count > 0) { w.Write(" { "); foreach (RelaxngParam p in data.ParamList) { p.WriteRnc(this); } w.Write(" }"); } if (data.Except != null) { data.Except.WriteRnc(this); } }