[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: URI Design


date in uri
Yeah, after reading this I was definitely thinking very broadly,
answering more to the question of, in essence, just how important or
powerful using highly structured XML was, but focusing on a very
general perspective instead of specific to what you are trying to
accomplish.  No worries, maybe it will be useful to someone else later
on down the road instead ;)

On 4/21/05, Alan Gutierrez <alan-xml-dev@e...> wrote:
> * M. David Peterson <m.david.x2x2x@g...> [2005-04-21 12:03]:
> 
> > Hey, this is pretty cool.  In my opinion and in answer to your
> > hierarchical question the time to use a generalogical structure as
> > part of your XML-based language is if you plan to use these
> > relationsips as a way of enforcing an implied set of logical
> > processing rules.  For example, if there is no child element "doThis"
> > then obviously this method is not available for that portion of your
> > code base... quick and dirty error checking.  You can also make nested
> > structure that will step through to each child element until it
> > evaluates to true (based on whatever you are testing for. e.g. using
> > the value of the data and the  name() or local-name() of the element
> > to determine the name of a sequence that should then be invoked to
> > properly the child elements of the parents name value being tested.
> 
>    Okay, I'm falling behind on the lingo, as I usally do in this
>    mailing list. I'm looking at creating a simple document thus:
> 
>    Let's use a custom scheme specific part to remove any implied
>    hieracrchy. Let's say I filled out a form like so:
> 
>    First Name: Alan
>    Last Name: Gutierrez
>    Farvorite OS:
>      Linux [x] OS X [z] Palm OS [ ] Windows 98 [ ] OS/360 [x] Other[ ]
>    Comments: I <strong>love</strong> your software.
> 
>    In Relay I can fetch this document:
> 
>    <request>
>      <server-name>engrm.com</server-name>
>      <server-port>80</server-port>
>      <content-type>application/x-www-form-url-encoded</content-type>
>      <content-uri>request:content</content-type>
>    </request>
> 
>    Using:
> 
>    request:properties
> 
>    Then I can create a varsity generated relay that looks like this:
> 
>    <relay>
>      <stream>
>        <uri>request:content</uri>
>      </stream>
>      <form-decode/>
>      <saxon>
>        <url>xslt/post-to-sql.xslt</url>
>      </saxon>
>      <sql>
>        <connent-uri>jdbc:mysql:foo</connect-uri>
>      </sql>
>    </relay>
> 
>    (The SQL bit is totally, naive, yes. I've put more work into XML
>      to relational mapping than the example above.)
> 
>    In any case, the form-decode element creates a document that
>    looks like this:
> 
>    <form>
>      <field>
>        <name>first-name</name>
>        <value>Alan</value>
>        <uri>request:field:first-name:1</uri>
>      </field>
>      <field>
>        <name>last-name</name>
>        <value>Gutierrez</value>
>        <uri>request:field:last-name:1</uri>
>      </field>
>      <field>
>        <name>favorite-os</name>
>        <value>Linux</value>
>        <uri>request:field:favorite-os:1</uri>
>      </field>
>      <field>
>        <name>favorite-os</name>
>        <value>OS X</value>
>        <uri>request:field:favorite-os:2</uri>
>      </field>
>      <field>
>        <name>favorite-os</name>
>        <value>OS/360</value>
>        <uri>request:field:favorite-os:3</uri>
>      </field>
>      <field>
>        <name>comments</name>
>        <value>I &lt;strong&gt;love&lt;/strong&gt; your software.</value>
>        <uri>request:field:comments:1</uri>
>      </field>
>    </form>
> 
>    If there was a file upload field, I'd use a different parser,
>    but the output would be very similar.
> 
>    <form>
>      <field>
>        <name>nickname</name>
>        <value>Alan</value>
>        <uri>request:field:nickname:1</uri>
>      </field>
>      <field>
>        <name>photo</name>
>        <content-type>image/jpg</content-type>
>        <content-length>123456</content-length>
>        <uri>file:///tmp/upload-213131.jpg</uri>
>      </field>
>    </form>
> 
>    Note how the photo URI is swapped out with a file URL. My
>    chioces might seem more reasonable.
> 
>    Taking the first example, I could create a pipeline like so:
> 
>    <relay>
>      <stream>
>        <uri>request:field:comments:1</uri>
>      </stream>
>      <html-tidy/>
>      <saxon>
>        <uri>xslt/strip-user-comment-html.xslt</uri>
>      </saxon>
>    </relay>
> 
>    I'm thinking hard about URI design because I'd probably pull
>    that pipeline into a query using an include:
> 
>    <xsl:value-of
>      select="document('varisty:/internal/user-comments.xml')/xhtml:html"/>
> 
>    That would fire the parse and clean comments pipeline. The
>    heirarchy comes back into play, since a Varisty URI is supposed
>    to be interchangable with a file or http URI.
> 
> 
> > An example of each of the XML trees for something like this might look
> > like:
> >
> > Data being processed:
> >
> > <foo>
> >    <bar>
> >      <element>data</element>
> >      <element>data</element>
> >    </bar>
> > </foo>
> >
> > Data its being compared against:
> >
> > <foo true-sequence="seq1">
> >    <bar true-sequence="seq2"/>
> > </foo>
> >
> > Sequence definition file:
> >
> > <sequence id="seq1">
> >    <do_this/>
> >    <then_this/>
> >    <if_this>
> >        <do_this/>
> >    </if_this>
> > </sequence>
> >
> > Using this type of dynamic application construction can be really
> > powerful and as long as you seperate the XML definition files out into
> > seperate files, allowing only elements and data that are there serving
> > the same purpose (e.g. to invoke a processing sequence) then I think
> > you will find this a simple way to maintain decent code readability as
> > well as the ability to use the structure viewing tools contained
> > within the tools we use an extremely powerful way to view whats taking
> > place in your code without having to scan a 2000 line file up and down
> > looking for this sequence or that sequence, etc...
> >
> > I really like your chosen style. I would be interested in seeing how
> > this continues to develop for my own learning so please keep us up to
> > date, or if you would prefer, just those of us who want to watch by
> > creating an Atom feed that we can subscribe to.
> >
> > Cheers :)
> >
> 
>    Again, trying to keep up with the nomeclature, but I think you
>    are thinking a head of me.
> 
>    Relay/Varisty to a bang up job of creating a new XML document
>    from sundry sources. It's simply because all the data flows into
>    one document.
> 
>    Handling a form submission is difficult, becasue you need to
>    branch the pipeline, different output if the submission is not
>    valid.
> 
>    Furthermore, it is a realy pain to deal with a form submission
>    that goes to multiple destinations, say an LDAP DB, an RDB, an
>    XMLDB, a web service, an e-mail notification, etc.
> 
>    I'm thinking about a new set of problems, including
>    multiplexing and transactions on the inbound, while I already
>    feel confident in my strategies for caching, dependencies, and
>    aggregation on the outbound.
> 
>    If you are talking about abstracting business logic, then I'm
>    not doing that quite yet. I'm simply generating pipelines using
>    XSLT, so much of the application logic is in (oh, my) XSLT 2.0.
> 
>    However, if you can express your business logic ultimately as
>    XML pipelines, and initially create a document that can be
>    transformed into those pipelines, then Relay/Varsity is probably
>    the output format. Relay/Varsity does not include any logic,
>    merely a caching engine. Logic is supposed to be external, and
>    Relay/Varsity are supposed to snap to it, parse an XML pipeline
>    specification, and execute it a quickly as possible.
> 
>    I hope this helps. It's all open source, as I noted before. If
>    you're interested let me know. The RSS feed is below.
> 
>    Cheers.
> 
> --
> Alan Gutierrez - alan@e...
>    - http://engrm.com/blogometer/index.html
>    - http://engrm.com/blogometer/rss.2.0.xml
> 


-- 
<M:D/>

:: M. David Peterson ::
XML & XML Transformations, C#, .NET, and Functional Languages Specialist

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.