Re: Restricting attribute content to not include a specific string

Hi Roman,

If Schematron embedded rules are ok for you then you can do something like:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="root">
     <xs:complexType>
       <xs:annotation>
         <xs:appinfo>
           <pattern xmlns="http://www.ascc.net/xml/schematron" 
name="testNotUnkown">
             <rule context="root">
               <assert test="@test!='unknown'">The value cannot be 
'unknown'</assert>
             </rule>
           </pattern>
         </xs:appinfo>
       </xs:annotation>
       <xs:attribute name="test" type="xs:string"/>
     </xs:complexType>
   </xs:element>
</xs:schema>

then

<root test="unknown"></root>

gives:

SystemID: C:\george\workspace\oXygen\samples\test.xml
Location: 1:0
Description: The value for test attribute cannot be 'unknown' 
(@test!='unknown')

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


Pete Cordell wrote:
> 
> Hi Roman,
> 
> "Not a pattern" doesn't seem to be something XSD supports.  I think the 
> only way this can be done is by doing something like:
> 
> <xs:simpleType name="attrValue">
> <xs:restriction base="xs:string">
> <xs:pattern value=""/>
> <xs:pattern value="[^u].*"/>
> <xs:pattern value="u[^n].*"/>
> <xs:pattern value="un[^k].*"/>
> <xs:pattern value="unk[^n].*"/>
> <xs:pattern value="unkn[^o].*"/>
> <xs:pattern value="unkno[^w].*"/>
> <xs:pattern value="unknow[^n].*"/>
> <xs:pattern value="unknown.+"/>
> </xs:restriction>
> </xs:simpleType>
> 
> Not a pretty sight!
> 
> (Note that . does not match \n, so if you want your extra text to 
> include \n you will have to modify the . bit.)
> Pete.
> -- 
> =============================================
> Pete Cordell
> Tech-Know-Ware Ltd
>                         for XML to C++ data binding visit
>                         http://www.tech-know-ware.com/lmx
>                         (or http://www.xml2cpp.com)
> =============================================
> 
> ----- Original Message ----- From: "Huditsch, Roman (LNG-VIE)" 
> <Roman.Huditsch@lexisnexis.at>
> To: <xmlschema-dev@w3.org>
> Sent: Thursday, April 20, 2006 7:59 AM
> Subject: Restricting attribute content to not include a specific string
> 
> 
> 
> Hi,
> 
> I need to restrict attribute values in my Schema to not be the string
> "unknown".
> So I declared a simple type as follows:
> 
> <xs:simpleType name="attrValue">
> <xs:restriction base="xs:string">
> <xs:pattern value="^(unknown)"/>
> </xs:restriction>
> </xs:simpleType>
> 
> Since I am not experienced with regular expressions I am kind of stuck
> on the pattern value.
> Do you have any idea, how to make that restriction in the most simple
> way?
> Thank you very much for your help.
> 
> best regards,
> Roman
> 
> 
> 
> 
> 

Received on Thursday, 20 April 2006 09:30:38 UTC