Hi Mark,
(I saw on the list archive that you answered my mail, but our mail server must have eaten the reply.) > Am I the only one who doesn't like the Russian Doll? > http://www.oracle.com/technetwork/java/design-patterns-142138.html In defence of our developers, the schema is generated dynamically because the data structure is user-defined. > Have your tried > print $schema->template(PERL => "$yourns:contents"); I generated the template for the whole structure. For this extract it says # is an unnamed complex # is optional contents => { # sequence of component # is an unnamed complex # occurs any number of times component => [ { # choice of csRef # is an unnamed complex # is optional csRef => { # sequence of csId, contentId # is a xs:string # Enum: cmis cmis-alfresco demo0 demo1 demo_no_logisitics # demo_with_logisitics fld fld_zos jcr sp2010 # test.manual.enforce csId => "cmis", # is a xs:string contentId => "example", }, It does say that the choice is optional... > So, you can say: > component => [ > { cho_csRef => [] > ... > } I tried that, but it says: error: no match for required block `cho_csRef' at node/contents/component I tried with "csRef => {}", and it said: error: required value for element `csId' missing at node/contents/component/csRef I tried with "csRef => undef,", and it goes back to "no match ...". Schema in attachment. Ciaran From: DEIGNAN Ciaran [mailto:[email protected]] Sent: jeudi 12 septembre 2013 14:40 To: [email protected]<mailto:[email protected]> Subject: [Xml-compile] xs:choice question Hi Mark and list, I'm not sure if this is a XML::Compile question or just proof that I need training on XML. I have a schema that contains a section like this: <xs:element minOccurs="0" name="contents"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="component"> <xs:complexType> <xs:choice> <xs:element minOccurs="0" name="csRef"> <xs:annotation> <xs:documentation>This element can be used to referenced when the content is already stored in a content repository. In the case of uploading the content, it must not be present. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="csId" type="csIdType"/> <xs:element name="contentId" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> In perl I build a structure like this: contents => { component => [ { csRef => { csId => 'fld', contentId => 'docid', }, title => 'PerlTest', mimeType => 'text/plain', fileExtension => 'txt', lang => 'fr', }, ], The above fragment will be converted to XML by XML::Compile::Schema. However if I don't specify the csRef, it refuses to convert to XML, and gives me the error error: no match for required block `cho_csRef' at node/contents/component The schema does say minOccurs="0", so I don't know why I have to provide it. However the xs:choice does seem required, so I understand the error. Is the schema just bad ? Thanks for any pointers, Ciaran Deignan RSD Technical Support
_______________________________________________ Xml-compile mailing list [email protected] http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile
