views:

35

answers:

1

I work in the architecture and construction industry, but currently spend a lot of my time doing software development. After moving my software projects into Subversion repositories I've realized how much this industry really needs a similar system for design and construction documents. I've only been developing software for a year and half, so I'm far from qualified to take on a project like this. But I'm still interested in attempting it if nothing else for the learning experience.

I'd like to develop a server client system that runs over HTTP similar to SubVersion, but rather then managing raw files the system would store architectural design information. An open schema specification already exists for this type of data called Industry Foundation Classes. Yet currently information in this format is always stored in individual files, encoded as STEP or XML, and shared over simple FTP servers.

Instead I'd like to develop a way to store this information in a database so that subsets of the data can be easily queried or updated. In addition, I'd like to include versioning functionality similar to subversion where the central database tracks changes to the data as deltas, which can also be branched into multiple options.

I don't want to simply use SVN, because I'd like the system to be aware of the data it contains. For example a user may want to be able to query all the walls from the server. Yet, in order for that to work the server will need to understand that it may contain walls.

Obviously there are a number of specific questions I could ask regarding how I should go about this. But first I'm trying to figure out the big picture of how each layer will work and with what technology.

So far I've only been developing stand alone applications, primarily in C#.Net. So I'm new to any kind of network/server/client type development. Would it make sense to develop an application like this as a .NET Web service hooked into a SQL Server database? So requests to the server would be made through SOAP, and the data would then be returned as XML? SVN does something similar but through WebDAV correct? See the diagram below.

alt text

I'm not necessarily stuck on staying in the Microsoft/C#/.NET environment but it seems like the easiest option given that I'm already pretty comfortable with it and Visual Studio and a .NET WebService will automatically create the SOAP functionality. Is there a Java equivalent to a .NET Web service where I can focus on the object model and not the RCP interface? Would there be a significant advantage of using a RCP other then SOAP such as XML-RCP, JSON, or REST?

I'd really like to hear any other feedback from more experienced developers on how they would approach a project like this.

+1  A: 

This is a pretty big bite.

I would recommend looking at it a different way; Could you use git/svn/hg/etc as a content-neutral storage system, and have a complementary system you write that can query it for content and do content-aware operations against it? This way you don't have to re-solve all the problems and can stand on the work already done and vetted, and tools already written can be used to work with the 'raw' data.

Philip Rieck
Yes I definitely realize it's a pretty big bite. I understand that I could use an existing system like SVN to do the version control, and then create a custom interface to SVN. So if a user wants to request all the walls from revision 69 the system would request version 69 from SVN and then filter out the walls. The problem is then it does not really understand how the data is changing. A user may want to be able to find what objects (walls, doors, windows etc) were modified between two revisions. Maybe it would be best to at least start out using an existing system like SVN in the background?
Eric Anastas
Add "pre-commit hooks" into the Subversion such that, every time a new change is committed, a third-party IFC tool is used to extract a plain text list of all entities (walls) in this version, along with a checksum for the details of each entity (wall). Commit this file together with whatever is to be committed for this version. To check for changes, simply run "svn blame" on this file.
rwong