validating IP addresses using XML Schema

U

UndoMiel

Hi,

I am looking for a way to validate IP addresses using XML Schemas. The
following is what i used:

<xsd:simpleType name="IPType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="(([1-9]?[0-9] | 1[0-9][0-9] | 2[0-4][0-9] |
25[0-5])\.){3}
([1-9]?[0-9] | 1[0-9][0-9] |
2[0-4][0-9] | 25[0-5])"/>
</xsd:restriction>
</xsd:simpleType>

I think the regular expression is correct, however an XML document with a
valid IP address doesn't pass the validation test.

Can anyone tell me what I can do to solve this?

Many Thanks
 
R

Richard Tobin

<xsd:pattern value="(([1-9]?[0-9] | 1[0-9][0-9] | 2[0-4][0-9] |
25[0-5])\.){3} ([1-9]?[0-9] | 1[0-9][0-9] | 2[0-4][0-9] | 25[0-5])"/>

Try removing the spaces.

-- Richard
 
J

Johnny Kent

UndoMiel said:
Hi,

I am looking for a way to validate IP addresses using XML Schemas. The
following is what i used:

<xsd:simpleType name="IPType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="(([1-9]?[0-9] | 1[0-9][0-9] | 2[0-4][0-9] |
25[0-5])\.){3}
([1-9]?[0-9] | 1[0-9][0-9] |
2[0-4][0-9] | 25[0-5])"/>
</xsd:restriction>
</xsd:simpleType>

I think the regular expression is correct, however an XML document with a
valid IP address doesn't pass the validation test.

Can anyone tell me what I can do to solve this?

Many Thanks
I used the regular expression tester at
http://www.roblocher.com/technotes/regexp.aspx

to check how well your pattern worked and it seems that for some reason the
order matters (despite what you'd think...)

this
[1-9]?[0-9]|1[0-9][0-9]

is not the same as this
1[0-9][0-9]|[1-9]?[0-9]

Anyway my tests showed that if you reorder it like this
((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0
-9][0-9]|[1-9]?[0-9])
it will work just fine.

Some regular expression expert can tell you why A|B != B|A

So try that, making sure you have no blanks to the left of the alternation
symbol '|' else it will try and match a blank there instead of the previous
digit...

HTH,
Johnny
 
R

Richard Tobin

Johnny Kent said:
this
[1-9]?[0-9]|1[0-9][0-9]

is not the same as this
1[0-9][0-9]|[1-9]?[0-9]

It is, according to the XML Schema specification, and other regular
expression languages I'm familiar with.

The operator | binds less tightly than any other operator, including
concatenation.

Which strings did the tester give different results for? And what browser
were you using (it tests the browser's Javascript regular expressions).

And what validator is the original poster using?

-- Richard
 
J

Johnny Kent

Richard Tobin said:
Johnny Kent said:
this
[1-9]?[0-9]|1[0-9][0-9]

is not the same as this
1[0-9][0-9]|[1-9]?[0-9]

It is, according to the XML Schema specification, and other regular
expression languages I'm familiar with.

Agreed.
Sorry, instead of "(Despite what you'd think)" I should have said "contrary
to the rules of regular expressions"
in my post.

The operator | binds less tightly than any other operator, including
concatenation.

Which strings did the tester give different results for?

try entering 199 using the patterns above,
none of the 3 browsers I tried (although 2 are really mozilla though they
don't act the same) match 199
using the first pattern [1-9]?[0-9]|1[0-9][0-9]
but all 3 matched 199
using the second pattern 1[0-9][0-9]|[1-9]?[0-9]
And what browser
were you using (it tests the browser's Javascript regular expressions).

Same result for both IE5, Mozilla (1.7) and Firefox(0.8.0+)
Guess the tester must be what's bad 'cos it sure ought to work both ways.



Looks like the OP has moved on and left us to keep this alive... :)
 
U

UndoMiel

Hi,

I just used XMLSpy and the Topologi validator to validate the XML
document...

I've also tried another regular expression cause i couldnt get the the other
one working... Here it comes:

<xsd:restriction base="xsd:string">

<xsd:pattern
value="(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-
5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0
-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{
1 }[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])"/>

</xsd:restriction>

It's a bit longer and complicated but it worked fine....

Thanks for ur time guys...


Johnny Kent said:
Richard Tobin said:
Johnny Kent said:
this
[1-9]?[0-9]|1[0-9][0-9]

is not the same as this
1[0-9][0-9]|[1-9]?[0-9]

It is, according to the XML Schema specification, and other regular
expression languages I'm familiar with.

Agreed.
Sorry, instead of "(Despite what you'd think)" I should have said "contrary
to the rules of regular expressions"
in my post.

The operator | binds less tightly than any other operator, including
concatenation.

Which strings did the tester give different results for?

try entering 199 using the patterns above,
none of the 3 browsers I tried (although 2 are really mozilla though they
don't act the same) match 199
using the first pattern [1-9]?[0-9]|1[0-9][0-9]
but all 3 matched 199
using the second pattern 1[0-9][0-9]|[1-9]?[0-9]
And what browser
were you using (it tests the browser's Javascript regular expressions).

Same result for both IE5, Mozilla (1.7) and Firefox(0.8.0+)
Guess the tester must be what's bad 'cos it sure ought to work both ways.



Looks like the OP has moved on and left us to keep this alive... :)
 
J

Johnny Kent

I just downloaded and installed an eval copy of xmlspy.
I put the following code snippets into two files, checked that they
validated with wrox.validate then loaded into xmlspy and it works and
validates just fine:

file "ip.xml"
<?xml version="1.0"?>
<IPtest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ip.xsd">
<IP>192.168.255.1</IP>
</IPtest>

file "ip.xsd"
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:simpleType name="IPType">
<xsd:restriction base="xsd:string">
<xsd:pattern
value="(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-
9][0-9]|2[0-4][0-9]|25[0-5])"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="IPtest">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="IP" type="IPType" maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>


I'm using XMLSPY on windows 2000 sp2, it seems to be using the xmlspy
internal validator and is working just fine.
I think you need to check either your syntax (it won't work with spaces
within the ip , or before or after and also won't work if you leave spaces
around the | in the pattern but as I have it above (like your original but
without the spaces) it validates.
HTH,
Johnny
UndoMiel said:
Hi,

I just used XMLSpy and the Topologi validator to validate the XML
document...

I've also tried another regular expression cause i couldnt get the the other
one working... Here it comes:

<xsd:restriction base="xsd:string">

<xsd:pattern
value="(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0
-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1
]{
1 }[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])"/>

</xsd:restriction>

It's a bit longer and complicated but it worked fine....

Thanks for ur time guys...


Johnny Kent said:
Richard Tobin said:
this
[1-9]?[0-9]|1[0-9][0-9]

is not the same as this
1[0-9][0-9]|[1-9]?[0-9]

It is, according to the XML Schema specification, and other regular
expression languages I'm familiar with.

Agreed.
Sorry, instead of "(Despite what you'd think)" I should have said "contrary
to the rules of regular expressions"
in my post.

The operator | binds less tightly than any other operator, including
concatenation.

Which strings did the tester give different results for?

try entering 199 using the patterns above,
none of the 3 browsers I tried (although 2 are really mozilla though they
don't act the same) match 199
using the first pattern [1-9]?[0-9]|1[0-9][0-9]
but all 3 matched 199
using the second pattern 1[0-9][0-9]|[1-9]?[0-9]
And what browser
were you using (it tests the browser's Javascript regular
expressions).

Same result for both IE5, Mozilla (1.7) and Firefox(0.8.0+)
Guess the tester must be what's bad 'cos it sure ought to work both ways.



Looks like the OP has moved on and left us to keep this alive... :)
 
B

Brian Palmer

UndoMiel said:
Hi,

I am looking for a way to validate IP addresses using XML Schemas. The
following is what i used:

<xsd:simpleType name="IPType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="(([1-9]?[0-9] | 1[0-9][0-9] | 2[0-4][0-9] |
25[0-5])\.){3}
([1-9]?[0-9] | 1[0-9][0-9] |
2[0-4][0-9] | 25[0-5])"/>
</xsd:restriction>
</xsd:simpleType>

I think the regular expression is correct, however an XML document with a
valid IP address doesn't pass the validation test.

Note that valid IP addresses may not conform to the pattern you're
going for. Most notably, IPv6 patterns take a radically different
form.

Also, although I think almost everybody uses the 127.0.0.1 format
nowadays, traditionally you could shorten the IP address (e.g., 127.1
is the same thing as 127.0.0.1). I don't know what RFC defines that,
though, and people using IPv4 can always convert to the long form, so
that's not so important. You do need to think about the IPv6
situation, though (even if you simply decide not to handle it).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,228
Members
46,818
Latest member
SapanaCarpetStudio

Latest Threads

Top