[Xml-compile] Schema interpretation
Kaare Rasmussen
kaare at jasonic.dk
Mon Sep 8 14:53:07 BST 2008
Kaare Rasmussen writes:
> Kaare Rasmussen writes:
>
>> Hi
>>
>> I'm a bit stuck with this construct. This is from a .NET schema, and I'm
>> trying to access the web service as a client.
>>
>> <xs:element name="GetDetails">
>> <xs:complexType>
>> <xs:sequence>
>> <xs:element minOccurs="0" name="Identifiers" nillable="true"
>> type="q3:ArrayOfstring"
>> xmlns:q3="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
>> </xs:sequence>
>> </xs:complexType>
>> </xs:element>
>>
>> I would naively think that the call should look like this
>>
>> ($answer, $trace) = $GetDetails->(Identifiers => [qw/id1 id2/] );
>>
>> But this responds with an error:
>> ARRAY(0x1de0400) is no HASH at
>> /usr/local/share/perl/5.8.8/XML/Compile/Translate/Writer.pm line 460.
>> error: complex `x0:Identifiers' requires a HASH of input data, not
>> `ARRAY' at {...namespace...}GetDetails/Identifiers
>>
>> This call actually works:
>>
>> ($answer, $trace) = $GetDetails->(Identifiers => {string => 'id1'} );
>>
>> And it responds with details for id1. But is not very useful if I want
>> more ids.
>>
>> So my question is, what interpretation is right? .NET or XML::Compile?
>
> I failed to include the definition of ArrayOfString. It is in another xsd
> file, but it looks OK to me.
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <xs:schema elementFormDefault="qualified"
> targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays
> " xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
>
> <xs:complexType name="ArrayOfstring">
> <xs:sequence>
> <xs:element minOccurs="0" maxOccurs="unbounded" name="string"
> nillable="true" type="xs:string"/>
> </xs:sequence>
> </xs:complexType>
> <xs:element name="ArrayOfstring" nillable="true"
> type="tns:ArrayOfstring"/>
> </xs:schema>
Oh, /me not being fully awake. I can use
$answer, $trace) = $GetDetails->(Identifiers => {string => [qw/id1 id2/]} );
which is incredibly ugly, but it works.
More information about the Xml-compile
mailing list