[xquery-talk] How do i remove namespaces?
Michael Kay
mhk at mhk.me.uk
Fri Jan 13 00:04:50 PST 2006
It's best not to think of this as "removing the namespaces" but rather as
"changing the element names". The name of an element consists of a namespace
URI and a local name. So the name of the Email element, for example, is
("urn:mpeg:mpeg7:schema:2001", "email"). In your desired result, you want an
Email element without the namespace, that is, you want the name of the
element in the result to be ("", "email"). So your query has to rename every
element, or to put it another way, it has to create an element whose name is
different from the original.
The way to do this is to write a recursive function something like this:
declare function f:strip-namespace($e as element()) as element() {
element {QName((), local-name($e)} {
for $child in $e/(@*,*)
return
if ($child instance of element())
then f:strip-namespace($child)
else $child
}
}
Michael Kay
http://www.saxonica.com/
________________________________
From: talk-bounces at xquery.com [mailto:talk-bounces at xquery.com] On
Behalf Of Manolis Mylonakis
Sent: 12 January 2006 18:29
To: talk at xquery.com
Subject: [xquery-talk] How do i remove namespaces?
Hello,
i have the following xml file:
<Mpeg7 xmlns="urn:mpeg:mpeg7:schema:2001"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Description xsi:type="SemanticDescriptionType">
<Semantics>
<AbstractionLevel dimension="0"/>
<Label>
<Name>Soccer Agent Example</Name>
</Label>
<Property>
<Name>Ontology</Name>
<Definition>socceragents</Definition>
</Property>
<SemanticBase xsi:type="AgentObjectType" id="Moras">
<AbstractionLevel dimension="0"/>
<Label>
<Name>Moras</Name>
</Label>
<Definition>
<FreeTextAnnotation>Vaggelis Moras</FreeTextAnnotation>
</Definition>
<Agent xsi:type="PersonType">
<Name>
<FamilyName initial="M">Moras</FamilyName>
<GivenName>Vaggelis</GivenName>
</Name>
<ElectronicAddress>
<Email>players at aekfc.gr</Email>
</ElectronicAddress>
</Agent>
</SemanticBase>
</Semantics>
<Semantics>
<AbstractionLevel dimension="0"/>
<Label>
<Name>Soccer Agent Example</Name>
</Label>
<Property>
<Name>teacher </Name>
<Definition>university teacher</Definition>
</Property>
<SemanticBase xsi:type="AgentObjectType" id="Moras">
<AbstractionLevel dimension="0"/>
<Label>
<Name>Dolas</Name>
</Label>
<Definition>
<FreeTextAnnotation>Apostolos Dolas</FreeTextAnnotation>
</Definition>
<Agent xsi:type="PersonType">
<Name>
<FamilyName initial="M">Dolas</FamilyName>
<GivenName>Apostolos</GivenName>
</Name>
<ElectronicAddress>
<Email>dol at mymail.gr</Email>
</ElectronicAddress>
</Agent>
</SemanticBase>
</Semantics>
</Description>
</Mpeg7>
And my xquery is :
declare namespace Mpeg7="urn:mpeg:mpeg7:schema:2001";
for $x in doc("myPersons.xml")//Mpeg7:Agent
return $x
One of my results is the following :
<Agent xsi:type="PersonType" xmlns="urn:mpeg:mpeg7:schema:2001"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name xmlns="urn:mpeg:mpeg7:schema:2001">
<FamilyName initial="M">Moras</FamilyName>
<GivenName>Vaggelis</GivenName>
</Name>
<ElectronicAddress>
<Email xmlns="urn:mpeg:mpeg7:schema:2001">players at aekfc.gr</Email>
</ElectronicAddress>
</Agent>
I am looking for a way ro remove the namespaces
for example i want to my results looks like the following :
<Agent type="PersonType">
<Name>
<FamilyName initial="M">Moras</FamilyName>
<GivenName>Vaggelis</GivenName>
</Name>
<ElectronicAddress>
<Email>players at aekfc.gr</Email>
</ElectronicAddress>
</Agent>
Could any body help me please?
Thanks in advance
Manolis
More information about the talk
mailing list