Skip Navigation Links / Posts / Posts By Category

Posts for Category: BlogML

Feed for this Category
BlogML

Keyvan has put a lot of effort into BlogML over the past 12-18 months, but recently he's upped the ante again.  First he created a new site for BlogML and now he's started writing a bunch of high quality articles which describe BlogML.  You can read the articles here:

posted on 9/22/2007 9:35:44 AM ( 1 Comments )


CCNetConfig makes the move to SubText via BlogML

Another good news story for BlogML as the CCNetConfig blog is migrated from DasBlog to SubText:

Made the move to SubText

posted on 6/11/2007 8:46:16 AM ( 0 Comments )


Five Years Blogging at Theoblogical at Theoblogical

Hrmm, just found this entry from a blogger who says that BlogML failed him.  I'll have to do a bit of research into this: 

Five Years Blogging at Theoblogical at Theoblogical

posted on 6/3/2007 8:19:23 PM ( 2 Comments )


Go BlogML!

Robert McLaws has created a new logo for BlogML and here it is:

BlogML logo

Way to go Rob!  I'd also like to call out a great effort on the part of Keyvan who has really taken the lead on BlogML and allowed it to move forward in a truly excellent way - thanks Keyvan! smile_regular

posted on 5/31/2007 10:39:54 PM ( 2 Comments )


First Impressions on BlogML.vNext - Keyvan Nayyeri

Keyvan has been a busy guy and, over the past month or so has really taken over BlogML to plan a new release.  In the following post he talks about plans for a new release this summer which will be version 2.5: 

Link to First Impressions on BlogML.vNext - Keyvan Nayyeri

The list of features that are planned include:

  1. Create rich documentation for everything
  2. Unit test .NET API component
  3. Create a logo for project
  4. Add support for link lists
  5. Add supports for pingbacks
  6. Add supports for non-author users
  7. Improve the support for extended properties

These changes will really help to make BlogML much tighter and therefore help with adoption.  If you'd like to get involved with any of these tasks, please stroll over and register to join the project.

posted on 5/26/2007 9:42:51 AM ( 4 Comments )


WordPress BlogML Export - Keyvan Nayyeri

Wow!  As Keyvan blogged, Rob McLaws has created a WordPress to BlogML converter and added it to the BlogML project on CodePlex.  Awesome!! smile_teeth

That makes Live Space and WordPress implementations both added during the week.

posted on 5/8/2007 2:10:50 PM ( 0 Comments )


paraesthesia: BlogML 2.0 Impressions

I nice write-up about the experience of someone who has just had an experience using BlogML.  Not only does he discuss the positive points of BlogML but also highlights some of the shortcomings. 

my pMachine exporter, though I won't necessarily become a PHP developer for y'all; I'm a .NET guy who's stuck on a PHP platform, not a PHP guy. I'm happy to contribute my pMachine exporter, but I don't think I'll be working on anything for WordPress (nor will

Source: paraesthesia: BlogML 2.0 Impressions

posted on 4/29/2007 4:28:14 PM ( 0 Comments )


Another BlogML story

In this blog post the author talks about the need to remember to truncate tables as opposed to merely deleting records from them before re-importing your data via BlogML: 

Link to Doctor, heal thyself

He then goes on to say how, by not using post ID's in the URL he could have saved the angst altogether.

posted on 4/12/2007 6:26:56 AM ( 0 Comments )


Upgrading and merging of blogs to Subtext

A detailed write-up of Keith Elder's experience of upgrading and migrating his blog engine: 

Link to Upgrading and merging of blogs to Subtext

Whilst BlogML didn't play a role in the initial migration and merging, it did get praise for how it allowed Keith to move his blog from his development environment across to his production environment. 

Keith also wrote that he hopes that BlogML gains traction - I think that it will.  I remember this time last year thinking that if BlogML could just last through 2006 and pick up the major .NET engines that it would be a good thing.  Both of those have happened.  This year my goal for BlogML is to see it picked up by a couple of large non-.NET blogging engines.

posted on 1/2/2007 10:29:13 PM ( 0 Comments )


Another cool BlogML testimony :-)

