Подтвердить что ты не робот

Какие хорошие альтернативные форматы данных для XML?

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

4b9b3361

Ответ 1

Кажется, существует много поддержки нескольких платформ для JSON.

Ответ 2

Статья Джеффа на Наклон углового кронштейна обобщает ряд альтернатив (ну, в основном, YAML), и привел меня к статья wiki по облегченным языкам разметки.

Обновление: Хотя YAML является "альтернативой XML" для некоторых приложений, они не являются, как я думал, изоморфными.

Действительно, это "не язык разметки".

Кроме того, YAML не является "легким", как кажется. Для документов, которые могут быть представлены в простом XML (например, примере Джеффа), YAML явно менее подробен. Но YAML предлагает множество других специализированных структур, заимствуя гораздо больше символов и последовательностей, чем зарезервированные XML.

В нижней строке, если вы ищете XML-без угловых скобок, YAML не так.

Ответ 3

Не забывайте о YAML!

JSON, похоже, имеет лучшую поддержку. Например, библиотека Prototype JS имеет отличные встроенные функции JSON.

Ответ 4

Я бы не пропустил обычный текст, например, CSV или разделитель табуляции.

Ответ 5

HDF5 - очень компактный формат данных с некоторыми характеристиками, похожими на xml. Библиотеки .net оставляют желать лучшего, но формат очень хорошо масштабируется как по размеру, так и по производительности.

Ответ 6

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

Ответ 7

Вы можете попробовать google protobufs. Это намного быстрее, чем XML. Есть библиотеки для него в C, С++, С#, Java и Python (есть альфа-версии для ruby ​​и perl). Но он двоичный.

Ответ 8

S-выражения работают отлично, если вам не нужно применять атрибуты к элементам. Другой альтернативой является YAML.

Ответ 9

XML часто используется для конфигурации, и в этом случае есть некоторые другие простые форматы хранения, которые часто используются (менее ориентированы на документы):

Существуют различные способы чтения и записи обоих, в зависимости от платформы и языка.

Ответ 10

Что вы хотите делать с данными? Хранить его? Пропустите его? Показать его? Эти вопросы должны стимулировать поиск подходящей технологии. Просто спрашивайте, как вы должны форматировать свои данные, например, спрашивать, на каком языке вы должны программировать, без указания того, что вы хотите выполнить.

Для большинства задач с данными, у доктора Кодда есть лечение: http://en.wikipedia.org/wiki/Edgar_F._Codd. Базы данных должны иметь возможность делать все, что вы имеете в виду.

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

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

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

Ответ 11

TOML - новая большая вещь. Он имеет красивость YAML без большой спецификации. Он расширяет общий и знакомый формат файла конфигурации. Он непосредственно аналогичен (и переводится на) JSON. Имеет поддержку на всех больших языках. Создан соучредителем/президентом Github Томом и нарциссически назван. Это потрясающе. Дайте ему шанс!

Пример TOML:

# This is a TOML document. Boom.

title = "TOML Example"

[owner]
name = "Tom Preston-Werner"
organization = "GitHub"
bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
dob = 1979-05-27T07:32:00Z # First class dates? Why not?

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

[servers]

  # You can indent as you please. Tabs or spaces. TOML don't care.
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"

[clients]
data = [ ["gamma", "delta"], [1, 2] ]

# Line breaks are OK when inside arrays
hosts = [
  "alpha",
  "omega"
]

Ответ 12

Для полноты я упомянул Edifact, для которого я написал интерфейс давным-давно.

Ответ 14

Я бы не пропустил обычный текст, например, CSV или разделитель табуляции.

Я действительно ищу альтернативы, которые имеют определенную структуру и (кросс-платформенную, многоязычную) библиотечную поддержку. Мне интересно смотреть на разные проекты и их плюсы и минусы. Мне нравится идея форматов, которые могут иметь формат текста и "двоичный" (компактный, "скомпилированный", быстрый ввод-вывод, меньший размер). Преимущество наличия библиотек в том, что они выполняют синтаксический анализ и, возможно, дополнительную обработку/проверку данных для вас.

Несмотря на то, что это определенно используется для простых форматов, таких как .ini,.plist и CSV и т.д. Вам не всегда нужно использовать молоток для взлома гайки.

Ответ 15

Но какой ценой?

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

(в стороне: моя привычка состоит в том, чтобы использовать XML внутри себя и преобразовывать его в JSON, где этот желаемый вывод)

Ответ 16

Ересь! XML - это король данных. Скажи "нет" узурпаторам, головами! Да здравствует XML!

Но если вам просто нужны данные, используйте Json для поддержки и элегантности, но если вам нужно сформировать, xpath как запросы, дополнительные метаданные и т.д.... Stick with XML

Примечание. Я использую Xml для генерации кода построения системных систем и подобных задач, но Json для Rpc, Sql для запросов и настойчивости и, наконец, Ямл кое-где для ведения журнала и быстрых задач, другими словами, выбирает формат appriopiate для необходимо.

Ответ 17

Простой декларативный язык - хорошая альтернатива XML для обычных задач, таких как сериализация и настройка. Он предоставляет библиотеку парсеров С# и Java. Я думаю, что это превосходит при определении всех видов метаданных без XML-многословия.

Ответ 18

Если вы спрашиваете в перспективе DSL, Guile Scheme может помочь, как уже было предложено с помощью S-выражений.

