Jorsek Schematron Rules

Jorsek offers the following generic Schematron rules.

Tip: If you want to implement any of the following Schematron rules into your easyDITA instance, contact your Customer Success Manager.

Jorsek Structure Schematron Rules

You can use the following rules to enforce extra validation of your information architecture.

Do not insert elements into title elements

A title element cannot contain any children elements except for conkeyrefs.

Flag

Code

<!-- A Title element cannot contain any children elements except for conkeyrefs. -->
<pattern id="JORSEK_STRUCTURE_01">
    <rule context="title">
        <report test="*[not(@conkeyref)]">A title element cannot contain any children elements except for conkeyrefs.</report>
    </rule>
</pattern>

Assign @xml:lang attributes to root topic elements

Each root topic element should have an @xml:lang attribute assigned.

Flag

Code

<!-- Each topic root element should have an @xml:lang attribute assigned -->
<pattern id="JORSEK_STRUCTURE_02">
    <rule context="concept|task|reference|topic|troubleshooting">
        <assert test="@xml:lang">Each root topic element should have an @xml:lang attribute
            assigned.</assert>
    </rule>
</pattern>

Add Short Description elements

Each topic should contain a Short Description element.

Flag

Code

<!-- Each topic should contain a Short Description element -->
<pattern id="JORSEK_STRUCTURE_03">
    <rule context="concept|task|reference|topic|troubleshooting">
        <assert test="shortdesc|abstract/shortdesc">Topics should contain a Short
            Description element.</assert>
    </rule>
</pattern>

Do not create one-step procedures

Each task should contain at least two Step elements.

Flag

Code

<!-- Each task should contain at least two Step elements -->
<pattern id="JORSEK_STRUCTURE_04">
    <rule context="steps">
        <assert test="count(step) &gt; 1">Tasks should contain at least two Step elements.
            If you need to create a one-step task, replace the Steps element with a
            Steps-Unordered element.</assert>
    </rule>
</pattern>

Do not duplicate children elements in step elements

A Step or Substep element should not contain more than one Choices, Substeps, Step Example, or Info element.

Flag

Code

<!-- A Step or Substep element should not contain more than one Choices, Substeps, Step Example, or Info element -->
<pattern id="JORSEK_STRUCTURE_05">
    <rule context="step|substep">
        <assert test="count(info) &lt; 2">A Step or Substep element should not contain more than one Info
            element.</assert>
        <assert test="count(stepxmp) &lt; 2">A Step or Substep should not contain more than one Step
            Example element.</assert>
        <assert test="count(choices) &lt; 2">A Step or Substep should not contain more than one Choices
            element.</assert>
        <assert test="count(substeps) &lt; 2">A Step should not contain more than one Substeps
            element.</assert>
    </rule>
</pattern>

Do not create one-substep substeps

A Substeps element should contain at least two Substep elements.

Flag

Code

<!-- A Substeps element should contain at least two Substep elements -->
<pattern id="JORSEK_STRUCTURE_06">
    <rule context="substeps">
        <assert test="count(substep) &gt; 1">A Substeps element should contain at least two
            Substep elements.</assert>
    </rule>
</pattern>

Do not create one-choice choices

A Choices element should contain at least two Choice elements.

Flag

Code

<!-- A Choices should contain at least two Choice elements -->
<pattern id="JORSEK_STRUCTURE_07">
    <rule context="choices">
        <assert test="count(choice) &gt; 1">A Choices element should contain at least two Choice
            elements.</assert>
    </rule>
</pattern>

Remove or fill in empty elements

Empty task elements should be removed or filled in.

Flag

Code

<!-- Empty task elements should be removed or filled in -->
<pattern id="JORSEK_STRUCTURE_08">
    <rule context="prereq|postreq|steps|steps-unordered|stepsection|cause|condition|result|example|context|info">
        <assert test="string-length(.) != 0">Empty task elements should be removed or filled
            in.</assert>
    </rule>