Link to protected virtual void jaysonBlog { : My Last Holdout Switches To Community Server

posted on 12/29/2006 8:32:10 AM ( 0 Comments )


BlogML now on Wikipedia

Keyvan Nayyeri has done it again.  BlogML now has an entry on Wikipedia

Link to BlogML on Wikipedia

That's awesome! thumbs_upsmile_nerd

posted on 12/27/2006 5:23:14 PM ( 0 Comments )


BlogML used by closing community

This is not great news, Ryan has announced the impending closure of the GeekDojo blogs:

Link to Ryan Rinaldi's Blog : A bit of bad news

In announcing the closure Ryan did mention that each blogger in the community will be able to get a copy of their content as BlogML.  That's thousands of posts, comments, and trackbacks that will be able to be ported to another platform.  Hopefully those bloggers will read Mitch's post titled "Healing the Web" after they've made their decision about relocation.

posted on 12/27/2006 11:35:02 AM ( 2 Comments )


Subtext 1.9.3 "Repair Job" Edition Released!

Steve announces the latest release of Subtext: 

Link to Subtext 1.9.3 "Repair Job" Edition Released!

 

In that post he mentions that this latest version now supports version 2.0 of BlogML - well done guys!

posted on 12/14/2006 8:46:02 PM ( 0 Comments )


Keyvan Nayyeri : BlogML 2.0 Can Run on Mono

Good news!  Apparently BlogML 2.0 is primed for Mono-time smile_nerd 

Link to Keyvan Nayyeri : BlogML 2.0 Can Run on Mono

posted on 11/28/2006 8:31:03 AM ( 1 Comments )


BlogML 2.0 is Released

It is with great delight that I announce the release of BlogML 2.0:

    http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=BlogML&ReleaseId=171

This is the first release of BlogML since it was added to CodePlex and made into an Open Source project.  As I look down that list of features that were added I would like to express my most sincere thanks to Keyvan Nayyeri who has put in an enormous effort in working on BlogML for this release.  It's because of Keyvan's significant contribution to BlogML that we've been able to release this significant version.

I'd also like to thank Phil Haack who has volunteered a good deal of time to help us work through some feature ideas while at the same time adding new ideas of his own. 

This blog post from Keyvan describes the new features as well as the intention behind their inclusion:

     http://nayyeri.net/archive/2006/07/23/BlogML-new-features.aspx

Timed with this release we will also be releasing testing providers for SingleUserBlog, CommunityServer, and Subtext which have been developed alongside of the BlogML codebase and which are now incorporated as a part of this project.

posted on 9/6/2006 3:22:16 PM ( 10 Comments )


BlogML feature updates

Over on the BlogML site, Keyvan has been busily adding features to BlogML and the associated .NET API's.  Just recently he's added:

  • Support for articles
  • Extended properties in the schema
  • Support for post excerpts
  • Support for multi-author content
  • Improved support for mime-types

I'll have to re-acquaint myself with these changes soon - I think that I'll implement the new version of BlogML here on my blog next week - and then we can look at a timeframe for packaging up a new public release for BlogML.

The BlogML project has been very lucky to get Keyvan on board.  Keyvan has shown incredible enthusiasm for adding these features and, let to me we wouldn't have seen these things for a long time I'm sure.  I can now see the benefits of having open source projects especially when they attract people with energy and some time to actually implement things.

posted on 7/23/2006 11:09:21 AM ( 2 Comments )


Perl implementation of BlogML

I just received an email from Michael Matthews advising me that he has got a BlogML implementation that he has written in Perl.  You can read about it here:

    http://search.cpan.org/~mmathews/Blog-BlogML-Reader-0.01/lib/Blog/BlogML/Reader.pm

Hopefully we can get Michael's code integrated into the BlogML SDK in the source control section of the BlogML site.  Unfortunately Michael has had some problems accessing CodePlex so I'll work with him to get that sorted out this week hopefully.

posted on 6/25/2006 8:21:45 PM ( 0 Comments )


BlogML is now Open Source

I've moved the BlogML project from the old project site to a brand new project site which is hosted at CodePlex.  This is a significant move as it allows me to host the schema and source code there so that other developers can join the project and add features.  I've redirected the BlogML.com domain to the new project site so you can get there via the following link:

    http://BlogML.com

One of the important things to understand about the new project is the repository layout that is shown in the following image:

BlogMLProjectStructure

As you can see, this repository layout has a Code folder that will contain a sub-folder for each language implementation of BlogML tooling.  Currently there are only .NET implementations but hopefully, over time this will also contain Java, Ruby, Perl, and other implementations so that we can cover all blogging engines with pre-written helpers for creating BlogML.  Of course, anybody could simply go to the Specification folder and grab the latest BlogML schema file and work directly against that - but strongly typed helper classes certainly make things easier.

One cool thing about the CodePlex site is that I can aggregate feeds from multiple locations on the News page for the project.  I already have 2 feeds (my BlogML category feed from this site and the old BlogML feed from the CodeGallery site) being aggregated there but as more people start blogging about BlogML I'll be able to add their feeds as well and have a truly central feed for all BlogML news.

posted on 6/12/2006 10:06:58 AM ( 0 Comments )


BlogML mention on WordPress

Stumbled across this forum thread this morning on the WordPress site which makes mention of BlogML: 

    http://wordpress.com/forums/topic.php?id=2148&replies=4

posted on 6/3/2006 8:16:20 AM ( 0 Comments )


Export to BlogML from Squarespace

Grant provides a tool to help convert your Squarespace exports to BlogML format:

    http://www.holliday.com.au/blog/squarespace-to-blogml-converter.html

posted on 5/22/2006 8:44:37 AM ( 0 Comments )


Migrate from Blogger to Community Server using BlogML

Another story taken from the web involving BlogML:

    http://jeffbishop.net/archive/2006/05/21/690.aspx

posted on 5/22/2006 8:43:04 AM ( 0 Comments )


BlogML goes mainstream

When I awoke this morning I had an email from Telligent informing me that the weblogs.asp.net will get an upgrade (presumably to version 2 of Community Server).  In the email they mentioned that they would provide a couple of options for people who were looking to move their blogs away from that site.  One option was that they would provide an Atom file of post content, the other was...

We'll also be providing support for a BlogML export which will work with other blog engines that support BlogML (SingleUserBlog, SubText, DNN, DasBlog).

This is pretty fantastic news!  This means that a very large group of influential bloggers may be exposed to BlogML for the first time.

posted on 5/22/2006 5:14:22 AM ( 0 Comments )


Are the MSN Spaces guys nearly ready for a conversation about BlogML?

Alex Boyko - someone who works with Dare Obasanjo? - recently published this article on his blog about a tool which uses the API's that are exposed by Blogger and MSN Spaces to migrate his blog from one to the other.  I noticed it because Dare had also blogged about it here.

This gets me excited because this is where I see that BlogML has a role to play.  I'm not sure what "format" Alex's tool stores the content in when he exports it from Blogger but I'm hoping that I can get him to use BlogML (by using the free, publicly available BlogML API's) to store that content in BlogML format.  He can then continue to use the MetaWeblogAPI to import from BlogML into MSN Spaces.

