Create XSD from XML instance document – new JDeveloper 11gR1 feature

Lucas Jellema 3
0 0
Read Time:4 Minute, 38 Second

 

While looking into the XML functionality in JDeveloper 11g, I came across a feature that was added in the 11.1.1.1.0 release – July 2009: [Create] XML Schema from XML Document. Functionality previously found in commercial products such as XMLSpy, that enables us to make a head start with the development of XML Schema Definitions by using an existing XML Document as starting point.

In this article, I will very briefly demonstrate what this functionality allows us to do. And what its current limitations are.

In short: we can indicate an XML document and have an XSD created that derives its element, type and attribute definitions from the actual XML content in that document. Most XML documents do not represent the entire set of restrictions and freedom that the XSD will describe, so the generated XSD is only a starting point – but a very useful one all the same.

At this moment, the XML source document has to exist on the file system (we cannot feed the tool with a URL). The created XSD document does not work well with multiple namespaces – as well will see in this example. The tool does not create named (complexTypes) – only (nested) elements. It does create, when so requested, simpleTypes with enumerations that describe all occurring values in the source XML document. Such enumerations are usually required only for a limited number of elements. Of course removing the types we do not need is not a lot of work. Yet it would be comfortable to specify in more detail for which elements to create these enumerations.

The example: I have created a source XML document from the RSS feed on this weblog (https://technology.amis.nl/blog/feed).I have set the default namespace for this document. A snippet from the document:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns="RSS_NS"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>AMIS Technology blog</title>
	<atom:link href="https://technology.amis.nl/blog/feed" rel="self" type="application/rss+xml" />
	<link>https://technology.amis.nl/blog</link>
	<description>Weblog for the AMIS Technology corner</description>
	<pubDate>Sat, 03 Oct 2009 07:00:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
        <item>
	  <title>Book Review: Processing XML Documents with Oracle JDeveloper 11g by Deepak Vohra</title>
	  <link>https://technology.amis.nl/blog/6295/book-review-processing-xml-documents-with-oracle-jdeveloper-11g-by-deepak-vohra</link>
	  <comments>https://technology.amis.nl/blog/6295/book-review-processing-xml-documents-with-oracle-jdeveloper-11g-by-deepak-vohra#comments</comments>
	  <pubDate>Sat, 03 Oct 2009 07:00:24 +0000</pubDate>
	  <dc:creator>Lucas Jellema</dc:creator>
	  <category><![CDATA[General]]></category>
          ...

Next I have used the XML Schema from XML Document option in the New Gallery. I selected the source XML document:

and had the XSD generated. In the visual editor, the XSD looks like this:

No named types, only elements with nested elements based on nested, anonymous complex type definitions. Well structured. With a proper global target namespace. And with strange handling of the other namespaces, especially the dc:creator element in the {http://purl.org/dc/elements/1.1/}  namespace and likewise the atom:link element in the {http://www.w3.org/2005/Atom} namespace.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="RSS_NS"
            targetNamespace="RSS_NS" elementFormDefault="qualified">
  <xsd:element name="rss">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="channel">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="title" type="xsd:string"/>
              <xsd:element name="link" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:simpleContent>
                    <xsd:extension base="xsd:string">
                      <xsd:attribute name="href" type="xsd:string"/>
                      <xsd:attribute name="rel" type="xsd:string"/>
                      <xsd:attribute name="type" type="xsd:string"/>
                    </xsd:extension>
                  </xsd:simpleContent>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="description" type="xsd:string"/>
              <xsd:element name="pubDate" type="xsd:string"/>
              <xsd:element name="generator" type="xsd:string"/>
              <xsd:element name="language" type="xsd:string"/>
              <xsd:element name="item" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="title" type="xsd:string"/>
                    <xsd:element name="link" type="xsd:string"/>
                    <xsd:element name="comments" type="xsd:string"/>
                    <xsd:element name="pubDate" type="xsd:string"/>
                    <xsd:element name="creator" type="xsd:string"/>                     ...
      <xsd:attribute name="wfw" type="xsd:string"/>
      <xsd:attribute name="dc" type="xsd:string"/>
      <xsd:attribute name="atom" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

This XSD is great first step – that you then have to take a little bit further. But for getting started with an XSD document, this is an excellent feature!

About Post Author

Lucas Jellema

Lucas Jellema, active in IT (and with Oracle) since 1994. Oracle ACE Director and Oracle Developer Champion. Solution architect and developer on diverse areas including SQL, JavaScript, Kubernetes & Docker, Machine Learning, Java, SOA and microservices, events in various shapes and forms and many other things. Author of the Oracle Press book Oracle SOA Suite 12c Handbook. Frequent presenter on user groups and community events and conferences such as JavaOne, Oracle Code, CodeOne, NLJUG JFall and Oracle OpenWorld.
Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

3 thoughts on “Create XSD from XML instance document – new JDeveloper 11gR1 feature

  1. This is a nice feature for a free product. Nevertheless, the function acts a bit strange since it does not able to open XML-files that have a name that contains uppercase characters (on Linux anyway).

  2. …and yeah, I still strongly believe that converting relational content to XML, is like cursing in a chapel…but will create a lot of work for performance consultancy people…

  3. Lucas does it support WebDAV? I presume you used the full blown JDeveloper installation? The Java JDeveloper (smallest install base) doesn’t support XML very well (and can’t connect to a database). For those who are interested. Some people made once some attempts to create an XML Schema from relational table(s) via PL/SQL (XMLDB Realm only?). See for more info, halfway through the following thread…: http://forums.oracle.com/forums/thread.jspa?messageID=1515908

Comments are closed.

Next Post

Lucas @ Oracle Open World 2009 - sessions to attend, people to meet and too many presentations to present...

  Tomorrow morning I will travel to San Francisco (well, first to Redwood Shores) for this year’s of Oracle Open World – the largest Oracle party in the world. It is my fourth attendance in a row – and it is going to be the busiest by far. For starters, […]
%d bloggers like this: