Нужно ли объявлять несколько или только одно пространство имен для протокола сервер-клиент на основе XML? - PullRequest
0 голосов
/ 12 апреля 2009

В настоящее время я работаю над клиент-серверным приложением, и я хотел бы использовать XML для протокола. Теперь я не совсем уверен относительно объявления пространств имен XML и создания схем XML.

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

Теперь, это два разных языка XM? Должен ли я объявить одно пространство имен (и, следовательно, один XSD) для каждого из них? Или я должен использовать один для всех и добавить атрибут «отправитель» для определения стороны (сервер | клиент)? В последнем случае: как мне отличить значения атрибута? То есть как объявить в XSD, какой тег разрешен для какого значения «отправитель»?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2009

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

Я не знаю, какое преимущество имеет использование одного и того же тега элемента (т. Е. <stream>) для запроса и ответа. Например, вы можете использовать <request> и <response> в качестве отдельных элементов верхнего уровня. Это могло бы быть немного более значимым, а также усилило бы аргумент в пользу использования различных пространств имен (и схем) для двух типов сообщений.

Но если у вас есть веские причины для использования <stream> в качестве тега верхнего уровня как для запроса, так и для ответа, тогда вы могли бы определить схему так, чтобы <stream> имел тип union. Члены объединения могут содержать элементы, которые подходят для запросов или ответов, но не для обоих. Эта структура облегчила бы сохранение двух сторон в одном и том же пространстве имен, если это кажется правильным.

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

0 голосов
/ 12 апреля 2009

Поскольку два элемента <stream> имеют разное содержимое, это два разных элемента с одним и тем же локальным именем, но их необходимо проверять по-разному. Это подразумевает, что они должны находиться в отдельных пространствах имен, следовательно, в отдельных схемах.

Однако, если содержимое элементов <stream> отправителя и получателя имеет общие элементы или атрибуты, то вам следует добавить третью схему с общим содержимым. Две другие схемы будут импортировать общую схему.

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