William's profileBill's SpacePhotosBlogListsMore Tools Help

Blog


    29 September

    Item-based xml data framework

    After getting my feet wet with xslt and learning its ins and outs I started building an xml file with the structure for our item-based data framework. Once completed I can infer the schema from it and generate a set of sql structures that reflect what is being stored in the xml. After that a simple web service can handle the data link and the entire thing can be stored in most databases without too much effort. Tie this into the .NET v2 web parts and other features for security and we'll be most of the way there. Here is the first run draft of the xml file I'm working on... Keep in mind it isn't complete and will probably change a bit:
     

    <?xml version="1.0" encoding="utf-8" ?>
    <
    database>
    <
    items>
    <
    item id="{29C50162-DF78-4ff7-85E1-7AE0BE0E1CC6}"

    typeId="{4CE15CC7-147F-4db8-B077-EA09A109A092}"

    templateId="{B4DC911D-3E87-4061-AC22-61A9C7E25949}"

    statusId="{C2CF0809-3FF1-4fa3-AFE2-7070F6503635}"

    international="en-US"

    version="1"

    creationUserId="{B29DA606-AE45-49ff-94BE-A144AE350A08}"

    creationDate=""

    isEncrypted="false">

    <

    settings>

    <

    setting name="name">value</setting>

    </

    settings>

    <

    permissions>

    <

    permission id="0">

    <

    allowed>

    <

    user id="{B29DA606-AE45-49ff-94BE-A144AE350A08}" />

    <

    group id="{E3423DBD-398D-4e85-8ED3-FC4B4527B43C}" />

    </

    allowed>

    <denied>

    <!--

    <user id="{B29DA606-AE45-49ff-94BE-A144AE350A08}" />-->

    <

    group id="{BD326688-AC38-4026-96D1-234428462243}" />

    </

    denied>

    </

    permission>

    </

    permissions>

    <

    content><![CDATA[Content]]></content>

    </

    item>

    </

    items>

    <

    itemTypes>

    <

    itemType id="{81AA36D5-893E-4848-9DC7-C1732447AED3}" name="Site"

    description="A single application installation which may contain multiple portals" />

    <

    itemType id="{6BFFDCEC-77F4-40d9-98E6-23636055AF47}" name="Portal"

    description="A portal or subsite within a Site" />

    <

    itemType id="{AACC3CC9-6665-45a9-8DF6-F105A662ADD6}" name="Page"

    description="A page within a Portal" />

    <

    itemType id="{BE5974A1-F881-47f5-8B95-D278D422AD0F}" name="Module"

    description="A module or WebPart" />

    <

    itemType id="{4CE15CC7-147F-4db8-B077-EA09A109A092}" name="Content"

    description="A content object which is associated with a Module" />

    </

    itemTypes>

    <

    itemTemplates>

    <

    itemTemplate id="{B4DC911D-3E87-4061-AC22-61A9C7E25949}"

    itemTypeId="{4CE15CC7-147F-4db8-B077-EA09A109A092}"

    statusId="{C2CF0809-3FF1-4fa3-AFE2-7070F6503635}"

    name="Content Template"

    international="en-US"

    version="1"

    creationUserId="{B29DA606-AE45-49ff-94BE-A144AE350A08}"

    creationDate=""

    isEncrypted="false">

    <

    categories>

    <

    category id="{1C5903DA-21F0-44e8-9CA9-308B1795EFDB}" />

    </

    categories>

    <

    content><![CDATA[Content]]></content>

    </

    itemTemplate>

    </

    itemTemplates>

    <

    statuses>

    <

    status id="{C2CF0809-3FF1-4fa3-AFE2-7070F6503635}" name="Active">

    <

    categories>

    <

    category id="{1C5903DA-21F0-44e8-9CA9-308B1795EFDB}" />

    </

    categories>

    </

    status>

    </

    statuses>

    <

    categories>

    <

    category id="{1C5903DA-21F0-44e8-9CA9-308B1795EFDB}" name="General"

    description="General / Generic Category" />

    </

    categories>

    <

    permissions>

    <

    permission id="0" name="Read" description="Access to read from an object" />

    <

    permission id="1" name="Write" description="Access to write to an object" />

    <

    permission id="2" name="Modify" description="Access to modify an object" />

    <

    permission id="3" name="Delete" description="Access to delete an object" />

    </

    permissions>

    <

    users>

    <

    user id="{B29DA606-AE45-49ff-94BE-A144AE350A08}"

    displayName="William Forney" firstName="William" middleName="Lee" lastName="Forney"

    emailAddress="bill@billforney.com"

    password="" />

    </

    users>

    <

    groups>

    <

    group id="{BD326688-AC38-4026-96D1-234428462243}" displayName="Users">

    <

    members>

    <

    user id="{B29DA606-AE45-49ff-94BE-A144AE350A08}" />

    <

    group id="{E3423DBD-398D-4e85-8ED3-FC4B4527B43C}" />

    </

    members>

    </

    group>

    <

    group id="{E3423DBD-398D-4e85-8ED3-FC4B4527B43C}" displayName="Administrators" />

    </

    groups>

    </

    database>
    05 September

    NewGenesis future plans

    After some discussion with manu, plans for NewGenesis are forming that will transform it into something somewhat different than previously envisioned. In the coming days there will be more information available about it. Feel free to send me a note if you're curious.
    28 August

    XML in New Genesis portal framework

    Yesterday I did a little more work on the Data layer of the framework. It compiles now (finally) though it is just entity type classes and a few related functions. I added some XML serializer code so that any type of object can be saved into an Item.  I have to work out some details with the ItemType class though. Also, I still haven't heard from many people about helping out. I get the feeling they're waiting for me to do it all for them.
    31 July

    Item Types

    As well as those basic types, Items in this new framework can be anything you like. Take files for example since I mentioned the file system was where I got the idea. A class called File could be derived from Item and expose custom properties that are just hooked up to the Attributes and Properties Dictionaries/Lists of the Item type. What needs to happen now is the plumbing to make this possible. I intend to add a few new functions to the Item type to Add/Update and Remove Properties and Attributes without having to manually do the checking if it exists in the dictionary and such. Then our custom properties just use the Item.AddProperty(name,value) function for example in its set and a simple Item.GetProperty(name) in its get. If anyone has a better way to do this, I'm all ears, but this seems the most logical to me at the moment.

    Call For Help With The NewGenesis Portal Framework

    Last week I pushed some updates to the database script and a base set of classes that require some attention. Many of the problems in the current Rainbow Portal project v1.5/beta will be cleared up by use of this back end. The first steps to the future will be DAL and business class layers that replace all data access methods for module developers. Since the framework will use Gentle.NET and iBatis.NET for data access, porting it to any of their supported databases should be trivial for those who know how.
     
    The class layout is structured around the idea of an atomic unit of data called an Item. The idea for this was taken from the file system and will eventually have Permissions and ACL-like properties as well. To support versioning and publishing controls there are several built-in attributes on each Item that allow for this. Language support is added by the concept of Content Items. You see, each Item can be of any type derived from the base Item class, so you see something like this...
     
    Site: a site/installation of the framework
     
    Portal: a single portal inside a Site (for multi-domain and multi-portal installation support)
     
    Page: a page in a Portal (pages have a separate tree structure to allow for navigation to be stored in the database separate from the pages themselves)
     
    Module: a module/WebPart (microsoft copyright?) in a page
     
    Content: this is what makes multi-culture easy.  Each Content Item can have a different language, version, etc...  This way a Module can easily share content with other Modules in an Item hierarchy (not to be confused with navigation) and can be syndicated in many different ways.
     
    Now that I have laid out the basis for the framework, I need other developers to help me fill in the gaps and fix up the code for testing and production. This initial push shouldn't take very long to complete and will provide a sound base for the rest of the Module and portal developers to port their data storage to while we refine the framework further in the business layers.