Лично я также использую JSON для транзакций AJAX.

Ответ 19

XML подходит для текстовой разметки, но для общей структуры сериализация является довольно плохим вариантом, где JSON гораздо более подходит.

Ответ 20

Все, что вам нравится, если это не ASN.1

Ответ 21

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

Ответ 22

Я только что закончил разработку в формате сериализации, который может быть применен для хранения и передачи древовидных данных. Самый важный аспект моей работы заключается в том, что предоставленная техника уменьшает как можно больше накладных расходов как для сериализации, так и для десериализации. Я также попытался сохранить реализацию как можно проще, чтобы не возникало проблем с ее внедрением в течение одного дня. Если вы заинтересованы, вы можете перейти на http://issuu.com/daniilm/docs/trifle, где я разместил свою спецификацию. Все бесплатно и со многими полезными диаграммами.

Ответ 23

Для хранения кодовых данных LES (синтаксис выражения Loyc) является альтернативой для начинающих. Я заметил, что многие люди используют XML для кодовых конструкций, таких как системы сборки, которые поддерживают условные обозначения, вызовы команд, иногда даже циклы. Подобные вещи выглядят естественно в LES:

// LES code has no built-in meaning. This just shows what it looks like.
[DelayedWrite] // an "attribute"
Output(
    if version > 4.0 {
        $ProjectDir/Src/Foo;
    } else {
        $ProjectDir/Foo;
    }
);

У него пока нет отличной поддержки инструмента; в настоящее время единственная библиотека LES предназначена для С#. Известно, что только одно приложение использует LES: LLLPG.

В теории вы можете использовать LES для данных или разметки, но нет стандартов для того, как это сделать:

body {
    '''Click here to use the World '''
    a href="http://google.com" {
        strong "most popular"; " search engine!"
    };
};

point = (2, -3);
tasteMap = { "lemon" -> sour; "sugar" -> sweet; "grape" -> yummy };

Ответ 24

Чтобы упомянуть... взгляните на мое предложение:

http://igagis.github.io/stob/

Это очень просто и не перегружается множеством специальных символов, просто {} и "" в основном.

Поддерживает комментарии стиля С++.

Существуют библиотеки С++, С# и Java.

Пример:

"String object"
AnotherStringObject
"String with children"{
    "child 1"
    Child2
    "child three"{
        SubChild1
        "Subchild two"

        Property1 {Value1}
        "Property two" {"Value 2"}
        //comment

        /* multi-line
           comment */

        "multi-line
         string"

        "Escape sequences \" \n \r \t \\"
    }
}

Ответ 25

Если кто-то ищет менее сложную альтернативу XML, которая более или менее изоморфна XML, тогда AXON. Чтобы объяснить примеры эквивалентных представлений как в XML, так и в AXON. Существует также библиотека python pyaxon, которые поддерживают формат AXON.

XML

<person>
   <name>Alex</name>
   <age>34</age>
   <email>[email protected]</email>
</person>

AXON

person {
  name {"Alex"}
  age {34}
  email {"[email protected]"}}

XML

<memo date="2008-02-14">
<from>
<name>The Whole World</name><email>[email protected]</email>
</from>
<to>
<name>Dawg</name><email>[email protected]</email>
</to>
<message>
Dear sir, you won the internet. http://is.gd/fh0
</message>
</memo>

AXON

memo {
  date:2008-02-14
  from {
    name{"The Whole World"} email{"[email protected]"}}
  to {
    name{"Dawg"} email{"[email protected]"}}
  message {"Dear sir, you won the internet. http://is.gd/fh0"}
}

XML

<club>
  <players>
    <player id="kramnik"
       name="Vladimir Kramnik"
       rating="2700"
       status="GM" />
    <player id="fritz"
       name="Deep Fritz"
       rating="2700"
       status="Computer" />
    <player id="mertz"
      name="David Mertz"
      rating="1400"
      status="Amateur" />
  </players>
  <matches>
    <match>
      <Date>2002-10-04</Date>
      <White refid="fritz" />
      <Black refid="kramnik" />
      <Result>Draw</Result>
    </match>
    <match>
      <Date>2002-10-06</Date>
      <White refid="kramnik" />
      <Black refid="fritz" />
      <Result>White</Result>
    </match>
  </matches>
</club>

AXON

club {
  players {
    player {
      id:"kramnik"
      name:"Vladimir Kramnik"
      rating:2700
      status:"GM"}
    player {
      id:"fritz"
      name:"Deep Fritz"
      rating:2700
      status:"Computer"}
    player {
      id:"mertz"
      name:"David Mertz"
      rating:1400 
      status:"Amateur"}}
  matches {
    match {
     Date{2002-10-04}
     White{refid:"fritz"}
     Black{refid:"kramnik"}
     Result{"Draw"}}
    match {
      Date{2002-10-06}
      White{refid:"kramnik"}
      Black{refid:"fritz"}
      Result{"White"}}}}

Ответ 26

XML может быть очень медленным для больших числовых данных, и я также иногда был разочарован двоичной альтернативой HDF5. Итак, я разработал новый легкий универсальный двоичный формат под названием Xeno, который также может охватывать те же сценарии использования, что и XML. Грамматика такая же простая, как и в JSON, но она двоичная и более быстрая, см. https://github.com/bitagoras/Xeno/.