</pattern>

Add titles for sections

A Section element should contain a Title element.

Flag

Code

<!-- A Section element should contain a Title element -->
<pattern id="JORSEK_STRUCTURE_09">
    <rule context="section">
        <assert test="title">A Section element should contain a Title element.</assert>
    </rule>
</pattern>

Do not add introductory text

Prerequisites, Postrequisites, Step Example, Step Result, Example, Result, and Context elements should not contain introductory text. The text is generated automatically (specific to: jorsek_pdf, color_pdf, and gray_pdf publishing scenarios).

Flag

Code

<!-- Prerequisites, Postrequisites, Step Example, Step Result, Example, Result, and Context elements should not contain introductory text. The text is generated automatically (Specific to: jorsek_pdf, color_pdf, gray_pdf publishing scenarios) -->
<pattern id="JORSEK_STRUCTURE_10">
    <rule context="prereq/p[1]">
        <report test="matches(., '^[Bb]efore\s*you\s*[Bb]egin')">Remove the introductory text. The
            text is generated automatically.</report>
        <report test="matches(., '^[Bb]efore\s*you\s*[Ss]tart')">Remove the introductory text. The
            text is generated automatically.</report>
        <report test="matches(., '^[Pp]rerequisites')">Remove the introductory text. The text is
            generated automatically.</report>
    </rule>
    <rule context="postreq/p[1]">
        <report test="matches(., '^[Nn]ext\s*[Ss]teps')">Remove the introductory text. The text is
            generated automatically.</report>
        <report test="matches(., '^[Pp]ostequisites')">Remove the introductory text. The text is
            generated automatically.</report>
    </rule>
    <rule context="stepxmp/p[1]|example/p[1]">
        <report test="matches(., '^[Ee]xample')">Remove the introductory text. The text is
            generated automatically.</report>
        <report test="matches(., '^[Ff]or\s*[Ee]xample')">Remove the introductory text. The text is
            generated automatically.</report>
    </rule>
    <rule context="stepresult/p[1]|stepresult/p[1]">
        <report test="matches(., '^[Rr]esult')">Remove the introductory text. The text is
            generated automatically.</report>
    </rule>
    <rule context="result/p[1]|result/p[1]">
        <report test="matches(., '^[Rr]esult')">Remove the introductory text. The text is
            generated automatically.</report>
    </rule>
    <rule context="context/p[1]">
        <report test="matches(., '^[Cc]ontext')">Remove the introductory text. The text is
            generated automatically.</report>
    </rule>
</pattern>

Do not create one-item unordered or ordered lists

Unordered List and Ordered List elements should contain at least two List Item elements.

Flag

Code

<!-- Unordered List and Ordered List elements should contain at least two List Item elements -->
<pattern id="JORSEK_STRUCTURE_11">
    <rule context="ul|ol">
        <assert test="count(li) &gt; 1" sqf:fix="addListItem">Unordered List and Ordered List
            elements should contain at least two List Item elements.</assert>
        <sqf:fix id="addListItem">
            <sqf:description>
                <sqf:title>Add a List Item element</sqf:title>
                <sqf:p>To fix this issue, you can add another List Item element. If you cannot
                    come up with another List Item element, convert the list element to a Paragraph
                    element.</sqf:p>
            </sqf:description>
            <sqf:add node-type="element" target="li" position="last-child"/>
        </sqf:fix>
    </rule>
</pattern>

Do not create one-item definition lists

A Definition List element should contain at least two Definition Entry elements.

Flag

Code

<!-- A Definition List element should contain at least two Definition Entry elements -->
<pattern id="JORSEK_STRUCTURE_12">
    <rule context="dl">
        <assert test="count(dlentry) &gt; 1">A Definition List element should contain at least
            two Definition Entry elements.</assert>
    </rule>
</pattern>

Do not wrap images in paragraphs

A non-inline Image element should be wrapped in a Figure element instead of a Paragraph element.

