[Home] [By Thread] [By Date] [Recent Entries]

  • From: Rick Jelliffe <ricko@a...>
  • To: xml-dev@l...
  • Date: Mon, 17 Sep 2001 19:37:44 +1000

 From: "Matt Loryman" <matt.loryman@v...>

> 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(., '.'))&lt; 256 and
            number(substring-before(substring-after(., '.'), '.'))&lt; 256 and
            number(substring-after(substring-after(., '.'), '.')) &lt; 256" 
        >An IP address is made of three numbers each less than 256 
        separated by "." .</assert>
  <assert test="number(substring-before(., '.'))&gt; 0 and
            number(substring-before(substring-after(., '.'), '.'))&gt; 0 and 
            number(substring-after(substring-after(., '.'), '.')) &gt; 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.


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member