我目前正在研究客户端 - 服务器应用程序,我想将XML用于协议。现在,我不太确定如何声明XML命名空间和创建XML模式。
不用说服务器和客户端发送不同的东西,即客户端发送请求,服务器响应它们,因此使用不同的标签等等。双方共同的事情是发送的XML数据是流式的,文档的根称为<stream>
,但是 - 正如我所说的 - 标签中的标签是不同的(分别代表请求或响应) )。
现在,这两种不同的XM语言是什么?我应该为每个命名空间声明一个名称空间(因而是一个XSD)吗?或者我应该使用一个并添加一个属性“sender”来定义一边(服务器|客户端)?在后一种情况下:我如何区分属性值呢?也就是说,如何在XSD中声明哪个标签被允许用于“发送者”值?
答案 0 :(得分:0)
由于两个<stream>
元素具有不同的内容,因此它们是具有相同本地名称的两个不同元素,但需要以不同方式进行验证。这意味着它们必须位于不同的名称空间中,因此需要单独的模式。
但是,如果发件人和收件人的<stream>
元素的内容共享共同的元素或属性,那么您应该添加具有公共内容的第三个架构。其他两个模式将导入公共模式。
答案 1 :(得分:0)
通常情况下,似乎没有一个正确答案。
我不知道对请求和响应使用相同的元素标记(即<stream>
)有什么好处。例如,您可以使用<request>
和<response>
作为单独的顶级元素。这可能会更有意义,并且还会加强为两种消息类型使用不同名称空间(和模式)的论据。
但是如果您有充分的理由将<stream>
用作请求和响应的顶级标记,那么可以定义一个模式,<stream>
是一个union
类型。联盟成员将包含适用于请求或响应的元素,但不包含两者。如果这似乎是正确的做法,这种结构可以更容易地将双方保持在同一名称空间中。