Problem
LiteralUri and LiteralUriTemplate (defined in schema/workflow.yaml under uriTemplate) use the exact same pattern regex. The only distinction between the two anyOf branches is the format keyword (uri-reference vs uri-template).
However, format validation is optional per the JSON Schema specification — many validators treat it as an annotation and don't enforce it. This means implementations that don't enforce format see both branches as identical, making the anyOf distinction meaningless.
anyOf:
- title: LiteralUriTemplate
type: string
format: uri-template
pattern: "^(?!\\s*\\$\\{)(?=\\S)(([^:/?#]+):)?(//([^/?#\\s]*))?([^?#\\s]*)(\\?([^#\\s]*))?(#(\\S*))?$"
- title: LiteralUri
type: string
format: uri-reference
pattern: "^(?!\\s*\\$\\{)(?=\\S)(([^:/?#]+):)?(//([^/?#\\s]*))?([^?#\\s]*)(\\?([^#\\s]*))?(#(\\S*))?$"
Proposal
Enforce the distinction directly in the pattern regex so implementations don't need to rely on format validation:
- LiteralUri: reject strings containing
{ or } (plain URI, no template variables)
- LiteralUriTemplate: require at least one
{...} pair (has template variables)
This makes the spec self-sufficient for implementors regardless of their JSON Schema validator's format support.
Context
Introduced by #1169 (which replaced the previous absolute-only patterns with RFC 3986 Appendix B regex). The patterns correctly reject runtime expressions and whitespace, but don't distinguish between the two URI types.
Problem
LiteralUriandLiteralUriTemplate(defined inschema/workflow.yamlunderuriTemplate) use the exact samepatternregex. The only distinction between the twoanyOfbranches is theformatkeyword (uri-referencevsuri-template).However,
formatvalidation is optional per the JSON Schema specification — many validators treat it as an annotation and don't enforce it. This means implementations that don't enforceformatsee both branches as identical, making theanyOfdistinction meaningless.Proposal
Enforce the distinction directly in the
patternregex so implementations don't need to rely onformatvalidation:{or}(plain URI, no template variables){...}pair (has template variables)This makes the spec self-sufficient for implementors regardless of their JSON Schema validator's
formatsupport.Context
Introduced by #1169 (which replaced the previous absolute-only patterns with RFC 3986 Appendix B regex). The patterns correctly reject runtime expressions and whitespace, but don't distinguish between the two URI types.