Design Tools
The previous two sections divided components into data and content manipulation categories. How do you know if XML is data or content? It depends on the design of the XML formats used by your system. When you plan to use formats that interact primarily with application code or database servers, you design them to reflect the rigid structures and datatype focus used by these systems. When you plan to use formats that primarily drive the organization of information delivered to users, you design them with flexible structures and semantic focus used by people. These decisions should occur early in the development process and guide how the entire team uses XML.
In the case of data-oriented formats, the design process is similar to that for programming data structures or database schemas. In the case of content-oriented formats, the design process is similar to information design or user requirements analysis. In either case, the designer needs to focus on the structure of information rather than the syntax for DTDs or Schema. Design tools facilitate the conceptual design of documents and then generate the appropriate syntax. A graphical designer works much like a data modeling tool. Designers use a tree metaphor to create the basic element structure and then use dialog boxes to configure the allowable element and attributes data. In practice, the generated syntax may need manual tuning, especially for very complex formats, but tools can usually cover most of the cases.
There are currently two primary choices for graphical design tools: Altova's XML Spy Integrated Development Environment and TIBCO TurboXML. On paper, they provide much the same feature set. Both provide tree, inspector, and syntax views of XML formats. Both support DTDs and Schema. In fact, many organizations use these tools to convert their existing DTDs to Schema. Both do a pretty good job of generating the correct syntax. In practice, they provide interfaces that are different enough to yield distinct experiences. Many designers develop a strong preference for one interface over another after using them, so you should thoroughly evaluate both before choosing one.