|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] How do i remove namespaces?Michael Kay mhk at mhk.me.ukFri 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: http://xquery.com/mailman/listinfo/talk [mailto:http://xquery.com/mailman/listinfo/talk] On
Behalf Of Manolis Mylonakis
Sent: 12 January 2006 18:29
To: http://xquery.com/mailman/listinfo/talk
Subject: 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>http://xquery.com/mailman/listinfo/talk</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>http://xquery.com/mailman/listinfo/talk</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">http://xquery.com/mailman/listinfo/talk</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>http://xquery.com/mailman/listinfo/talk</Email>
</ElectronicAddress>
</Agent>
Could any body help me please?
Thanks in advance
Manolis
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






