[Openstack-docs] Use of XML xi:include with xpointer

David Cramer david.cramer at rackspace.com
Mon Aug 5 20:20:23 UTC 2013


Hi Sean,

Try this:

<xi:include
  href="some_file.xml"
  xpointer="xpath(//*[@xml:id = 'some_id']/*)">
  <xi:fallback/>
</xi:include>

But you  might find the following xpath more useful:

//*[@xml:id = 'some_id']/*[not(local-name(.) = 'title')]

You could use that, for example, if you had <section xml:id="some_id">
and you wanted all of its contents EXCEPT for the title.

Note that Oxygen does not understand the xpath xpointer scheme, so I've
included an empty <xi:fallback>. It will still give a warning about the
unsupported scheme, but at least it will validate.

I'll contact the folks at Oxygen and ask if they can support the xpath
xpointer scheme. It's pretty damned useful.

Regards,
David


On 08/05/2013 02:31 PM, Sean Roberts wrote:
> your example below:
> <section id="some_id">
>  <xi:include href="some_file.xml"
>             xpointer="xpointer(id('some_id')/*)"/>
>  <para>Something at the end</para>
> </section>
> 
> fails, where using xpointer="element(controller-os)" does not.
> 
> I tried walking the path with /section, and it doesn't work either with
> your example. Ideas?
> 
> 
> Sean Roberts
> Infrastructure Strategy
> seanrob at yahoo-inc.com <mailto:seanrob at yahoo-inc.com> (925) 980-4729
> 
> On Aug 1, 2013, at 8:46 PM, Sean Roberts <seanrob at yahoo-inc.com
> <mailto:seanrob at yahoo-inc.com>> wrote:
> 
>> I am trying to follow your first example. What works with
>> ... xpointer="element(controller-os)", fails with below
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <chapterxmlns="http://docbook.org/ns/docbook"
>>   xmlns:xi="http://www.w3.org/2001/XInclude"
>>   xmlns:xlink="http://www.w3.org/1999/xlink"version="5.0"
>>   xml:id="bk001-ch003-associate-general">
>>   <title>Associate General</title>
>> <sectionid="controller-os"><xi:includehref="../basic-install/src/basic-install_controller-common.xml"xpointer="xpointer(id('controller-os')/*)"/>
>>  
>> <para><linkxlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug">Submit
>> a bug on
>>     the section above</link></para></section>
>> ...
>> source file 
>> <?xml version="1.0" encoding="UTF-8"?>
>> <sectionxmlns="http://docbook.org/ns/docbook"
>>     xmlns:xi="http://www.w3.org/2001/XInclude"
>>     xmlns:xlink="http://www.w3.org/1999/xlink"version="5.0"
>>     xml:id="basic-install_controller-common">
>>                 <title>Common services</title>
>>           <sectionxml:id="controller-os">
>>         <title>Operating System</title>
>>
>> Sean Roberts
>> Infrastructure Strategy
>> seanrob at yahoo-inc.com <mailto:seanrob at yahoo-inc.com> (925) 980-4729
>>
>> On Jul 31, 2013, at 8:36 AM, Shaun McCance <shaunm at gnome.org
>> <mailto:shaunm at gnome.org>> wrote:
>>
>>> XInclude doesn't let you add child elements to the included element,
>>> but you can include multiple elements with XInclude, just not with
>>> the element() scheme. The xpointer() scheme allows you to use XPath,
>>> so you can put something at the end by manually duplicating the
>>> section element, then including the child content of the target
>>> section element:
>>>
>>> <section id="some_id">
>>>  <xi:include href="some_file.xml"
>>>             xpointer="xpointer(id('some_id')/*)"/>
>>>  <para>Something at the end</para>
>>> </section>
>>>
>>> It's more complicated to put something at the beginning, because
>>> you have to account for things like title and info elements. Not
>>> accounting for titleabbrev and subtitle:
>>>
>>> <section id="some_id">
>>>  <xi:include href="some_file.xml"
>>>             xpointer="xmlns(db=http://docbook.org/ns/docbook)
>>>                       xpointer(id('some_id')/db:title)">
>>>    <xi:fallback/>
>>>  </xi:include>
>>>  <xi:include href="some_file.xml"
>>>             xpointer="xmlns(db=http://docbook.org/ns/docbook)
>>>                       xpointer(id('some_id')/db:info)">
>>>    <xi:fallback/>
>>>  </xi:include>
>>>  <para>Something at the beginning</para>
>>>  <xi:include href="some_file.xml"
>>>             xpointer="xmlns(db=http://docbook.org/ns/docbook)
>>>                       xpointer(id('some_id')/*
>>>                       [not(self::db:title or self::db:info)]
>>>                       )"/>
>>>  <para>Something at the end</para>
>>> </section>
>>>
>>> Kind of messy, but still more long-term maintainable than manually
>>> including each child element of the target section.
>>>
>>> I wrote a howto on XInclude a couple years back, which you might
>>> find useful:
>>>
>>> http://blogs.gnome.org/shaunm/2011/07/21/understanding-xinclude/
>>>
>>> --
>>> Shaun
>>>
>>> On Wed, 2013-07-31 at 02:41 +0000, Sean Roberts wrote:
>>>> Both actually. I want to place a submit bug link at the end of each
>>>> section. Also want to add some text at the beginning for many of the
>>>> included sections describing training objectives.
>>>>
>>>>
>>>> I'd also be interested in ideas on using xslt to rip and replace tags.
>>>> But that probably can wait a little bit.
>>>>
>>>> ~sean
>>>>
>>>> On Jul 30, 2013, at 9:18, "Anne Gentle"
>>>> <annegentle at justwriteclick.com
>>>> <mailto:annegentle at justwriteclick.com>> wrote:
>>>>
>>>>
>>>>> Hi Sean,
>>>>> Do you want some sort of "glue text" so that the guide can be read
>>>>> in a linear way? Or is it text that you'll use over and over, such
>>>>> as "Now go take the test." Let us know what you're trying to do.
>>>>>
>>>>>
>>>>> You can't really strip a tag at a time without XSLT (the transform
>>>>> code that lives in the Maven plugin).
>>>>> Anne
>>>>>
>>>>>
>>>>> On Tue, Jul 30, 2013 at 9:19 AM, Sean Roberts
>>>>> <seanrob at yahoo-inc.com <mailto:seanrob at yahoo-inc.com>> wrote:
>>>>>        Ideas on how to add text to the included section or final
>>>>>        page? Part of the problem may be from that I'm stuck using
>>>>>        the chapter or section of the original XML. If I could
>>>>>        include, strip the section tags, then I could add text no
>>>>>        problem.
>>>>>
>>>>>        ~sean
>>>>>
>>>>>        On Jul 30, 2013, at 6:54, "Anne Gentle"
>>>>>        <annegentle at justwriteclick.com
>>>>> <mailto:annegentle at justwriteclick.com>> wrote:
>>>>>
>>>>>
>>>>>> I think DocBook sees the markup as a closed section
>>>>>> followed by a para whic is invalid.
>>>>>>
>>>>>> Anne Gentle
>>>>>> Content Stacker
>>>>>> anne at openstack.org <mailto:anne at openstack.org>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Jul 30, 2013, at 8:38 AM, Sean Roberts
>>>>>> <seanrob at yahoo-inc.com <mailto:seanrob at yahoo-inc.com>> wrote:
>>>>>>
>>>>>>
>>>>>>> I am pulling in a section through <xi:include
>>>>>>> href="http.....xpointer="element(foobar)"></xi:include>
>>>>>>> If I want to use additional text, I'm forced to make it
>>>>>>> a section as well. I want to add text to the beginning
>>>>>>> or end of the the included section.
>>>>>>> I tried <xi:include
>>>>>>> href="http.....xpointer="element(foobar)"><para>blah
>>>>>>> blah</para></xi:include>
>>>>>>> , which shows up without error in oxygen, but maven
>>>>>>> seems to strip it out during HTML build.
>>>>>>>
>>>>>>> ~sean
>>>>>>>
>>>>>>> On Jul 30, 2013, at 6:24, "Anne Gentle"
>>>>>>> <annegentle at justwriteclick.com
>>>>>>> <mailto:annegentle at justwriteclick.com>> wrote:
>>>>>>>
>>>>>>>
>>>>>>>> Hi Sean,  
>>>>>>>> Post your XML code so we can take a closer look, or a
>>>>>>>> link to the patch and the file name so we can look at
>>>>>>>> it.
>>>>>>>> Thanks!
>>>>>>>> Anne
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Jul 30, 2013 at 2:56 AM, Sean Roberts
>>>>>>>> <seanrob at yahoo-inc.com <mailto:seanrob at yahoo-inc.com>> wrote:
>>>>>>>>        I have another question. I'm bringing in the
>>>>>>>>        sections which is the smallest page into the
>>>>>>>>        built HTML. I'm trying to add text and links
>>>>>>>>        within the final HTML page without success.
>>>>>>>>        Oxygen shows the link and text fine, but the
>>>>>>>>        maven built site only has the included
>>>>>>>>        section. Perhaps some adjustment within the
>>>>>>>>        pom file...
>>>>>>>>
>>>>>>>>        ~sean
>>>>>>>>
>>>>>>>>        On Jul 29, 2013, at 9:34, "Diane Fleming"
>>>>>>>>        <diane.fleming at rackspace.com
>>>>>>>> <mailto:diane.fleming at rackspace.com>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>> I don't know if this will work, but this is
>>>>>>>>        how I used xpointer to pull in
>>>>>>>>> content from one file to another:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Target file (pulls in content)
>>>>>>>>>
>>>>>>>>> <title>Overview</title>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over1)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over2)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over3)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over4)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over5)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over6)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over7)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over8)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over9)"/>
>>>>>>>>> <xi:include href="ch_gs_overview.xml"
>>>>>>>>>               xpointer="element(over10)"/>
>>>>>>>>> <xi:include href="section_virt_ext.xml"/>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Source file
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>   <title>Overview</title>
>>>>>>>>>   <section
>>>>>>>>        xml:id="cn_overview"><title>Cloud
>>>>>>>>        Networks</title>
>>>>>>>>>   <para xml:id="over1">Cloud Networks lets
>>>>>>>>        you create a virtual
>>>>>>>>>       Layer 2 network, known as an isolated
>>>>>>>>        network, which gives you
>>>>>>>>>       greater control and security when you
>>>>>>>>        deploy web applications.
>>>>>>>>> </para>
>>>>>>>>>   <para xml:id="over2">When you create a
>>>>>>>>        next generation Cloud
>>>>>>>>>       Server, Cloud Networks enables you to
>>>>>>>>        attach one or more
>>>>>>>>>       networks to your server. You can
>>>>>>>>        attach an isolated network
>>>>>>>>>       that you have created or a Rackspace
>>>>>>>>        network. </para>
>>>>>>>>>   <para xml:id="over3">If you install the
>>>>>>>>        &virt_ext;, you can create
>>>>>>>>>       a virtual interface to a specified
>>>>>>>>        Rackspace or isolated
>>>>>>>>>       network and attach that network to an
>>>>>>>>        existing server
>>>>>>>>>       instance. You can also list virtual
>>>>>>>>        interfaces for and delete
>>>>>>>>>       virtual interfaces from a server
>>>>>>>>        instance. For information
>>>>>>>>>       about the &virt_ext;, see <xref
>>>>>>>>        linkend="section_virt_ext"
>>>>>>>>>       />.</para>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> etc.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Diane
>>>>>>>>>
>>>>>>>>>
>>>>>>>>        ----------------------------------------------
>>>>>>>>> Diane Fleming
>>>>>>>>> Software Developer II - US
>>>>>>>>>
>>>>>>>>> diane.fleming at rackspace.com <mailto:diane.fleming at rackspace.com>
>>>>>>>>> Cell  512.323.6799
>>>>>>>>> Office 512.874.1260
>>>>>>>>> Skype drfleming0227
>>>>>>>>> Google-plus diane.fleming at gmail.com
>>>>>>>>> <mailto:diane.fleming at gmail.com>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 7/29/13 9:27 AM, "Sean Roberts"
>>>>>>>>        <seanrob at yahoo-inc.com <mailto:seanrob at yahoo-inc.com>> wrote:
>>>>>>>>>
>>>>>>>>>> I'm working on reusing content from remote
>>>>>>>>        XML formatted sources to
>>>>>>>>>> create new content. I'm using xi:include
>>>>>>>>        xpointer to a section of an
>>>>>>>>>> existing XML file. Using the editor oxygen
>>>>>>>>        I can see the remote content,
>>>>>>>>>> so I know my href is valid. But maven fails
>>>>>>>>        to build the html from the
>>>>>>>>>> xml returning bad pointer.
>>>>>>>>>>
>>>>>>>>>> The remote content isn't using DTD or
>>>>>>>>        XMLschema. I'm hoping I can figure
>>>>>>>>>> out how to walk the structure without
>>>>>>>>        having to.
>>>>>>>>>> Any XML peoples that can help?
>>>>>>>>>>
>>>>>>>>>> ~sean
>>>>>>>>>>
>>>>>>>>        _______________________________________________
>>>>>>>>>> Openstack-docs mailing list
>>>>>>>>>> Openstack-docs at lists.openstack.org
>>>>>>>>>> <mailto:Openstack-docs at lists.openstack.org>
>>>>>>>>>>
>>>>>>>>        http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-docs
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>        _______________________________________________
>>>>>>>>        Openstack-docs mailing list
>>>>>>>>        Openstack-docs at lists.openstack.org
>>>>>>>> <mailto:Openstack-docs at lists.openstack.org>
>>>>>>>>        http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-docs
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> -- 
>>>>>>>> Anne Gentle
>>>>>>>> annegentle at justwriteclick.com <mailto:annegentle at justwriteclick.com>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> Anne Gentle
>>>>> annegentle at justwriteclick.com <mailto:annegentle at justwriteclick.com>
>>>> _______________________________________________
>>>> Openstack-docs mailing list
>>>> Openstack-docs at lists.openstack.org
>>>> <mailto:Openstack-docs at lists.openstack.org>
>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-docs
>>>
>>>
>>
>> _______________________________________________
>> Openstack-docs mailing list
>> Openstack-docs at lists.openstack.org
>> <mailto:Openstack-docs at lists.openstack.org>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-docs
> 
> 
> 
> _______________________________________________
> Openstack-docs mailing list
> Openstack-docs at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-docs
> 




More information about the Openstack-docs mailing list