0

我目前正在开发一个客户端-服务器应用程序,我想使用 XML 作为协议。现在,我不太确定声明 XML 名称空间和创建 XML 模式。

不用说服务器和客户端发送不同的东西,即客户端发送请求,服务器响应它们,因此使用不同的标签等等。双方的共同点是发送的 XML 数据是流式的,并且文档的根称为<stream>,但是 - 正如我所说 - 中的标签是不同的(每个分别代表请求或响应)。

现在,这是两种不同的 XM 语言吗?我应该为它们中的每一个声明一个命名空间(因此也声明一个 XSD)吗?还是我应该使用一个并添加一个属性“发送者”来定义端(服务器|客户端)?在后一种情况下:那么我如何区分属性值?也就是说,如何在 XSD 中声明哪个标签可以用于什么“发件人”值?

4

2 回答 2

0

由于这两个<stream>元素的内容不同,所以它们是本地名称相同的两个不同元素,但需要进行不同的验证。这意味着它们必须位于单独的名称空间中,因此必须位于单独的模式中。

但是,如果发送者和接收者元素的<stream>内容共享相同的元素或属性,那么您应该添加第三个模式,该模式具有共同的内容。其他两个模式将导入通用模式。

于 2009-04-12T17:07:04.483 回答
0

通常情况下,似乎没有一个正确的答案。

我不知道 <stream>对请求和响应使用相同的元素标记(即 )有什么好处。例如,您可以使用<request><response>作为单独的顶级元素。这可能更有意义,并且还会加强对两种消息类型使用不同名称空间(和模式)的论点。

但是,如果您有充分的理由将<stream>其用作请求和响应的顶级标记,那么您可以定义一个模式,即<stream>一种union类型。联合成员将包含适用于请求或响应的元素,但不能同时适用于两者。如果这似乎是正确的做法,这种结构将使两侧保持在同一个命名空间中变得更容易。

如果我看到请求和响应协议是紧密耦合的,我会更倾向于走这条路,这样对一个协议的更改可能也需要对另一个协议进行更改。如果响应集中的信息类型可以随时间(或通过应用程序)改变,那么单独的命名空间会更有意义。

于 2009-04-12T17:29:45.660 回答