[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Validation question


schematron let
You can validate this kind of constraint using the Schematron assertion 
language.
See http://www.ascc.net/xml/schematron for information and 
http://www.topologi.com/
for a free Windows validator.   (The following are untested, just to 
give a hint)

Kiia Kallio wrote:

>There are a few problematic things in SVG:
>
>- Some elements (such as "feConvolveMatrix") have a matrix as their parameter. This matrix
>is defined with two attributes: "order" (number-optional-number) and "kernelMatrix" (list
>of numbers). In order for the attributes to be valid, the "kernelMatrix" should have as
>many values as the order defines (for instance order = "3, 2" means that the matrix should
>have 6 values). There are also other cases of cross-dependencies like this.
>  
>
The validation code for this will be quite klunky, but certainly 
possible. The latest version
of Schematron (1.1.6) has a let expression that helps, and I expect 
newer versions based on
XPath 2 will be around soon; these will have features that should 
directly make this
kind of constraint simpler to model. 

<rule context="svg:feConvolveMatrix[@order][@kernelMatrix]"
    <let name="car" value="string-before(@order, ',')" />
    <let name="cdr" value="string-after(@order, ',')" />
    <let name="orderValue" value=" number( $car) * number( $cdr )" />
    <let name="first" value="string-before(@kernelMatrix, ',')" />
     <let name="after-first" value="string-after(@kernelMatrix, ',')" />
    <let name="second" value="string-before( $after-first , ',')" />
     <let name="after-second" value="string-after( $after-first , ',')" />
    <let name="third" value="string-before( $after-second , ',')" />
     <let name="after-third" value="string-after( $after-second , ',')" />
     ...
   <assert test="( $orderValue = 1  and not 
string-contains(@kernelMatrix, ','))
     or (($orderValue &lt; 1 or number(first))
         and (( $orderValue &lt; 2  or number( $second ))
         and (( $orderValue &lt; 3  or number( $third ))
     ... "
     >
    The kernelMatrix should have as many values as the order attribute 
specifies
   </assert>

For some versions of schematron before 1.1.6 you will have to make a single
big fat Xpath for all those things: it will rapidly explode in size.

>- Animation elements ("animate", "set", "animateColor", "animateTransform", "animateMotion")
>have some attributes ("by", "from", "to", "values") that define the new values for the
>animated attribute of some other element. The valid values for the attribute depend on the
>target attribute and the target element that has the attribute. For instance markup
><set xlink:href = "#foobar" attributeName="type" to="turbulence" begin="3s" dur="6s"/>
>is completely valid if the element whose id is "foobar" is "feTurbulence". If it happens
>to be for instance "feColorMatrix", this is not valid. "feColorMatrix" does have "type"
>attribute, but "turbulence" is not a valid value for that. (And it is not even necessary to
>define "xlink:href" attribute to specify the animated element, but if the attribute is
>missing, the animation target is the parent element.
>
<rule context="svg:set">
    <let name="constructedName" value="..XPath to make feTurbulence from 
turbulence" />
    <assert test="//*[name() = $constructedName 
][@id=string-after(current()/@xlink:href, '#')]" />
    The set element's href must point to an element of type <value-of 
select=" $constructed-name" />.
    </assert>
</rule>

>So, I'd like to know if any validation schema can handle such things like cross-
>dependencies of attributes, dependencies between attributes and element types, and
>parsing of complex attributes for validating them, or (as the designers of various
>schemas are probably reading the list) if there are any plans for the features I'm
>looking for.
>
As mentioned, Schematron is good for all these things, with the current 
shortfalling (inherited from XPath1)
that parsing complex attribute values is cumbersome. This should change 
soon with XPath2.

>One option I think would be to construct some sort of XSLT transformation that re-formats
>complex attributes to XML that is easier to validate (like the path example above) but I
>know very little about XSLT, so I don't really know if it can handle things like this. If
>somebody has pointers for cases where this has been succesfully done, I'd be grateful.
>
Look at Simon StLaurent's  "Regular Fragmentations" code for a start.

Cheers
Rick Jelliffe



PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.