Dan Rosanova
http://danrosanova.wordpress.com/
@DanRosanova
Microsoft Integration MVP, author, speaker, distributed computing enthusiast.
Loading User Information from Channel 9
Something went wrong getting user information from Channel 9
Loading User Information from MSDN
Something went wrong getting user information from MSDN
Loading Visual Studio Achievements
Something went wrong getting the Visual Studio Achievements
Microsoft Integration MVP, author, speaker, distributed computing enthusiast.
Data/Contract Coupling in Messaging
Feb 11, 2013 at 9:47 AMI think XSD can be really useful, especially on very large scale distributed environments. That said I rarely see people use them well. To quote Marshall McLuhan: "The message is the medium". I think there is a lot of value in the intrinsic understanding of a message based on contract. Even things like content based routing. I understand message properties as a KVP concept, but that seems to just introduce another sort of coupling and reminds me too much of JMS.
I like XSD because you can make a stand alone message with some portable validation and this can be really useful in distributed (and especially occasionally disconnected scenarios). A SalesOrder schema that doesn't allow negative quantity and dollar amounts is a good example. My clients should know (both human and machine) that they cannot break these rules. Throw this into JSON and how do you enforce these basic rules - especially without introducing the dependency of a live service endpoint. I think the example about date formatting is a good one.
Again, this isn't really a defense of XSD per say. Most XML/XSD I've seen is little more than angle bracket delimited text files. I like XSD because I have tools that make it easy to work with, when I remember the old days of XML... I want to forget they ever happened - but as we look to build ever more connected systems and aspire to allow them to auto connect I don't see how you can do this without some sort of schema. Any sort of semantic web approach will require something the machine can use to infer context and meaning. I do wish it could be easier though.