Example: creating a Schema with ExtensionXml using the Core Service

A code example of creating a Schema with an ExtensionXml element. The contents of this element are available to all add-on applications (which means that two add-ons cannot both use an element with the same name). The element holds additional data on the Schema field definition level for use by add-ons.

IList<ItemFieldDefinitionData> fieldDefinitions = new List<ItemFieldDefinitionData>();

DateFieldDefinitionData date = new DateFieldDefinitionData()
{
  Description = "Date",
  Name = "Date",
  MinOccurs = 0,
  MaxOccurs = 1
};
 
SingleLineTextFieldDefinitionData author = new SingleLineTextFieldDefinitionData()
{
  Name = "Author",
  Description = "Author",
  MinOccurs = 1,
  MaxOccurs = 1
};

XNamespace tcmNs = "http://www.tridion.com/ContentManager/5.0";
XNamespace ns = "http://www.tridion.com/TranslationManager";

XElement extensionXml = new XElement(tcmNs + "ExtensionXml");
extensionXml.Add(new XElement(ns + "TranslationManager", 
  new XElement(ns + "IsTranslatable", true)));

MultiLineTextFieldDefinitionData article = new MultiLineTextFieldDefinitionData()
{
  Name = "Article",
  Description = "Article",
  Height = 15,
  MinOccurs = 1,
  MaxOccurs = 1,
  ExtensionXml = extensionXml
};

SchemaFieldsData schemaFieldsData = new SchemaFieldsData();
schemaFieldsData.RootElementName = "Content";
schemaFieldsData.NamespaceUri = "ns:TranslationManager";
fieldDefinitions.Add(date);
fieldDefinitions.Add(author);
fieldDefinitions.Add(article);
schemaFieldsData.Fields = fieldDefinitions.ToArray();

using (ChannelFactory<ISessionAwareCoreService> factory = 
  new ChannelFactory<ISessionAwareCoreService>("netTcp"))
{
  ISessionAwareCoreService client = factory.CreateChannel();

  XElement xsd = client.ConvertSchemaFieldsToXsd(schemaFieldsData);

  // Create schema
  SchemaData schema = 
    (SchemaData)client.GetDefaultData(ItemType.Schema, "tcm:11964-35150-2");
  schema.Purpose = SchemaPurpose.Component;
  schema.Description = "Translation Manager";
  schema.RootElementName = "Content";
  schema.NamespaceUri = string.Empty;
  schema.Title = "News";
  schema.Xsd = xsd.ToString(SaveOptions.None);

  schema = (SchemaData)client.Create(schema, new ReadOptions());
}