# Thursday, August 16, 2012

Extending XSLT with Java and C#

The world is not perfect. If it were, all data you have to process would be in XML and the only transformation language you would have to learn would XSLT. Because the world is not perfect, sometimes you have to find ways to bridge different systems that were not designed to work together.

The most popular XSLT processors have been designed, from the very first release, to take advantage of the framework on which they run; for example Apache Xalan-J and Saxon allow calling Java functions. In this article, we will explore a variety of techniques for invoking native code from XSLT to extend the language beyond its capabilities.

The first example demonstrates how to leverage the Date and Time formatting capabilities available in the Java platform. Imagine you have a list of dates in an XML file that you have to display in a HTML page using different formats. The following screenshot shows a simple XML file with three repeating elements called “date”, each has three attributes: “year”, “month” and “day”.




A separate XML document has the date formats. Each element “entry” has an attribute format with the “picture string” which describes how and which part of the date should be displayed.




Our goal is to merge the information from the two XML documents into a simple HTML page which will display each date in multiple formats.

XSLT 1.0 lacks date and time formatting functions but, Java provides two classes: java.util.Calendar and java.text.SimpleDateFormat, which solve our problem. We just need to create a Java class with a single public static method that will be called from our XSLT transformation. In the following screenshot, we see the Stylus Studio Java extension editor which features syntax coloring, background syntax checking and integrated Java compiler invocation.




When designing Java extension functions for XSLT, it is important to remember that the function parameter type has to be compatible with the processor type mapping. Apache XalanJ defines the following type mapping between XSLT and Java.


XSLT Type 

Java Type 

Node-Set 

org.w3c.dom.traversal.NodeIterator 

String 

java.lang.String 

Boolean 

java.lang.Boolean 

Number 

java.lang.Double 

Result Tree Fragment 

org.w3c.dom.DocumentFragment 


Extension function support is implemented differently on each XSLT processor which makes it difficult to port XSLT code from one processor to another.

In order to run a transformation that makes use of Java code, you have to ensure that the compiled Java code (.class) is reachable from the CLASSPATH. This is a pesky setting which requires changing the environment variable called CLASSPATH. Fortunately Stylus Studio provides a flexible mechanism to include the Java compiled code (directories or Jar files) at the project level and, if the code is located under the project, Stylus Studio saves the path using a relative form. Therefore, you can move your project to a different location without fear of breaking the link between your XSLT and your Java code.




In the following screenshot, we see how to bind a Java class using XalanJ. The Xalan Java namespace declaration is at line 4, the function invocation is at line 19. Notice that the function name is formed with the prefix java: then the full Java class name the “.” and the function name. The Preview shows the transformation result.




Running the same transformation with Saxon requires a small change. The Java class binding is at line 4; the namespace URI is composed of the prefix “java:” and the full Java class name. The function invocation uses the namespace prefix “date:” and the Java method name. The same result is generated in the Preview window.




One major advantage in testing the code with Saxon in Stylus Studio is the ability to run the transformation in the XSLT debugger and step into the Java code to debug the Java extension, which is unique to Stylus Studio. In the following screenshot we see the execution suspended inside the extension function “printDate”. The Call-stack window shows from which XSLT template we came in and which parameter values were passed. The Variables window shows all variables in scope with their values. This is an unparalleled experience for the developers who usually have to write hundreds of trace messages in a log file in order to debug their code.

A side note: notice the second item from the top, in the Call-stack window. The new Saxon Just in Time XSLT to Java compiler generates Java code on the fly!




Stylus Studio mapping tool also provides full support for Java extension functions. In the following screenshot you see how to register a Java extension class, browsing the project CLASSPATH.




Once a Java extension class is registered, all of its functions are exposed. To add a new java function call, simply click on the Java Functions menu item.




With a few additional links, the mapping is complete. The XSLT visual mapping tool allows XSLT developers to take advantage of Java libraries developed by others without the need to know the underlying technical details.




Java is not the only language that can be employed for designing extension functions. If you are developing on Microsoft .NET framework and make use of XslCompiledTransform XSLT processor, you have access to the entire framework API. The following screenshot shows how to implement the date formatter in C# but we could have used JScript as well. The inline code embedded in the XSLT transformation is compiled into MSIL (Microsoft Intermediate Language) by the Just in Time C# compiler.

Inline extension functions have several logistic benefits: you don’t need to compile a separate module and you don’t need to maintain your logic in a different file.




If you need to debug such a transformation, Stylus Studio comes to the rescue Just switch the processor to XslTransform in the XSLT editor scenario dialog and you will be able to debug your code step by step.





In the following screenshot you see the execution suspended inside XSLT match template “date”. The Call-stack window shows the current stack and the variable window shows all variables in scope with their values and XSLT context which represent the XML node currently processed.




The msxsl:script block allows you to import third party .NET libraries which open the door to virtually infinite possibilities. In the following XSLT code fragment, an extension function called “fromEDI” makes use of XML Converters for .NET to parse an EDI file and to return an instance of XPathNavigator which can be manipulated in the XSLT as an XML node.

