[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message]

Setting the document URI on constructed nodes.

G. Ken Holman gkholman at CraneSoftwrights.com
Sun May 13 09:26:34 PDT 2012


  Setting the document URI on constructed   nodes.
At 2012-05-13 10:19 -0400, I wrote:
>I cannot think of any way in the spec to specify the document URI of 
>a temporary in-memory tree, because I don't think that is meaningful 
>in the general case.
>
>However, when I've chained transformations in the past, I've 
>sometimes needed to preserve the input document URI along all of the 
>steps (because there have been relative URI addresses in the data) 
>and so I've very simply used xml:base= on the document element of 
>the temporary tree (unless the document element already has an 
>xml:base= attribute).
>
>Remember that from a syntax perspective, the root document file 
>entity of an XML document must contain the document element, so 
>base-uri(/*) is always the same as document-uri(root()) when there 
>is no xml:base= already there on the document element.
>
>So, when I create a temporary tree I use:
>
>   <root xml:base="...whatever..."/>
>
>... and when I ask for base-uri(/*) I get "...whatever...".
>
>In my work I would do something along the lines of:
>
>let $d := doc("input.xml") return
>element {$d/name(.)}
>  {
>   attribute xml:base { "...whatever..." },
>   $d/@xml:base, (:in case there already exists one:)
>   "rest of the processing"
>  }

Actually, two mistakes in throwing together that example.  I was 
asking for the name of the root node (not the document element) and I 
wouldn't hard-code the xml:base value.  Rather I'd use the 
document-uri() function to preserve the URI of the input file, or 
even shorten it further by using base-uri() on the document element 
so as to accommodate any existing xml:base= attribute:

let $d := doc("input.xml") return
element {$d/*/name(.)}
  {
   attribute xml:base { base-uri($d/*) },
   "rest of the processing"
  }

>I hope this helps.
>
>. . . . . . . . . . . Ken
>
>At 2012-05-13 13:58 +0000, David Lee wrote:
>>I noticed somewhat of a hole in XQuery ... hoping I am wrong.
>>I can find no way to set the base URI of a constructed document e.g
>>
>>document {  <root/> }
>>
>>such that fn:document-uri() would return it.
>>
>>It seem this is one of those properties that must come from the 
>>outside environment.
>>I know if I were to store the document to a file then re-read it, 
>>likely the XML processor would pick it up ... I also know how to do 
>>this programmatically in API's like say Saxon.
>>But it seems missing from XQuery itself.   My guess is that since 
>>XQuery doesnt support storing documents it was thought unimportant 
>>to set the document URI.
>>
>>Why I ask ?
>>I'm still looking at Streaming XDM formats, including pure 
>>in-memory streaming.
>>But it seems like I cannot directly encode and pass on a document 
>>(or base) URI through XQuery by itself to the output.   So any 
>>constructed documents would have none or undefined URI's to the 
>>receiver.   this leads me to think I need a meta encoding for XDM 
>>much like proposed at Balisage (XDML).   basically passing the URI 
>>information as seperate XDM values and a convention for 
>>interpreting them.  This seems like it could not be done in pure 
>>XQuery however because the target even if it got say  a sequence ( 
>>"uri" , document ) has no way to apply the uri to the document 
>>using XQuery so it must be done by external code.
>>
>>Thanks for any commentary.
>>-David


--
Public XSLT, XSL-FO, UBL and code list classes in Europe -- Oct 2012
Contact us for world-wide XML consulting and instructor-led training
Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm
Crane Softwrights Ltd.            http://www.CraneSoftwrights.com/q/
G. Ken Holman                   mailto:http://x-query.com/mailman/listinfo/talk
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal



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
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-2011 All Rights Reserved.