Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        // 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)));
        }
Ejemplo n.º 4
0
 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);
     }
 }