2014-06-24 16 views
8

Tôi gặp khó khăn khi tìm một ví dụ vững chắc về một mảng đơn giản trong kiểu tài liệu/kiểu được bao bọc.Ví dụ về mảng tài liệu/văn bản được bao bọc

Hãy xem xét hàm PHP tạo mảng lên đến số lượng tối đa.

/** 
* @param int $max 
* @return string[] $count 
*/ 
public function countTo($max) 
{ 
    $array = array(); 
    for ($i = 0; $i < $max; $i++) { 
     $array[] = 'Number: ' . ($i + 1); 
    } 
    return $array; 
} 

Các loại WSDL được tạo ra cho việc này là:

<xsd:complexType name="countTo"> 
    <xsd:sequence> 
    <xsd:element name="max" type="xsd:int"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:element name="countTo" nillable="true" type="ns:countTo"/> 
<xsd:complexType name="ArrayOfCount"> 
    <xsd:sequence> 
    <xsd:element minOccurs="0" maxOccurs="unbounded" name="count" nillable="true" type="xsd:string"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:complexType name="countToResponse"> 
    <xsd:sequence> 
    <xsd:element name="count" type="ns:ArrayOfCount"/> 
    </xsd:sequence> 
</xsd:complexType> 
<xsd:element name="countToResponse" nillable="true" type="ns:countToResponse"/> 

Yêu cầu trong cơ thể sẽ như thế nào:

<ns1:countTo> 
    <max>5</max> 
</ns1:countTo> 

Nhưng những gì hiện các phản ứng như thế nào, và những gì là quy ước?

Hiện nay, SoapServer đang tạo

<ns1:countToResponse> 
    <count> 
    <count>Number: 1</count> 
    <count>Number: 2</count> 
    <count>Number: 3</count> 
    <count>Number: 4</count> 
    <count>Number: 5</count> 
    </count> 
</ns1:countToResponse> 

Tôi không chắc chắn về count yếu tố lồng nhau. Có lẽ điều này nên là item thay thế (và WSDL sẽ cần phải được cập nhật để làm cho nó xảy ra).

<ns1:countToResponse> 
    <count> 
    <item>Number: 1</item> 
    <item>Number: 2</item> 
    <item>Number: 3</item> 
    <item>Number: 4</item> 
    <item>Number: 5</item> 
    </count> 
</ns1:countToResponse> 
+0

làm bạn cần mẫu mới wsdl-schema (đối với phản ứng là ' ..') hoặc những gì? – reg

+0

Những gì tôi theo sau là quy ước được chấp nhận cho XML thực tế được tạo ra cho tài liệu được bao bọc/chữ. Có rất nhiều tài liệu xung quanh cho những gì WSDL có thể trông như thế nào, và nó nên khác với phiên bản RPC như thế nào. Chỉ cần không có gì xung quanh về những gì các thực hành được chấp nhận là dành cho XML tài liệu/XML được tạo ra. – Reuben

+0

Điều này có vẻ giống như một câu hỏi ý kiến ​​đối với tôi. Bạn có thể dễ dàng làm một trong hai và tôi đã có những bất hạnh của giao dịch với các hệ thống sử dụng cả hai. – yakatz

Trả lời

3

Thực sự không có quy ước nào cho việc này. Đôi khi tiện ích khi bạn có một mảng là item để đặt tên cho bộ sưu tập là items. Nhưng vì phần tử của bạn có tên là count khó hơn một chút, vì counts sẽ không phải là câu trả lời được chấp nhận. Bạn có thể chọn result, nhưng điều đó chỉ phù hợp khi nó cũng là phần tử chứa duy nhất, như trong ví dụ của bạn.

<xsd:complexType name="countToResponse"> 
    <xsd:sequence> 
    <xsd:element name="result" type="ns:ArrayOfCount"/> 
    </xsd:sequence> 
</xsd:complexType>