- From: <noah_mendelsohn@us.ibm.com>
- Date: Fri, 27 Dec 2002 10:37:11 -0500
- To: Antňnia Galmés <a.galmes@barcelo.com> (by way of "C. M. Sperberg-McQueen" <<a.galmes@barcelo.com<a.galmes>)
- Cc: www-xml-schema-comments@w3.org
- Message-ID: <OF373DA7BE.55E03A25-ON85256C9C.0053BE7B@lotus.com>
Antňnia Galmés writes: > Hi! > > I have a problem writing an schema. We have developed a > XML interface that accepts the requests to our system > using SOAP (but it's use is optional). The xml > requests are grouped with the tag > <requests_set>... </requests_set> and may be more than > one. The request as a whole would be: > > <?xml version="1.0" encoding="UTF-8" ?> > <SOAP-ENV:Envelope > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> > <SOAP-ENV:Body> > > <requests_set> > <request1> > ... > </request1> > . > . > . > </requests_set> > > </SOAP-ENV:Body> > </SOAP-ENV:Envelope> > > I have written an schema to validate the incoming > requests, starting from the complex type > "requests_set". The validation is ok if I don't write > the outer SOAP tags, but I get a validating error when > the requests come into the soap-env:body tag because > this does not appear in my schema. The problem is that > I don't know how to include the soap elements in the > schema I've written. Now, the schema is starting like > this: > > <?xml version="1.0" encoding="UTF-8"?> > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > elementFormDefault="qualified" > > <xsd:element name="requests_set" type="aux_type"/> > <xsd:complexType name="aux_type"> > <xsd:sequence> > <xsd:element name="request1" type="t1" minOccurs="0" > maxOccurs="unbounded"/> > <xsd:element name="request2" type="t2" minOccurs="0" > maxOccurs="unbounded"/> etc. > > How do I indicate that the "requests_set" may be in a > SOAP block? > > Thank you in advance. This is mostly a question about XML schema, of course, not SOAP. The fundamental answer is that the XML schema recommendation anticipates such needs in a variety of ways >>but you have to get a schema validator that meets your needs<<. What the schema recommendation says essentially is: according to the needs of an application, processors MAY allow validity assessment to begin with any element in the instance, and using any complexType definition or element declaration. Now, processors don't have to allow such great flexibility, but they're allowed to. So, the question is, what does the processor you're using do, and what might others do? Most processors out there are aimed at the obvious "validate the whole document based on the declaration of the root element scenario." I'm honestly not sure which ones if any allow you a finer degree of control, but in principle it's allowed. There is another technique that is often used to solve this problem. If you look at the schema for SOAP at [2] it contains: <xs:complexType name="Body"> <xs:sequence> <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" /> </xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"> <xs:annotation> <xs:documentation> Prose in the spec does not specify that attributes are allowed on the Body element </xs:documentation> </xs:annotation> </xs:anyAttribute> </xs:complexType> If you note the processContents="lax", that means that the schema processor will validate the body if and only if an element declaration is provided for the particular body element child you provide. In your case, this is "requests_set". So, if you provide a schema processor with both the schema for the SOAP envelope and for your schema for requests_set, which are presumably in separate schema documents, then the validation should occur. Exactly how to provide such multiple documents, if it's possible at all, depends on the API or command line options to the processor you are using. One other suggestion: it's really better practice to use namespace qualification on elements like "requests_set". That will help your SOAP message stand out from any others that might use an otherwise similar element name. I hope this is helpful to you. Noah [1] http://www.w3.org/TR/xmlschema-1/#validation_outcome [2] http://schemas.xmlsoap.org/soap/envelope/ ------------------------------------------------------------------ Noah Mendelsohn Voice: 1-617-693-4036 IBM Corporation Fax: 1-617-693-8676 One Rogers Street Cambridge, MA 02142 ------------------------------------------------------------------
Received on Friday, 27 December 2002 10:41:08 UTC