├── .github └── workflows │ └── auto-publish.this_should_be_yml ├── .gitignore ├── .pr-preview.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ECHIDNA ├── LICENSE.md ├── README.md ├── common ├── css │ └── common.css ├── html │ ├── acknowledgements.html │ ├── lo.html │ └── separate_acks.json └── js │ ├── biblio.js │ ├── orcid.js │ └── wp.js ├── index.html └── w3c.json /.github/workflows/auto-publish.this_should_be_yml: -------------------------------------------------------------------------------- 1 | # .github/workflows/pr-push.yml 2 | name: CI 3 | on: 4 | pull_request: {} 5 | push: 6 | branches: [main] 7 | jobs: 8 | main: 9 | name: Build, Validate and Deploy 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | - uses: w3c/spec-prod@v2 14 | with: 15 | W3C_ECHIDNA_TOKEN: ${{ secrets.W3C_TR_TOKEN }} 16 | W3C_WG_DECISION_URL: https://www.w3.org/publishing/groups/publ-wg/Meetings/Minutes/2017/2017-12-18-minutes#resolution2 17 | W3C_BUILD_OVERRIDE: | 18 | shortName: pwpub 19 | specStatus: WG-NOTE 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | -------------------------------------------------------------------------------- /.pr-preview.json: -------------------------------------------------------------------------------- 1 | { 2 | "src_file": "index.html", 3 | "type": "respec" 4 | } 5 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | All documentation, code and communication under this repository are covered by the [W3C Code of Ethics and Professional Conduct](https://www.w3.org/Consortium/cepc/). 4 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Publishing Working Group 2 | 3 | Contributions to this repository are intended to become part of Recommendation-track documents governed by the 4 | [W3C Patent Policy](http://www.w3.org/Consortium/Patent-Policy-20040205/) and 5 | [Software and Document License](http://www.w3.org/Consortium/Legal/copyright-software). To make substantive contributions to specifications, you must either participate 6 | in the relevant W3C Working Group or make a non-member patent licensing commitment. 7 | 8 | If you are not the sole contributor to a contribution (pull request), please identify all 9 | contributors in the pull request comment. 10 | 11 | To add a contributor (other than yourself, that's automatic), mark them one per line as follows: 12 | 13 | ``` 14 | +@github_username 15 | ``` 16 | 17 | If you added a contributor by mistake, you can remove them in a comment with: 18 | 19 | ``` 20 | -@github_username 21 | ``` 22 | 23 | If you are making a pull request on behalf of someone else but you had no part in designing the 24 | feature, you can remove yourself with the above syntax. 25 | -------------------------------------------------------------------------------- /ECHIDNA: -------------------------------------------------------------------------------- 1 | # ECHIDNA configuration 2 | index.html 3 | common/css/common.css 4 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | All documents in this Repository are licensed by contributors 2 | under the 3 | [W3C Software and Document License](http://www.w3.org/Consortium/Legal/copyright-software). 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![W3C Logo](https://www.w3.org/Icons/w3c_home) 3 | 4 | # Packaged Web Publications 5 | 6 | This is the repository of the W3C’s specification on Packaged Web Publications, developed by the [Publishing Working Group](https://www.w3.org/publishing/groups/publ-wg/). 7 | 8 | This work has been superceded by the [Lighweight Packaging Format (LPF)](https://www.w3.org/TR/lpf/), released as a W3C Working Group Note. 9 | 10 | The original editors’ draft of the Packaged Web Publications specification is [still available](https://w3c.github.io/pwpub/) for the record. 11 | 12 | ## Contributing to the Repository 13 | 14 | Use the standard fork, branch, and pull request workflow to propose changes to the specification. Please make branch names informative—by including the issue or bug number for example. 15 | 16 | Editorial changes that improve the readability of the spec or correct spelling or grammatical mistakes are welcome. 17 | 18 | Please read [CONTRIBUTING.md](CONTRIBUTING.md), about licensing contributions. 19 | 20 | -------------------------------------------------------------------------------- /common/css/common.css: -------------------------------------------------------------------------------- 1 | 2 | ul.ack > li, 3 | ul.flat > li { 4 | display: inline; 5 | } 6 | 7 | ul.ack > li:after, 8 | ul.flat > li:after { 9 | content: ', ' 10 | } 11 | 12 | ul.ack > li:last-child:after, 13 | ul.flat > li:last-child:after { 14 | content: '' 15 | } 16 | 17 | ul.flat { 18 | display: inline; 19 | padding-left: 0; 20 | } 21 | 22 | dt, dd { 23 | padding-top: 0.5em; 24 | } 25 | 26 | dfn { 27 | font-weight: bold !important; 28 | } 29 | -------------------------------------------------------------------------------- /common/html/acknowledgements.html: -------------------------------------------------------------------------------- 1 |
2 |

