Skip to content

Commit b423cac

Browse files
committed
Corrections to text
Fixed errors such as changing "specification" to "Standard" to match the ECMA-427 PDF text. Documented some formatting differences in README-docs.md.
1 parent 37550fa commit b423cac

4 files changed

Lines changed: 58 additions & 47 deletions

File tree

docs/README-docs.md

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,28 @@ This README explains the organization of documentation files for the PURL
22
specification.
33

44
## ECMA-427 documentation
5-
The `purl-spec/docs/standard` folder has markdown files with text that match the content of [ECMA-427](https://ecma-international.org/publications-and-standards/standards/ecma-427/) which is the first edition of the Package-URL
6-
Specification standard. These files map to ECMA-427 document as follows:
5+
The `purl-spec/docs/standard` folder has markdown files with text that match
6+
the content of [ECMA-427](https://ecma-international.org/publications-and-standards/standards/ecma-427/)
7+
which is the first edition of the Package-URL Specification standard. These
8+
files map to ECMA-427 document as follows:
79

8-
- About this specification: `about.md`
910
- Introduction: `introduction.md`
11+
- About this specification: `about.md`
1012
- Clause 1 Scope: `scope.md`
1113
- Clause 2 Conformance: `conformance.md`
12-
- Clause 3 Normative references: `refererences.md`
14+
- Clause 3 Normative references: `references.md`
1315
- Clause 4 Overview: `overview.md`
1416
- Clause 5 Package-URL specification: `specification.md`
1517
- Clause 6 Package-URL Type Definition Schema: `type-definition-schema.md`
1618

17-
ECMA-427 is the official documention for the 1st edition of the PURL
18-
Specification standard. The source for this documentation is located at:
19-
https://github.com/Ecma-TC54/ECMA-427/blob/main/spec.html. The text stored in
19+
ECMA-427 is the official documention for the 1st edition of the Package-URL
20+
(PURL) Specification standard. The source for this documentation is located
21+
at: https://github.com/Ecma-TC54/ECMA-427/blob/main/spec.html. The text from
22+
this HTML file is processed with several Ecma tools to produce a PDF file that
23+
is available from: https://tc54.org/purl/. We validated the text in the files
24+
in the `purl-spec/docs/standard` folder against the PDF.
25+
26+
The text stored in
2027
purl-spec/docs/standard/` matches the official text with following exceptions:
2128
- The text does not include the clause numbering from ECMA-427. This
2229
numbering is automatically added by the Ecma tools for publishing an Ecma
@@ -26,15 +33,17 @@ from ECMA-427 Clause 6 because Clause 6 presents the PURL Type Definition
2633
Schema in a "human-friendly" format that is difficult to reproduce in
2734
markdown. The equivalent information is in this repository in JSON Schema
2835
format: at `purl-spec/schemas/purl-type-definition.schema-1.0.json`
36+
- There are some minor formatting differences such as the examples in Clause 5
37+
and the use of italics instead of intra-document links.
2938

3039
The purpose of keeping a copy of the ECMA-427 text here is to make it easier
3140
to track any proposed changes to the PURL specification that will affect
32-
the ECMA-427 standard. Any such changes need to be tracked and approved for
33-
a future 2nd edition of the ECMA-427 standard.
41+
the ECMA-427 Standard. Any such changes need to be tracked and approved for
42+
a future 2nd edition of the ECMA-427 Standard.
3443

3544
## PURL specification documentation
36-
The other files in `purl-spec/docs` are also specification documentation, but
37-
they are not part of the ECMA-427 1st edition standard. Most of the documents
38-
provide information to support implementation of the PURL Specification in
39-
other software or databases.
45+
The other files in the `purl-spec/docs` folder are also specification
46+
documentation, but they are not part of the ECMA-427 1st edition Standard.
47+
Most of the documents provide information to support implementation of the
48+
PURL Specification in other software or databases.
4049

docs/standard/conformance.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
# Conformance
22

3-
A conforming implementation of Package-URL (PURL) must fully implement and
4-
support all elements defined within this specification, including the syntax,
3+
A conforming implementation of Package-URL (PURL) shall fully implement and
4+
support all elements defined within this Standard, including the syntax,
55
components, and semantic requirements for constructing and interpreting valid
66
PURLs.
77

8-
A conforming implementation of PURL must adhere to the syntax defined in this
9-
specification, ensuring that all PURLs are parsed, constructed, and validated
10-
according to the prescribed rules. The implementation must provide full
8+
A conforming implementation of PURL shall adhere to the syntax defined in this
9+
Standard, ensuring that all PURLs are parsed, constructed, and validated
10+
according to the prescribed rules. The implementation shall provide full
1111
support for ecosystem-agnostic behaviour, enabling PURLs to function
1212
consistently and reliably across diverse environments.
1313

14-
All required components of a PURL, such as the scheme, type, and name, must
14+
All required components of a PURL, such as the scheme, type, and name, shall
1515
be present and validated according to the rules defined in this
16-
specification. Additionally, optional components, including qualifiers and
17-
subpaths, must be handled appropriately if provided, in full compliance with
16+
Standard. Additionally, optional components, including qualifiers and
17+
subpaths, shall be handled appropriately if provided, in full compliance with
1818
their specified behaviours.
1919

20-
Implementations must ensure that equivalent PURLs are consistently resolved
20+
Implementations shall ensure that equivalent PURLs are consistently resolved
2121
to the same canonical representation. This includes strict adherence to
22-
normalisation and equivalence rules. Furthermore, implementations must
22+
normalisation and equivalence rules. Furthermore, implementations shall
2323
process URI encoding and decoding for PURL components according to the
2424
standards outlined in RFC 3986.
2525

26-
Invalid PURLs that fail to conform to the specification must be identified
26+
Invalid PURLs that fail to conform to the specification shall be identified
2727
and rejected by any conforming implementation. This guarantees the integrity
2828
and reliability of PURLs in all supported contexts.
2929

@@ -34,8 +34,8 @@ implementations may offer auxiliary tools or features, such as utilities for
3434
constructing or validating PURLs, provided they align with the standard's
3535
requirements.
3636

37-
A conforming implementation must not redefine or alter the core syntax,
38-
components, or semantics defined by this specification. Any prohibited
39-
extensions explicitly identified in the specification must not be
37+
A conforming implementation shall not redefine or alter the core syntax,
38+
components, or semantics defined by this Standard. Any prohibited
39+
extensions explicitly identified in the specification shall not be
4040
implemented. Furthermore, behaviours that compromise the interoperability of
4141
PURLs across tools, platforms, or ecosystems are strictly disallowed.

docs/standard/overview.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ meet the needs of diverse package ecosystems without compromising its
1919
universal applicability.
2020

2121
The primary audience for this Standard includes developers, tool implementers,
22-
and organisations involved in software composition analysis, dependency management, and supply chain security. PURL is foundational to a variety of
23-
use cases, from software bill of materials (SBOM) generation and license compliance to vulnerability tracking and software artefact exchange.
22+
and organisations involved in software composition analysis, dependency
23+
management, and supply chain security. PURL is foundational to a variety of
24+
use cases, from software bill of materials (SBOM) generation and license
25+
compliance to vulnerability tracking and software artefact exchange.
2426

2527
While this document serves as the authoritative reference for implementing
2628
PURL, it is complemented by various ecosystem-specific guidance documents,
@@ -29,4 +31,4 @@ and practical insights for leveraging PURL effectively.
2931

3032
This overview is non-normative and serves to provide context for the
3133
specification’s intent, purpose, and audience. For detailed requirements and
32-
conformance criteria, refer to the normative sections of this Standard.
34+
conformance criteria, refer to the normative clauses of this Standard.

docs/standard/specification.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ A PURL is a URL composed of seven components:
88

99
Components are separated by a specific character for unambiguous parsing.
1010

11-
Table 1: Components of a PURL
11+
Table 1 Components of a PURL
1212

1313
| Component | Requirement | Description|
1414
| ---------- | ----------- |:------------------------------------------------------ |
15-
| scheme | Required | The URL scheme with the constant value of "pkg". One of the primary reasons for this single scheme is to facilitate the future official registration of the "pkg" scheme for package URLs. |
15+
| scheme | Required | The URL scheme with the constant value of "pkg". One of the primary reasons for this single scheme is to facilitate the future official registration of the "pkg" scheme for Package-URLs. |
1616
| type | Required | The package "type" or package "protocol" such as maven, npm, nuget, gem, pypi, etc. |
1717
| namespace | Optional | A name prefix such as a Maven groupid, a Docker image owner, a GitHub user or organization. Namespace is type-specific. |
1818
| name | Required | The name of the package. |
@@ -84,11 +84,11 @@ as defined in Python pip or SPDX download locations are not valid PURL types.
8484
A canonical PURL is composed of these permitted ASCII characters:
8585

8686
- the Alphanumeric Characters: **A to Z**, **a to z**, **0 to 9**,
87-
- the Punctuation Characters: **.-_~** (period '.',
88-
dash '-', underscore '_' and tilde '~'),
89-
- the Percent Character: **%** (percent sign '%'), and
87+
- the Punctuation Characters: **.-_~** (period '.'
88+
dash '-', underscore '_' and tilde '~')
89+
- the Percent Character: **%** (percent sign '%')
9090
- the Separator Characters **:/@?=&#** (colon ':', slash '/', at sign '@',
91-
question mark '?', equal sign '=', ampersand '&' and hash sign '#').
91+
question mark '?', equal sign '=', ampersand '&' and hash sign '#')
9292

9393

9494
## Separator characters
@@ -132,11 +132,11 @@ This is how each of the Separator Characters is used:
132132

133133
- Where the space ' ' is permitted, it shall be percent-encoded as '%20'.
134134
- With the exception of the percent-encoding mechanism, the rules regarding
135-
percent-encoding are defined by this specification alone.
135+
percent-encoding are defined by this Standard alone.
136136

137137
## Case folding
138138

139-
References to "lowercase" in this specification refer to the
139+
References to "lowercase" in this Standard refer to the
140140
**culture-invariant** full case mapping defined in
141141
[Section 3.13.2 of the Unicode Standard](https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-3/#G34078).
142142

@@ -149,13 +149,13 @@ All other ASCII characters remain unchanged.
149149

150150
A PURL string is an ASCII URL string composed of seven components.
151151

152-
Except as expressly stated otherwise in this section, each component:
152+
Except as expressly stated otherwise in this Clause, each component:
153153

154-
- may be composed of any of the characters defined in the "Permitted
155-
characters" section
156-
- shall be encoded as defined in the "Character encoding" section
154+
- may be composed of any of the characters defined in the _Permitted
155+
characters_ clause
156+
- shall be encoded as defined in the _Character encoding_ clause
157157

158-
The "lowercase" rules are defined in the "Case folding" clause.
158+
The "lowercase" rules are defined in the Case folding clause.
159159

160160
The rules for each component are:
161161

@@ -185,7 +185,7 @@ stripped in the canonical form. They are not part of the **namespace**.
185185
- shall not contain any slash '/' characters
186186
- shall not be empty
187187
- may contain any Unicode character other than '/' unless the package's
188-
**type** definition provides otherwise.
188+
**type** definition provides otherwise
189189
- A URL host or Authority shall not be used as a **namespace**. Use instead a
190190
**repository_url** qualifier. Note however, that for some types, the
191191
**namespace** may look like a host.
@@ -222,7 +222,7 @@ This '&' separator is not part of an individual **qualifier**.
222222
- A **key** shall not be percent-encoded.
223223
- Each **key** shall be unique among all the keys of the **qualifiers** component.
224224
- A **value** may contain any Unicode character and all characters shall
225-
be encoded as described in the "Character encoding" section.
225+
be encoded as described in the _Character encoding_ clause.
226226

227227
### Subpath
228228
- The **subpath** string is prefixed by a '#' separator when not empty.
@@ -234,8 +234,8 @@ in the canonical form.
234234
- When percent-decoded, a segment:
235235
- shall not contain any slash '/' characters
236236
- shall not be empty
237-
- Shall not be any of '..' or '.'
238-
- May contain any Unicode character other than '/' unless the package's **type** definition provides otherwise.
237+
- shall not be any of '..' or '.'
238+
- may contain any Unicode character other than '/' unless the package's **type** definition provides otherwise.
239239
- The **subpath** shall be interpreted as relative to the root of the package.
240240

241241

0 commit comments

Comments
 (0)