Flag

Code

<!-- An Image element should be wrapped in a Figure element instead of a Paragraph element -->
<pattern id="JORSEK_STRUCTURE_15">
    <rule context="p">
        <report test="image">An image element should be wrapped in a Figure element instead of a
            Paragraph element.</report>
    </rule>
</pattern>

Add an alt element for each image

To ensure that your content is accessible, all Image elements should contain an Alt element.

Flag

Code

<!-- An Image element should contain an Alt element  -->
<pattern id="JORSEK_STRUCTURE_16">
    <rule context="image">
        <assert test="alt">An Image element should contain an Alt element.</assert>
    </rule>
</pattern>

Specify the images width

An image element should have the @width attribute assigned.

Flag

Code

<!-- An image element should have the @width attribute assigned (Specific to: DITA Open Toolkit-Specific publishing scenarios) -->
<pattern id="JORSEK_STRUCTURE_18">
    <rule context="image">
        <assert test="@width">An image element should have the @width attribute
            assigned.</assert>
    </rule>
</pattern>

Specify the type attribute for each note

Each Note element should have the @type attribute assigned.

Flag

Code

<!-- Each Note element should have the @type attribute assigned -->
<pattern id="JORSEK_STRUCTURE_19">
    <rule context="note">
        <assert test="@type">Each Note element should have the @type attribute
            assigned.</assert>
    </rule>
</pattern>

Do not add tables without headers

A Table element should contain a Table Header (thead) element.

Flag

Code

<!-- A Table element should contain a Table Header (thead) element -->
<pattern id="JORSEK_STRUCTURE_20">
    <rule context="table">
        <assert test="//thead">A Table element should contain a Table Header (thead)
            element.</assert>
    </rule>
</pattern>

Do not create single-item menu cascades

A Menu Cascade element should contain at least two UI Control elements.

Flag

Code

<!-- A Menu Cascade element should contain at least two UI Control elements -->
<pattern id="JORSEK_STRUCTURE_21">
    <rule context="menucascade">
        <assert test="count(uicontrol) &gt; 1">A Menu Cascade element should contain at least two
            UI control elements.</assert>
    </rule>
</pattern>

Add an attribute to fit wide tables

A topic that contains a Table element with five or more columns should have the @outputclass="landscape" attribute assigned to the root topic element.

Flag

Code

<!--A topic that contains a Table element with five or more columns should have the @outputclass="landscape" attribute assigned to the root topic element -->
<pattern id="JORSEK_STRUCTURE_22">
    <rule
        context="concept[not(@outputclass='landscape')]//table/tgroup|task[not(@outputclass='landscape')]//table/tgroup|reference[not(@outputclass='landscape')]//table/tgroup|topic//table/tgroup|troubleshooting//table/tgroup">
        <report test="count(colspec) &gt; 4">A topic that contains a Table element with five or
            more columns should have the @outputclass="landscape" attribute assigned to the root
            topic element.</report>
    </rule>
</pattern>

Do not use non-semantic elements

Do not use non-semantic elements (bold, underline, italics) to format content.

Flag

Code

<!-- Do not use non-semantic elements (bold, underline, italics) to format content -->
<pattern id="JORSEK_STRUCTURE_23">
    <rule context=".">
        <report test="b|u|i">Do not use non-semantic elements (bold, underline, italics) to format content. Consider using a Window Title or a UI Control element.</report>
    </rule>
</pattern>

Jorsek Style Schematron Rules

You can use the following rules to enforce validation of the language used in your content.

Remember: If you aim at extensively validating the language layer of your content, consider integrating your easyDITA instance with an external language-validation tool (for example, HyperSTE). For more information, contact your Customer Success Manager.

Do not add long titles

A Title element should not contain more than eight words.

Flag

Code