Acknowledgements

3 |

The editors would like to thank the members of the Publishing Working Group for their contributions to this specification:

4 | 5 | 93 | 94 |

95 | The Working Group would also like to thank the members of 96 | the Digital Publishing Interest Group for all the hard work 97 | they did paving the road for this specification. 98 |

99 |
100 | -------------------------------------------------------------------------------- /common/html/lo.html: -------------------------------------------------------------------------------- 1 |
2 |

Acknowledgements

3 |

The editors would like to specially thank the following individuals for making significant 4 | contributions to the authoring and editing of this specification:

5 | 6 | 25 | 26 |

Additionally, the following people were members of the Working Group at the time of publication:

27 | 28 | 105 | 106 |

The Working Group would also like to thank the members of the 107 | Digital Publishing Interest Group for all the hard work 108 | they did paving the road for this specification.

109 |
110 | 111 | -------------------------------------------------------------------------------- /common/html/separate_acks.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "name" : "Luc Audrain" 3 | },{ 4 | "name" : "Baldur Bjarnason" 5 | },{ 6 | "name" : "Dave Cramer" 7 | },{ 8 | "name" : "Timothy Cole" 9 | },{ 10 | "name" : "Rachel Comerford" 11 | },{ 12 | "name" : "Romain Deltour" 13 | },{ 14 | "name" : "Hadrien Gardeur" 15 | },{ 16 | "name" : "Matt Garrish" 17 | },{ 18 | "name" : "Garth Conboy", 19 | "chair": true 20 | },{ 21 | "name" : "Ivan Herman" 22 | },{ 23 | "name" : "Deborah Kaplan" 24 | },{ 25 | "name" : "Joshua Pyle" 26 | },{ 27 | "name" : "Wendy Reid", 28 | "chair": true 29 | },{ 30 | "name" : "Tzviya Siegman", 31 | "chair": true 32 | },{ 33 | "name" : "Avneesh Singh" 34 | },{ 35 | "name" : "Benjamin Young" 36 | },{ 37 | "name" : "Jeff Xu" 38 | }] 39 | -------------------------------------------------------------------------------- /common/js/biblio.js: -------------------------------------------------------------------------------- 1 | /* 2 | * WARNING: Use this file sparingly! 3 | * 4 | * Check http://www.specref.org/ first 5 | * 6 | */ 7 | 8 | /* general entry template 9 | "short_name": { 10 | "title": "...", 11 | "href": "https://...", 12 | "authors": [ 13 | "..." 14 | ], 15 | "date": "..." 16 | } 17 | */ 18 | 19 | var biblio = { 20 | "html": { 21 | "title": "HTML 5.2", 22 | "authors" : [ 23 | "Steve Faulkner", 24 | "Arron Eicholz", 25 | "Travis Leithead", 26 | "Alex Danilo", 27 | "Sangwhan Moon" 28 | ], 29 | "date": "2017-12-14", 30 | "status": "W3C Recommendation", 31 | "href": "https://www.w3.org/TR/html/", 32 | "publisher": "W3C" 33 | }, 34 | "link-relation": { 35 | "title": "Identifier: A Link Relation to Convey a Preferred URI for Referencing", 36 | "authors": [ 37 | "H. Van de Sompel", 38 | "M. Nelson", 39 | "G. Bilder", 40 | "J. Kunze", 41 | "S. Warner" 42 | ], 43 | "rawDate": "2017-08", 44 | "publisher": "IETF", 45 | "href": "https://tools.ietf.org/html/draft-vandesompel-identifier-00" 46 | }, 47 | "cfi": { 48 | "authors" : [ 49 | "Peter Sorotokin", 50 | "Garth Conboy", 51 | "Brady Duga", 52 | "John Rivlin", 53 | "Don Beaver", 54 | "Kevin Ballard", 55 | "Alastair Fettes", 56 | "Daniel Weck" 57 | ], 58 | title: "EPUB Canonical Fragment Identifiers 1.1", 59 | href: "http://www.idpf.org/epub/linking/cfi/epub-cfi.html", 60 | publisher: "IDPF", 61 | rawDate: "2017-01-05", 62 | status: "Recommended Specification" 63 | }, 64 | "css": { 65 | "title": "CSS Snapshot", 66 | "authors" : [ 67 | "Tab Atkins Jr.", 68 | "Elika J. Etemad", 69 | "Florian Rivoal" 70 | ], 71 | "status": "W3C Working Group Note", 72 | "href": "https://www.w3.org/TR/CSS/", 73 | "publisher": "W3C" 74 | }, 75 | "doi": { 76 | "title": "Information and documentation — Digital object identifier system", 77 | "date": "2012-05", 78 | "status": "Published", 79 | "href": "https://www.iso.org/standard/43506.html" 80 | }, 81 | "iana-link-relations": { 82 | "title": "Link Relations", 83 | "href": "https://www.iana.org/assignments/link-relations/link-relations.xhtml" 84 | }, 85 | "wpub-ann": { 86 | "title": "Web Annotation Extensions for Web Publications", 87 | "href": "https://www.w3.org/TR/wpub-ann/", 88 | "authors": [ 89 | "Timothy W. Cole", 90 | "Ivan Herman" 91 | ], 92 | "date": "2018-01-04" 93 | }, 94 | "pwpub": { 95 | "title": "Packaged Web Publications", 96 | "href": "https://www.w3.org/TR/pwpub/", 97 | "authors": [ 98 | "David Wood" 99 | ], 100 | "date": "2018-01-04" 101 | }, 102 | "wpub": { 103 | "title": "Web Publications", 104 | "href": "https://www.w3.org/TR/wpub/", 105 | "authors": [ 106 | "Matt Garrish", 107 | "Ivan Herman" 108 | ], 109 | "date": "2018-01-04" 110 | }, 111 | "string-meta": { 112 | "title": "Requirements for Language and Direction Metadata in Data Formats", 113 | "href": "https://w3c.github.io/string-meta/", 114 | "authors" : [ 115 | "Addison Phillips", 116 | "Richard Ishida" 117 | ], 118 | "date": "2017-12-01" 119 | }, 120 | "schema.org": { 121 | "title": "Schema.org", 122 | "href": "https://schema.org" 123 | }, 124 | "onix": { 125 | "title": "ONIX for Books", 126 | "href": "http://www.editeur.org/83/Overview" 127 | }, 128 | "bibtex": { 129 | "title": "BibTeX Format Description", 130 | "href" : "http://www.bibtex.org/Format/" 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /common/js/orcid.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Add an orcid image linked to the authors' and editors' ORCID ID-s (when applicable) 3 | * 4 | * The trigger is an additional "orcid" key in the person's object in the respec config. The "w3cid" key is also necessary (to be used anyway...) 5 | */ 6 | function show_orcid(config) { 7 | let orcidmaps = { 8 | }; 9 | 10 | //-------------------------------------------------------------------------------- 11 | // 1st step: find the authors/editors who have set their ORCID number as part of the persons' structure 12 | // This can be extracted from the configuration set by the user (and extended by respec) 13 | let personKeys = ["editors", "authors"]; 14 | personKeys.forEach( key => { 15 | if( config[key] ) { 16 | config[key].forEach( (editor) => { 17 | if(editor.orcid && editor.w3cid) { 18 | orcidmaps[editor.w3cid] = editor.orcid 19 | } 20 | }); 21 | } 22 | }); 23 | 24 | //--------------------------------------------------------------------------------- 25 | // 2nd step: find the persons in the header, see if their id is listed in orcidmap and, if yes 26 | // add the additional image reference. 27 | // 28 | // 29 | // Persons are in a dd element with the class set to p-author (and some others) 30 | document.querySelectorAll("dd.p-author").forEach( (element) => { 31 | // Look at the data-editor-id value to see if it is relevant. 32 | if( element.dataset.editorId ) { 33 | // Get the possible ordicId from the orcid mapping 34 | orcidId = orcidmaps[element.dataset.editorId] 35 | if(orcidId) { 36 | // Bingo; add a span with the image linked to the orcid web site 37 | let span = document.createElement('span'); 38 | let a = document.createElement('a'); 39 | let img = document.createElement('img'); 40 | 41 | img.setAttribute('src','images/orcid.gif'); 42 | img.setAttribute('alt','orcid logo'); 43 | 44 | a.setAttribute('href', `https://orcid.org/${orcidId}`); 45 | a.appendChild(img); 46 | 47 | span.setAttribute('class', 'orcid'); 48 | span.appendChild(a); 49 | 50 | element.innerHTML += " "; 51 | element.appendChild(span); 52 | } 53 | } 54 | }); 55 | } 56 | -------------------------------------------------------------------------------- /common/js/wp.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Create a Web Publication manifest for the publication. 3 | * 4 | * @param config: the respec configuration object 5 | */ 6 | function create_wp(config) { 7 | // It is currently unclear whether the WP manifest should include all possible resources (like in EPUB) 8 | // if it wants the publication to be properly cached/packaged, or not. At this moment, 9 | // it seems to be not true. 10 | // This flag controls on what should happen if the full boundary is supposed to be included in the manifest... 11 | const FULL_BOUNDARY = false; 12 | 13 | // ----------------------------------------------------------------------------------- // 14 | // Rudimentary check whether the URL is relative or not. Surely not ideal, but I did not want to include a full URI library... 15 | // (Why, oh why is not URL management part of the default JS environment?) 16 | const is_relative = (url) => { 17 | //alert(url); 18 | return (url[0] === '#' || url.startsWith("http://") || url.startsWith("https://") || url.startsWith("mailto:")) ? false : true; 19 | }; 20 | 21 | const image_type = (img) => { 22 | if( img.endsWith(".gif") ) { 23 | return "image/gif"; 24 | } else if( img.endsWith(".png") ) { 25 | return "image/png"; 26 | } else if( img.endsWith(".bmp") ) { 27 | return "image/bmp"; 28 | } else if( img.endsWith(".jpg") || img.endsWith(".jpeg") ) { 29 | return "image/jpeg"; 30 | } else if( img.endsWith(".svg") ) { 31 | return "image/svg+xml"; 32 | } else if( img.endsWith(".pdf") ) { 33 | return "application/pdf"; 34 | } else { 35 | return null; 36 | } 37 | }; 38 | 39 | const uniq = (arr) => { 40 | let buffer = []; 41 | return arr.filter( (entry) => { 42 | let key = entry.url; 43 | if( buffer.indexOf(key) !== -1 ) { 44 | // that url has already been seen 45 | return false; 46 | } else { 47 | buffer.push(key); 48 | return true; 49 | } 50 | }) 51 | }; 52 | 53 | // There are minor differences between the terms used in the respec config file and the ones in schema.org... 54 | let person_keys_mapping = { 55 | "editors" : "editor", 56 | "authors" : "author", 57 | "creators" : "creator" 58 | }; 59 | 60 | // The id attribute value for the 7 | 8 | 9 | 41 | 42 | 43 |
44 |

This specification defines a packaging format for combining the resources of a Web Publication [[?wpub]] into a single 45 | portable file.

46 |

47 | At this point, this is just a skeleton for the specification-to-be. At the moment, the focus of the Working Group is on the Web Publications document. 48 |

49 |
50 |
51 |

52 | Due to the lack of practical business cases for Web Publications, and the consequent lack of commitment to implement the technology, the Publishing Working Group has chosen to discontinue the work on Web Publications, archive the work in the form of a Working Group Note, and focus on other areas of interest. As a consequence, the present document has also been discontinued and is being published as a Working Group Note. The public record of the group's discussions is available in group's archive of meeting minutes. 53 |

54 | 55 |

56 | The separate Lightweight Packaging Format (LPF) Working Group Note fulfills a similar role, albeit with different requirements and goals. 57 |

58 |
59 | 60 |
61 |

Introduction

62 | 63 |

The editors request community comments on especially on Sections 2-4 via the group’s primary mailing list. The archives are publicly visible, and anyone can post a mail.

64 | 65 |

A key decision on this specification will be the choice of packaging mechanism (section 5). The working group has decided to evaluate Web Packaging (see the Web Packaging Format Explainer) and to wait for its maturation before proceeding. This has been a major cause of the publication of this specification as a First Public Working Draft in such skeletal form.

66 | 67 |
68 | 69 |
70 | 71 |
72 |

General Conformance

73 | 74 |

A document is a Packaged Web Publication if it: 75 | 76 |

80 | 81 |

Additionally, a document that is a Packaged Web Publication MAY contain: 82 | 83 |

87 |
88 | 89 |
90 |

Conformance Classes

91 | 92 |

This specification defines two conformance classes: one for Self-Packaged Web Publications and one for 93 | Standard-Packaged Web Publications.

94 | 95 |

A document is a Self-Packaged Web Publication if it meets the following criteria:

96 | 97 | 101 | 102 |

A document is a Standard-Packaged Web Publications if it meets the following criteria:

103 | 104 | 107 | 108 |
109 |
110 | 111 |
112 |

Terminology

113 | 114 |
115 |
Packaged Web Publication
116 |
117 | 118 |

A Web Publication [[?wpub]] that has been packaged into a single information resource, enabling it to be transported and stored independent of any specific address or protocol. A Packaged Web Publication does not have to originate on the Web (i.e., have a specific URL that is accessible via HTTP); the only requirement is that it conform to Web Publications. Similarly, it is possible to unpack a Packaged Web Publication to create a Web Publication, but there are practical limitations to doing so (e.g., re-publishing cross-domain resources will require that a client be able to access all domains used). 119 |

120 |
121 | 122 |
Self-Packaged Web Publication
123 |
124 |

A Packaged Web Publication [PWPUB] that defines its own package format. 125 |

126 |
127 | 128 |
Standard-Packaged Web Publication
129 |
130 |

A Packaged Web Publication [PWPUB] that is packaged using the packaging format defined in . 131 |

132 |
133 |
134 | 135 |
136 | 137 |
138 |

Descriptive Properties

139 | 140 |

A Web Publication is anticipated to have some Descriptive Properties, or WP-specific metadata. What PWP-specific metadata should a PWP contain, if any?

141 | 142 |
143 | 144 |
145 |

Packaging

146 | 147 |
148 |

PWP will require the selection of some sort of packaging format in order to be a 149 | Packaged Web Publication.

150 | 151 |

Some options currently under consideration include, but are not limited to:

152 | 153 | 160 | 161 |

All of these have pros and cons. For example, Web Packaging is not finalized, 162 | the CBOR specification precludes inclusion of a general compression scheme (although 163 | one could add one on top of CBOR), and SQLite is not a standard of a recognized body.

164 |
165 | 166 |

What packaging format or style should a PWP use?

167 | 168 |
169 | 170 |
171 |

Profiles

172 | 173 |

The editors realize that the concept of profiles of implementation is probably contentious. 174 | Much discussion is anticipated before this section is likely to be brought to conclusion.

175 | 176 |
177 | 178 |
179 |

Security

180 | 181 |
Placeholder for security issues.
182 |
183 |
184 |

Privacy

185 | 186 |
Placeholder for privacy issues.
187 |
188 | 189 |
190 | 191 | 192 | -------------------------------------------------------------------------------- /w3c.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": [ 3 | "100074" 4 | ], 5 | "contacts": [ 6 | "iherman" 7 | ], 8 | "repo-type": "rec-track" 9 | } 10 | --------------------------------------------------------------------------------