
On 10/05/2012 02:07 AM, Eric Blake wrote:
On 10/04/2012 01:56 PM, Harsh Bora wrote:
Deepak is right - the <attribute name="transport"> block must be embedded in an <optional> block. <zeroOrMore> only applies to elements, but as written, your zeroOrMore says that it is okay to omit the overall <host> element, but that if you provide a <host> element, it MUST have a transport='...' attribute, and that is not correct. For back-compat reasons, ALL new attributes must be in an <optional> block since older clients of the XML did not provide the new attributes.
Looking at the grammar, it appeared to me like what you said, however, when I tested the patch, zeroOrMore worked successfully for the transport attribute as well. However, I am willing to use <optional> block for consistency.
Hmm, I guess I'd have to read up on the actual grammar of RNG notation to see if using <zeroOrMore> as an alternate spelling of <optional> for fixed-name attributes is kosher or just something that our particular RNG validation engine permits, but it's certainly not typical usage, when you realize that there will never be more than one of that attribute. At any rate, we've hashed this topic to death :)
Hm, I think its better to have <optional> even if the xml works otherwise, since this is how one would expect the grammar to be written for an optional attribute.
I chose to check for only ':' to decide if its a IPv6 addr because it doesnt make sense to be partial towards '.' What if someone specifies a host name like 12:12;12,12 or 23:23,23,23 ? A '.' in an IPv6 addr is as bad as any other invalid char.
'.' is valid in IPv6 addr. But yes, ':' is mandatory in IPv6, and forbidden in IPv4, so it makes a good distinguishing test between the two families.
So, are you suggesting to validate IPv4 only and that too based on the absence of ':' and presence of '.'? Does that really suffice to validate an IPv4 since any other special character is also an invalid separator for IPv4 ?
Ultimately, you want to accept both types of IP addresses. I was just replying to your quote about '.' not being valid in IPv6 as being an incorrect statement; I don't really know what the best separator character is that you want to be using in this context, because I haven't been following the original conversation closely enough. You should also realize that hostnames cannot contain ':' or ';' (I'm not sure about ','), so your question about someone setting a hostname to '12:12;12,12' to confuse the parser is not worth worrying about.
Ok, I understand that IPv6 can have a '.' though ':' is mandatory in IPv6, and the current code should work for IPv6 addresses with a . as well. However, I am not sure if we need to validate the user provided hostname/IPv4/IPv6 addresses if it contains an invalid separator. Also, the parsing code for IPv4 should work for hostnames as well. By talking about IP address with diff separators, I just meant to say that presence of . and absence of : doesnt necessarily mean a valid IPv4 address since presence of other invalid separator would also mean an invalid IPv4 address. regards, Harsh