xsl-list
[Top] [All Lists]

RE: [xsl] [xml] repeating elements

2007-05-29 06:41:08
Since this problem has nothing to do with XSLT, could I suggest you move it
to a different list, such as xmlschema-dev?

Michael Kay
http://www.saxonica.com/ 

-----Original Message-----
From: Ignacio Garcia [mailto:igcxslt(_at_)gmail(_dot_)com] 
Sent: 29 May 2007 14:18
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] [xml] repeating elements

The problem is still there...

I tried using grouping, but the same thing happens...

I can have multiple <i> elements, but the editor won't allow 
me to add <i> MIXED TEXT <i>.
If I do it by hand the result is validated with no problems.

Any other suggestions?


On 5/24/07, Andrew Welch <andrew(_dot_)j(_dot_)welch(_at_)gmail(_dot_)com> 
wrote:
On 5/24/07, Ignacio Garcia <igcxslt(_at_)gmail(_dot_)com> wrote:
Hello,

I have the following problem...

I have created a schema that with a complex type that 
contains a few 
html like tags:

<xsd:complexType name="notesText" mixed="true">
        <xsd:sequence minOccurs="0" maxOccurs="unbounded">
                <xsd:element name="b" type="xsd:string" 
minOccurs="0"/>
                <xsd:element name="i" type="xsd:string" 
minOccurs="0"/>
                <xsd:element name="p" type="notesText" 
minOccurs="0"/>
                <xsd:element name="br" minOccurs="0">
                        <xsd:simpleType>
                                <xsd:restriction 
base="xsd:string">
                                        <xsd:length value="0"/>
                                </xsd:restriction>
                        </xsd:simpleType>
                </xsd:element>
                <xsd:element name="a" minOccurs="0">
                        <xsd:complexType mixed="true">
                                <xsd:attribute 
name="href" type="xsd:string" use="required"/>
                        </xsd:complexType>
                </xsd:element>
                <xsd:element name="ul" minOccurs="0">
                        <xsd:complexType>
                                <xsd:sequence 
maxOccurs="unbounded">
                                        <xsd:element 
name="li" type="notesText" minOccurs="0"/>
                                </xsd:sequence>
                        </xsd:complexType>
                </xsd:element>
      </xsd:sequence>
</xsd:complexType>

As you can see, the type is simple and does exactly what I want...
If I put this inside an element and create an stylesheet using 
<xsl:copy-of> I get the desired result of working html code...

HOWEVER, using this definition none of the html editors I 
have used 
lets me add the same html-like-tag two times in a row 
with text in 
between them...

Let me explain:

If my element contains:
----------------
This is some <b>text</b> with <i>html</i> tags on it.
----------------

Everything works perfect...BUT if after that I want to add 
<i>another italics</i>, the editor won't let me... If I use a raw 
text editor, then I can add it, and the instance is 
valid, but any 
xml editor that helps with tag addition will not let me add the 
second <i> after I have used one.

However, if I have some other html-like-tag between the two <i>, 
then there is no problem...

Does anyone know why???
I have tried adding <sequence minOccurrs=0" 
maxOccurrs="unbounded"> 
surrounding all the html-like elements, but that does not work 
either...

This is an XML Schema question, not XSLT, so its better 
asked on XML 
Schema Dev (although Schema Aware XSLT is on-topic so I guess the 
lines are blurred a little).

You've defined <i> as optional, so you're only only allowed 0 or 1 
occurrence, hence when you add second the XML becomes 
invalid.  If you 
want to allow more that one then specify maxOccurs on the 
definition 
to it optional-repeatable.

Even then, all that will do is allow you to have multiple 
<i>'s in a 
sequence.  If you want to allow any element in any order 
then I use a
group:

<xs:group name="html-elements">
  <xs:sequence>
    <xs:element name="b" type="xs:string" minOccurs="0"/>
    <xs:element name="i" type="xs:string" minOccurs="0"/>
    <xs:element name="p" type="html-elements" minOccurs="0"/>
    .....
  </
</

and then:

<xs:complexType name="notesText" mixed="true">
       <xs:group ref="html-elements" minOccurs="0"
maxOccurs="unbounded"/>
</

This should allow any mix of "html-elements" and text.

(this is just one way I've done it - there may well be better ways)

cheers
andrew


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>