Java, XML, and a New World of Open Components Simon St.Laurent New York Object Developers Group April 19, 1999 Copyright 1999 Simon St.Laurent Java/XML/Components • Why XML? • ‘XML Applications’ • Data Analysis and Application Development • Client-Server and Distributed Applications • Transforming XML • Linking XML • XML and the Web • Java and XML Development • Core XML-centric Standards: SAX and the DOM • Building toward Beans: IBM’s BeanML • Single-purpose: XWingML • Building on XML: JXML’s MDSAX & Coins • XML-oriented protocols: XML-RPC and XP • Futures Why XML? • Meaningful markup • Single approach can accommodate both document and data structures, and can integrate both within documents. • Good fit for object-oriented development strict hierarchies ensure clean structures • Relatively easy integration with legacy environments for creation, transport, presentation. Reusable Components for XML • Standard XML document structure allows separation of file handling from application architecture. • Separation of file handling permits creation of generic components for information processing. • Modular approach simplifies integration on many levels. Clean Integration with OOP • Hierarchical structures of XML map well to objects and properties. • Componentization made simpler by XML parsing works well with OOP development environments. • Program Composition made possible by XML mapping to object structures and late binding. • Needed: Data typing. Currently roll-your-own Why NOT XML? • Real programmers write their own highly optimized input/output routines • Can’t lock customers in to a proprietary and inscrutable file format. (Have to produce better programs!) • XML is verbose, especially with all those wasteful end tags. Binary formats are more efficient. What Is An XML Application? Different Concepts of ‘Application’ • Application as Data Structure • ‘Traditional’ SGML usage - “HTML is an application of SGML” • Data structures may define family of software applications • Application as Network Architecture • Web application or client-server application framework • Not necessarily programming - typically integration-focused • Application as Software Package • ‘Traditional’ software development view of applications • May involve program or component integration XML for Document Processing • ‘Traditional’ document-centric approach focuses on using Java as tool for managing, presenting, transforming XML documents. • XML documents the focus; application built to support documents, not application-specific documents. • Can be used for both generic (non-vocabularyspecific) approaches and custom apps built for particular vocabularies, document types. XML for Program Construction • Beyond Resource Files • XML application structure and content mapped into document structure • Smoothes compile cycles by permitting runtime program construction based on document content • Simplifies repetitive programming chores like GUI construction. Data Analysis and Application Development • Data modeling as the first step in building an XML-centric application • Data modeling as task of SGML consultants is that always needed anymore? • Key question: Am I building an application to support documents, or documents to support an application? Data Modeling and Application Development • Need to involve application developers in data modeling process at early stage • Programmer’s perspective: develop XML first, or object first? Either approach is possible, though each more appropriate to particular situations. • Additional consideration may be needed for application-data model integration. Transforming XML • Extensible Style Language (XSL) provides template-based transformation language • Architectural Forms (from SGML’s HyTime) provides attribute-based transformations. David Megginson’s XAF implementation applies this to XML. • SAXON and MDSAX provide filters for programmatically transforming XML. • Transformations may be document to document, DOM tree to DOM tree, or events to events. Linking XML • A critical piece of Web functionality that is seriously missing-in-action. • Previous Working Draft: 3/3/98. Requirements Documents just issued. • XLink’s approach is document-centric, but may be a good tool for modeling relations among objects as well as documents. XML and the Web: Integrating XML and Legacy Transport • XML was designed for the Web, with HTTP transport in mind, though any file-oriented approach is acceptable. • XML’s ‘natural fit’ with structures used for HTML simplifies implementation using traditional Web server/browser applications as well as CGI and, of course, Java. Java and XML Development • Jon Bosak: ‘XML gives Java something to do.’ • Java provides among the best Unicode support (and useful tools for encoding conversions) • Java is extremely network-friendly • XML structures map easily to Java object structures. • Extremely portable across platforms Java and XML, continued • Many XML components are already available for Java, from parsers to XSL and XLink engines. • Many of the core standards for processing XML are developed with Java in mind SAX, DOM, etc. • Frameworks for Java XML development, like MDSAX and SAXON, are readily available. Parsing XML • The big leap from serialized documents to program structures, long the realm of experienced pros. • XML was designed to avoid the many nightmares involved in parsing SGML. • Parsing involves multiple stages of processing to return a complete picture of an XML document to an application. • XML parsing tends to be assigned to a pre-built component, leaving the application to process data rather than parse text files. Parsing XML - An Inside Look XML Document Core Document Parser DTD declarations XML DTD Well-formedness Syntax Checker Entity Resolution Attribute Defaulting Structure Validation Tree Builder Application Configurable Retrieval of External Resources DTD Resolver <?xml?> <!ELEMENT... <!ATTLIST... Parsing XML - The View from the Application <?xml?> XML Document M onolithic Parser Loads document Parses declarations Builds DTD Interprets document against DTD May validate May build DOM tree May provide XSL or XLink Services Application Core XML Processing - Parser to Application Communication • Two dominant standards: – Simple API for XML (SAX) • Event-based model ‘reads’ document to application handlers. • Supported by nearly all Java XML parsers. • developed by XML-Dev mailing list (SAX2 in dev.) – Document Object Model (DOM) • Tree-based model passes complete picture of document to application at processing conclusion • Java, JavaScript, IDL descriptions; Perl implementation in independent development. • developed by W3C. Level 1 complete, Level 2 in progress. Tools for XML Software Development • • • • Development environment issues Platform issues Network issues Personal preference as the typically overriding issue Three Approaches to Composing Applications with XML • Generic framework for use with any Beanoriented Development (BeanML) • Specific vocabulary aimed at particular area of Java development, with tools specific to that area (XWingML for Swing) • Generic framework that can support multiple specific vocabularies (MDSAX and Coins) Bean-Centered XML: BeanML • IBM’s AlphaWorks site offers Bean Markup Language tools, including a BeanML compiler and documentation. • BeanML uses very Bean-specific vocabulary to configure JavaBeans. • Small footprint (35K) • Free download from IBM: • http://www.alphaworks.ibm.com BeanML Code (Extract) <?xml version="1.0"?> <bean class="java.awt.Panel"> <property name="background" value="0xeeeeee"/> <property name="layout"> <bean class="java.awt.BorderLayout"/> </property> <add> <bean class="demos.juggler.Juggler" id="Juggler"> <property name="animationRate" value="50"/> <call-method name="start"/> </bean> <string>Center</string> </add> …</bean> XWingML • Similar to BeanML, but focused much more tightly on Swing GUI interfaces • Currently available as toolkit; GUI editor supposed to available soon. • Free download from Bluestone Software: http://www.bluestone.com Sample XWingML code <?xml version="1.0"?> <!DOCTYPE XwingML SYSTEM "file:///c:/XwingML/xml/xwingml.dtd"> <XwingML> <Classes> <Instance name="OpenFile" className="XMLOpenFile"/> <Instance name="SaveFile" className="XMLSaveFile"/> <Instance name="ParseFile" className="XMLParseFile"/> <Instance name="About" className="XMLAbout"/> </Classes> <JFrame name="MainFrame" title="Bluestone XMLEdit" image="icon.gif" x="10%" y="10%" width="80%" height="80%"> <JMenuBar> <JMenu text="File" mnemonic="F"> <JMenuItem icon="open.gif" text="Open..." mnemonic="O" accelerator="VK_O,CTRL_MASK" actionListener="OpenFile"/> <JMenuItem icon="save.gif" text="Save" mnemonic="S" accelerator="VK_S,CTRL_MASK" actionCommand="save" actionListener="SaveFile"/> <JMenuItem icon="save.gif" text="Save As..." mnemonic="a" actionCommand="saveas" actionListener="SaveFile"/> <Separator/> <JMenuItem text="Exit" mnemonic="x" accelerator="VK_X,CTRL_MASK" actionListener="com.bluestone.xml.swing.XwingMLExit"/> Building on Document-Oriented Components • The existence of standard interfaces to XML documents - SAX and the DOM - has given rise to a number of component possibilities. • SAX Filters, which accept SAX events as input and generate SAX events as output, are one key component architecture for Java-based XML development. Layered Filter Structures - Origin Application Document Event Handler DTD Event Handler Error Event Handler Entity Event Handler Events SAX Parser <?xml?> XML Document Copy right 1998 JXML, Inc. Permission is granted f or redistribution and reuse that includes this label. Adding a Filter Application List of Links Filters can be inserted in the path between the parser and the application, providing generic functionality to many applications. Document Event Handler XLinkFilter DTD Event Handler Error Event Handler Entity Event Handler Document Event Handler Events SAX Parser <?xml?> Copy right 1998 JXML, Inc. Permission is granted f or redistribution and reuse that includes this label. XML Document Adding a Filter II Application List of Links Document Event Handler XLinkFilter DTD Event Handler Error Event Handler Entity Event Handler Document Event Handler Stack of Elements Document Event Handler LocationFilter Events SAX Parser Multiple filters may be layered and even connected to provide additional generic functionality. <?xml?> Copy right 1998 JXML, Inc. Permission is granted f or redistribution and reuse that includes this label. XML Document Adding a Filter III Application List of Links Document Event Handler XLinkFilter DTD Event Handler Error Event Handler Entity Event Handler Document Event Handler Stack of Elements Document Event Handler LocationFilter Transformed Events Stack of Namespaces Document Event Handler NamespaceFilter Events And so on.... SAX Parser <?xml?> Copy right 1998 JXML, Inc. Permission is granted f or redistribution and reuse that includes this label. XML Document Encapsulating Filters JXML’s MDSAX provides an overall architecture for encapsulating SAX processors as well as a set of prebuilt filters that can be applied to particular situations. List of Links Application Document Event Handler DTD Event Handler Error Event Handler Entity Event Handler MDContext (Parsing Context) Document Event Handler Extended Object Reference XPointer Context MDAppHandler XLinkFilter Document Event Handler Document Event Handler Stack of Elements MDElementType (required by MDSAX) Transformed Events Stack of (MDServlet provides support for using this in server-side document processing.) Namespaces Document Event Handler NamespaceFilter Events SAX Parser XML Document <?xml?> Available for free download from http:/www.jxml.com Copy right 1999 JXML, Inc. Permission is granted f or redistribution and reuse that includes this label. From Context to Construction • MDSAX goes beyond layered filter processing, using its own set of XML tools to build the pathways that events will follow. • ContextML is an extensible markup language that developers can use to specify the paths events will follow. Effectively, MDSAX builds itself based on a set of XML documents. • Coins lets you re-serialize your objects. From Processing to Program Construction The bootstrap process for MDSAX Bootstrap Document for MDSAX <context> <element/> <documentRouter> <elementRouter key="context"> <x key="displayOutput" resultClass="com.jxml.mdsax.examples.output.DisplayOutput"/> <x key="context" resultClass="com.jxml.mdsax.MDContextFactoryImpl"/> <x key="documentRouter" resultClass="com.jxml.mdsax.MDDocumentRouterFactory"/> <x key="stack" resultClass="com.jxml.mdsax.MDFilterStackFactoryImpl"/> <x key="element" resultClass="com.jxml.mdsax.MDElementFactoryImpl"/> <x key="elementRouter" resultClass="com.jxml.mdsax.MDElementRouterFactory"/> <x key="passAll" resultClass="com.jxml.mdsax.MDPassAllFactory"/> <x key="trace" resultClass="com.jxml.mdsax.MDTraceFilterFactory"/> <x key="display" resultClass="com.jxml.mdsax.MDDisplayFilterFactory"/> ContextML document for App <context> <attList> <att name="ID" type="id" status="#IMPLIED"/> </attList> <elementRouter> <stack key="buttonGroup"> <element/> <xs resultClass="javax.swing.ButtonGroup"/> </stack> <stack key="button"> <element/> <xs resultClass="javax.swing.JButton"/> </stack> <stack key="radioButton"> <element/> <xs resultClass="javax.swing.JRadioButton"/> </stack> <stack key="panel"> <element/> <xs resultClass="javax.swing.JPanel"/> </stack> <stack key="sFrame"> <attList> Document describing GUI <sFrame title="Simple" ID="frame1" metalButton="MetalButton" motifButton="MotifButton" windowsButton="WindowsButton"> <panel constraints="Center"> <button text="Hello, world"> <buttonProperties mnemonic="h"/> </button> <buttonGroup ID="bg1"/> <radioButton text="Metal" ID="MetalButton" actionCommand="javax.swing.plaf.metal.MetalLookAndFeel"> <buttonProperties buttonGroup="bg1" mnemonic="m"/> <action eventDestination="frame1"/> </radioButton> <radioButton Program Construction in Use Astronomical Instrument Markup Language (AIML) • NASA and Century Computing are building a markup language/Java combination supporting remote control of instruments in hostile environments. • XML provides foundation for descriptions of instruments, input/output • AIML is a subset of more general IML could be used with any instruments Connecting Processes over Networks: XML-RPC and XP • Combining the easy exchange and creation of XML documents with program composition and similar method-oriented strategies • Using XML to relay data and command information among dissimilar systems • Prospect of using COBOL output to build Java programs... XML-RPC • Remote Procedure Call Origins • Uses HTTP as carrier – allows routing through firewalls without special configuration – can rely on HTTP security, authentication, session management • Developed by Frontier, Microsoft • Implementations in Java, Perl, Python, etc. • www.xml-rpc.com XML-RPC Samples POST /rpchandler HTTP/1.0 User-Agent: MyClient/1.0 (WinNT) Host: mycomputer.simonstl.com Content-Type: text/xml Content-length:169 <?xml version="1.0"?> <methodCall> <methodName>test.returnId</met hodName> <params> <param> <value><string>ASCII</string></v alue> </param> <params> </methodCall> HTTP/1.1 200 OK Server: JavaWebServer/1.1 Content-Length: Content-Type: text/xml Date: Fri, 12 Feb 1999 19:01:32 GMT <?xml version="1.0?> <methodResponse> <params> <param> <value><string>Server 12345</string></value> </param> </params> </methodResponse> XP - Extensible Protocol • IETF - http//www.ietf.org/internetdrafts/draft-harding-extensible-protocol00.txt • Sets up two streams passing information as request/response • Java implementation available • “To extend XML from a class of data objects into a protocol is to extend the rules for constructing a single document into rules for constructing two interrelated streams of documents. Accordingly, we introduce mechanisms for handling both the sequential and interrelated aspects of the document streams.” XML Component Futures • Shift from code-oriented development to document-oriented integration • Small components can make a difference moving from large projects to large collections of smaller projects • Open source, open process, and the ability to compete in this market • The end of CORBA and COM? Probably no, but... XML Architecture Futures • Distributed processing on heterogeneous systems • Debugging simplified! • Client and server architectures can use identical components (and middleware too!) • Less dependence on proprietary approaches Resources General simonstl.com - essays, XLinkFilter project, and more: http://www.simonstl.com XMLsoftware.com - a directory of software and components for processing XML: http://www.xmlsoftware.com Robin Cover’s XML pages - a guide to everything XML: http://www.oasis-open.org/cover/xml.html Café Con Leche - An almost daily guide to XML: http://metalab.unc.edu/xml/ Resources Development Frameworks and Tools IBM’s AlphaWorks: (All kinds of XML projects, mostly Java) http://www.alphaworks.ibm.com JXML: (MDSAX and Coins) http://www.jxml.com SAXON (a framework for processing SAX events) http://home.iclweb.com/icl2/mhkay/saxon.html Docuverse DOM (free DOM implementation) http://www.docuverse.com/domsdk/index.html Resources More Components John Cowan’s XML index (ParserFilter, NamespaceFilter, much more) http://www.ccil.org/~cowan/XML/ Free XML Software (maintained by Lars Marius Garshol) http://www.stud.ifi.uio.no/~larsga/linker/XMLtools.html James Clark’s XML Resources (XML tools in Java, C, and C++) http://www.jclark.com/xml/