So maybe this means that a good, general tool might be something that did MetablogAPI <-> blogml conversions?  The benefits of Alex using BlogML as his intermediate format is that it would "just work" for the implementations that already natively accept BlogML imports such as DasBlog, SubText, Community Server and a few others.

posted on 5/21/2006 11:08:13 AM ( 1 Comments )


Some more BlogML goodness stories...

This week I've seen two new BlogML export/import conversions that have both gone pretty painlessly from what I can tell.  First Grant wrote about how he used the "Export to XML" feature in Squarespace and an XSLT to transform his Squarespace blog to BlogML.  Once he had the BlogML of his content, Grant grabbed an existing BlogML importer for Community Server and imported his content straight into there. 

That's Squarespace to Community Server in the push of a button.  Read about how Grant migrated his content here:

    http://www.holliday.com.au/blog/blogml-import-to-community-server-20.html   

Apparently Grant's exploits made some waves in the CS circles so hopefully this will lead to people like CS and DasBlog to sit up and think about having tighter integration with BlogML.

Next, Martin Granell needed to migrate his blog from a rusty old version of .Text into a shiny new SUB install.  No worries, there was already a .Text BlogML implementation on the BlogML site which Martin grabbed and polished up a bit into a console applicaiton.  He ran the BlogML exporter over his .Text blog and imported the content straight into SUB. 

That's .Text to SUB in the push of a button.  "IJW" was Martins comment :-)  View Martin's new blog here:

    http://granell.net/martin/

I'll get Martin's console app up online tomorrow.

In the meantime I'm really hoping that I'll find some time to work on BlogML to produce a formal primer for the format and to change the BlogML website so that it more clearly displays a list of trusted, existing providers for BlogML.

posted on 5/18/2006 10:37:44 PM ( 12 Comments )


Good news story for BlogML and SubText

Chris blogs about his experience of being able to seamlessly migrate his blog content from Community Server to SUB to SubText.  This is great!

http://chrisfrazier.net/blog/archive/2006/03/07/SubText,BlogML,andPostXING.aspx

Chris's experience reads like a core use-case for BlogML.  If more bloglords adopted BlogML in their products stories such as this would be common-place and users would finally be free to try out as many different blogging platforms as often as they liked.

posted on 3/8/2006 1:30:00 PM ( 1 Comments )


BlogML Support for CommunityServer has Arrived

Keyvan Nayyeri has released his BlogML reader/writer for CommunityServer 2.0.  Get it and read about it here:

    http://nayyeri.net/archive/2006/02/11/491.aspx

 

posted on 2/12/2006 3:33:32 PM ( 0 Comments )


The BlogML plan

BlogML managed to get a bit of momentum after I released the 1.0 version but it's still not quite where I'd like it to be.  This is due mostly to my lack of time while I finish off the web portals book that I'm writing at the moment. 

