commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Diogo Bacelar Quintela (JIRA)" <commons-...@jakarta.apache.org>
Subject [jira] Updated: (JELLY-213) Generating xml nodes with attributes in diferente namespaces (for schemas..)
Date Sun, 10 Jul 2005 04:39:33 GMT
     [ http://issues.apache.org/jira/browse/JELLY-213?page=all ]

Diogo Bacelar Quintela updated JELLY-213:
-----------------------------------------

    Attachment: jelly-patch3.patch

Here is patch3 :)

AtributeTag and ElementTag are exactly the same as patch 1
XMLOutput now has a stack of namespaces, and manages the calls to startPrefixMapping and endPrefixMapping.
It passes common testcases and jelly-xml testcases (haven't tried the others :)

It now generates equivalent outputs in both cases (described in above java class TestNS) 
[equivalent means equivalent xml, not necessarly the same order of attributes].

I've included a new tag, that i mentionated some comments above.
A ReplaceNamespaceTag. As it name implies, it replaces all namespaces from one uri to another
in its body (fromURI and toURI properties).
XMLOutput does it job perfectly, again :)


Ex:

<?xml version="1.0" encoding="UTF-8"?>
<j:jelly xmlns:j="jelly:core" xmlns:x="jelly:xml">
    <x:element URI="${ns}" name="test-node">
        <x:attribute URI="http://apache/testNS" name="test:abc" trim="true">testValue</x:attribute>

        <test-subnode attr="test">
            <test-anotherSubNode />
            <x:element URI="${ns}" name="test-anotherSubNodeAgain">
                <x:attribute URI="${ns}" name="other:abc" trim="true">testValue</x:attribute>
            </x:element>
        </test-subnode>

        <x:replaceNamespace toURI="${ns}">
            <test-subnode attr="test">
                <test-anotherSubNode />
                <x:element URI="${ns}" name="test-anotherSubNodeAgain">
                    <x:attribute URI="${ns}" name="other:abc" trim="true">testValue</x:attribute>
                </x:element>
            </test-subnode>
        </x:replaceNamespace>
    </x:element>
</j:jelly>

Generates

When 'ns' is empty/inexistent

<test-node xmlns:test="http://apache/testNS" test:abc="testValue">
<test-subnode attr="test">
<test-anotherSubNode>
</test-anotherSubNode>
<test-anotherSubNodeAgain xmlns:other="" other:abc="testValue">
</test-anotherSubNodeAgain>
</test-subnode>
</test-node>

And when 'ns' if for example 'http://java/ns'

<test-node xmlns:test="http://apache/testNS" xmlns="http://java/ns" test:abc="testValue">
<test-subnode xmlns="" attr="test">
<test-anotherSubNode>
</test-anotherSubNode>
<test-anotherSubNodeAgain xmlns:other="http://java/ns" xmlns="http://java/ns" other:abc="testValue">
</test-anotherSubNodeAgain>
</test-subnode>
<test-subnode attr="test">
<test-anotherSubNode>
</test-anotherSubNode>
<test-anotherSubNodeAgain xmlns:other="http://java/ns" other:abc="testValue">
</test-anotherSubNodeAgain>
</test-subnode>
</test-node>

Usefull ? I'll demonstrate with my example.
I am working in ejb plugin for xdoclet-plugins project, 
the plugins for xdoclet2 project.

plugin.version.isDtd says true if we need an dtd, false, if we are using a schema.
If we are using a dtd, we don't need a namespace, if we are using a schema we need to use
'http://java.sun.com/xml/ns/j2ee' as
default namespace. So plugin.version.ns return null when is a dtd, and 'http://java.sun.com/xml/ns/j2ee'
when its not.
With this 'replaceNamespace' tag we can use the default namespace in jelly script, 
(replacing "" for "" let's it exactly the same :D) for dtd output, and when plugin.version.ns
is http://java.sun.com/xml/ns/j2ee all nodes get automatically updated to that namespace.

It will be usefull for xdoclet-plugins, and maybe for other projects.


<?xml version="1.0" encoding="UTF-8"?>
<j:jelly xmlns:j="jelly:core" xmlns:x="jelly:xml" xmlns:jsl="jelly:jsl">
    <j:if test="${plugin.version.isDtd()}">
        <x:doctype name="ejb-jar" publicId="${plugin.version.publicId}" systemId="${plugin.version.systemId}"
trim="true" />
    </j:if>
    <x:element URI="${plugin.version.ns}" name="ejb-jar">
        <j:if test="${!plugin.version.isDtd()}">
            <x:attribute URI="${plugin.version.xsiNs}" name="xsi:schemaLocation" trim="true">${plugin.version.schemaLocation}</x:attribute>
            <x:attribute name="version" trim="true">${plugin.version.version}</x:attribute>
        </j:if>
        <x:replaceNamespace toURI="${plugin.version.ns}" includeAttributes="true">
            <enterprise-beans>
                <j:forEach var="class" items="${metadata}">
                    <j:if test="${plugin.shouldGenerate(class)}">
                        <entity>
                            <ejb-name>${plugin.ejbUtils.getEjbName(class)}</ejb-name>
                            ....
                        </entity>
                    </j:if>
                </j:forEach>
            </enterprise-beans>
        </x:replaceNamespace>

        <j:import uri="org/xdoclet/plugin/ejb/descriptor/entity-beans.jelly" inherit="true"/>
    </x:element>
    <!--</ejb-jar> -->
</j:jelly>

If this patch is usefull as a full (as i think it is), 
i'd be happy to known when it gets added to jelly project, and jelly-xml.

> Generating xml nodes with attributes in diferente namespaces (for schemas..)
> ----------------------------------------------------------------------------
>
>          Key: JELLY-213
>          URL: http://issues.apache.org/jira/browse/JELLY-213
>      Project: jelly
>         Type: Bug
>     Reporter: Diogo Bacelar Quintela
>  Attachments: jelly-patch3.patch, jelly-xml-updated.patch, jelly-xml.patch
>
> I tried to find some info googling around and in the faq and couldn't find
> the answer, so here it goes.
> I need to generate the following xml (it's a sample off course), to support
> schemas.
> ------------------------------------------------
> <NodeName 
> xmlns="http://blah/bleh" 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema" 
> xsi:schemaLocation="http://blah/blehSchemaLocation">
> <!-- Other content here -->
> </NodeName>
> ------------------------------------------------
> After several tries and some inconsistent behaviour, I thought the following
> jelly excerpt should be close to the solution, however "xml:attribute"
> doesn't support namespaces values.
> ------------------------------------------------
> <j:jelly xmlns:j="jelly:core" xmlns:x="jelly:xml">
> 	<x:element URI="${myns}" name="NodeName">
> 		<x:attribute 
> 			name="xsi:schemaLocation" 
> 			URI="${myxsins}" 
> 			trim="true">
> 		${myschemaloc}
> 		</x:attribute>
> 		<!-- Other content here -->
> 	<x:element>
> </j:jelly>
> Where 
> "myns" is for example http://blah/bleh
> "myschemaloc" is for example http://blah/blehSchemaLocation
> "myxsins" is for example http://www.w3.org/2001/XMLSchema
> ------------------------------------------------
> Is there any known solution for this problem?  Even if working only for
> schemas?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message