View
21
Download
1
Category
Tags:
Preview:
DESCRIPTION
A Use-Case Driven Approach to the Development of Reusable Stylesheet Modules. Terry Brady LexisNexis. Problem to Solve. Collaborative XSLT Development Create useful modules that will operate in multiple data conversions Multiple Input DTD’s Multiple Output DTD’s - PowerPoint PPT Presentation
Citation preview
A Use-Case Driven Approach to the Development of Reusable Stylesheet Modules
Terry BradyLexisNexis
Problem to Solve Collaborative XSLT Development Create useful modules that will
operate in multiple data conversions Multiple Input DTD’s Multiple Output DTD’s Team does not consist of schema
“experts”
Challenge Xslt containment not as easy as OO
containment Import precedence is trickier than
you think! Construction of the import tree can
radically alter the behavior of individual modules
Difficult to validate to multiple targets
XSLT Use Great for conversions Requires a shift in mind set Testing capabilities
Full support not there Or, so counter-intuitive everyone must
solve on their own
XSLT Modularity xsl:import
Creates import tree Import precedence overrides other precedence Great for named templates
xsl:include Creates a single logical module Precedence:
match specificity priority Position
Challenge with named templates!
Very Contrived Examples Input DTD’s
article.dtd instructions.dtd
Output DTD’s book.dtd faq.dtd
Article art:article
(in:title , in:section+) in:title
(#PCDATA|in:emph|meta:edit-by | meta:edit-date)* in:section
(in:title? , (in:para+ | in:section+)) in:para
(#PCDATA | in:emph | meta:edit-by | meta:edit-date)* in:emph
(#PCDATA | meta:edit-by | meta:edit-date)* meta:edit-by
(#PCDATA) meta:edit-date
(#PCDATA)
Instructions man:manual
(in:title , (in:section+ | man:step+)) in:title
(#PCDATA|in:emph | meta:edit-by | meta:edit-date)* in:section
(in:title? , (in:para+ | in:section+ | man:step+))> man:step
(man:num , in:para+) in:para
(#PCDATA | in:emph | meta:edit-by | meta:edit-date)* in:emph
(#PCDATA | meta:edit-by | meta:edit-date)* meta:edit-by
(#PCDATA) meta:edit-date
(#PCDATA) man:num
(#PCDATA)
Book book:book
(out:label? , out:header , out:section+) out:header
(#PCDATA|out:italics)* out:section
(out:label? , out:header? , (out:section | out:para)+) out:para
(#PCDATA | out:italics)* out:italics
(#PCDATA) out:label
(#PCDATA)
Faq faq:faq
(out:label? , out:header , out:section+) out:header
(#PCDATA|out:italics)* out:section
(out:label? , out:header? , out:para+) out:para
(#PCDATA | out:italics)* out:italics
(#PCDATA) out:label
(#PCDATA)
Modules NeededGeneral (default/meta)
title
paragraph
section
step
makebook
makefaq
default rule, warn on unmapped elements
In:title out:header in:para & in:emph in:sectionout:section man:step/man:num root book:book root faq:faq
Module Imports makebook.xsl imports section.xsl makefaq.xsl imports section.xsl
para.xsl imports general.xsl
section.xsl imports para.xsl, title.xsl, step.xsl
step.xsl imports para.xsl
title.xsl imports general.xsl
Create Use Cases Only as complex as needed to
illustrate one case Validate understanding before
coding
Create Contrived Use Cases Title Paragraph Section Step Article Manual
Title Use Case<?xml version='1.0' ?>
<?use-case scenario=Simple title;;stylesheet=stylesheets/demo/title.xsl?>
<!DOCTYPE in:title SYSTEM "../article.dtd">
<in:title>Hello</in:title>
Title with Metadata<?xml version="1.0" encoding="utf-8"?><!DOCTYPE in:title SYSTEM "../article.dtd"><?use-case scenario=Title with
metadata;;stylesheet=stylesheets/demo/title.xsl?>
<in:title>Hello<meta:edit-by>Terry</meta:edit-by><meta:edit-date>1/1/2006</meta:edit-date>
</in:title>
Create stylesheets Determine import hierarchy in
advance Call <xsl:apply-templates/>
wherever possible to allow the DTD to change
Iteratively test with use cases. Validate to DTD and schematron as
an additional tool.
Import Precedence Issue in:title processed fine by title.xsl in:para processed fine by para.xsl When executing the same files with
section.xsl in:para processed fine In:title processed by default rule
Introduce “template files” Construct the import tree as needed
for production Modular components reference a
“template file” via a processing instruction Inclusion of default rule Inclusive set of namespace declarations Testing-specific match rules
New import strategy makebook.xsl imports general.xsl, section.xsl makefaq.xsl imports general.xsl, section.xsl section.xsl imports para.xsl, title.xsl, step.xsl
References template.xsl via pi step.xsl imports para.xsl
References template.xsl via pi template.xsl imports general.xsl
Other Challenges Validating output of common
modules to multiple target DTD’s Supporting use cases appropriate to
a subset of target DTD’s Viewing results
Unit Test Driver
Use Case Files
StylesheetsBaselineoutput
Source Code Management
Runtime Directory
Use Case FilesUse Case
Files
BaselineoutputBaseline
output
Schematron, & Template
DTD
Copy Resources to runtime areaSource Code Management
Use Case Files
StylesheetsBaselineoutput
Runtime Directory
Use Case FilesUse Case
Files
BaselineoutputBaseline
output
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Schematron, & Template
DTD
Schematron, & Template
DTD
Iterate over use case filesRuntime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Schematron, & Template
DTD
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Use Case File Copy
Schematron, & Template
DTD
This makes it easier to view the input file in a browser that is not catalog aware
Copy use case file with fully resolved DTD (if using catalog)
Report the validity of use case fileRuntime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Schematron, & Template
DTD
Find each stylesheet referenced by the use case file…
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Schematron, & Template
DTD
A single use case could serve as input to multiple
stylesheets
If the stylesheet references a template, compile a new stylesheet.
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Compiledstylesheet
Schematron, & Template
DTD
This is to allow the creation of a custom import tree
when testing an individual module
If the stylesheet references a schematron file, compile the schematron and perform semantic validation on the use case file.
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
CompiledSchematron
Compiledstylesheet
Schematron, & Template
DTD
This permits the enforcement of
boundary/scope conditions for a styesheet.
For each dtd referenced in the use case file or stylesheet, apply the stylesheet to the use case file.
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Outputfile
DTDSchematron,Template, &
DTD
Compiledstylesheet
Set the system identifier of the output file to the referenced DTD.
Validate transformation output to all appropriate targets
Report on the validity of the output file.
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Outputfile
DTDSchematron,Template, &
DTD
Compiledstylesheet
Set the system identifier of the output file to the referenced DTD.
Apply transformation to use case file without referencing an output DTD.
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Outputfile
Schematron,Template, &
DTD
Compiledstylesheet
DTD
If a use case file references a schematron, compile the schematron and perform semantic validation on the output file.
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Outputfile
Schematron,Template, &
DTD
CompiledSchematron
If a baseline file exists that matches the output file, perform a comparison of the two files.
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Outputfile
Schematron,Template, &
DTD
Generate a summary report of test execution
Runtime Directory
Use Case Files
StylesheetsBaselineoutputUse Case
FilesUse Case Files
BaselineoutputBaseline
output
Schematron,Template, &
DTD
SummaryReport
Summary ReportError Statistics
Use case file hierarchyTree Structure Hypertext to resourcesError messages
Input File Output File
Stylesheet, DTD, Schematron
Summary of methodology System architect defines stylesheet
modules Developer is assigned a module. Developer creates use case files. Use cases are reviewed Developer iteratively creates XSLT
module Stylesheet and output files are reviewed Output is "baselined“
Benefits Scope is defined for developer Developer demonstrates understanding
immediately Use case files serve as communication
tool Architect does not simply state
constraints. Constraints are enforced Regression test is built during
development
Recommended