/// <summary>
        /// Writes the import statements.
        /// </summary>
        private string LoadTemplate_Imports(Template template, Context context)
        {
            string namespaceUri = context.Target as string;

            if (namespaceUri == null)
            {
                return(null);
            }

            if (!m_exportAll)
            {
                template.WriteLine(String.Empty);
                template.Write(context.Prefix);

                if (namespaceUri == Namespaces.OpcUaBuiltInTypes)
                {
                    template.Write("<opc:Import Namespace=\"{0}\" />", Namespaces.OpcUaBuiltInTypes);
                }
                else
                {
                    template.Write(GetImportStatment(namespaceUri));
                }

                return(null);
            }

            return(TemplatePath + "BuiltInTypes.bsd");
        }
Пример #2
0
        /// <summary>
        /// Chooses the template for the data type.
        /// </summary>
        private string LoadTemplate_ComplexTypeFields(Template template, Context context)
        {
            ComplexType complexType = context.Target as ComplexType;

            if (complexType == null)
            {
                return(null);
            }

            foreach (FieldType field in complexType.Field)
            {
                template.WriteLine(String.Empty);
                template.Write(context.Prefix);
                template.Write("<opc:Field Name=\"{0}\" DataType=\"{1}\"", field.Name, GetPrefixedName(field.DataType));

                if (field.ValueRank >= 0)
                {
                    template.Write(" ValueRank=\"Array\"");
                }

                template.Write(" />");
            }

            return(null);
        }
        /// <summary>
        /// Writes an enumerated value in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_EnumeratedValue(Template template, Context context)
        {
            EnumeratedValue valueType = context.Target as EnumeratedValue;

            if (valueType == null)
            {
                return(null);
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);
            template.Write("<xs:enumeration value=\"{0}_{1}\" />", valueType.Name, valueType.Value);

            /*
             * if (valueType.Value != 1)
             * {
             *  template.WriteLine(">");
             *  template.WriteLine("{0}  <xs:annotation>", context.Prefix);
             *  template.WriteLine("{0}    <xs:appinfo>", context.Prefix);
             *  template.WriteLine("{0}      <EnumerationValue xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">{1}</EnumerationValue>", context.Prefix, valueType.Value);
             *  template.WriteLine("{0}    </xs:appinfo>", context.Prefix);
             *  template.WriteLine("{0}  </xs:annotation>", context.Prefix);
             *  template.WriteLine("{0}</xs:enumeration>", context.Prefix);
             * }
             * else
             * {
             *  template.Write(" />");
             * }
             */

            return(null);
        }
        /// <summary>
        /// Writes a field in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_Field(Template template, Context context)
        {
            FieldType fieldType = context.Target as FieldType;

            if (fieldType == null)
            {
                return(null);
            }

            // resolve any type definitions.
            DataType datatype = Validator.ResolveType(fieldType.DataType);

            if (datatype == null)
            {
                throw new ApplicationException(String.Format("Could not find datatype '{0}' for field '{1}'.", fieldType.DataType, fieldType.Name));
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);

            if (fieldType.ValueRank == 0)
            {
                template.WriteLine("<opc:Field Name=\"NoOf{0}\" TypeName=\"opc:Int32\" />", fieldType.Name);
                template.Write(context.Prefix);
            }

            template.Write("<opc:Field Name=\"{0}\"", fieldType.Name);
            template.Write(" TypeName=\"{0}\"", GetBinarySchemaTypeName(datatype.QName));

            if (fieldType.ValueRank == 0)
            {
                template.Write(" LengthField=\"NoOf{0}\"", fieldType.Name);
            }

            template.Write(" />");

            return(null);
        }
        /// <summary>
        /// Writes an enumerated value in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_EnumeratedValue(Template template, Context context)
        {
            EnumeratedValue valueType = context.Target as EnumeratedValue;

            if (valueType == null)
            {
                return(null);
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);
            template.Write("<opc:EnumeratedValue Name=\"{0}\" Value=\"{1}\" />", valueType.Name, valueType.Value);

            return(null);
        }
Пример #6
0
        /// <summary>
        /// Chooses the template for the data type.
        /// </summary>
        private string LoadTemplate_EnumeratedTypeValues(Template template, Context context)
        {
            EnumeratedType enumeratedType = context.Target as EnumeratedType;

            if (enumeratedType == null)
            {
                return(null);
            }

            foreach (EnumeratedValue value in enumeratedType.Value)
            {
                template.WriteLine(String.Empty);
                template.Write(context.Prefix);
                template.Write("<opc:Field Name=\"{0}\" Identifier=\"{1}\" />", value.Name, value.Value);
            }

            return(null);
        }
        /// <summary>
        /// Writes a field in an OPCBinary schema.
        /// </summary>
        private string LoadTemplate_Field(Template template, Context context)
        {
            FieldType fieldType = context.Target as FieldType;

            if (fieldType == null)
            {
                return(null);
            }

            // resolve any type definitions.
            DataType datatype = Validator.ResolveType(fieldType.DataType);

            if (datatype == null)
            {
                throw new ApplicationException(String.Format("Could not find datatype '{0}' for field '{1}'.", fieldType.DataType, fieldType.Name));
            }

            template.WriteLine(String.Empty);
            template.Write(context.Prefix);
            template.Write("<xs:element name=\"{0}\"", fieldType.Name);

            if (datatype.Name == "XmlElement" && fieldType.ValueRank < 0)
            {
                template.WriteLine(">");
                template.WriteLine("{0}  <xs:complexType>", context.Prefix);
                template.WriteLine("{0}    <xs:sequence>", context.Prefix);
                template.WriteLine("{0}      <xs:any minOccurs=\"0\" processContents=\"lax\" />", context.Prefix);
                template.WriteLine("{0}    </xs:sequence>", context.Prefix);
                template.WriteLine("{0}  </xs:complexType>", context.Prefix);

                template.Write("{0}</xs:element>", context.Prefix);
            }
            else
            {
                template.Write(" type=\"{0}\" minOccurs=\"0\"", GetXmlSchemaTypeName(datatype.QName, fieldType.ValueRank));

                if (datatype.Name == "String" || datatype.Name == "ByteString")
                {
                    template.Write(" nillable=\"true\"");
                }

                template.Write(" />");
            }

            return(null);
        }
        /// <summary>
        /// Writes an array declaration to the stream.
        /// </summary>
        private bool WriteTemplate_Array(Template template, Context context)
        {
            DataType datatype = context.Target as DataType;

            if (datatype == null)
            {
                return(false);
            }

            if (!datatype.AllowArrays)
            {
                return(false);
            }

            template.WriteLine(String.Empty);
            template.AddReplacement("_TypeName_", datatype.QName.Name);

            return(template.WriteTemplate(context));
        }