/// <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"); }
/// <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); }
/// <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)); }