<msxsl:script implements-prefix='ut' language='C#'>
    <msxsl:assembly href="c:\Program Files (x86)\XML Converters for .NET\bin\XmlConverters.dll"/>
    <msxsl:using namespace="DDTek.XmlConverter" />
    <msxsl:using namespace="System.IO" />
<![CDATA[
    public XPathNavigator fromEDI(string ediPath)
    {
        ConverterFactory factory = new ConverterFactory();
        string url = "converter:EDI?" + ediPath;
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.XmlResolver = factory.CreateResolver();
        XmlReader reader = XmlReader.Create(url, settings);
        XPathDocument doc = new XPathDocument(reader);
        return doc.CreateNavigator();
    }
    ]]
>
</msxsl:script>

 <xsl:template match="/">
    <xsl:variable name="EDIXML" select="ut:fromEDI($EDI)"/>




We hope you enjoyed reading this article. If you have any questions, do not hesitate to contact us.

You can download the Project Zip file by clicking here.

- Stylus Studio Team


 Technical Support


 Follow us on Twitter


 Connect on Facebook
 

posted on Thursday, August 16, 2012 3:07:37 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Tuesday, July 24, 2012

IVI Technologies Announces Stylus Studio X14 Release 2 Is Now Available

Latest update includes Visual Schema Designer for Relax NG, Saxon 9.4, XSLT Editor Enhancements and More


Miami, FL - July 24h, 2012 – IVI Technologies, the master distributor of Progress® DataDirect® Stylus Studio®, the award-winning XML Integrated Development Environment (IDE) from Progress Software, today announced the immediate availability of the Stylus Studio X14 Release 2 XML Enterprise Suite. This latest update includes a sophisticated Visual Schema Designer for Relax NG and support for the most recent XML technologies and standards.

The Stylus Studio product is marketed and sold through IVI Technologies. IT professionals can download a free trial of the Stylus Studio X14 XML Enterprise Edition Suite today at: http://www.stylusstudio.com/download.

"Stylus Studio X14 Release 2 provides support for the latest XML trends, including recent developments on XSLT 3.0 and XQuery 3.0 and adds a new two-way editor and visual designer for the Relax NG schema language," said Ivan Pedruzzi, Product Manager. “Thanks to a vast feature set which includes database access, legacy data conversion and transformation capabilities, Stylus Studio remains “The Developers’ Choice” for XML no matter the size or sophistication of your IT department.”

"Relax NG is often a better alternative to traditional schema languages like DTD and XML Schema but its adoption is frequently challenged by the lack of sophisticated support in XML tools. This will be no longer an obstacle, thanks to the Stylus Studio X14 Release 2,” Pedruzzi added.

Features and enhancements available in X14 Release 2 include:

New Visual Schema Designer for Relax NG

  • Synchronized split-pane interface that simultaneously shows both a visual Relax NG Diagram and the underlying code
  • Support for XML Schema built-in Simple Types
  • Support for Facets (Parameters)
  • Support for navigating local and external references in the visual diagram
  • Code folding

XSLT Editor Enhancements:

  • Saxon 9.4 - with Just-In-Time Compiler
  • In memory XSLT to byte code generation
  • Additional Support for XSLT 3.0 Working Draft
  • Added new global option to set the default XSLT version

XML Schema Editor Enhancements:

  • Saxon 9.4 Schema Processor - with Just-In-Time Compiler
  • The Saxon processor can now be used to validate XML Schemas
  • The Java built-in schema processor now can be used to validate XML Schema

New XML Converters For Java 6.2:

  • Updated support for ACORD/AL3 from 2009 to 2012
  • New and Updated URI options
  • EDI Converters fixes and enhancements

Pricing and Availability

Stylus Studio X14 Release 2 is now available for free trial download, and for purchase at the Stylus Studio online shop. Stylus Studio X14 Release 2 XML Enterprise Suite and Stylus Studio X14 Release 2 XML Professional Suite are aggressively priced. Volume discounts and competitive upgrades are also available – please visit the online shop for a complete price list. For more information about enterprise licensing, or for any questions about purchasing Stylus Studio products, contact us, or send an email to: StylusStudio@IVITechnologies.com.

About IVI Technologies

IVI Technologies is a global software reseller and a technology company representing world-class software in the integration market space. The company is the primary go-to-market vehicle for the Progress® DataDirect® Stylus Studio® offering, the industry leading XML IDE. Contact IVI Technologies via email at: stylusstudio@ivitechnologies.com or directly at: (305) 748-4155. DataDirect, Progress and Stylus Studio are trademarks or registered trademarks of Progress Software Corporation and/or its subsidiaries or affiliates in the U.S. and other countries. Java and all Java-based marks are trademarks or service marks of Sun Microsystems, Inc. in the U.S. and other countries. Any other trademarks contained herein are the property of their respective owners.

www.stylusstudio.com

posted on Tuesday, July 24, 2012 3:47:13 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback
# Wednesday, June 13, 2012

Life Cycle of a Purchase Order: EDI X12, XML and PDF

