Каков диапазон атрибута count в xslt? - PullRequest
4 голосов
/ 06 июля 2011

Я использую один файл xslt для подсчета количества элементов в файле XML, которые имеют определенное значение (для проверки уникальности) и хранятся в имени переменной xsl. Этот xml-файл создается программно, и значение количества элементов иногда может превышать 1 млн.

Из-за этого диапазона высокого уровня я немного боюсь ограничения диапазона xsl: variable или count.

Я не знаю, имеет ли xsl: variable или count атрибут ограниченный диапазон (начальный диапазон и конечный диапазон) или нет?

Ответы [ 4 ]

4 голосов
/ 06 июля 2011

В XPath 2.0 используется тип xs:integer, определенный в спецификации схемы XML :

3.3.13 integer

[Определение:] целое число · получено · из десятичного числа, фиксируя значение · дробной части · равным 0 и не допуская конечной десятичной точки.Это приводит к стандартной математической концепции целых чисел. Пространство значений · целого числа равно бесконечному множеству {..., - 2, -1,0,1,2, ...}.· Базовый тип · целого числа является десятичным.

Следовательно, только конкретная реализация процессора XSLT потенциально может определить любой верхний предел для пространства значений реализуемого им типа xs:integer.

Например, процессор Saxon XSLT 2.0 реализует тип «Big Integer» (и арифметику Big Integer).Разумно ожидать, что любое целое число, представление которого помещается в доступную память, может быть представлено и использовано в саксонии.

4 голосов
/ 06 июля 2011

В большинстве процессоров XSLT вам, скорее всего, не хватит памяти для хранения XML-документа задолго до того, как вы превысите предел функции count (). Около 1 ГБ - это максимум, который вы, вероятно, сможете обработать, и вряд ли это будет больше, чем около 10 миллионов узлов.

3 голосов
/ 06 июля 2011

Посмотрите на этот раздел спецификации: http://www.w3.org/TR/xpath/#numbers

2 голосов
/ 06 июля 2011

По крайней мере, большинство реализаций смогут обрабатывать 32-битные числа со знаком (около 214 или около того), поэтому 10 лакхов будут работать очень хорошо.

...