Posted by: prankster March 1, 2011
Login in to Rate this Post:
0
?
BTW,
Does any one has better solution than following? I want to use W3C XML schema. I'm handling this in my code, but it would be awesome if i could use XML schema.
I wish to create an XML document in which one of its elements must be defined with one of two known attributes, but not both. For example, I would like to define a "socketHandler" element as follows: <xs:element name="socketHandler"> <xs:complexType> <xs:attribute name="hostName" type="xs:string"/> <xs:attribute name="hostAddress" type="xs:string"/> <xs:attribute name="port" type="xs:int" use="required"/> </xs:complexType> </xs:element> but I only want a user to be able to define either a hostName attribute (e.g., hostName="<servername>") or a hostAddress (e.g., hostAddress="<IP_address>") attribute, but not both. It appears that the <xs:choice> construct accomplishes this for elements. Is there a functional equivalent for attributes, or is there a better way to approach this?
Does any one has better solution than following? I want to use W3C XML schema. I'm handling this in my code, but it would be awesome if i could use XML schema.
1) Change to a different schema dialect (I think RELAX-NG support this functionality) 2) Express you co-constraint using an embedded schematron rule In your example the latter could be expressed as the following Schematron rule on your socketHandler element: <xs:element name="socketHandler"> <xs:annotation> <xs:appinfo> <sch:pattern xmlns:sch="http://www.ascc.net/xml/schematron"> <sch:rule context="socketHandler"> <sch:report test="self::*[@hostName][@hostAddress]" > On a <tag> element, if there is the attribute "attr", the child element <attr> must be prohibited and vice versa.</sch:report> </sch:rule> </sch:pattern> </xs:appinfo> </xs:annotation> <xs:complexType> <xs:attribute name="hostName" type="xs:string"/> <xs:attribute name="hostAddress" type="xs:string"/> <xs:attribute name="port" type="xs:int" use="required"/> </xs:complexType> </xs:element> These constraints can be validated with the new Schematron Validator from Topologi. The tool is free and can be downloaded from www.topologi.com. Thanks in advance
Last edited: 01-Mar-11 01:23 PM