|
Subject: Re: [xsl] XPath expression to convert XSD enumerations into a regex, longest value first From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 8 Jul 2022 18:16:13 -0000 |
On Thu, Jul 7, 2022 at 10:01 PM Michael Kay mike@xxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Surely sorting by log(N) gives the same result as sorting by N?
>
> At this point we're stuck because the requirements aren't clear. In the
> example, 12 appeared in the output before 11, but we don't know why: there
> was nothing in the requirements statement that said it should.
>
>
Yes, I was misled by the requirement to sort by the number of digits. In a
later message I just recommended the same sort by -1 * intValue.
But the number of digits of an integer $n is exactly:
ceiling(log10($n))
Thanks,
Dimitre
> Michael Kay
> Saxonica
>
> On 8 Jul 2022, at 03:48, Dimitre Novatchev dnovatchev@xxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> > string-join(
> > sort(/*/xs:restriction/xs:enumeration/@value,
> > (),
> > function($s) {- Q{
> http://www.w3.org/2005/xpath-functions/math}log10($s)}) ,
> > '|'
> > )
> >
> > This produces exactly the wanted result. Note: no reverse(), no
> for/return :
> >
> > 12|11|10|9|8|7|6|5|4|3|2|1
>
> And why not simply:
>
> string-join(
> sort(/*/xs:restriction/xs:enumeration/@value,
> (),
> function($n) {- $n)}) ,
> '|'
> )
>
> Obviously, the reverse sort puts the longest numbers first. One needn't be
> misled by a requirement such as: "the longest value (not the biggest value,
> the string longest value) is listed first".
> And if the enumeration's value space is not xs:integer as provided in the
> original question, but can be any string, then simply:
>
> string-join(
> sort(/*/xs:restriction/xs:enumeration/@value,
> (),
> function($s) {- string-length($s))}) ,
> '|'
> )
>
>
>
>
> On Thu, Jul 7, 2022 at 7:28 PM Dimitre Novatchev dnovatchev@xxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
>>
>>
>> On Thu, Jul 7, 2022 at 6:57 PM Dimitre Novatchev dnovatchev@xxxxxxxxx <
>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>
>>> Hi Roger,
>>>
>>> > Well, I devised a solution, but it sure ain't simple.
>>> >
>>> > string-join(for $i in reverse(sort(xs:restriction/xs:enumeration,
>>> (), function($enum) {string-length($enum/@value )})) return $i/@value, '|')
>>> >
>>> > Is there is a simpler XPath expression to solve this problem?
>>>
>>> I think this can be written in a good and readable way as below:
>>>
>>> string-join(
>>> sort(/*/xs:restriction/xs:enumeration/@value,
>>> (),
>>> function($s) {- string-length($s)}) ,
>>> '|'
>>> )
>>>
>>
>>
>> The above produces:
>> 10|11|12|1|2|3|4|5|6|7|8|9
>>
>>
>> In case it is necessary the values to be in reverse order, I would use
>> what I think is probably the best, simplest and most direct solution (it's
>> a pity there is no default prefix for the "math" namespace):
>>
>> string-join(
>> sort(/*/xs:restriction/xs:enumeration/@value,
>> (),
>> function($s) {- Q{
>> http://www.w3.org/2005/xpath-functions/math}log10($s)}) ,
>> '|'
>> )
>>
>> This produces exactly the wanted result. Note: no reverse(), no
>> for/return :
>>
>> 12|11|10|9|8|7|6|5|4|3|2|1
>>
>>
>>> Thanks,
>>> Dimitre
>>>
>>> On Thu, Jul 7, 2022 at 10:02 AM Roger L Costello costello@xxxxxxxxx <
>>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>>>
>>>> Hi Folks,
>>>>
>>>> I have an XSD simpleType with enumeration values:
>>>>
>>>> <xsd:simpleType name="RunwayLightingType">
>>>> <xsd:restriction base="xsd:string">
>>>> <xsd:enumeration value="1"/>
>>>> <xsd:enumeration value="2"/>
>>>> <xsd:enumeration value="3"/>
>>>> <xsd:enumeration value="4"/>
>>>> <xsd:enumeration value="5"/>
>>>> <xsd:enumeration value="6"/>
>>>> <xsd:enumeration value="7"/>
>>>> <xsd:enumeration value="8"/>
>>>> <xsd:enumeration value="9"/>
>>>> <xsd:enumeration value="10"/>
>>>> <xsd:enumeration value="11"/>
>>>> <xsd:enumeration value="12"/>
>>>> </xsd:restriction>
>>>> </xsd:simpleType>
>>>>
>>>> I want to turn the values into a regex such that the longest value (not
>>>> the biggest value, the string longest value) is listed first:
>>>>
>>>> 12|11|10|9|8|7|6|5|4|3|2|1
>>>>
>>>> Seems like a simple problem, right? Should have a simple solution,
>>>> right?
>>>>
>>>> Well, I devised a solution, but it sure ain't simple.
>>>>
>>>> string-join(for $i in reverse(sort(xs:restriction/xs:enumeration, (),
>>>> function($enum) {string-length($enum/@value )})) return $i/@value, '|')
>>>>
>>>> Is there is a simpler XPath expression to solve this problem?
>>>>
>>>> /Roger
>>>>
>>>>
>>>>
>>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/782854> (by
>>> email)
>>>
>>
>>
>> --
>> Cheers,
>> Dimitre Novatchev
>> ---------------------------------------
>> Truly great madness cannot be achieved without significant intelligence.
>> ---------------------------------------
>> To invent, you need a good imagination and a pile of junk
>> -------------------------------------
>> Never fight an inanimate object
>> -------------------------------------
>> To avoid situations in which you might make mistakes may be the
>> biggest mistake of all
>> ------------------------------------
>> Quality means doing it right when no one is looking.
>> -------------------------------------
>> You've achieved success in your field when you don't know whether what
>> you're doing is work or play
>> -------------------------------------
>> To achieve the impossible dream, try going to sleep.
>> -------------------------------------
>> Facts do not cease to exist because they are ignored.
>> -------------------------------------
>> Typing monkeys will write all Shakespeare's works in 200yrs.Will they
>> write all patents, too? :)
>> -------------------------------------
>> Sanity is madness put to good use.
>> -------------------------------------
>> I finally figured out the only reason to be alive is to enjoy it.
>>
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/782854> (by
>> email)
>>
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> To avoid situations in which you might make mistakes may be the
> biggest mistake of all
> ------------------------------------
> Quality means doing it right when no one is looking.
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
> -------------------------------------
> To achieve the impossible dream, try going to sleep.
> -------------------------------------
> Facts do not cease to exist because they are ignored.
> -------------------------------------
> Typing monkeys will write all Shakespeare's works in 200yrs.Will they
> write all patents, too? :)
> -------------------------------------
> Sanity is madness put to good use.
> -------------------------------------
> I finally figured out the only reason to be alive is to enjoy it.
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
> email)
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/782854> (by
> email <>)
>
--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they write
all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] XPath expression to conve, Michael Kay mike@xxx | Thread | [xsl] Process the following group, rick@xxxxxxxxxxxxxx |
| Re: [xsl] Process the following gro, Wendell Piez wapiez@ | Date | [xsl] escape quotation marks in reg, Wolfhart Totschnig w |
| Month |