Почему люди принимают элементы, требующие XSD, в определенном порядке? - PullRequest
4 голосов
/ 17 ноября 2009

В недавней задаче на работе я строил конец PHP (используя SimpleXMLElement) взаимодействия XML с приложением .NET. Я сталкивался с различиями в концептуальном мышлении с моими коллегами в среде .NET, особенно потому, что они просто используют библиотеки XSD / XML в .NET, не задумываясь об этом, хотя я чувствую, что мне приходится склоняться назад, потому что ограничений XSD. Другими словами, я не мог понять, почему их XML-разработчик падает, если я даю элементы в «неправильном» порядке или у них есть элементы, о которых он не знает, и они не понимают, почему я забочусь. (Вместо этого мое мнение об их практике разработки понижено , потому что они не хотят заботиться.)

Является ли слепое принятие поколения XSD настоящим виновником здесь? Почему люди принимают это так суетливо?

Ответы [ 4 ]

8 голосов
/ 17 ноября 2009

XSD не требует, чтобы элементы были в определенном порядке, просто позволяет настаивать на том, чтобы элементы были в определенном порядке.

Одна вещь, которая хороша для принудительного размещения элементов в определенном порядке, состоит в том, что, если вы на самом деле редактируете XML вручную, intellisense автоматически предполагает, что вы хотите следующий тег в определенном порядке. Если вы просто используете xs:all вместо xs:sequence, intellisense перечислит все возможные следующие элементы, и вам придется выбрать, какой из них (или получить на выбор, в зависимости от вашей перспективы :)) .

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

Просто чтобы перевести вопрос с ног на голову, в чем недостаток использования фиксированного порядка? :)

2 голосов
/ 17 ноября 2009

Имеет смысл требовать элементы в определенном порядке. Таким образом, вы знаете, где данные должны быть. И когда вы сравниваете данные XML визуально, все совпадает. Порядок> хаос, ИМХО. Как будто XSD делает все возможное, чтобы бороться со вторым законом Ньютона.

Но вы можете использовать элемент xs: all , так что порядок не имеет значения.

1 голос
/ 17 ноября 2009

Существует несколько причин, по которым xs:sequence по умолчанию:

  1. Контроль над элементами появился в элементе. Так что вы можете без хитрости сказать, что элемент Name должен отображаться ровно один. Адрес может появиться 3 раза. И телефон не является обязательным.
  2. Быстрая обработка. Вы можете обрабатывать элемент над элементом. Без чтения последовательности логика будет более сложной.

Это не относится к человеческому письму.

0 голосов
/ 17 ноября 2009

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

<Transaction>
   <AuthenticationCredentials>...
   <Operation>...
</Transaction>

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

Во всяком случае, из того, что вы опубликовали, совсем не ясно, что вы склоняетесь назад «из-за ограничений XSD». Ограничения, скорее всего, в системе, использующей XML, а не в схеме, которая проверяет его сообщения. Могут быть вполне веские причины существования этих ограничений.

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