Я могу осуществить порядок атрибутов XML с помощью схемы?

Я не могу сказать многое о тонких различиях. Однако я могу указать, что Ruby 1.9 теперь позволяет дополнительные параметры для лямбд и блоков.

Вот новый синтаксис для stabby лямбд под 1,9:

stabby = ->(msg='inside the stabby lambda') { puts msg }

Ruby 1.8 не имел того синтаксиса. Ни один не сделал стандартный способ объявить, что блоки/лямбды поддерживают дополнительный args:

# under 1.8
l = lambda { |msg = 'inside the stabby lambda'|  puts msg }
SyntaxError: compile error
(irb):1: syntax error, unexpected '=', expecting tCOLON2 or '[' or '.'
l = lambda { |msg = 'inside the stabby lambda'|  puts msg }

Ruby 1.9, однако, поддерживает дополнительные аргументы даже со старым синтаксисом:

l = lambda { |msg = 'inside the regular lambda'|  puts msg }
#=> #
l.call
#=> inside the regular lambda
l.call('jeez')
#=> jeez

, Если Вы хотите создать Ruby1.9 для Leopard или Linux, проверьте эта статья (бесстыдный сам продвижение).

17
задан skaffman 9 May 2012 в 09:37
поделиться

8 ответов

Согласно спецификации xml,

порядок спецификаций атрибутов в начальном теге или теге пустого элемента не имеет значения

Вы можете проверить это в разделе 3.1

34
ответ дан 30 November 2019 в 10:49
поделиться

XML-атрибуты не имеют порядка, поэтому нет никакого приказа, который необходимо обеспечить.

Если вы хотите что-то упорядочить, вам нужны элементы XML. Или что-то отличное от XML. JSON, YAML и bEncode, например, имеют как карты (которые неупорядочены), так и последовательности (которые упорядочены).

6
ответ дан 30 November 2019 в 10:49
поделиться

Как отмечали другие, нет, вы не можете полагаться на упорядочение атрибутов.

Если бы у меня вообще был какой-либо процесс, включающий 2500 файлов XML и 1,5 миллиона пар ключ / значение, я получал эти данные из XML в более удобную форму, как только мог. База данных, формат двоичной сериализации, что угодно. Вы не получаете никаких преимуществ от использования XML (кроме проверки схемы). Я обновлял свой магазин каждый раз, когда получал новый XML-файл, и брал на анализ 1,5 миллиона XML-элементов из основного потока моего процесса.

4
ответ дан 30 November 2019 в 10:49
поделиться

Я не думаю, что XML-схема поддерживает это - атрибуты просто определяются и ограничиваются по имени, например, они должны соответствовать определенному имени - но я не понимаю, как вы можете определить порядок для этих атрибутов в XSD.

Я не знаю другого способа убедиться, что атрибуты на узле XML идут в определенном порядке - не уверен, поддерживает ли это какой-либо другой механизм схемы XML, такой как Schematron или Relax NG. ....

1
ответ дан 30 November 2019 в 10:49
поделиться

Ответ - нет, увы. Я в шоке от твоей цифры 40%. Мне трудно поверить, что превращение «foo» в ProcessFoo занимает так много времени. Вы уверены, что 40% не включают время, затраченное на выполнение ProcessFoo?

Можно ли получить доступ к атрибутам по имени с помощью этой вещи Expat? Это более традиционный способ доступа к атрибутам. Я не говорю, что это будет быстрее, но, возможно, стоит попробовать.

2
ответ дан 30 November 2019 в 10:49
поделиться

Я почти уверен, что нет способа принудительно установить порядок атрибутов в XML-документе. Я собираюсь предположить, что вы можете настоять на этом с помощью бизнес-процесса или других человеческих факторов, таких как контракт или другой документ.

Что, если бы вы просто предположили, что первый атрибут был «id», и проверили имя быть уверенным? Если да, используйте значение, если нет, то вы можете попытаться получить атрибут по имени или выбросить документ.

Хотя это не так эффективно, как вызов атрибута по его порядковому номеру, некоторое ненулевое количество раз вы сможете догадаться, что ваши поставщики данных предоставили XML в соответствии со спецификацией. В остальное время вы можете предпринять другие действия.

1
ответ дан 30 November 2019 в 10:49
поделиться

Просто предположение, но можете ли вы попробовать добавить use = "required" в каждую из спецификаций вашего атрибута?

<xs:complexType name="value_type">
 <!-- This doesn't work -->
 <xs:sequence>
  <xs:attribute name="id" type="xs:string" use="required" />
  <xs:attribute name="name" type="xs:string" use="required" />
  <xs:attribute name="description" type="xs:string" use="required" />
 </xs:sequence>
</xs:complexType>

Мне интересно, не замедляется ли анализатор вниз, разрешив необязательные атрибуты, когда кажется, что ваши атрибуты всегда будут там.

Опять же, просто предположение.

РЕДАКТИРОВАТЬ: В спецификации XML 1.0 говорится, что порядок атрибутов не имеет значения. http://www.w3.org/TR/REC-xml/#sec-starttags

Следовательно, XSD не будет обеспечивать выполнение какого-либо порядка. Но это не значит, что синтаксические анализаторы нельзя заставить работать быстро, поэтому я оставляю вышеприведенный ответ опубликованным на случай, если он действительно сработает.

0
ответ дан 30 November 2019 в 10:49
поделиться

Насколько я помню, Expat - это не проверяющий синтаксический анализатор и лучше для него ... так что вы, вероятно, можете отказаться от этой идеи XSD. Также во многих XML-подходах зависимость от порядка не является хорошей идеей (XSD в свое время чертовски много критиковали за порядок элементов, например, со стороны сторонников или противников XML-веб-сервисов в MSFT)

. Сделайте свою собственную кодировку и просто расширьте свою логику для более эффективного поиска или покопайтесь в источнике синтаксического анализатора. Нетривиально написать инструментарий для кодирования эффективной замены, одновременно защищая от него программных агентов и пользователей ... вы хотите сделать это, чтобы его можно было легко перенести, сохранив при этом обратную совместимость и обратимость. Кроме того, используйте ограничения фиксированного размера / перевод имени атрибута.

[Считайте, что вам повезло с Expat :) и его чистой скоростью. Представьте, как разработчики CLR любят средства масштабирования XML, они обычно отправляют 200 МБ по сети в процессе «простого запроса к базе данных» ..]

0
ответ дан 30 November 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: