OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [xml-dev] IP address pattern matching



 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(., '.'))&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.