-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
364 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
<?xml version="1.0"?> | ||
<xsl:stylesheet version="1.0" | ||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | ||
xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||
|
||
<!-- set output method to HTML. Use version 5 or legacy-compatible doctype to generate HTML5. --> | ||
<xsl:output method="html" omit-xml-declaration="yes" indent="yes" version="5.0" doctype-system="about:legacy-compat" /> | ||
|
||
<!-- set debug options for xsd2html2xml: --> | ||
<!-- INFO: information messages (through template 'inform') --> | ||
<!-- STACK: stack trace (through template 'log') --> | ||
<!-- ERROR: error messages (through template 'throw') --> | ||
<xsl:param name="config-debug">error</xsl:param> | ||
|
||
<!-- if an XSD supports multiple root elements, specify the position of the one that should be used to generate the form from here --> | ||
<!-- defaults to 1 --> | ||
<xsl:param name="config-root">1</xsl:param> | ||
|
||
<!-- choose a JavaScript function to be called when the form is submitted. | ||
it should accept a string argument containing the xml or html --> | ||
<xsl:param name="config-callback">console.log</xsl:param> | ||
|
||
<!-- specify whether element's annotation/documentation tags should be used for descriptions (works together with config-language) --> | ||
<!-- defaults to false, i.e. element's @name or @ref (unprefixed) attributes --> | ||
<xsl:param name="config-documentation">false</xsl:param> | ||
|
||
<!-- optionally specify which annotation/documentation language (determined by xml:lang) should be used --> | ||
<xsl:param name="config-language" /> | ||
|
||
</xsl:stylesheet> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?xml version="1.0"?> | ||
<xsl:stylesheet | ||
version="3.0" | ||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | ||
xmlns:xs="http://www.w3.org/2001/XMLSchema"> | ||
|
||
<xsl:template name="init"> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">---</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">Running XSD2HTML2XML version 3</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">Michiel Meulendijk ([email protected]) / Leiden University Medical Center</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">MIT License</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">https://github.com/MichielCM/xsd2html2xml</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">---</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">XSLT Processor: <xsl:value-of select="system-property('xsl:vendor')" /></xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">XSLT Version: <xsl:value-of select="system-property('xsl:version')" /></xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">Debug Options: <xsl:value-of select="$config-debug" /></xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message">---</xsl:with-param> | ||
</xsl:call-template> | ||
</xsl:template> | ||
|
||
</xsl:stylesheet> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,285 @@ | ||
<?xml version="1.0"?> | ||
<xsl:stylesheet | ||
version="3.0" | ||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | ||
xmlns:xs="http://www.w3.org/2001/XMLSchema" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | ||
|
||
<xsl:include href="css/default-style.xsl" /> | ||
|
||
<xsl:include href="js/event-handlers.xsl" /> | ||
<xsl:include href="js/html-populators.xsl" /> | ||
<xsl:include href="js/initial-calls.xsl" /> | ||
<xsl:include href="js/polyfills.xsl" /> | ||
<xsl:include href="js/value-fixers.xsl" /> | ||
<xsl:include href="js/xml-generators.xsl" /> | ||
|
||
<xsl:include href="init.xsl" /> | ||
<xsl:include href="config.xsl" /> | ||
|
||
<xsl:include href="utils/attr-value.xsl" /> | ||
<xsl:include href="utils/documentation.xsl" /> | ||
<xsl:include href="utils/gui-attributes.xsl" /> | ||
<xsl:include href="utils/gui.xsl" /> | ||
<xsl:include href="utils/log.xsl" /> | ||
<xsl:include href="utils/namespaces.xsl" /> | ||
<xsl:include href="utils/nodeset-exsl.xsl" /> | ||
<xsl:include href="utils/serialize.xsl" /> | ||
<xsl:include href="utils/strings.xsl" /> | ||
<xsl:include href="utils/types.xsl" /> | ||
|
||
<xsl:include href="matchers/all.xsl" /> | ||
<xsl:include href="matchers/[email protected]" /> | ||
<xsl:include href="matchers/attributes.xsl" /> | ||
<xsl:include href="matchers/choice.xsl" /> | ||
<xsl:include href="matchers/[email protected]" /> | ||
<xsl:include href="matchers/element-complexType.xsl" /> | ||
<xsl:include href="matchers/element-simpleContent.xsl" /> | ||
<xsl:include href="matchers/element-simpleType.xsl" /> | ||
<xsl:include href="matchers/[email protected]" /> | ||
<xsl:include href="matchers/[email protected]" /> | ||
<xsl:include href="matchers/sequence.xsl" /> | ||
|
||
<xsl:include href="handlers/complex-elements.xsl" /> | ||
<xsl:include href="handlers/default-types.xsl" /> | ||
<xsl:include href="handlers/enumerations.xsl" /> | ||
<xsl:include href="handlers/extensions.xsl" /> | ||
<xsl:include href="handlers/multiline-strings.xsl" /> | ||
<xsl:include href="handlers/root-element.xsl" /> | ||
<xsl:include href="handlers/simple-elements.xsl" /> | ||
|
||
<xsl:variable name="templates" select="document('')/*/xsl:template"/> | ||
<xsl:variable name="root-element-stylesheet" select="document('handlers/root-element.xsl')" /> | ||
<xsl:variable name="complex-elements-stylesheet" select="document('handlers/complex-elements.xsl')" /> | ||
<xsl:variable name="enumerations-stylesheet" select="document('handlers/enumerations.xsl')" /> | ||
<xsl:variable name="extensions-stylesheet" select="document('handlers/extensions.xsl')" /> | ||
<xsl:variable name="element-stylesheet" select="document('matchers/[email protected]')" /> | ||
<xsl:variable name="element-attribute-stylesheet" select="document('matchers/[email protected]')" /> | ||
<xsl:variable name="element-complexType-stylesheet" select="document('matchers/element-complexType.xsl')" /> | ||
<xsl:variable name="element-simpleType-stylesheet" select="document('matchers/element-simpleType.xsl')" /> | ||
<xsl:variable name="element-simpleContent-stylesheet" select="document('matchers/element-simpleContent.xsl')" /> | ||
<xsl:variable name="group-stylesheet" select="document('matchers/[email protected]')" /> | ||
<xsl:variable name="attributeGroup-stylesheet" select="document('matchers/[email protected]')" /> | ||
<xsl:variable name="attr-value-stylesheet" select="document('utils/attr-value.xsl')" /> | ||
<xsl:variable name="gui-attributes-stylesheet" select="document('utils/gui-attributes.xsl')" /> | ||
<xsl:variable name="types-stylesheet" select="document('utils/types.xsl')" /> | ||
|
||
<xsl:template match="*" /> | ||
|
||
<xsl:template match="/*"> | ||
<xsl:choose> | ||
<!-- check if noNamespaceSchemaLocation contains a value --> | ||
<xsl:when test="@xsi:noNamespaceSchemaLocation"> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<xsl:text>XML file detected. Loading schema: </xsl:text><xsl:value-of select="@xsi:noNamespaceSchemaLocation" /> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="add-metadata"> | ||
<xsl:with-param name="xml-document" select="." /> | ||
</xsl:call-template> | ||
|
||
<xsl:for-each select="document(@xsi:noNamespaceSchemaLocation)/*"> | ||
<xsl:call-template name="handle-schema" /> | ||
</xsl:for-each> | ||
</xsl:when> | ||
<!-- check if schemaLocation contains a value --> | ||
<xsl:when test="@xsi:schemaLocation"> | ||
<xsl:choose> | ||
<!-- check if schemaLocation contains spaces (and thus namespace-location combinations) --> | ||
<xsl:when test="contains(@xsi:schemaLocation, ' ')"> | ||
<!-- extract the namespace of the root element --> | ||
<xsl:variable name="default-namespace"> | ||
<xsl:value-of select="namespace::*[name() = substring-before(name(), concat(':', local-name()))]" /> | ||
</xsl:variable> | ||
|
||
<!-- extract schema location relative to default namespace --> | ||
<xsl:variable name="schema-location"> | ||
<xsl:value-of select="normalize-space(substring-after(@xsi:schemaLocation, $default-namespace))" /> | ||
</xsl:variable> | ||
|
||
<xsl:choose> | ||
<!-- if schema-location still contains spaces, break off before the first one to find the schema location --> | ||
<xsl:when test="contains($schema-location, ' ')"> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<xsl:text>XML file detected. Loading schema: </xsl:text><xsl:value-of select="normalize-space(substring-before($schema-location, ' '))" /> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="add-metadata"> | ||
<xsl:with-param name="xml-document" select="." /> | ||
</xsl:call-template> | ||
|
||
<xsl:for-each select="document(normalize-space(substring-before($schema-location, ' ')))/*"> | ||
<xsl:call-template name="handle-schema" /> | ||
</xsl:for-each> | ||
</xsl:when> | ||
<!-- otherwise, the remaining value should point to a schema --> | ||
<xsl:otherwise> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<xsl:text>XML file detected. Loading schema: </xsl:text><xsl:value-of select="$schema-location" /> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="add-metadata"> | ||
<xsl:with-param name="xml-document" select="." /> | ||
</xsl:call-template> | ||
|
||
<xsl:for-each select="document($schema-location)/*"> | ||
<xsl:call-template name="handle-schema" /> | ||
</xsl:for-each> | ||
</xsl:otherwise> | ||
</xsl:choose> | ||
</xsl:when> | ||
<!-- if not, assume the value points to a schema --> | ||
<xsl:otherwise> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<xsl:text>XML file detected. Loading schema: </xsl:text><xsl:value-of select="@xsi:schemaLocation" /> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="add-metadata"> | ||
<xsl:with-param name="xml-document" select="." /> | ||
</xsl:call-template> | ||
|
||
<xsl:for-each select="document(@xsi:schemaLocation)/*"> | ||
<xsl:call-template name="handle-schema" /> | ||
</xsl:for-each> | ||
</xsl:otherwise> | ||
</xsl:choose> | ||
</xsl:when> | ||
<!-- else, assume an XSD document --> | ||
<xsl:otherwise> | ||
<xsl:call-template name="add-metadata" /> | ||
<xsl:call-template name="handle-schema" /> | ||
</xsl:otherwise> | ||
</xsl:choose> | ||
</xsl:template> | ||
|
||
<!-- add metadata, including optionally xml document, to head section --> | ||
<xsl:template name="add-metadata"> | ||
<xsl:param name="xml-document"></xsl:param> | ||
|
||
<xsl:element name="title"> | ||
<xsl:text>HTML5 Form - Generated by XSD2HTML2XML v3</xsl:text> | ||
</xsl:element> | ||
|
||
<!-- add stylesheet and script elements --> | ||
<xsl:call-template name="add-style" /> | ||
|
||
<xsl:call-template name="add-polyfills" /> | ||
<xsl:call-template name="add-xml-generators" /> | ||
<xsl:call-template name="add-html-populators" /> | ||
<xsl:call-template name="add-value-fixers" /> | ||
<xsl:call-template name="add-event-handlers" /> | ||
<xsl:call-template name="add-initial-calls" /> | ||
|
||
<!-- add a generator meta element --> | ||
<xsl:element name="meta"> | ||
<xsl:attribute name="name">generator</xsl:attribute> | ||
<xsl:attribute name="content">XSD2HTML2XML v3: https://github.com/MichielCM/xsd2html2xml</xsl:attribute> | ||
|
||
<!-- if an xml document has been provided, save it as an attribute to the meta element --> | ||
<xsl:if test="not($xml-document = '')"> | ||
<xsl:attribute name="data-xsd2html2xml-source"> | ||
<xsl:apply-templates select="$xml-document" mode="serialize" /> | ||
</xsl:attribute> | ||
</xsl:if> | ||
</xsl:element> | ||
</xsl:template> | ||
|
||
<!-- root match from which all other templates are invoked --> | ||
<xsl:template name="handle-schema"> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<text>XSD file detected.</text> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:call-template name="init" /> | ||
|
||
<xsl:call-template name="log"> | ||
<xsl:with-param name="reference">xs:schema</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<!-- save root-document for future use --> | ||
<xsl:variable name="root-document" select="/*" /> | ||
|
||
<!-- load root-namespaces for future use --> | ||
<xsl:variable name="root-namespaces"> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<xsl:text>Namespaces in root document:</xsl:text> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:for-each select="namespace::*"> | ||
<xsl:element name="root-namespace"> | ||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<xsl:if test="not(name() = '')"> | ||
<xsl:value-of select="name()" /> | ||
<xsl:text>:</xsl:text> | ||
</xsl:if> | ||
<xsl:value-of select="." /> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
|
||
<xsl:if test="not(name() = '')"> | ||
<xsl:attribute name="prefix"> | ||
<xsl:value-of select="name()" /> | ||
<xsl:text>:</xsl:text> | ||
</xsl:attribute> | ||
</xsl:if> | ||
<xsl:attribute name="namespace"> | ||
<xsl:value-of select="." /> | ||
</xsl:attribute> | ||
</xsl:element> | ||
</xsl:for-each> | ||
</xsl:variable> | ||
|
||
<xsl:element name="body"> | ||
<xsl:element name="form"> | ||
<!-- disable default form action --> | ||
<xsl:attribute name="action">javascript:void(0);</xsl:attribute> | ||
|
||
<!-- add class for scoping --> | ||
<xsl:attribute name="class">xsd2html2xml</xsl:attribute> | ||
|
||
<!-- specify action on submit --> | ||
<xsl:attribute name="onsubmit"> | ||
<xsl:value-of select="$config-callback" /> | ||
<xsl:text>(htmlToXML(this));</xsl:text> | ||
</xsl:attribute> | ||
|
||
<!-- start parsing the XSD from the top --> | ||
<xsl:for-each select="xs:element"> | ||
<!-- use the element with the position indicated in config-root as root, or default to the first (usually the only) root element --> | ||
<xsl:if test="($config-root = '' and position() = 1) or position() = $config-root"> | ||
<xsl:call-template name="forward-root"> | ||
<xsl:with-param name="stylesheet" select="$root-element-stylesheet" /> | ||
<xsl:with-param name="template">handle-root-element</xsl:with-param> | ||
<xsl:with-param name="root-document" select="//xs:schema" /> | ||
<xsl:with-param name="root-namespaces" select="$root-namespaces" /> | ||
</xsl:call-template> | ||
</xsl:if> | ||
</xsl:for-each> | ||
|
||
<xsl:element name="button"> | ||
<xsl:attribute name="type">submit</xsl:attribute> | ||
</xsl:element> | ||
</xsl:element> | ||
</xsl:element> | ||
|
||
<xsl:call-template name="inform"> | ||
<xsl:with-param name="message"> | ||
<xsl:text>XSLT processing completed.</xsl:text> | ||
</xsl:with-param> | ||
</xsl:call-template> | ||
</xsl:template> | ||
|
||
</xsl:stylesheet> |