validating IP addresses using XML Schema

Discussion in 'XML' started by UndoMiel, Aug 3, 2004.

  1. UndoMiel

    UndoMiel Guest

    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
     
    UndoMiel, Aug 3, 2004
    #1
    1. Advertising

  2. In article <6gSPc.1153$>,
    UndoMiel <> wrote:
    > <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
     
    Richard Tobin, Aug 3, 2004
    #2
    1. Advertising

  3. UndoMiel

    UndoMiel Guest

    i did, wont work...

    "Richard Tobin" <> wrote in message
    news:ceot75$27eu$...
    > In article <6gSPc.1153$>,
    > UndoMiel <> wrote:
    > > <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
     
    UndoMiel, Aug 3, 2004
    #3
  4. UndoMiel

    Johnny Kent Guest

    "UndoMiel" <> wrote in message
    news:6gSPc.1153$...
    > 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
     
    Johnny Kent, Aug 5, 2004
    #4
  5. In article <uDiQc.6675$Uh.4292@fed1read02>,
    Johnny Kent <> wrote:

    >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
     
    Richard Tobin, Aug 5, 2004
    #5
  6. UndoMiel

    Johnny Kent Guest

    "Richard Tobin" <> wrote in message
    news:cete5q$kbu$...
    > In article <uDiQc.6675$Uh.4292@fed1read02>,
    > Johnny Kent <> wrote:
    >
    > >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... :)
     
    Johnny Kent, Aug 6, 2004
    #6
  7. UndoMiel

    UndoMiel Guest

    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" <> wrote in message
    news:ZBEQc.10034$Uh.655@fed1read02...
    >
    > "Richard Tobin" <> wrote in message
    > news:cete5q$kbu$...
    > > In article <uDiQc.6675$Uh.4292@fed1read02>,
    > > Johnny Kent <> wrote:
    > >
    > > >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... :)
    >
    >
    >
    >
     
    UndoMiel, Aug 6, 2004
    #7
  8. UndoMiel

    Johnny Kent Guest

    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" <> wrote in message
    news:ItLQc.193$...
    > 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" <> wrote in message
    > news:ZBEQc.10034$Uh.655@fed1read02...
    > >
    > > "Richard Tobin" <> wrote in message
    > > news:cete5q$kbu$...
    > > > In article <uDiQc.6675$Uh.4292@fed1read02>,
    > > > Johnny Kent <> wrote:
    > > >
    > > > >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... :)
    > >
    > >
    > >
    > >

    >
    >
     
    Johnny Kent, Aug 8, 2004
    #8
  9. UndoMiel

    Brian Palmer Guest

    "UndoMiel" <> writes:

    > 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).
     
    Brian Palmer, Aug 8, 2004
    #9
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ben Jessel
    Replies:
    0
    Views:
    441
    Ben Jessel
    Aug 5, 2004
  2. Markus
    Replies:
    1
    Views:
    1,661
    Markus
    Nov 23, 2005
  3. Stanimir Stamenkov
    Replies:
    3
    Views:
    1,325
    Stanimir Stamenkov
    Apr 25, 2005
  4. First_step_to_xml
    Replies:
    0
    Views:
    729
    First_step_to_xml
    Jun 28, 2006
  5. Replies:
    3
    Views:
    3,168
Loading...

Share This Page