[R] XML namespace control

2012-10-29 Thread Ben Tupper
Hello,

I am working with a database system from which I can retrieve these kinds of 
user defined fields formed as XML ...

udf:field unit=uM type=Numeric name=facs.Stain final 
concentration5/udf:field

You can see in the above example that field is defined in the namespace 
udf, but that the udf namespace is not defined along with the attributes of 
the node.  That is, 'xmlns:udf = http://blah.blah.com/blah;' doesn't appear.  

I would like to create a similar node from scratch, but I can't seem to define 
the node with a namespace without providing the namespace definition. 


library(XML)

node1 - newXMLNode(storm, ripsnorter,
   namespace = weather,
   namespaceDefinitions = c(weather = http://my.weather.com/events;),
   attrs = c(type = hurricane,  name = Sandy))
node1

# this returns the new node with the namespace prefix (which I want)
# and the definition (which I don't want)

# weather:storm xmlns:weather=http://my.weather.com/events; type=hurricane 
name=Sandyripsnorter/weather:storm


node2 - newXMLNode(storm, ripsnorter,
   namespace = weather,
   attrs = c(type = hurricane,  name = Sandy),
   suppressNamespaceWarning = TRUE)
node2

# produces the node without the namespace prefix and without the definition

# storm type=hurricane name=Sandyripsnorter/storm

Is there some way to create a node with a namespace prefix but without 
embedding the namespace definition along with the attributes?

Thanks!
Ben

Ben Tupper
Bigelow Laboratory for Ocean Sciences
180 McKown Point Rd. P.O. Box 475
West Boothbay Harbor, Maine   04575-0475 
http://www.bigelow.org


 sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-apple-darwin9.8.0/i386 (32-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base 

other attached packages:
[1] tripack_1.3-4  RColorBrewer_1.0-5 Biostrings_2.24.1  IRanges_1.14.2 
BiocGenerics_0.2.0 RCurl_1.91-1  
[7] bitops_1.0-4.1 XML_3.9-4 

loaded via a namespace (and not attached):
[1] stats4_2.15.0 tools_2.15.0

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] XML namespace control

2012-10-29 Thread Duncan Temple Lang

Hi Ben

  Can you tell us the slightly bigger picture, please?
Do you want to create a single similar node entirely in isolation
or do you want to create it as part of an XML tree/document?
Who will be reading the resulting XML.

You can use a parent node

  top = newXMLNode(storms, namespaceDefinitions = c(weather = 
http://my.weather.com/events;))

Then

newXMLNode(storm, ripsnorter, namespace = weather,
attrs = c(type = hurrican, name = Sandy),
   parent = top )


That gives you

   weather:storm type=hurrican name=Sandyripsnorter/weather:storm

So now what are you going to do with that node?

The namespace prefix is local to a document, chosen by the author of that XML 
document.
The namespace URI is the global key that authors and consumers must agree upon.
While your database may use udf, you may chose a different prefix or even the 
default
prefix to correspond to that same URI.  So each document must explicitly 
declare the
prefix = URI mapping for it to be understood.

D.


On 10/29/12 5:54 AM, Ben Tupper wrote:
 Hello,
 
 I am working with a database system from which I can retrieve these kinds of 
 user defined fields formed as XML ...
 
 udf:field unit=uM type=Numeric name=facs.Stain final 
 concentration5/udf:field
 
 You can see in the above example that field is defined in the namespace 
 udf, but that the udf namespace is not defined along with the attributes 
 of the node.  That is, 'xmlns:udf = http://blah.blah.com/blah;' doesn't 
 appear.  
 
 I would like to create a similar node from scratch, but I can't seem to 
 define the node with a namespace without providing the namespace definition. 
 
 
 library(XML)
 
 node1 - newXMLNode(storm, ripsnorter,
namespace = weather,
namespaceDefinitions = c(weather = http://my.weather.com/events;),
attrs = c(type = hurricane,  name = Sandy))
 node1
 
 # this returns the new node with the namespace prefix (which I want)
 # and the definition (which I don't want)
 
 # weather:storm xmlns:weather=http://my.weather.com/events; 
 type=hurricane name=Sandyripsnorter/weather:storm
 
 
 node2 - newXMLNode(storm, ripsnorter,
namespace = weather,
attrs = c(type = hurricane,  name = Sandy),
suppressNamespaceWarning = TRUE)
 node2
 
 # produces the node without the namespace prefix and without the definition
 
 # storm type=hurricane name=Sandyripsnorter/storm
 
 Is there some way to create a node with a namespace prefix but without 
 embedding the namespace definition along with the attributes?
 
 Thanks!
 Ben
 
 Ben Tupper
 Bigelow Laboratory for Ocean Sciences
 180 McKown Point Rd. P.O. Box 475
 West Boothbay Harbor, Maine   04575-0475 
 http://www.bigelow.org
 
 
 sessionInfo()
 R version 2.15.0 (2012-03-30)
 Platform: i386-apple-darwin9.8.0/i386 (32-bit)
 
 locale:
 [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
 
 attached base packages:
 [1] stats graphics  grDevices utils datasets  methods   base 
 
 other attached packages:
 [1] tripack_1.3-4  RColorBrewer_1.0-5 Biostrings_2.24.1  IRanges_1.14.2   
   BiocGenerics_0.2.0 RCurl_1.91-1  
 [7] bitops_1.0-4.1 XML_3.9-4 
 
 loaded via a namespace (and not attached):
 [1] stats4_2.15.0 tools_2.15.0
 
 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.
 


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] XML namespace control

2012-10-29 Thread Ben Tupper
Hi Duncan,

On Oct 29, 2012, at 9:24 AM, Duncan Temple Lang wrote:

 
 Hi Ben
 
  Can you tell us the slightly bigger picture, please?
 Do you want to create a single similar node entirely in isolation
 or do you want to create it as part of an XML tree/document?
 Who will be reading the resulting XML.
 
 You can use a parent node
 
  top = newXMLNode(storms, namespaceDefinitions = c(weather = 
 http://my.weather.com/events;))
 
 Then
 
newXMLNode(storm, ripsnorter, namespace = weather,
attrs = c(type = hurrican, name = Sandy),
   parent = top )
 
 
 That gives you
 
   weather:storm type=hurrican name=Sandyripsnorter/weather:storm
 
 So now what are you going to do with that node?
 
 The namespace prefix is local to a document, chosen by the author of that XML 
 document.
 The namespace URI is the global key that authors and consumers must agree 
 upon.
 While your database may use udf, you may chose a different prefix or even 
 the default
 prefix to correspond to that same URI.  So each document must explicitly 
 declare the
 prefix = URI mapping for it to be understood.
 

Ah!   The parent - of course!  This makes perfect sense (and says so in the 
docs).   I think I was focussing on building up the hierarchy from the 
inside-to-the-outside.  That's obviously backwards (of course it's obvious now 
that I have gone public!)  

I must have I missed the boat when I read the documentation for the namespace 
argument to newXMLNode() ... 

If this is a character vector with a) one element and b) with an empty names 
attribute and c) whose value does not start with http:/ or ftp:/, then it is 
assumed that the value is a namespace prefix for a namespace defined in an 
ancestor node. To be able to resolve this prefix to a namespace definition, 
parent must be specified so that we can traverse the chain of ancestor nodes. 

I wonder if that last sentence might be amended to read,  To be able to 
resolve this prefix to a namespace definition, parent must be specified so that 
we can traverse the chain of ancestor nodes _to where the namespace is 
defined._  I realize that this addition repeats the meaning of the previous 
sentence, but repetition never hurts boneheads like me. 

The bigger picture is that I am using this with a RESTful system which has been 
very kindly to this neophyte.  The parent tree, of which these user defined 
fields are children, will be POSTed to the system (using RCurl).

I have the parent just as you have shown 'top' above, but I had not included 
the namespace definitions that any of its children might need.  I have added 
the namespace definitions needed to the parent definition and all is well.

Thanks, once again, for making the XML package available.  It is incredibly 
useful.

Cheers,
Ben


D.
 
 
 On 10/29/12 5:54 AM, Ben Tupper wrote:
 Hello,
 
 I am working with a database system from which I can retrieve these kinds of 
 user defined fields formed as XML ...
 
 udf:field unit=uM type=Numeric name=facs.Stain final 
 concentration5/udf:field
 
 You can see in the above example that field is defined in the namespace 
 udf, but that the udf namespace is not defined along with the attributes 
 of the node.  That is, 'xmlns:udf = http://blah.blah.com/blah;' doesn't 
 appear.  
 
 I would like to create a similar node from scratch, but I can't seem to 
 define the node with a namespace without providing the namespace definition. 
 
 
 library(XML)
 
 node1 - newXMLNode(storm, ripsnorter,
   namespace = weather,
   namespaceDefinitions = c(weather = http://my.weather.com/events;),
   attrs = c(type = hurricane,  name = Sandy))
 node1
 
 # this returns the new node with the namespace prefix (which I want)
 # and the definition (which I don't want)
 
 # weather:storm xmlns:weather=http://my.weather.com/events; 
 type=hurricane name=Sandyripsnorter/weather:storm
 
 
 node2 - newXMLNode(storm, ripsnorter,
   namespace = weather,
   attrs = c(type = hurricane,  name = Sandy),
   suppressNamespaceWarning = TRUE)
 node2
 
 # produces the node without the namespace prefix and without the definition
 
 # storm type=hurricane name=Sandyripsnorter/storm
 
 Is there some way to create a node with a namespace prefix but without 
 embedding the namespace definition along with the attributes?
 
 Thanks!
 Ben
 
 Ben Tupper
 Bigelow Laboratory for Ocean Sciences
 180 McKown Point Rd. P.O. Box 475
 West Boothbay Harbor, Maine   04575-0475 
 http://www.bigelow.org
 
 
 sessionInfo()
 R version 2.15.0 (2012-03-30)
 Platform: i386-apple-darwin9.8.0/i386 (32-bit)
 
 locale:
 [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
 
 attached base packages:
 [1] stats graphics  grDevices utils datasets  methods   base 
 
 other attached packages:
 [1] tripack_1.3-4  RColorBrewer_1.0-5 Biostrings_2.24.1  IRanges_1.14.2  
BiocGenerics_0.2.0 RCurl_1.91-1  
 [7] bitops_1.0-4.1 XML_3.9-4 
 
 loaded via a namespace (and not