There was Community Server 2.0 BlogML writer that was posted by Keyvan Nayyeri during the week which you can find here:  http://nayyeri.net/archive/2006/02/08/474.aspx and this was also the week that Rory usedMitch's .Text 0.91 BlogML writer to exit from .Text.

While BlogML has now been used to migrate between many different blogging engines I haven't managed to keep a good library of tested, working BlogML implementations.  Over the next week my plan is to track down all of the BlogML implementations and have them tested and uploaded to a single index.  Within that month I'm planning to have BlogML implementations uploaded for the following:

  • .Text 0.91 BlogML Writer
  • .Text 0.95 BlogML Writer
  • DasBlog BlogML Reader + Writer
  • Community Server 1.0 BlogML Writer
  • Community Server 2.0 BlogML Reader + Writer
  • SubText BlogML Reader + Writer
  • SingleUserBlog BlogML Reader + Writer
  • DotNetNuke BlogML Reader + Writer

Each of these will be available from a single index, will be tested, and will emit valid BlogML 1.0 formatted XML.

I'd be keen to hear from anybody who would be prepared to invest the 2-3 hours worth of time that it takes to write a BlogML Reader+Writer for any other blogging engines.

posted on 2/11/2006 5:43:53 PM ( 1 Comments )


BlogML 1.0 Released!

Resting after a lot of hard work

Grab the BlogML 1.0 schema and SDK from here: http://codegallery.gotdotnet.com/BlogML

 

<blogml> It's Your Blog! </blogml>

posted on 2/4/2006 1:29:58 AM ( 3 Comments )


It's Your Blog

You want the freedom to own your own Blog content?  Stuck in a blog and can't get out? Moving to a new blog and can't get in? Well you've earned a break mister!  Get out and buy a shirt and do your bit to get BlogML implemented on your blog today!

 

BlogMLShirt

 

View the entire range of available shirts here.

posted on 2/2/2006 2:04:44 AM ( 0 Comments )


A big week for BlogML

Last year I created BlogML as a format for "fully describing" the content of a blog so that it could act as an archive format for blogs and also as a way to migrate content from one blog and into another.  SingleUserBlog has supported BlogML pretty much since its inception but now it appears that BlogML is starting to make some headway.   The BlogML site is located here:

    http://BlogML.com

Already it seems that the next version of SubText will include BlogML support and I'm currently having discussions with other large blog sites in an attempt to get it supported more widely.  In addition to SubText and SingleUserBlog, there are implementations for exporting .Text blogs to BlogML that you can get from the BlogML site.

I'm very hopeful that within the next couple of weeks that I'll be able to announce full BlogML support from other leading blogs such as CommunityServer 2.0, DasBlog, and DotNetNuke - even if BlogML is not a native format then there will at least be a tool that can be used with those products to support BlogML.

I'm also looking to correspond with Microsoft and Google to start some discussion about getting BlogML support for things such as blogs.msdn.com, Spaces, and Blogger.

So, if you have a blog and you are in a position to put this notice in front of somebody who has influence within the blogging community - please do so.  Send then to my blog and I'll be only too happy to discuss BlogML with them and talk to them about some of the reasons to support BlogML.  I also promise to work with them to help them get a good BlogML implementation up and running!

Learn More About BlogML

posted on 2/1/2006 7:01:52 PM ( 0 Comments )


This blog is now running SUBV2

If this message has popped into your aggregator then I've most certainly done something right because today I changed my blog over to a brand new version of my SingleUserBlog blogging application which I affectionately refer to as SUBV2.  SUBV2 is a significant jump from the previous version in that it's built using ASP.NET 2.0.

Built using ASP.NET 2.0

Running on top of ASP.NET 2.0 has allowed me to introduce some extremely advanced features while possibly reducing the overall size of the codebase.  Some of the new features include MasterPages and Themes which are used to give the site its look and feel.  Another of the significant changes that have come through using ASP.NET 2.0 are Web Parts and Personalization.  By using these "portal" features I have been able to implement almost all of the content that is visible on this page by using web parts.  To get a feel for how web parts are used on this page, consider the following:

  • The Hosted By Orcsweb image is a web part
  • The Google Search Form is a web part
  • The Posting Categories list is a web part
  • Each of the Link Categories on the right are web parts
  • The Recent Posts listing is a web part
  • The Horizontal Rule just above the Recent Posts is a web part

As you can see, the web parts that are included with SUBV2 are a mixture of application web parts (Posting Categories and Recent Posts) as well as functional web parts that allow me to add any arbitrary image, link, or even HTML to the page at will.  The power of web parts is that they can easily be personalized at runtime.  This means that I can move any of the web parts around by simply dragging them with my mouse and placing them to almost anywhere on the page.  I can also add new web parts too.  As an example, I could easily add a new HTML web part that displayed a welcome message to visitors of my blog and place it at the top of each page on the site.  I could even add my own CSS or Javascript too!

