Name

cx:trang — Convert between schema formats.

Synopsis

This step converts between DTD, RELAX NG, and XML Schema grammar formats with Trang.

Input portPrimarySequenceContent types
source✔ ✔ text xml application/xml-dtd 
Output portPrimarySequenceContent types
result✔ ✔ text xml application/xml-dtd 
Option nameTypeValuesDefault valueRequired
output-base-urixs:anyURI  ✔ 
result-formatxs:string('rng', 'rnc', 'dtd', 'xsd')  ✔ 
namespacesmap(xs:string, xs:string)? () 
result-parametersmap(xs:QName, item()*)? () 
source-formatxs:string?('rng', 'rnc', 'dtd') () 
source-parametersmap(xs:QName, item()*)? () 
This is an extension step; to use it, your pipeline must include its declaration. For example, by including the extension library with an import at the top of your pipeline:
<p:import href="https://xmlcalabash.com/ext/library/trang.xpl"/>
Declaration
 1 |<p:declare-step xmlns:p="http://www.w3.org/ns/xproc">
   |   <p:input port="source"
   |            sequence="true"
   |            content-types="text xml application/xml-dtd"/>
 5 |   <p:output port="result"
   |             sequence="true"
   |             content-types="text xml application/xml-dtd"/>
   |   <p:option name="source-format" as="xs:string?" values="('rng', 'rnc', 'dtd')"/>
   |   <p:option name="result-format"
10 |             as="xs:string"
   |             values="('rng', 'rnc', 'dtd', 'xsd')"
   |             required="true"/>
   |   <p:option name="output-base-uri" as="xs:anyURI" required="true"/>
   |   <p:option name="namespaces" as="map(xs:string, xs:string)?"/>
15 |   <p:option name="source-parameters" as="map(xs:QName, item()*)?"/>
   |   <p:option name="result-parameters" as="map(xs:QName, item()*)?"/>
   |</p:declare-step>
Errors
CodeDescription
cxerr:XC0025It is a dynamic error (cxerr:XC0025) if no schemas are provided.
cxerr:XC0026It is a dynamic error (cxerr:XC0026) if an XML Schema is provided on the source port.
cxerr:XC0027It is a dynamic error (cxerr:XC0027) if the value supplied for a parameter is not valid for that parameter.
cxerr:XC0029It is a dynamic error (cxerr:XC0029) if multiple schemas are provided and they do not all have base URIs.
cxerr:XC0030It is a dynamic error (cxerr:XC0030) if any schema document has a base URI that is not a file: URI.
cxerr:XC0033It is a dynamic error (cxerr:XC0033) if the format cannot be determined from the first schema.
cxerr:XC0034It is a dynamic error (cxerr:XC0034) if the document on the source port is an XML document and it is not a RELAX NG Schema.
cxerr:XC0035It is a dynamic error (cxerr:XC0035) if any reference is made to a schema document that has a URI not among the source schemas.
cxerr:XC0036It is a dynamic error (cxerr:XC0036) if the source and result formats are the same.

Description

Trang translates between DTD, RELAX NG, and XML Schema grammar formats. At least one schema must be provided on the source port. It is a dynamic error (cxerr:XC0025) if no schemas are provided.

The underlying Trang APIs are really designed to operate on files. Making them work with a sequence of dynamically provided schemas requires a little effort. For a single schema document, with no references to other schema documents, the conversion is straightforward. For a set of schema documents that contain cross-references (parameters entities in DTDs or RELAX NG include elements), it’s a bit more complicated.

For a set of related schemas, you must provide all of the schemas on the source port, and they must all have base URIs and those URIs must use the file: URI scheme. It is a dynamic error (cxerr:XC0029) if multiple schemas are provided and they do not all have base URIs. It is a dynamic error (cxerr:XC0030) if any schema document has a base URI that is not a file: URI. If the cross-references use relative URIs, then they will be resolved against the base URI of the document in which they appear. Every resolved base URI must be the same as the base URI of one of the input schemas. It is a dynamic error (cxerr:XC0035) if any reference is made to a schema document that has a URI not among the source schemas.

Alternatively, the cx:trang-files step operates directly on files on the filesystem. For some conversions this may be easier than constructing the correct set of source schema documents.

If a source-format option is not provided, the step will attempt to determine the format by looking at the first input schema. It is a dynamic error (cxerr:XC0033) if the format cannot be determined from the first schema. It is a dynamic error (cxerr:XC0026) if an XML Schema is provided on the source port. It is a dynamic error (cxerr:XC0034) if the document on the source port is an XML document and it is not a RELAX NG Schema.

It is a dynamic error (cxerr:XC0036) if the source and result formats are the same.

The converted schema documents are provided on the result port. Each one will have a base URI that is resolved against the output-base-uri.

Source and result parameters can be used to control the translations. It is a dynamic error (cxerr:XC0027) if the value supplied for a parameter is not valid for that parameter.

Source parameters

The allowed source parameters vary depending on the source format. Consult the Trang documentation for more details.

DTD source parameters

The namespaces option specifies namespace bindings for elements and attributes. They are prefix/URI pairs where the empty string represents the default namespace.

The other source parameters are:

colon-replacement

Characters to use when replacing colons in DTD element and attribute names to produce the name of a RELAX NG pattern.

element-define

A name pattern used to produce the name of a RELAX NG pattern from an element name.

inline-attlist

If the inline-attlist parameter is true, the attribute declarations will be part of the element pattern. If it’s false, they will be in their own pattern.

attlist-define

A name pattern used to produce the name of a RELAX NG pattern from an attribute name.

any-name

Specifies the name of the definition generated for the content of elements declared in the DTD as having a content model of ANY.

strict-any

If true, preserves the exact semantics of ANY content models by using an explicit choice of references to all declared elements. If it’s false, Trang uses a wildcard that allows any element.

annotation-prefix

The prefix to use for RELAX NG DTD Compatibility annotations. The default is “a”.

generate-start

If true, Trang will generate a start element.

The encoding parameter is not supported for DTDs.

RELAX NG source parameters

encoding

The input encoding.

Result parameters

Several parameters are common to all of the result formats.

encoding

The output encoding.

indent

Indent by the specified number of spaces when nesting.

lineLength

The maximum line length. Must be a value between 20 and 1024. (This parameter is “lineLength”, not “line-length”.)

XML Schema result parameters

Several additional result parameters are supported for XML Schema results.

disable-abstract-elements

If true, Trang won’t use abstract elements and substitution groups.

any-process-contents

The processContents value for “any” elements.

any-attribute-process-contents

The processContents value for “anyAttribute” elements.

Consult the Trang documentation for more details.