I was doing some work for a client and was thinking…. Site definitions are great.
    They are extremely flexible. But, they can also be very time consuming to create.
    Site templates are a little less desirable because they un-ghost pages. But, they
    are so easy and quick to create. It would sure be nice if I could simply take a
    site template and convert it to a site definition. Well, it turns out that it’s
    not all that hard. There are quite a few steps to follow, but it’s a lot easier
    than creating a site definition from scratch.

     

    First, let’s get some prep-work done.

     

      style=”font-size: 11pt; font-family: Calibri”>Open the font-family: Calibri”> file in the site definition from which the template
      manifest.xml style=”font-size: 11pt; font-family: Calibri”> file was created and copy it to a
      destination directory

      Important: style=”font-size: 11pt; font-family: Calibri”> Never modify the default ONET.XML
      files distributed with SharePoint.

      Now that our source and target files are setup, we can begin migrating our list
      definitions.

       

    1. style=”font-size: 11pt; font-family: Calibri”>For each element already present in the file,
      make sure to set the

      /Project/ListTemplates/ListTemplate[Path]

      attribute to the folder under the Lists directory where the original site definition
      resides. For example, if referencing lists from the default Team Web Site site definition,
      set the

      /Project/ListTemplates/ListTemplate[Path]

      attribute to

      “STS”
      .

       

    2. style=”font-size: 11pt; font-family: Calibri”>For each font-family: Calibri”> elements in the
      file, add a

      /Project/ListTemplates/ListTemplate

      element to the destination

      file

      Note: style=”font-size: 11pt; font-family: Calibri”> The next few steps describe the formatting
      for each
      /Project/ListTemplates/ListTemplate

      element. Each new ListTemplate element will take this form:

      <ListTemplate Name=”Cache” DisplayName=”Cache” Type=”10000″ BaseType=”0″ Unique=”TRUE”
      Hidden=”TRUE” DontSaveInTemplate=”TRUE” SecurityBits=”11″ Description=”List of meetings
      attached to the workspace.” Image=”/_layouts/images/itgen.gif”></ListTemplate>

      I will refer to attributes from the
      /Web/UserLists/List style=”font-size: 11pt; font-family: Calibri”> element we are converting through
      the List[@source_attribute] style=”font-size: 11pt; font-family: Calibri”> notation and to attributes of the
      /Project/ListTemplates/ListTemplate
      we are generating through
      the
      ListTemplate[@target_attribute] style=”font-size: 11pt; font-family: Calibri”> notation.

      Note: style=”font-size: 11pt; font-family: Calibri”> We are adding additional
      /Project/ListTemplates/ListTemplate
      elements to the new
      ONET.XML style=”font-size: 11pt; font-family: Calibri”> file. We are not removing the default
      /Project/ListTemplates/ListTemplate
      elements already present
      in the file.

      Note: style=”font-size: 11pt; font-family: Calibri”> We are creating list definition headers
      in the ONET.XML file, but we have not yet created the list schemas behind the new
      list definitions. For detailed steps on converting the list definition from the
      site template manifest.xml to a site definition schema.xml file, take a look at
      my previous blog entry.

       

      1. style=”font-size: 11pt; font-family: Calibri”>Set the font-family: Calibri”> to .
        Make sure to remove any non-alpha characters from when converting the title to the
        list name. For example, if the Title is
        ,
        set the name to something like
        .

      2. style=”font-size: 11pt; font-family: Calibri”>Set font-family: Calibri”> to .
      3. style=”font-size: 11pt; font-family: Calibri”>Set font-family: Calibri”> toa
        unique numeric value. I, and others, recommend starting at 10000.

        Note: style=”font-size: 11pt; font-family: Calibri”> Although the
        Type style=”font-size: 11pt; font-family: Calibri”> attribute is optional in the
        ONET.XML style=”font-size: 11pt; font-family: Calibri”> file, you will not be able to automatically
        provision the list using
        elements upon site creation unless you specify the

        attribute.

         

      4. style=”font-size: 11pt; font-family: Calibri”>Set font-family: Calibri”> to .
      5. style=”font-size: 11pt; font-family: Calibri”>Set font-family: Calibri”> to .

     

      style=”font-size: 11pt; font-family: Calibri”>Leave the font-family: Calibri”> and
      elements as is.

      With the list definitions migrated, we need to set up a site configuration to provision
      our lists and a couple of modules to define the files and web parts our site will
      use.

       

    1. style=”font-size: 11pt; font-family: Calibri”>Remove the default ONET.XML style=”font-size: 11pt; font-family: Calibri”> file. We will be creating a new one
      based on the configuring of the site from the site template.

       

    2. style=”font-size: 11pt; font-family: Calibri”>Create a new ONET.XML style=”font-size: 11pt; font-family: Calibri”> file.

       

      1. style=”font-size: 11pt; font-family: Calibri”>Set the font-size: 11pt; font-family: Calibri”>”0″
        .

         

      2. style=”font-size: 11pt; font-family: Calibri”>Set the font-size: 11pt; font-family: Calibri”>”Default” direction: ltr; font-family: Calibri; unicode-bidi: embed” type=”1″>

      3. style=”font-size: 11pt; font-family: Calibri”>Create a new style=”font-size: 11pt; font-family: Calibri”>For each custom created in step 3, create a
        /Project/Configurations/Configuration/Lists/List style=”font-size: 11pt; font-family: Calibri”> element. You will now need to use
        the optional Type attribute specified in step 3c.

        The newly created elements will take the following forms:

        <List Title=”Cache” Type=”10000″ ></List>

        Note: style=”font-size: 11pt; font-family: Calibri”> The next steps should be performed
        for each newly created
        /Project/Configurations/Configuration/Lists/List
        direction: ltr; font-family: Calibri; unicode-bidi: embed” type=”a”>

      4. style=”font-size: 11pt; font-family: Calibri”>Set the font-size: 11pt; font-family: Calibri”>/Project/ListTemplates/ListTemplate[DisplayName] style=”font-size: 11pt; font-family: Calibri”>.
      5. style=”font-size: 11pt; font-family: Calibri”>Set the font-size: 11pt; font-family: Calibri”>/Project/ListTemplates/ListTemplate[Type] style=”font-size: 11pt; font-family: Calibri”>.

         

      style=”font-size: 11pt; font-family: Calibri”>Add the following elements to the
      /Project/Configurations/Configuration/Lists
      element:

       

    <List Title=”Site Template Gallery” Type=”111″ Url=”_catalogs/wt” RootWebOnly=”TRUE”></List>

    <List Title=”Web Part Gallery” Type=”113″ Url=”_catalogs/wp” RootWebOnly=”TRUE”></List>

    <List Title=”List Template Gallery” Type=”114″ Url=”_catalogs/lt” RootWebOnly=”TRUE”></List>

     

      style=”font-size: 11pt; font-family: Calibri”>Clear out the old element.

       

    1. style=”font-size: 11pt; font-family: Calibri”>Create a font-family: Calibri”> element in the new font-family: Calibri”> file.

       

    2. style=”font-size: 11pt; font-family: Calibri”>Create a direction: ltr; font-family: Calibri; unicode-bidi: embed” type=”a”>

    3. style=”font-size: 11pt; font-family: Calibri”>Set the font-size: 11pt; font-family: Calibri”>”DefaultHome” style=”font-size: 11pt; font-family: Calibri”>Set the font-size: 11pt; font-family: Calibri”>”WebPartPopulation”  

        style=”font-size: 11pt; font-family: Calibri”>Clear out the old font-family: Calibri”> element

         

      1. style=”font-size: 11pt; font-family: Calibri”>Create a font-family: Calibri”>element in the new
        file.

       

        style=”font-size: 11pt; font-family: Calibri”>Add the following element to the
        /Project/Modules style=”font-size: 11pt; font-family: Calibri”> element:

         

      <Module Name=”DefaultHome” Url=”” Path=””>

      <File Url=”default.aspx”>

      <NavBarPage Name=”Home” ID=”1002″ Position=”Start”> </NavBarPage>

      </File>

      </Module>

       

        style=”font-size: 11pt; font-family: Calibri”>Add the following element to the
        /Project/Modules
        element:

         

      <Module Name=”WebPartPopulation” List=”113″ Url=”_catalogs/wp” Path=”..stslistswplibdwp”
      RootWebOnly=”TRUE”>

      <File Url=”MSContentEditor.dwp” Type=”GhostableInLibrary”/>

      <File Url=”MSPageViewer.dwp” Type=”GhostableInLibrary”/>

      <File Url=”MSImage.dwp” Type=”GhostableInLibrary”/>

      <File Url=”MSMembers.dwp” Type=”GhostableInLibrary”/>

      <File Url=”MSXml.dwp” Type=”GhostableInLibrary”/>

      </Module>

       

        style=”font-size: 11pt; font-family: Calibri”>Leave the font-family: Calibri”>as is.

         

      At this point we have transferred all of the list definitions from our site template
      to our site definition and created the list schema.xml files to store the schemas
      for our custom lists. However, we have not added the web pats to our default.aspx
      page. Unfortunately, I have run out of time on this post so I will have to leave
      that for another day. In the mean time, I hope this post helps anyone looking for
      a “quick-start” way to create site definitions from existing SharePoint sites.