I'm trying to create a schema for a messaging application, but one of the fields needs to contain XHTML. e.g. <message> <subject>Hello!</subject> <body> <h1>Test</h1> <p>This is a test message</p> </body> </message> I have: <xs:element name="body" type="xs:string" minOccurs="1" maxOccurs="1" /> But this fails for the above snippet because I have type=string. How can I allow this element to contain free XML?
Leon Mayne wrote: > I'm trying to create a schema for a messaging application, but one of > the fields needs to contain XHTML. e.g. > > <message> > <subject>Hello!</subject> > <body> > <h1>Test</h1> > <p>This is a test message</p> > </body> > </message> Note that XHTML 1.x elements as defined by the W3C are in the namespace http://www.w3.org/1999/xhtml so what you show is not XHTML as defined by the W3C. > I have: > <xs:element name="body" type="xs:string" minOccurs="1" maxOccurs="1" /> > But this fails for the above snippet because I have type=string. How can > I allow this element to contain free XML? Include a schema for your "XHTML" elements (or import one if you move to real XHTML in the namespace http://www.w3.org/1999/xhtml). As an alternative you could consider xs:any (http://www.w3.org/TR/xmlschema-0/#any), that allows you not to specify what exactly the contents is. -- Martin Honnen --- MVP XML http://JavaScript.FAQTs.com/
"Martin Honnen" wrote in message news:utq7czbtIHA.420@TK2MSFTNGP02.phx.gbl... > Include a schema for your "XHTML" elements (or import one if you move to > real XHTML in the namespace http://www.w3.org/1999/xhtml). > As an alternative you could consider xs:any > (http://www.w3.org/TR/xmlschema-0/#any), that allows you not to specify > what exactly the contents is. Sorry for the delay in replying. I tried using xs:any and pointing to the XHTML namespace: <xs:element name="body" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:sequence> <xs:any namespace="http://www.w3.org/1999/xhtml" minOccurs="1" maxOccurs="unbounded" processContents="skip"/> </xs:sequence> </xs:complexType> </xs:element> But when trying to add a snippet containing the below body tag: <body> <span> <p>This is an automated email. Please find below the details for your new login:</p> <p> Username: yourname<br /> Password: yourpassword</p> <p> Please contact support if you require any assistance. </p> </span> </body> I get: XML Validation: Invalid content. Expected element(s):http://www.w3.org/1999/xhtml:* where element 'span' was specified. Location: /*:email[1]/*:body[1]/*:span[1] I added the span tag to make it have a root element, but did try without it (just two top level <p> tags). I'm sure I've done something silly, but I can't spot it at the moment. Do you know what might be wrong?
Leon Mayne wrote: > Sorry for the delay in replying. I tried using xs:any and pointing to > the XHTML namespace: > > <xs:element name="body" minOccurs="1" maxOccurs="1"> > <xs:complexType> > <xs:sequence> > <xs:any namespace="http://www.w3.org/1999/xhtml" > minOccurs="1" maxOccurs="unbounded" processContents="skip"/> > </xs:sequence> > </xs:complexType> > </xs:element> > > But when trying to add a snippet containing the below body tag: > > <body> > <span> Well if your schema mandates the namespace http://www.w3.org/1999/xhtml then you should use it in the instance document. Otherwise the XML is obviously not valid. If you don't want to use a namespace then you need to change the schema. -- Martin Honnen --- MVP XML http://JavaScript.FAQTs.com/
"Martin Honnen" wrote in message news:ORrMG8ntIHA.1240@TK2MSFTNGP02.phx.gbl... > Well if your schema mandates the namespace http://www.w3.org/1999/xhtml > then you should use it in the instance document. Otherwise the XML is > obviously not valid. If you don't want to use a namespace then you need to > change the schema. The who in the what now? Can I ignore the XHTML schema and just allow any XML instead of specifically XHTML?
"Martin Honnen" wrote in message news:ORrMG8ntIHA.1240@TK2MSFTNGP02.phx.gbl... > Well if your schema mandates the namespace http://www.w3.org/1999/xhtml > then you should use it in the instance document. Otherwise the XML is > obviously not valid. If you don't want to use a namespace then you need to > change the schema. Oh wait, got it now. Thanks for your help.