Seeking advice on design of XML,DOM,XSchema based application

Subject: Seeking advice on design of XML,DOM,XSchema based application
From: "Amit Rekhi" <amitr@xxxxxxxxxxxxx>
Date: Fri, 8 Jan 1999 14:49:08 +0530
Hello,

I have just completed the design of an XML based application which I have
tried to explain below.
I would be grateful if anyone would provide their comment/criticism on my
approach before I begin my implementation phase.

Given below is the AIM of the application described in 4 points
labelled AIMN (N = 1 to 4).
Intermingled with the AIMs is my design approach labelled
MY DESIGN APPROACH TO AIMN

SCENARIO
The scenario in which my app. will operate is as follows :-
I have a bunch of XML files along with their XSchema files on my web server.
Each XML file has an associated XSchema file.
Each of my clients will have my
- XML based app. installed
- A web browser with an inbuilt XMLDOM parser installed. The browser
would have native XML support as well.


For an XML file requested by any of my clients from their native XML
browsers my client side app. will need to

AIM1. Capture the served XML file
AIM2. Emit a hierarchical tree control of the schema of served XML file
(present in the .xsc file) in HTML format
AIM3. Pass the emitted HTMLised tree control to browser for display

MY DESIGN APPROACH TO AIM1-AIM3

- As far as capturing the reqested XML file data is concerned
my app. will extract the XML DOM tree of the requested XML file from
the DOMXML parser embedded in the client XML browser.
- In order to emit a hierarchical tree control of the schema of the served
XML file (present in the .xsc file) in HTML format, the app. will :-
- Obtain the XSchema DOM tree
- Invoke an XSL processor and pass it the XSchema DOM tree and
XSL rules which will contain HTML templates to get the
tree control HTML DOM tree output.
- The XSL processor will output the tree control HTML DOM tree
which my app. will then pass to the browser

Let me illustrate my point with an example.
Let's say I have a MyFile.xsc which is :-

<XSchema>
<ElementDecl Name="Root">
<Model>
<Ref Element="Ele1" Frequency="OneOrMore"/>
</Model>
</ElementDecl>
<ElementDecl Name="Ele1">
<Model>
<PCData/>
</Model>
</ElementDecl>
</XSchema>

and it's instance MyFile.xml is :-

<?xml version="1.0"?>
<?XSchema System="MyFile.xsc"?>
<Root>
<Ele1>Test-Data1</Ele1>
</Root>


My app. would execute the following steps

- XMLDOMtree = Extract-from-browser-XML-parser(MyFile.xml);
- XSchemaDOMtree = Obtain-XSchema-DOM-tree(XMLDOMtree);
- HTMLDOMtree = XSLProcessor(XSchemaDOMtree,XSLrules);
- Pass the HTMLDOMtree to browser for display so that the browser
output would be something like


Root
|
|
Ele1

On clicking a node of the tree control on the browser the user will be
presented with the structure of the node (as in the XSchema) for him to
fill in data + the following options :-
- Make new instance of node
- Get previous instance of node
- Get next instance of node
- Get parent instance of current instance
- Get child instance of current instance


For the MyFile.xsc and it's MyFile.xml instance file case
<Root>
<Ele1>1</Ele1>
<Ele1>2</Ele1>
</Root>
I would get a tree something like :-

Root
|
Ele1

|
| OnClick on Ele1 node would produce a form like
|
\/
_____________________________________
| Structure of Ele1
|
| Content Type Value Current Instance
| PCData 1 1
| List of Options
| * Make new instance of node
| * Get previous instance of node
| * Get next instance of node
| * Get parent instance of current instance
| * Get child instance of current instance
|
|____________________________________

On clicking any of the above option, the client application will be
invoked

AIM4. My client app. on invocation by any of the above options is
supposed to
- query the XML instance data depending upon option clicked and
- insert/retrieve the resulting XML, and
- then emit the resultant XML as HTML.

MY DESIGN APPROACH TO AIM4

Assuming that the user clicks on a tree node and then clicks on an option.
The app. at this point already has
  - the XML DOM tree of the requested XML instance file
  - the XSchema DOM tree of the instance file

- Depending upon option clicked the app. will query the the instance XML
file's XML DOM tree and it will retrieve/insert the resulting
XML DOM sub tree using the XML DOM API,
- The resultant XML DOM sub tree will be given to the XSL processor
along with the XSL rules to emit the resultant HTML DOM
subtree.
- The emitted HTML DOM subtree will be passed back to the browser for
display.


For the MyFile.xsc and it's MyFile.xml instance file case
<Root>
<Ele1>1</Ele1>
<Ele1>2</Ele1>
</Root>

Assuming the user has
- selected the "Ele1" node and
- got the options form
- pressed the "get next instance of node" option on the form

the client app. will need to query the the MyFile.xml XML DOM tree
giving it the element name ("Ele1") and the
action ("get-next-instance").The XML DOM tree will contain
<Root>
<Ele1>1</Ele1>
<Ele1>2</Ele1>
</Root>
My client app. on querying will remove the following
XML tree fragment "<Ele1>2</Ele1>"
This removed tree fragment will be converted to an HTML DOM tree
using XSL and emitted out.
In short my app. will execute the following steps :-

- Ele1XMLDOMsubtree = Query("Ele1","Get-next-instance",XMLDOMtree)
- HTMLDOMtree = XSLProcessor(Ele1XMLDOMsubtree,XSLrules);
- Pass the HTMLDOMtree to browser for display
where XMLDOMtree = The MyFile.xml XMLDOM tree

The HTMLDOM tree that will be passed to the browser
for the "<Ele1>2</Ele1>" XMLDOM tree fragment will be
rendered as follows :-

_____________________________________
| Structure of Ele1
|
| Content Type Value Current Instance
| PCData 2 2
| List of Options
| * Make new instance of node
| * Get previous instance of node
| * Get next instance of node
| * Get parent instance of current instance
| * Get child instance of current instance
|
|____________________________________

On any furthur clicks on options above,
the design approach to AIM4 would be followed and steps in that repeated.

I hope I was able to make my design intention clear enough for
comment.

Thanks in advance for any replies,


AMIT








 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread