Altova Mailing List Archives>Archive Index >microsoft.public.xml Archive Home >Recent entries >Thread Prev - Re: Allowing Either a patter or a null value in an Element? >Thread Next - Re: Allowing Either a patter or a null value in an Element? Re: Allowing Either a patter or a null value in an Element?To: NULL Date: 6/1/2006 12:09:00 PM
Actually... I take that back.... turns out that at least in XML spy, even
the pattern="" is allowing pretty much any value to be entered.
What a pain in the back side! I hate "standards" that don't seem to be
"standard" across products.
"Priscilla Walmsley" <nospam@d...> wrote in message
news:ek6ObfYhGHA.1276@T......
> Hi,
>
> The validators I'm using (Xerces and Saxon) treat a zero-length regular
> expression (which is what you have after the "|") as only matching a
> zero-length string, so it shouldn't negate the validation of requiring
> digits.
>
> You could also try
> <xs:simpleType name="DfltAddrPhone_Type">
> <xs:restriction base="xs:string">
> <xs:pattern value="\d{10,15}"/>
> <xs:pattern value=""/>
> </xs:restriction>
> </xs:simpleType>
>
> which also should match either pattern. Maybe your processor handles this
> one correctly.
>
> If that doesn't work, you can use a union type, as in:
>
> <xs:simpleType name="SizeType">
> <xs:union>
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:pattern value="\d{10,15}"/>
> </xs:restriction>
> </xs:simpleType>
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:enumeration value=""/>
> </xs:restriction>
> </xs:simpleType>
> </xs:union>
> </xs:simpleType>
>
> Hope that helps,
> Priscilla
>
> -------------------------------------------------------------------------
> Priscilla Walmsley http://www.datypic.com
> Author, Definitive XML Schema / XML in Office 2003
> XQuery (coming in 2006 from O'Reilly)
> -------------------------------------------------------------------------
> "Thomas Malia" <tommalia@w...> wrote in message
> news:eG2KwMYhGHA.1792@T......
>> Thanks,
>>
>> I tried leaving everything after the | blank... the problem is this seems
>> to negate the validation of reqiring digits. With what you descibed
>> here, I did not get a validation error if the field had a value of say
>> "THOMAS"... it took that as a valid value.
>>
>> The rule I wanted was, either you give me 10 to 15 digits OR you leave
>> the thing blank... nothing else is allowed.
>>
>> So far, the only solution I've come up with is to set the nillable
>> attribute to true and make the pattern: ="\d{10,15}". This doesn't
>> result in exactly what I want because the XML document has to explicitly
>> set the elements nil attribute for it to pass, but that's not the worst
>> thing in the world.
>>
>>
>> "Priscilla Walmsley" <nospam@d...> wrote in message
>> news:euenGdZgGHA.4976@T......
>>> Hi,
>>>
>>> The "^" character as an anchor is not supported by XML Schema. You can
>>> just leave off everything after the | character, though, as in:
>>>
>>> <xs:simpleType name="DfltAddrPhone_Type">
>>> <xs:restriction base="xs:string">
>>> <xs:pattern value="\d{10,15}|"/>
>>> </xs:restriction>
>>> </xs:simpleType>
>>>
>>> (I also slightly simplified the 10-15 digit part and took out the length
>>> constraints because they were redundant.)
>>>
>>> Hope that helps,
>>> Priscilla
>>>
>>> -------------------------------------------------------------------------
>>> Priscilla Walmsley http://www.datypic.com
>>> Author, Definitive XML Schema / XML in Office 2003
>>> XQuery (coming in 2006 from O'Reilly)
>>> -------------------------------------------------------------------------
>>>
>>> "Thomas Malia" <tommalia@w...> wrote in message
>>> news:%237nimVpfGHA.5100@T......
>>>>I want to create an XML Schema Type definition that will either allow
>>>>the XML document to level the element blank or if they supply any data
>>>>it must match a pattern.
>>>>
>>>> The one example I'm currently working on is a Phone number field.
>>>>
>>>> I'd like to have something like:
>>>> <xs:simpleType name="DfltAddrPhone_Type">
>>>>
>>>> <xs:restriction base="xs:string">
>>>>
>>>> <xs:maxLength value="15"/>
>>>>
>>>> <xs:minLength value="0"/>
>>>>
>>>> <xs:pattern value="(\d{10})(\d)*|^*"/>
>>>>
>>>> </xs:restriction>
>>>>
>>>> </xs:simpleType>
>>>>
>>>>
>>>>
>>>> When I use the above definition in XMLSpy">XMLSpy it works fine. The regular
>>>> expression in the patter allows the creation of an element that has at
>>>> least 10 digit (\d{10}) with up to 5 more digits allowed for the
>>>> extention (\d)* OR (|) NOT anything at all (^*).
>>>>
>>>> However, when use this schema to validate a XML file with MSXML it
>>>> flags an empty phone number as violating the retstriction. Also, if I
>>>> try to generate java classes from the schema using XMLBeans it says my
>>>> regular expression is invalid. They both seem to not like the (^*)
>>>> aspect.
>>>>
>>>> Is there some other way I can achieve what I'm after besides putting it
>>>> in the regular expression for the pattern? Or is there a better way to
>>>> build the regular expression? (I'm DEFINATELY no RegExp expert)
>>>>
>>>>
>>>>
>>>> Thanks in advance,
>>>>
>>>> Tom Malia
>>>>
>>>>
>>>
>>>
>>
>>
>
>
| ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
