- From: <bugzilla@wiggum.w3.org>
- Date: Fri, 24 Mar 2006 02:11:17 +0000
- To: public-i18n-its@w3.org
- CC:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=3039
Summary: Proposal: check constraints in global rules
Product: ITS
Version: WorkingDraft
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: normal
Priority: P2
Component: ITS tagset
AssignedTo: fsasaki@w3.org
ReportedBy: fsasaki@w3.org
QAContact: public-i18n-its@w3.org
I propose to have a non-normative example in the spec how to check constraints
on the global rules.
Example: the constraint that an its:locInfoRule element must not have both an
its:locInfo child element and an @its:locInfoPointer attribute.
We could give an example of a schematron document that describes what to check.
<schema xmlns="http://www.ascc.net/xml/schematron" >
<ns prefix="its" uri="http://www.w3.org/2005/11/its"/>
<pattern name="Check ITS Global Rules Constraint">
<rule context="its:locInfoRule">
<report test="its:locInfo and @its:locInfoPointer">An
its:locInfoRule element must not have both an its:locInfo child element and an
@its:locInfoPointer attribute.</report>
<!-- <assert test="@name">AAA misses attribute name.</assert>
<report test="@name">AAA contains attribute name.</report>-->
</rule>
</pattern>
</schema>
Out of this, we generate an xslt stylesheet via e.g. the existing schematron
processor skeleton1-5.xsl:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sch="http://www.ascc.net/xml/schematron"
xmlns:its="http://www.w3.org/2005/11/its" version="1.0" its:dummy-for-xmlns="">
<xsl:template match="*|@*" mode="schematron-get-full-path">
<xsl:apply-templates select="parent::*" mode="schematron-get-full-path"/>
<xsl:text>/</xsl:text>
<xsl:if test="count(. | ../@*) = count(../@*)">@</xsl:if>
<xsl:value-of select="name()"/>
<xsl:text>[</xsl:text>
<xsl:value-of
select="1+count(preceding-sibling::*[name()=name(current())])"/>
<xsl:text>]</xsl:text>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="/" mode="M1"/>
</xsl:template>
<xsl:template match="its:locInfoRule" priority="4000" mode="M1">
<xsl:if test="its:locInfo and @its:locInfoPointer">
<xsl:apply-templates mode="schematron-get-full-path"/>
<xsl:text>An its:locInfoRule element must not have both an its:locInfo child
element and an @its:locInfoPointer attribute.</xsl:text></xsl:if>
<xsl:apply-templates mode="M1"/>
</xsl:template>
<xsl:template match="text()" priority="-1" mode="M1"/>
<xsl:template match="text()" priority="-1"/>
</xsl:stylesheet>
Applying this stylesheet to the erronous file
<its:documentRules xmlns:its="http://www.w3.org/2005/11/its">
<its:locInfoRule its:select="//p" its:locInfoPointer="@existing-locInfo">
<its:locInfo>New locInfo</its:locInfo>
</its:locInfoRule>
</its:documentRules>
Will give the following result:
/its:documentRules[1]/its:locInfoRule[1]/its:locInfo[1]
An its:locInfoRule element must not have both an its:locInfo child element and
an @its:locInfoPointer attribute.
Received on Friday, 24 March 2006 02:11:21 UTC