<!-- A Title element should not contain more than eight words -->
<pattern id="JORSEK_STYLE_01">
    <rule context="*[contains(@class, ' topic/title ')]">
        <let name="title-text" value="normalize-space(.)"/>
        <report test="string-length($title-text) - string-length(translate($title-text, ' ', '')) &gt;= 8">A Title element should not contain more than eight words.</report>
    </rule>
</pattern>

Do not add long short descriptions

A Short Description should not contain more than 30 words.

Flag

Code

<!-- A Short Description should not contain more than 30 words  -->
<pattern id="JORSEK_STYLE_02">
    <rule context="shortdesc">
        <let name="shortdesc-text" value="normalize-space(.)"/>
        <report test="string-length($shortdesc-text) - string-length(translate($shortdesc-text, ' ', '')) &gt;= 30">A Short Description element should not contain more than 30 words.</report>
    </rule>
</pattern>

Spell-out numbers from 0 through 10

Spell-out numbers from 0 through 10. Do not spell-out numbers higher than 10.

Code

<!-- Spell-out numbers from 0 through 10. -->
<pattern id="JORSEK_STYLE_03">
	<rule context="text()[count(ancestor::mathml) = 0][count(ancestor::table) = 0]">
		<report test="starts-with(., '1 ') or contains(., ' 1 ') or substring(., string-length(.) - 1) = ' 1'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '2 ') or contains(., ' 2 ') or substring(., string-length(.) - 1) = ' 2'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '3 ') or contains(., ' 3 ') or substring(., string-length(.) - 1) = ' 3'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '4 ') or contains(., ' 4 ') or substring(., string-length(.) - 1) = ' 4'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '5 ') or contains(., ' 5 ') or substring(., string-length(.) - 1) = ' 5'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '6 ') or contains(., ' 6 ') or substring(., string-length(.) - 1) = ' 6'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '7 ') or contains(., ' 7 ') or substring(., string-length(.) - 1) = ' 7'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '8 ') or contains(., ' 8 ') or substring(., string-length(.) - 1) = ' 8'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '9 ') or contains(., ' 9 ') or substring(., string-length(.) - 1) = ' 9'">Spell-out numbers from 0 through 10.</report>
		<report test="starts-with(., '10 ') or contains(., ' 10 ') or substring(., string-length(.) - 1) = ' 10'">Spell-out numbers from 0 through 10.</report>
	</rule>
</pattern><!-- Do not spell-out numbers higher than 10. -->
<pattern id="JORSEK_STYLE_03a">
	<rule context="text()[matches(.,'[Ee]leven\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03b">
	<rule context="text()[matches(.,'[Tt]welve\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03c">
	<rule context="text()[matches(.,'[Tt]hirteen\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03d">
	<rule context="text()[matches(.,'[Ff]ourteen\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03e">
	<rule context="text()[matches(.,'[Ff]ifteen\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03f">
	<rule context="text()[matches(.,'[Ss]ixteen\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03g">
	<rule context="text()[matches(.,'[Ss]eventeen\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03h">
	<rule context="text()[matches(.,'[Ee]ighteen\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03i">
	<rule context="text()[matches(.,'[Nn]ineteen\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03j">
	<rule context="text()[matches(.,'[Tt]wenty\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03k">
	<rule context="text()[matches(.,'[Tt]hirty\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03l">
	<rule context="text()[matches(.,'[Ff]orty\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03m">
	<rule context="text()[matches(.,'[Ff]ifty\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03n">
	<rule context="text()[matches(.,'[Ss]ixty\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03o">
	<rule context="text()[matches(.,'[Ss]eventy\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03p">
	<rule context="text()[matches(.,'[Ee]ighty\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03r">
	<rule context="text()[matches(.,'[Nn]inety\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03s">
	<rule context="text()[matches(.,'[Hh]undred(s)?\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03t">
	<rule context="text()[matches(.,'[Tt]housand(s)?\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03u">
	<rule context="text()[matches(.,'[Mm]illion(s)?\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern><pattern id="JORSEK_STYLE_03w">
	<rule context="text()[matches(.,'[Bb]illion(s)?\W')]">
		<report test=".">Use numerals for numbers 10 or higher.</report>
	</rule>
</pattern>

Do not use en dashes

Use hyphens instead of en dashes.

Code

<!-- Use hyphens instead of en dashes -->
<pattern id="JORSEK_STYLE_04">
    <rule context="text()[matches(.,'–')]">
        <report test=".">Use a hyphen instead of an en dash.</report>
    </rule>
</pattern>

Do not use "photo"

Replace “photo” with “image”.

Code

<!-- Replace "photo" or "photograph" with "image"Replace "photo" with "image" -->
<pattern id="JORSEK_STYLE_05">
    <rule context="text()[matches(.,'[pP]hoto(graph)?(s?)\W')]">
        <report test=".">Replace "photo" or "photograph" with "image".</report>
    </rule>
</pattern>

Do not use "picture"

Replace “picture” with “image”.

Code

<!-- Replace "picture" with "image". -->
<pattern id="JORSEK_STYLE_06">
    <rule context="text()[matches(.,'[pP]icture(s?)\W')]">
        <report test=".">Replace "picture" with "image".</report>
    </rule>
</pattern>

Do not use "display"

Replace “display” with “show” or “appear”.

Code

<!-- Replace "display" with "show" or "appear". -->
<pattern id="JORSEK_STYLE_07">
    <rule context="text()[matches(.,'[Dd]isplay(s|ing)?\W')]">
        <report test=".">Replace "display" with "show" or "appear". </report>
    </rule>
</pattern>

Do not use "make sure"

Replace “make sure” with “ensure”.

Code

<!-- Replace "make sure" with "ensure"-->
<pattern id="JORSEK_STYLE_08">
    <rule context="text()[matches(.,'[Mm]ak(e|es|ing)?\s*[Ss]ure\W')]">
        <report test=".">Replace "make sure" with "ensure".</report>
    </rule>
</pattern>

Do not use "drop-down list"

Replace “drop-down list” or “drop-down list” with “drop-down menu”.

Code

<!-- Replace "drop-down list" or "drop-down list" with "drop-down  menu" -->
<pattern id="JORSEK_STYLE_09">
    <rule context="text()[matches(.,'[Dd]rop(-|\s)?[Dd]own\s*[lL]ist(s)?\W')]">
        <report test=".">Replace "drop-down list" or "drop-down list" with "drop-down
            menu".</report>
    </rule>
</pattern>

Do not use "checkbox" or "check-box"

Replace “checkbox” or “check-box” with “check box”.

Code

<!-- Replace "checkbox"or "check-box" with "check box" -->
<pattern id="JORSEK_STYLE_10">
    <rule context="text()[matches(.,'[Cc]heck-?[Bb]ox(es)?\W')]">
        <report test=".">Replace "checkbox"or "check-box" with "check box".</report>
    </rule>
</pattern>

Do not use "single-click", "single click", or "singleclick"

Replace “single-click”, “single click”, or “singleclick” with “click”.

Code

<!-- Replace "single-click", "single click", or "singleclick" with "click" -->
<pattern id="JORSEK_STYLE_11">
    <rule context="text()[matches(.,'[Ss]ingle(-|\s)?[Cc]lick(s|ing)?\W')]">
        <report test=".">Replace "single-click", "single click", or "singleclick" with
            "click".</report>
    </rule>
</pattern>

Do not use "right click" or "rightlick"

Replace “right click” or “rightclick” with “right-click”.

Code

<!-- Replace "right click" or "rightclick" with "right-click" -->
<pattern id="JORSEK_STYLE_12">
    <rule context="text()[matches(.,'[Rr]ight\s*[Cc]lick(s|ing)?\W')]">
        <report test=".">Replace "right click" or "rightclick" with "right-click".</report>
    </rule>
</pattern>

Do not use "double click" or "doubleclick"

Replace “double click” or “doubleclick” with “double-click”.

Code

<!-- Replace "double click" or "doubleclick" with "double-click" -->
<pattern id="JORSEK_STYLE_13">
    <rule context="text()[matches(.,'[Dd]ouble\s*[Cc]lick(s|ing)?\W')]">
        <report test=".">Replace "double click" or "doubleclick" with "double-click".</report>
    </rule>
</pattern>

Do not use "hover-over"

Replace “hover-over” with “hover over”.

Code

<!-- Replace "hover-over" with "hover over" -->
<pattern id="JORSEK_STYLE_14">
    <rule context="text()[matches(.,'[Hh]over(s|ing)?-[Oo]ver\W')]">
        <report test=".">Replace "hover-over" with "hover over".</report>
    </rule>
</pattern>

Do not use "filepath" or "file-path"

Replace “filepath” or “file-path” with “file path”.

Code

<!-- Replace "filepath" or "file-path" with "file path" -->
<pattern id="JORSEK_STYLE_15">
     <rule context="text()[matches(.,'[Ff]ile-?[Pp]ath(s)?\W')]">
        <report test=".">Replace "filepath" or "file-path" with "file path".</report>
    </rule>
</pattern>

Do not use "filename" or "file-name"

Replace “filename” or “file-name” with “file name”.

Code

<!-- Replace "filename" or "file-name" with "file name" -->
<pattern id="JORSEK_STYLE_16">
    <rule context="text()[matches(.,'[Ff]ile-?[Nn]ame(s)?\W')]">
        <report test=".">Replace "filename" or "file-name" with "file name".</report>
    </rule>
</pattern>

Do not use "screen capture", "screen-capture", or "screencapture"

Replace “screen capture”, “screen-capture”, or “screencapture” with “screenshot”.

Code

<!-- Replace "screen capture", "screen-capture", or "screencapture" with "screenshot" -->
<pattern id="JORSEK_STYLE_17">
    <rule context="text()[matches(.,'[Ss]creen(-|\s)?[Cc]apture(s)?\W')]">
        <report test=".">Replace "screen capture", "screen-capture", or "screencapture" with
            "screenshot".</report>
    </rule>
</pattern>

Do not use "wish"

Replace “wish” with “want”.

Code

<!-- Replace "wish" with "want" -->
<pattern id="JORSEK_STYLE_18">
    <rule context="text()[matches(.,'[Ww]ish(es)?\W')]">
        <report test=".">Replace "wish" with "want".</report>
    </rule>
</pattern>

Do not use "desire"

Replace “desire” with “want”.

Code

<!-- Replace "desire" with "want" -->
<pattern id="JORSEK_STYLE_19">
    <rule context="text()[matches(.,'[Dd]esire(s)?\W')]">
        <report test=".">Replace "desire" with "want".</report>
    </rule>
</pattern>

Do not use "allow"

Replace “allow” with “enable”.

Code

<!-- Replace "allow" with "enable" -->
<pattern id="JORSEK_STYLE_20">
    <rule context="text()[matches(.,'[aA]llow(s|ing)?\W')]">
        <report test=".">Replace "allow" with "enable".</report>
    </rule>
</pattern>

Do not use "abort" or "abortion"

Replace “abort” with “end”, “close”, “stop”, or “cancel”.

Code

<!-- Replace "abort" with "end", close", "stop", or "cancel" -->
<pattern id="JORSEK_STYLE_21">
    <rule context="text()[matches(.,'[Aa]bort(ion|ions|s|ing)?\W')]">
        <report test=".">Replace "abort" with "end", close", "stop", or "cancel".
        </report>
    </rule>
</pattern>

Do not use "apha numerical" or "alpha numeric"

Replace “alpha numeric” or “alpha numerical” with “alphanumeric”.

Code

<!-- Replace "alpha numeric", or "alpha numerical" with "alphanumeric" -->
<pattern id="JORSEK_STYLE_22">
    <rule context="text()[matches(.,'[Aa]lpha(-|\s)[Nn]umeric(al)?\W')]">
        <report test=".">Replace "alpha numeric", or "alpha numerical" with "alphanumeric".
        </report>
    </rule>
</pattern>

Do not use "alphabetic"

Replace “alphabetic”, “alpha betic”, or “alpha-betic” with “alphabetical”.

Code

<!-- Replace "alphabetic", "alpha betic", or "alpha-betic" with "alphabetical". -->
<pattern id="JORSEK_STYLE_23">
    <rule context="text()[matches(.,'[Aa]lpha(-|\s)?[Bb]etic\W')]">
        <report test=".">Replace "alphabetic", "alpha betic", or "alpha-betic" with
            "alphabetical". </report>
    </rule>
</pattern>

Do not use "and/or"

Do not use “and/or”. Expand the sentence to be more specific.

Code

<!-- Do not use "and/or". Expand the sentence to be more specific -->
<pattern id="JORSEK_STYLE_24">
    <rule context="text()[matches(.,'and/or\W')]">
        <report test=".">Do not use "and/or". Expand the sentence to be more specific. </report>
    </rule>
</pattern>

Do not use "Appendixes"

Replace “appendixes” with “appendices”.

Code

<!-- Replace "appendixes" with "appendices" -->
<pattern id="JORSEK_STYLE_25">
    <rule context="text()[matches(.,'[Aa]ppendixes\W')]">
        <report test="."> Replace "appendixes" with "appendices".</report>
    </rule>
</pattern>

Do not use "back space", or "back-space"

Replace “back space” or “back-space” with “backspace”.

Code

<!-- Replace "back space" or "back-space" with "backspace" -->
<pattern id="JORSEK_STYLE_26">
    <rule context="text()[matches(.,'[Bb]ack(-|\s)[Ss]pace\W')]">
        <report test=".">Replace "back space" or "back-space" with "backspace".</report>
    </rule>
</pattern>

Do not use "site map" or "site-map"

Replace “site map” or “site-map” with “sitemap”.

Code

<!-- Replace "site map" or "site-map" with "sitemap" -->
<pattern id="JORSEK_STYLE_27">
    <rule context="text()[matches(.,'[Ss]ite(-|\s)[Mm]ap(s)?\W')]">
        <report test=".">Replace "site map" or "site-map" with "sitemap".</report>
    </rule>
</pattern>

Do not use "etc."

Do not use “etc.” Be specific whenever possible. If space is limited, use “such as” or “like” followed by an example or two.

Code

<!-- Do not use "etc." Be specific whenever possible. If space is limited, use "such as" or "like" followed by an example or two. -->
<pattern id="JORSEK_STYLE_28">
    <rule context="text()[matches(.,'[eE]tc\.\W')]">
        <report test=".">Do not use "etc." Be specific whenever possible. If space is limited,
            use "such as" or "like" followed by an example or two. </report>
    </rule>
</pattern>

Do not use "mouse over" or "mouse-over"

Replace “mouse over” or “mouse-over” with “hover over”.

Code

<!-- Replace "mouse over" or "mouse-over" with "hover over" -->
<pattern id="JORSEK_STYLE_29">
    <rule context="text()[matches(.,'[Mm]ous(e|es|ing)?(-|\s)?[Oo]ver\W')]">
        <report test=".">Replace "mouse over" or "mouse-over" with "hover over".</report>
    </rule>
</pattern>

Do not use "screen shot" or "screen-shot"

Replace “screen shot” or “screen-shot” with “screenshot”.

Code

<!-- Replace "screen shot" or "screen-shot" with "screenshot" -->
<pattern id="JORSEK_STYLE_38">
    <rule context="text()[matches(.,'[Ss]creen(-|\s)[Ss]hot(s)?\W')]">
        <report test=".">Replace "screen shot" with "screenshot".</report>
    </rule>
</pattern>