Advanced Portal Framework Features

In addition to the "out-of-the-box" web part features, this blog also uses some pretty advanced portal customizations - such as a CatalogZone that is displayed in a pop-up dialog (ala Sharepoint V3).  The popup CatalogZone will be used to display web parts that are housed in custom web service galleries.
 
The blog also features:

  • Custom WebPartManager to implement common authorization filter logic
  • Custom EditorZone to display editor parts in expandible/collapsible regions
  • Custom WebPartZones to perform custom rendering on web part chrome and to add custom zone verbs to web parts
  • Custom PersonalizationProvider so that all personalization is stored against a common key (not the page url) so that changes made to a web part are applied right across the portal site


Migrating my content

Migrating the content from the previous version of my blog was simple and took me less than twenty minutes.  To migrate the content I opened the administration section of the previous version and saved the blog to BlogML format; then I opened the administration section of this version and imported it.  That's the power of BlogML!  The content that migrated included all of my internal links, attachments and images - so no content was lost at all.

Making SUBV2 publicly available

Over the weekend Paul Stovell - who is currently running SUBV1 for his blog - will be migrating that blog over to use SUBV2.  During that migration he will write a blog article that explains the steps that are involved in setting up SUBV2 and customizing it with your own MasterPage and Theme.  When he has posted that article I'll upload the source code for SUBV2 to ProjectDistributor so that it is publicly available.  In addition to Paul's article I'll be posting some tutorials to my blog that explain some of the features that are there.

Over time I'm hoping to build a small community around SUBV2 so that we can share Themes and WebParts.

posted on 1/14/2006 3:40:40 PM ( 2 Comments )


.Text to BlogML implementation

I'm currently in Seattle for the MVP conference and, so I've been pretty much "offline" for a few days now.  When I opened my e-mail this morning I discovered that Jim Vrckovski has recently installed SingleUserBlog and, to migrate out of his existing .Text blog he wrote a .Text implementation of BlogML:

    http://codeinzen.net/Posts/Post.aspx?postId=c0685180-143b-423f-9bb2-1a3600dcf296

Jim sent me the code so, the first thing that I'll be doing when I get back to Australia is to go through it and add it to the BlogML site.

When I get home I'm actually planning to "ramp up" on getting some more BlogML implementations up on the site so that people who are using some of the major blogging engines will have the ability to import and export BlogML too.

So far the people that I've spoken to over here have been very positive about BlogML so hopefully getting more implementations will really give it some impetus.

posted on 9/29/2005 2:58:48 PM ( 5 Comments )


Export Blogger to BlogML

One of the guys that I work with, Grant, has worked out how to export Blogger blogs to BlogML format:

    http://dotholliday.blogspot.com/2005/09/export-blogml-from-blogger-to.html

I've been pretty quiet on BlogML over the past week or so but will get busy again when I return from the U.S.  My first goals when I return will be to write HttpHandlers to run BlogML exports out of .Text, CS and dasBlog.

posted on 9/25/2005 10:54:10 PM ( 2 Comments )


Is BlogML better than the MoveableType import/export feature?

That question was asked of me today so I thought that I'd blog the answer here as I'm sure that it will get asked many more times.

I haven't done a full investigation but, from my understanding, the default MT import/export functionality is very limited in that it will only persist a very small subset of content.  In addition to the MT import/export feature there is a plug-in which extends it called "Type Mover" (or something).  Again, from what I can gather, this plug-in uses a custom storage format for its process. 

Ideally, MT would expose BlogML and, if "Type Mover" wanted to overlay its own value-add services - such as making the operation atomic or whatever - then it could easily do this by consuming the BlogML (a standard format).  In fact, if "Type Mover" were to do this then they would find that their tool would automatically "just work" against any BlogML enabled blog - as opposed to being tied to MT.

 

posted on 9/18/2005 4:16:45 AM ( 0 Comments )


BlogML 0.9 - It's out there

OK, another all-nighter but finally BlogML exists.  I've just uploaded an SDK for the 0.9 release which is really a "for review" release.  You can grab the SDK from here:

    http://www.gotdotnet.com/codegallery/releases/viewuploads.aspx?id=48e15925-d97f-48ac-81fb-e4e405762858

The SDK contains all the code and tools that you need to get started using BlogML and has some sample code showing how to implement a reader and writer for SingleUserBlog and a couple of other samples.  There's also a full blown BlogML xml file of my blog - yes this one! :-)

Keep your feedback coming in.

 

BlogML Resources

