[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [xml-dev] IP address pattern matching
- From: Rick Jelliffe <ricko@allette.com.au>
- To: xml-dev@lists.xml.org
- Date: Mon, 17 Sep 2001 19:37:44 +1000
From: "Matt Loryman" <matt.loryman@viewgate.com>
> Just for your interest this is what i decided to go with for providing a
> pattern match for IP addresses.
> Essentially this means "four groups of one to three numbers between zero and
> nine separated by periods".
> Doesn't cover all eventualities i know, but then again it doesn't stop
> somebody providing a perfectly valid
> but inaccurate IP address!
>
>
> <simpleType>
> <restriction base="string">
> <pattern
> value="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"/>
> </restriction>
> </simpleType>
If you validate with Schematron you can have something like
<rule context="...">
<assert test="number(substring-before(., '.'))< 256 and
number(substring-before(substring-after(., '.'), '.'))< 256 and
number(substring-after(substring-after(., '.'), '.')) < 256"
>An IP address is made of three numbers each less than 256
separated by "." .</assert>
<assert test="number(substring-before(., '.'))> 0 and
number(substring-before(substring-after(., '.'), '.'))> 0 and
number(substring-after(substring-after(., '.'), '.')) > 0"
>An IP address is made of three numbers each greater than 0
separated by "." .</assert>
</rule>
You can use this to put in quite intricate rules, I guess. For example,
you could refactor the 6 tests into three, for each part of the address,
to give very specific diagnostics. Or you could test whether
two IP addresses were in the same CLASS C network.
If you are using an XML Schema validator that also understands
embedded Schematron schemas (such as the free Topologi Schematron
validator at http://www.topologi.com/ *) you can embed the constraint
above into the XML Schema into an xs:appinfo element, so that
you have a single source for all your constraints.
Cheers
Rick Jelliffe
* This works with MSXML 4 beta April but not the may beta.
We have prepared a new version which should work with the
final MSXML 4, when MS releases that.