xsl-list
[Top] [All Lists]

Re: [xsl] reg XSD generation using XSL

2010-12-06 10:42:27
Hi Geert,
The platform where I am working is based on X* and I have very limited options 
to use Java or any other language...except XSLT. 

I did look at Trang, looks promising.. but that could an option if nothing else 
works out.
thank you
Densil



----- Original Message ----
From: Geert Bormans <geert(_at_)gbormans(_dot_)telenet(_dot_)be>
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Sent: Mon, 6 December, 2010 17:01:22
Subject: Re: [xsl] reg XSD generation using XSL

why would you want to do that with XSLT?

use trang for a first stab at it
http://www.thaiopensource.com/relaxng/trang.html
you can develop some XSLT logic to twiddle the output of that to your 
convenience
be prepared to do some manual stuff as well


At 16:57 6/12/2010, you wrote:
Hi all, My previous posts didnt get thru the list..as I was not yet on the 
mailing list.. hence I am posting it here. I am wondering if anyone had 
attempted to generate an schema from an input XML document. I am kind of stuck 
up in this and I am wondering if could get some help here. The Schemas has to 
be 
ver 1.0 and generation code has to be written using XSL. I worked out a basic 
idea.. like 1) Open schema tag and check for name spaces 2) Check if current 
context is root,     2.1) is context root:- Print the element name.           
2.1.1) if children and attributes are present, the context is complex...else 
print context (single tag) as simple             2.1.2) If complex, print 
child 
element names based on their types                   2.1.2.1) check if the 
children are complex in a for each loop and then goto 2.1.1             2.2.1) 
close the complex tag..and check for attributes. 3) close the doc with /schema 
I 
came up with a basic code and it is working for xml with one root element and 
first children. If it goes towards grand children, I am kind of printing out 
same element types twice or more as they are visible in previous siblings. I 
am 
wondering what could be a generic solution here. e.g. inbound xml <?xml 
version='1.0' encoding="UTF-8"?> <catalog cat="music">     <cd country="RSA">  
 
    <title>Empire Burlesque</title>         <artist>Bob Dylan</artist>        
 
<price>10.90</price>     </cd>     <dd county="UK">         <title1>Hide your 
heart 4</title1>         <artist1>Bonnie Tyler</artist1>         
<price2>9.90</price2>     </dd>     <dc county="UK">         <title2>Hide your 
heart 4</title2>         <artist2>Bonnie Tyler</artist2>         
<price2>9.90</price2>     </dc> </catalog> The schema results in <xs:schema 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified" 
attributeFormDefault="unqualified">     <xs:element name="catalog">         
<xs:complexType>             <xs:sequence>               <xs:element name="cd" 
type="cdType"/>                 <xs:element name="dd" type="ddType"/>          
 
    <xs:element name="dc" type="dcType"/>             </xs:sequence>         
</xs:complexType>     </xs:element>     <xs:complexType name="cdType">         
<xs:sequence>             <xs:element name="title" type="titleType"/>          
  
<xs:element name="artist" type="artistType"/>             <xs:element 
name="price" type="priceType"/>         </xs:sequence>         <xs:attribute 
name="country" type="xs:string"/>     </xs:complexType>     <xs:simpleType 
name="titleType">         <xs:restriction base="xs:string"/>     
</xs:simpleType>     <xs:simpleType name="artistType">         <xs:restriction 
base="xs:string"/>     </xs:simpleType>     <xs:simpleType name="priceType">   

    <xs:restriction base="xs:integer"/>     </xs:simpleType>     
<xs:complexType name="ddType">         <xs:sequence>             <xs:element 
name="title1" type="title1Type"/>             <xs:element name="artist1" 
type="artist1Type"/>             <xs:element name="price2" type="price2Type"/> 

      </xs:sequence>         <xs:attribute name="county" type="xs:string"/>   
  
</xs:complexType>     <xs:simpleType name="title1Type">         
<xs:restriction 
base="xs:string"/>     </xs:simpleType>     <xs:simpleType name="artist1Type"> 

      <xs:restriction base="xs:string"/>     </xs:simpleType>     
<xs:simpleType name="price2Type">         <xs:restriction base="xs:integer"/>  
  
</xs:simpleType>     <xs:complexType name="dcType">         <xs:sequence>      
 
    <xs:element name="title2" type="title2Type"/>             <xs:element 
name="artist2" type="artist2Type"/>             <xs:element name="price2" 
type="price2Type"/>         </xs:sequence>         <xs:attribute name="county" 
type="xs:string"/>     </xs:complexType>     <xs:simpleType name="title2Type"> 

      <xs:restriction base="xs:string"/>     </xs:simpleType>     
<xs:simpleType name="artist2Type">         <xs:restriction base="xs:string"/>  
  
</xs:simpleType>     <xs:simpleType name="price2Type">         <xs:restriction 
base="xs:integer"/>     </xs:simpleType> </xs:schema> where the simple type 
price2Type is repeated twice once processing dd and then dc. as I am 
processing 
only the children of that node context.  I am wondering what could be a 
generic 
solution here to avoid duplicates at this context node. thankyou Densil

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


      

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>