The friendly url for the BlogML site on GotDotNet is: http://codegallery.gotdotnet.com/BlogML

I will be cross-posting articles about BlogML to that workspace and also to the BlogML category here on my blog.  There's already quite a bit of information in that category already.

posted on 9/12/2005 9:46:23 PM ( 1 Comments )


BlogML - extension of Atom?

Many people have thrown their 2c in to the ring to say that BlogML should really sit as a schema extension on top of Atom; and some people have even suggested in such a way as to suppose that I really don't understand what xml schema is all about.  Well let me set the record straight...

A few weeks ago I wanted to release an update to my own blogging engine and, because there was a minor data change I thought that it would be nice to export the data before running the update, change the files and then re-import it afterwards.  As I looked into this more I decided that I really should do it in a standards-compliant manner (if possible) and so then set out to: A) talk to people about it, B) rtfm some of the existing formats and C) write down my requirements.

Initially I spent a great deal of time trying to work out whether or not to use Atom - up until then I pretty much just thought of Atom as "the runner-up" to Rss.

Atom looked interesting although it was really hard to tell what the authors were trying to do with it; it was also apparent that the authors were much more eager to write about it than to actually publish a formal schema of it.  Here's a note for any future "type" builders: if you are planning to create a schema that you want the world to consume then you really should consider publishing the schema files - not just show examples of what it looks like as xml!

After reading several documents about Atom:

...it really did appear that it would be quite complicated to try and build on.  For example, which types support extensibility?  Do I version it?  Will it change (again)?

If anybody actually has the schema definition for Atom - and is interested in having a meaningful discussion about extending it to BlogML then please leave me a comment or send me your e-mail address via my contact form.  In the meantime I'll continue to push forward with writing unit tests for the tools that I've built for BlogML and getting BlogML released.

posted on 9/5/2005 11:54:56 PM ( 2 Comments )


Do we need BlogML?

I mentioned before that Robert Scoble briefly mentioned BlogML on his Scobleizer blog over the weekend:

   http://radio.weblogs.com/0001011/2005/09/04.html#a11041

And, of course, this started up some discussion about why such a thing is necessary and also people stating that this functionality already exists within Atom.  The stories posted in the comments are quite abstract so I won't try to second-guess whether people are calling for BlogML or whether they are opposed to it.  The point that I'd like to make is that people aren't really talking about is how this problem actually gets solved.  In as far as I know, there is not a single, standard way to export the ENTIRE content from one Wiki/Blog and import it into another.  Please correct me if I'm wrong on that.  If we agree on that then we can agree that only something like BlogML will solve this problem. 

As I've said already, once I've fully tested the tooling that has been created to support BlogML I will release it publicly.  When that is done you will have 2 choices when it comes to migrating your blog (or, more importantly, writing tools that can do it as part of another process - such as a version release), you can either do what you do today, or you can use BlogML and it's tools and libraries... Simple!

posted on 9/5/2005 5:49:06 AM ( 1 Comments )


BlogML just got Scoblized

I awoke this morning to a raft of feedback in my e-mail about BlogML and I knew that something was up.  Sure enough, after a small amount of searching I noticed that it had been "Scoblized":

    http://radio.weblogs.com/0001011/2005/09/04.html#a11041

This is good as it gives BlogML visibility to more people and will help to raise the awareness of it. 

At the moment I'm still dogfooding BlogML and, mostly the tooling that has been created to support it.  Yesterday I successfully round-tripped all of the content from this online version of my blog to a test site on my server at home.  I probably still need a couple of days to get some more unit tests written around the tooling.  The highest priority is that the tooling must be bullet-proof; in other words, I need to feel confident that no content is lost when people run import/export operations over blogs.  Currently there hasn't been enough testing around embedded attachments

I feel very confident that the schema file and the tooling will be publicly available within the next couple of days and that I'll be able to announce some blog-engine support for it soon after that.  Stay tuned!

posted on 9/5/2005 12:26:06 AM ( 0 Comments )


BlogML - attachments

The other Mitch blogged about BlogML and made a couple of requests around content migration - specifically how attachment data would be treated.  In this post I thought that I'd talk a little bit about how attachments are stored within the BlogML format.

As I showed the other day, BlogML supports an attachments node which hangs off of each posting.  The node allows for the attachment content to be optionally embedded.  Here's a couple of flow diagrams that explain how this will work in practice:


Non-Embedded attachments

Non Embedded Attachment

Embedded attachments

Embedded Attachment


As I mentioned previously, there are a number of tools that will ship alongside of the BlogML format.  One of these is a base "writer" class that implementors can use to perform all of the BlogML writing operations.  This ensures that content is formed properly and, specifically, that embedded attachments are encoded correctly.

