[R] XML namespace control
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
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
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