Changeset 4623


Ignore:
Timestamp:
03/05/14 17:46:50 (10 years ago)
Author:
Menzo Windhouwer
Message:

M src/test/resources/schema/general-component-schema.xsd

  • added Schematron rules to check if the carinalities are correct

M src/test/java/clarin/cmdi/schema/cmd/TestCMDValidate.java
A src/test/resources/docs/CLARINWebService_faulty-10.xml

  • new test for cardinality rules

M pom.xml

  • switched to the latest Saxon-HE version
Location:
ComponentRegistry/trunk/CMDValidate
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • ComponentRegistry/trunk/CMDValidate/pom.xml

    r2011 r4623  
    4444            <groupId>net.sf.saxon</groupId>
    4545            <artifactId>Saxon-HE</artifactId>
    46             <version>9.4</version>
     46            <version>9.5.1-4</version>
    4747        </dependency>
    4848        <dependency>
  • ComponentRegistry/trunk/CMDValidate/src/test/java/clarin/cmdi/schema/cmd/TestCMDValidate.java

    r4524 r4623  
    172172    }
    173173
     174    @Test
     175    public void invalid_10() throws Exception {
     176        assertFalse(validate("CLARINWebService_faulty-10.xml"));
     177       
     178        }
    174179}
  • ComponentRegistry/trunk/CMDValidate/src/test/resources/schema/general-component-schema.xsd

    r4524 r4623  
    261261        <xs:annotation>
    262262            <xs:documentation>cardinality for elements and components</xs:documentation>
     263            <xs:appinfo>
     264                <sch:pattern id="c_card">
     265                    <sch:title>Check cardinalities</sch:title>
     266                    <!--
     267                        case minimum   maximum   check
     268                        1    UNK       UNK       OK
     269                        2    UNK       number    maximum ne 0
     270                        3    UNK       unbounded OK
     271                        4    number    UNK       minimum le 1
     272                        5    number    number    minimum le maximum
     273                        6    number    unbounded OK
     274                        7    unbounded UNK       NOK
     275                        8    unbounded number    NOK
     276                        9    unbounded unbounded OK
     277                       
     278                        UNK can be either a missing attribute or an empty value, both can be detected with normalize-space(@...)=''
     279                       
     280                        default CardinalityMin is 1 (based on the XSD minOccurs default value)
     281                        default CardinalityMax is 1 (based on the XSD maxOccurs default value)
     282                       
     283                        If a basic XSLT 2.0 engine, like Saxon HE, is used for Schematron validation we can't cast to xs:nonNegativeInteger.
     284                        So we cast to xs:integer. The XSD validator should have already validated that the values are valid cardinality_types.
     285                    -->
     286                    <!-- skip case 1 -->
     287                    <!-- case 2 -->
     288                    <sch:rule context="*[(normalize-space(@CardinalityMin)='')][@CardinalityMax castable as xs:integer]">
     289                        <sch:assert test="xs:integer(@CardinalityMax) ne 0">Maximum cardinality (0) cannot be lower than the default minimum cardinality (1)!</sch:assert>
     290                    </sch:rule>
     291                    <!-- skip case 3 -->
     292                    <!-- case 4 -->
     293                    <sch:rule context="*[@CardinalityMin castable as xs:integer][normalize-space(@CardinalityMax)='']">
     294                        <sch:assert test="xs:integer(@CardinalityMin) le 1">Minimum cardinality (<sch:value-of select="@CardinalityMin"/>) should be lower or equal then the default maximum cardinality (1)!</sch:assert>
     295                    </sch:rule>
     296                    <!-- case 5 -->
     297                    <sch:rule context="*[@CardinalityMin castable as xs:integer][@CardinalityMax castable as xs:integer]">
     298                        <sch:assert test="xs:integer(@CardinalityMin) le xs:integer(@CardinalityMax)">Minimum cardinality (<sch:value-of select="@CardinalityMin"/>) should be lower or equal then the maximum cardinality (<sch:value-of select="@CardinalityMax"/>)!</sch:assert>
     299                    </sch:rule>
     300                    <!-- skip case 6 -->
     301                    <!-- case 7, 8 and 9 -->
     302                    <sch:rule context="*[@CardinalityMin='unbounded']">
     303                        <!-- case 7 and 8 -->
     304                        <sch:assert test="@CardinalityMax='unbounded'">Minimum cardinality (unbounded) can't be higher than the (default) maximum cardinality (<sch:value-of select="if (normalize-space(@CardinalityMax)='') then ('1') else (@CardinalityMax)"/>)!</sch:assert>
     305                        <!-- skip case 9 -->
     306                    </sch:rule>
     307                </sch:pattern>
     308            </xs:appinfo>
    263309        </xs:annotation>
    264310        <xs:union>
Note: See TracChangeset for help on using the changeset viewer.