There is also an SgmlUtil class that will do all of the "heavy lifting" around attachment discovery and auto-correction.  The upshot is that, for an implementor who has derived from the base writer class, adding attachments to their BlogML will look something like this:

this.WriteStartAttachments();
foreach (string imageUrl in SgmlUtil.GetAttributeValues(post.Description, "img", "src")){
    // false meanse non-embedded attachment
    this.WriteAttachment(imageUrl, false); 
}
this.WriteEndElement();

posted on 8/31/2005 1:44:51 AM ( 2 Comments )


BlogML: what will it look like and how it will be supported

Here is a real simple look at the basic type structure of the BlogML schema.  I'll follow it up with some detailed posts over the next week or so outlining what data each type contains:

BlogML Type Hierarchy

As you can see, a blog has author details, posts and categories, while posts contain a rich set of information about each post and allow for things such as attachments - both linked and embedded.

The Support Tools

So far, there is a project that will contain the schema files for BlogML and that will also contain some tools to help consumers work with it.  Presently, there is a Validator class which works with both streams or XmlTextReaders and validates them against the schema.  There's also a public method for returning the schema as a stream.

There's also an abstract BlogWriter class which has all of the methods for writing BlogML format.  Basically you just inherit from it and implement the InternalWriteBlog method to write your blog out as BlogML.

Finally, there is a BlogMLSerializer which is a strongly-typed wrapper around XmlSerializer to support serialization to and from BlogML format.


Here is a code dump showing how I implemented the BlogWriter for SingleUserBlog to create BlogML from my data access layer:

namespace MarkItUp.SingleUserBlog.Web.Administration
{
    internal sealed class BlogMLSubWriter : BlogMLWriterBase
    {
        protected override void InternalWriteBlog()
        {
            this.WriteStartBlog(Globals.BlogTitle, Globals.BlogSubTitle);
            this.WriteAuthor(Globals.UserLoginName, Globals.FromEmail);

            // adding categories
            this.WriteStartCategories();
            foreach (Category category in DataLayer.Instance.ListCategories())
            {
                this.WriteCategory(
                    category.Id,
                    category.DisplayName,
                    category.DateCreated,
                    category.DateModified,
                    category.IsApproved,
                    category.Description,
                    null);
            }
            this.WriteEndElement(); // categories

            // adding posts
            this.WriteStartPosts();
            foreach (Post post in DataLayer.Instance.ListPostsByAll())
            {
                this.WriteStartPost(
                    post.Id,
                    post.DisplayName,
                    post.DateCreated,
                    post.DateModified,
                    post.IsApproved,
                    post.Description,
                    false
                    );

                // adding categories
                CategoryCollection categories = DataLayer.Instance.ListCategoriesByPost(post.Id);
                if (categories.Count > 0)
                {
                    this.WriteStartCategories();
                    foreach (Category category in categories)
                        this.WriteCategoryReference(category.Id);
                    this.WriteEndElement();
                }

                // adding comments
                FeedbackItemCollection feedbacks = DataLayer.Instance.ListFeedbackByPost(post.Id);
                if (feedbacks.Count > 0)
                {
                    this.WriteStartComments();
                    foreach (FeedbackItem feedback in feedbacks)
                    {
                        this.WriteComment(
                            feedback.Id,
                            feedback.DisplayName,
                            feedback.DateCreated,
                            feedback.DateModified,
                            feedback.IsApproved,
                            feedback.Username,
                            null,
                            feedback.UserUrl,
                            feedback.Description,
                            false);
                    }
                    this.WriteEndElement();
                }

                this.WriteEndElement();
            }
            this.WriteEndElement(); // posts

            this.WriteEndElement(); // blog
        }
    }
}

posted on 8/29/2005 12:27:47 AM ( 0 Comments )


I think that I'm reaching Blog Nirvana!

I've been blogging quite a bit about BlogML recently and how it will allow users to finally perform important operations on their blog such as:

  • Import/Export
  • Backup/Restore
  • Migrate (between environments)
  • Migrate (between blogging engines)

The schema is now pretty solid and I've created a workspace so that a couple of parties can fine tune it and collaborate over what tools are needed to support it.  The workspace location is http://codegallery.gotdotnet.com/BlogML and final tools and artefacts will ultimately be published on http://www.BlogML.com.

Initially the site will contain the schema file for the spec., an online Validator and also sample code which explains how to work with it.  From what I've heard so far it looks as though we might get support for this from a couple of blog engines fairly quickly and, for the others I imagine that we might publish standalone HttpHandlers so that you can easily add the functionality to your engine of choice.

I'll get things happening on the GotDotNet code gallery site after TechEd this week and then probably start getting the BlogML site up and running soon after that.

New Providers for SUB

