Как получить нечувствительные к регистру элементы в XML

Вы можете сделать это с помощью комбинации столбцов и кодировок x. Вот пример с данными о населении наборов данных vega ( vega editor link ):

{
  "data": {"url": "data/population.json"},
  "mark": {
    "type": "boxplot",
    "extent": "min-max"
  },
  "encoding": {
    "column": {"field": "age","type": "ordinal"},
    "y": {
      "field": "people",
      "type": "quantitative",
      "axis": {"title": "population"}
    },
    "x": {
      "field": "sex",
      "type": "nominal"
    },
    "color": {
      "field": "sex",
      "type": "nominal"
    }
  }
}

enter image description here

8
задан Luixv 15 May 2009 в 14:13
поделиться

6 ответов

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

т.е. XML-файл> Анализируется на XSD и исправляется> Выгрузка утверждена

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

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

Если вы просто застряли с клиентами, использующими случайные регистры против XSD, содержащего только теги в нижнем регистре, вы должны иметь возможность анализировать файлы и преобразовывать все теги в нижний регистр за один раз. Это предполагает, что содержимое между тегами имеет несколько регистров, и вы не можете просто преобразовать весь документ.

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

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

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

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

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

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

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

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

5
ответ дан 5 December 2019 в 20:18
поделиться

Процессоры XPath / Xslt чувствительны к регистру. Они не могут выбрать узел / атрибут, если вы укажете неправильный регистр.

Если вы хотите вывести имя узла и указать его в верхнем регистре, вы можете сделать:

upper-case(local-name())
1
ответ дан 5 December 2019 в 20:18
поделиться

Как сказал @Melkisadek, проверка XSD существует для определенной цели. Если вы разрешите пользователям загружать файлы с недопустимым XML, ваше приложение обязательно завершится с ошибкой в ​​какой-то момент при доступе к данным в этих файлах. Более того, вся цель, заключающаяся в том, что XSD проверяет входную XML-схему, теряется. Если вы готовы отказаться от всей функции проверки схемы, вам нужно будет использовать XSLT для преобразования всех тегов в верхний или нижний регистр по вашему желанию (см. Ответ @Rashmi).

Это было бы аналогично разрешению пользователю вводите специальные символы в поле ввода номера социального страхования только потому, что пользователю удобнее вводить специальные символы (да, этот пример глупый, лучше не придумать!)

Поэтому, на мой взгляд, решение заключается в сохранении валидации схемы как есть, но предоставляя пользователям возможность проверить схему перед загрузкой. Например, если это веб-приложение, вы можете предоставить кнопку на странице, которая использует Javascript для проверки файла на соответствие вашей схеме. В качестве альтернативы проверяйте на сервере только тогда, когда файл загружен. В обоих случаях предоставьте соответствующую обратную связь, такую ​​как номер строки, в которой находятся ошибочные объекты, положение символа и причину отметки ошибки.

1
ответ дан 5 December 2019 в 20:18
поделиться

XML обычно генерируется машиной. Следовательно, здесь у вас не должно возникнуть никаких проблем с шириной case.

Если реальная проблема заключается в том, что две разные системы генерируют два разных типа тега ( vs. ), я думаю, вы могли бы просто определите оба случая в своем XSD.

0
ответ дан 5 December 2019 в 20:18
поделиться

После загрузки просмотрите XML-файл (через DOM или SAX) и исправить корпус перед проверкой?

0
ответ дан 5 December 2019 в 20:18
поделиться

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

Это можно сделать с помощью механизма подстановки группы в XML-схеме . Например, если ваша схема определила:

  <xsd:element name="foobar" type="xsd:string"/>

, то вы можете добавить в схему XML следующее:

  <xsd:element name="Foobar" type="xsd:string" substitutionGroup="foobar"/>
  <xsd:element name="FooBar" type="xsd:string" substitutionGroup="foobar"/>
  <xsd:element name="fooBar" type="xsd:string" substitutionGroup="foobar"/>
  <xsd:element name="FOOBAR" type="xsd:string" substitutionGroup="foobar"/>

и т. Д.

, чтобы попытаться предвидеть возможные ошибки, которые они могут сделать. Для каждого элемента может быть 2 ^ n возможных комбинаций случаев, где n - длина имени (при условии, что каждый символ имени является буквой).

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

1
ответ дан 5 December 2019 в 20:18
поделиться
Другие вопросы по тегам:

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