XML: что использовать в качестве разделителя списка - PullRequest
3 голосов
/ 19 апреля 2010

Есть два способа указать списки значений в XML. Вариант 1:

<Database Name="myDatabase">
    <Table Name="myTable1" />
    <Table Name="myTable2" />
    <Table Name="myTable3" />
    ...
</Database>

Вариант 2:

<Database Name="myDatabase" Tables="myTable1 myTable2 myTable3 ..." />

Ясно, что Вариант 1 более чистый и его легче расширять, но во многих случаях Вариант 2 более читабелен и удобен для пользователя.

При использовании варианта 2, что следует использовать в качестве разделителя? Стандарт XML Schema , похоже, предпочитает пробел , тогда как некоторые примеры из реального мира используют вместо запятые .

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

Ответы [ 4 ]

2 голосов
/ 20 апреля 2010

Для разделения значения, которое в идеале должно быть сделано с помощью языка программирования (даже если XPath и XSLT действительно предоставляют функции), пробел выглядит как естественный разделитель в XML, но CSS использует точку с запятой, а другой общий разделитель - это запятая, хотя ни одна из них не так удобна для XML, как пробелы, поскольку в рекомендации XML-схемы W3C есть кое-что для списков (<xs:list>), в которых допустимые значения разделены пробелом.

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

2 голосов
/ 19 апреля 2010

Как программист, я, кажется, игнорирую пробелы при просмотре списка.Похоже, что-то не так с ним.

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

С другой стороны, XML (или другие языки разметки) предпочитают пробелы в качестве разделителей, как в

<Database Name="myDatabase" Tables="myTable1 myTable2 myTable3 ..." />

Нет запятой, разделяющей различные атрибуты (имя, таблицы) и т. Д.

Нет явного преимущества для любого из вариантов с точки зрения синтаксического анализа, поскольку в обоих случаях вам потребуется избавиться от лишних пробелов между элементами (myTable1, myTable2, myTable3) или (myTable1 myTable2 myTable3).

1 голос
/ 22 апреля 2010

Ни!

Я думаю, вы должны использовать Вариант 3:

<Database Name="myDatabase"> 
    <Tables>myTable1 myTable2 myTable3</Tables>
    ... 
</Database> 

Серьезно!

Если у вас есть набор метаданных, которые принадлежат сущности, представленной элементом <Database>, тогда нет достаточных оснований для помещения «некоторых» этих данных в атрибут, в то время как «другие» данные представляются как дополнительные дочерние элементы, как указано ....

Я думаю, что основным критерием формы вашего XML должна быть полезность:

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

  • Если таблицы являются единственными «листовыми» узлами в представлении - другими словами, если для каждой таблицы не определены вспомогательные данные и не определены дополнительные данные для базы данных, - тогда список таблиц сохраняется как xs:list в атрибуте XML (вариант 2) кажется мне подходящим.

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

Возражение, которое имеют некоторые люди с «тем, как оно выглядит», кажется мне совершенно необоснованным и похоже на общее объяснение того, почему маленьких мальчиков нужно обрезать. Там есть иррациональный уклон.

1 голос
/ 19 апреля 2010

Ваш вариант 1 позволяет гораздо более эффективно извлекать структурную информацию с помощью XPath и анализа.

Вариант 2 может быть немного легче читать для человека, но я бы определенно пошел на # 1.

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

За исключением случаев, когда вы, вероятно, хотите избежать использования символа '<', который недопустим в значениях атрибутов ... </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...