The other cool news this week is that fellow Readify guy Rocky Heckman has written an Access data provider and a Sql data provider for SingleUserBlog.  This means that you can now run SingleUserBlog off of either of those databases or directly against the filesystem simply by changing a configuration entry.  Of course, because SUB now supports BlogML you can easily change between those at any time and have your content automatically migrated between them.

Now tell me... does that sound nice? :-)

 

posted on 8/28/2005 1:24:17 PM ( 0 Comments )


BlogML - progress

This morning I purchased the BlogML.com domain so that I will have a central place to publish the schema files and so that I can expose other tools from that site - such as an online validator to validate against the BlogML format.

I'm hoping to have the schema files and the other artifacts that have been created to support BlogML posted somewhere that they can be collaborated on until we have a final spec.  Once we have the spec. nailed then I can publish it on the BlogML.com domain and create other cool things such as online validators etc.  These files should be available by the end of the weekend.

This morning I also tested fully integrated BlogML import/export functionality into the admin console for SingleUserBlog.  I was able to do an export to BlogML then delete all of my posts and comments and then restore (import) from the saved file.  This was very cool.  Because SingleUserBlog supports multiple data providers I was also able to export my file based content, switch providers and then import it all in to a database.  This shows how cool BlogML will be for scenarios such as either migrating content or moving blog content between environments - such as moving from staging environment to a production environment.

Here is a link to the file that I imported and exported on my test system this morning so that you can see the format of BlogML: http://markitup.com/Data/Images/SUB.xml

posted on 8/27/2005 2:32:50 AM ( 0 Comments )


BlogML

Have you ever had a blog and wanted to move to another one?  Maybe you had an early version of .Text and wanted to move to an upgrade or to CommunityServer when it came out.  Maybe you had SingleUserBlog and wanted to move to DasBlog.  Did you end up doing it or was it just too difficult?  Read on to hear me explain about how this will be a no-brainer in the future...

BlogML - defining a standard for Blogs

A while back I wrote about my desire for there to be a common way to describe a Weblog and today I want to introduce what this will look like.  But first, here's a reminder of the vision...

BlogML - the requirements

As a blog user, I should have complete control over my content to the point that I can easily meet these 3 key requirements:

Abililty to port blog content between Blog Engines
This is the case where you might have a blog based on .Text version 0.95 and you want to upgrade to CommunityServer.  Having an "Export to BlogML" in .Text and an "Import from BlogML" function in CommunityServer would totally solve this problem.


Abililty to port blog content between Blog Engine Versions
Same as above.


Abililty to port blog content between Storage Providers
This is the case where you might be using a blogging engine such as SingleUserBlog and you are running off of one provider - such as DotTextProvider (where the content reads and writes to an existing .Text schema) and you want to continue to use SingleUserBlog but move to a new data structure.  In this case you would configure SingleUserBlog to use the DotTextProvider and run an "Export to BlogML" function, then you would re-configure your provider to your native provider and run the "Import from BlogML" function.


Abililty to easily back-up a blog
Here you would run some sort of scheduled job to automatically run the "Export to BlogML" function and save the output as a compressed backup file somewhere.


What is BlogML

I'm proposing that we define an Xml schema to fully define the structure and content of a blog.  To support this schema a blog would typically contain the abovementioned "Export to BlogML" and "Import from BlogML" functions which would emit the BlogML for that blog.  

The idea is that the schema would define a hierarchy of types that would allow you to fully describe the following types within a blog:

  • Blog
  • Categories
  • Entries
  • Comments
  • Trackbacks
  • Attachments
  • Content

At the bottom of this post is an example of what the output might look like for a Blog that had just a single entry.

In the next little while I will have the import/export features built into SingleUserBlog and will hopefully have concrete implementations (via HttpHandlers) for some other leading blogs too.


<?xml version="1.0" encoding="utf-8" ?>
<blog>
  <entries>
    <entry id="e1" title="My first post" date="2001-11-19T00:00:00.00000">
      <content base64="false">
        This is a blog post
      </content>
      <categories>    
        <category ref="cat2" />
        <category ref="cat1" />
      </categories>
      <comments>
        <comment
          name="Darren Neimke"
          email="
my@email.com"
          url="
http://my.blog.com"
          date="2005-08-01T00:00:00.00000"
          >
            This is the comment.
        </comment>
      </comments>
      <trackbacks>
        <trackback
          url="
http://my.blog.com"
          title="This is a trackback"
        />
      </trackbacks>
    </entry> 
  </entries>
  <categories>
    <category id="cat1" name="Category A" />
    <category id="cat2" name="Category B" parentref="cat1"/>
  </categories>
</blog>

 

posted on 8/26/2005 12:43:03 PM ( 17 Comments )