Most of the business transactions B to C (Business to Consumer) today are done by credit card over the web. On the B to B (Business to Business) the volume and the velocity require a different approach, where computer systems do most of the work. These systems are called supply chain networks and their job is to connect buyers and sellers electronically to exchange goods of any kind.

Supply chain networks have existed for many years but were difficult and costly to integrate, which restricted their market to the elite. Their inability to accept medium and small businesses forced a large portion of the supply chain networks out of business.

The survivors learned the lesson and started to offer a scaled down version of their services, increasing the size of their customer base. The larger the network, the greater the chance of success, especially in growing markets such as China and India.

Computer hardware evolves at a fast pace, as Moore’s law states: every two years CPU makers double the number of transistors in a silicon die, improving the lithography process. While IT organizations tend to upgrade their servers every 3 years, data architects are slow to move from time tested successful standards.  These standards provide the back bone of systems’ interoperability.

One of greatest examples of successful standards for data interchange format is Electronic Data Interchange (EDI), created by the National Institute of Standards and Technology (NIST) in 1996.  EDI’s goals were simple: a text based format with a well-defined structure, which allows two entities to exchange information.

The beginning of the formal definition reads: <<”the computer-to-computer interchange of strictly formatted messages that represent documents other than monetary instruments.”>>.

EDI was an instant hit. A variety of standard bodies specialized in industry verticals creating their own dialects. Here are a few examples: 

·         Accredited Standards Committee X12

·         United Nations/Electronic Data Interchange For Administration, Commerce and Transport (UN/EDIFACT)

·         Health Insurance Portability and Accountability Act of 1996 (HIPAA).

EDI is the legacy format that supply chain systems still use today.  Industry specific EDI dialects perform millions of transactions per day.  EDI standards boards have also come out with an XML version of the dialects but the legacy format is still the de-facto standard.

Now in order to participate in these  markets, you have to understand how to interpret EDI transactions, and how to respond to a partner.  Walmart uses EDI to allow it to scale its business, requiring all suppliers to interact with them using EDI to send documents such as Purchase Orders and Invoices. http://www.walmartstores.com/Suppliers/248.aspx

Before we start, let’s refresh our memory on  the definition of a Purchase Order. Wikipedia states:
<<”A purchase order (PO) is a commercial document issued by a buyer to a seller, indicating types, quantities, and agreed prices for products or services the seller will provide to the buyer.”>>

In the following image we see a Purchase Order formatted according to EDI X12 850 in its raw form.

Company “Office Supply” wants to purchase digital pens and appropriate paper blocks from company “Smart Pen” and deliver the products to company “OfficeY”.

Unfortunately, this is not like XML.  You may guess that fields are separated by a special character but there is no markup around them, therefore is very difficult to interpret the values. In the following image we see the same EDI transaction in the Stylus Studio EDI to XML Module.  This is a very useful tool for analyzing EDI documents. We can click anywhere and Stylus Studio shows us which field we are on, thanks to its vast EDI repository. When we right click on a value that represents a code, we can see the description.

Now that the purchase order is in XML we can take advantage of several technologies to manipulate and to store the data.

The EDI to XML module can be used to validate both the structure, the code list values and in case of errors, provide suggestions to work around the problem. For example, it’s quite common to encounter a transaction in which some mandatory fields are missing or the field type does not match the specification. In these situations Stylus Studio flags the error and allows the user to overwrite the field definition to accommodate such customizations.

In Stylus Studio, almost any format can be represented as XML. In the screenshot below the XML Editor is used to edit our purchase order.

The XML representation can be customized with a variety of parameters. You may decide to generate a very verbose form with long element names. You may also use informative comments that provide a detailed description for each field. When looking at code values in the raw form, they are usually very cryptic terms made of a few characters, which can now be associated with detailed descriptions.  The example below shows you that the code value BP stands for “Paid by Buyer”.

 

When an EDI transaction comes in, the first thing we want to do is to archive it in a database. Often there are regulations that require electronic copies to be maintained for several years and storing the transaction in a relation database is the most common place where it can be archived. The following screenshot shows how the Stylus Studio XQuery mapping tool can help you to onboard the transaction into a database. In our example we are using Microsoft SQL Server 2008.

We would like to point out a benefit of using the DataDirect XQuery engine, bundled with Stylus Studio. This combination allows you to store primitive types such as the order id and the order date as well as the entire input document into an XML type column.

 

After the XQuery execution we can see a new record has been created in the table.

EDI and XML share similar benefits. They are great for making computer systems communicate, but human beings need some help to make this information easy to interpret. The following screenshot shows how Stylus Studio XML Publisher can be used to produce an appealing PDF document that can be used to display on the screen and on printed paper.

 

We hope you enjoyed reading this article. If you have any questions, do not hesitate to contact us.

You can download the Project Zip file by clicking here.

- Stylus Studio Team

 Technical Support
 Follow us on Twitter
 Connect on Facebook  

posted on Wednesday, June 13, 2012 2:58:54 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0] Trackback