ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> boost
boost
Re: [boost] Re: API Review request: XML API for C++, second round
by Hamish Mackenzie other posts by this author
Jun 27 2003 1:48PM messages near this date
[boost] Re: API Review request: XML API for C++, second round | Re: [boost] Re: API Review request: XML API for C++, second round
On Fri, 2003-06-27 at 12:53, Anthony Williams wrote:
>  It was meant to be a description of semantics, in terms of a sample
>  implementation.
>  
>  A node that is not part of a document is a free-standing subtree that needs
>  adding to a document. If it is an element, then you can treat it as if it is
>  the root node of a document. If it is anything else, then you are more limited
>  in what you can do, but then what does it mean to perform an XPath query on a
>  PI?
> 
>  If the underlying API requires that the document is kept alive to keep the
>  nodes alive, then the wrapper class must handle this, whilst simulating the
>  above semantic description.

If you look in one of my other posts you will see a description of just
that.  The thing that concerns me most about this is

doc.find( path ).parent(); // non null (unless it found the root node)

BUT...

node n( doc.find( path ) );
n.parent();  // User may not expect this to be null
n.document();  // or this

You could have a node_container (or standalone_node) which had no parent
or document methods but otherwise looked like a node.

node_container n( doc.find( path ) );
n.parent();  // compile time error
n.document();  // compile time error

which is good but doesn't really solve the problem...

n.first_child().document();  // null

My preference is that if you want to make a copy of a node you have to
have a new document...

document doc2( doc.find( path ) );

doc2.root().parent(); // null but you would expect that (it's the root)
doc2.root().document();  // non null as you would expect

That way the user can rely on parent() to be non null for all but root
nodes and document() can return a reference since it can never be null.

>  > You could copy the libxml2 tree into your own structure but then you are
>  > on your own when it comes to higher level things like xpath and xslt.
>  
>  I imagined that you would write forwarding functions for the underlying API,
>  so when you are given an Xpath query, you pass it on to the underlying API and
>  then wrap the result.

Then you would need to keep libxml2 version of the tree too and
synchronise any changes (or rebuild it every time you want to call a
libxml2 function).

-- 
Hamish Mackenzie <hamish@[...].uk> 

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Thread:
Stefan Seefeld
Anthony Williams
Hamish Mackenzie
Stefan Seefeld
Anthony Williams
Hamish Mackenzie
Bohdan
Stefan Seefeld
Hamish Mackenzie
Stefan Seefeld
Hamish Mackenzie
Hamish Mackenzie
Stefan Seefeld
Hamish Mackenzie
Stefan Seefeld
Hamish Mackenzie
Stefan Seefeld
Hamish Mackenzie
Bohdan
Stefan Seefeld
Stefan Seefeld
Hamish Mackenzie
Stefan Seefeld
Hamish Mackenzie
Hamish Mackenzie

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved