* [ELPA] New package: repology.el @ 2020-12-30 16:23 Nicolas Goaziou 2020-12-30 19:34 ` Jean Louis 2020-12-30 21:58 ` [ELPA] New package: repology.el (v2) Nicolas Goaziou 0 siblings, 2 replies; 145+ messages in thread From: Nicolas Goaziou @ 2020-12-30 16:23 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 370 bytes --] Hello, I wrote a small library to access to Repology API (<https://repology.org>) from Emacs. I'd like to submit it for inclusion in GNU ELPA, as it might be useful to others. I'm attaching the sole file since it has no interweb existence so far. Please let me know if it is not suitable for inclusion, or needs more work. Thank you. Regards, -- Nicolas Goaziou [-- Attachment #2: Repology library --] [-- Type: application/emacs-lisp, Size: 40913 bytes --] ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-30 16:23 [ELPA] New package: repology.el Nicolas Goaziou @ 2020-12-30 19:34 ` Jean Louis 2020-12-30 21:01 ` Clément Pit-Claudel 2020-12-31 11:46 ` Nicolas Goaziou 2020-12-30 21:58 ` [ELPA] New package: repology.el (v2) Nicolas Goaziou 1 sibling, 2 replies; 145+ messages in thread From: Jean Louis @ 2020-12-30 19:34 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-devel While I may find that package personally useful for research of various packages on multiple OS distributions, it is not for GNU ELPA, IMHO, as GNU is all about free software and teaching people about free software. Package leads or guides people to research packages that are proprietary software without giving any warning, at least in the lookup function. I do not find it useful for Emacs and alright for GNU ELPA as GNU is about free software and this package is leading people to various OS distributions that are not endorsed by the FSF and that provide non-free software. Additionally the lookup result does not provide license information thus putting all proprietary software available from various package repositories together with free sofware and leads people to confusions. For me this is no go for GNU ELPA. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-30 19:34 ` Jean Louis @ 2020-12-30 21:01 ` Clément Pit-Claudel 2020-12-31 13:31 ` Jean Louis 2020-12-31 11:46 ` Nicolas Goaziou 1 sibling, 1 reply; 145+ messages in thread From: Clément Pit-Claudel @ 2020-12-30 21:01 UTC (permalink / raw) To: emacs-devel On 12/30/20 2:34 PM, Jean Louis wrote: > While I may find that package personally useful for research of > various packages on multiple OS distributions, it is not for GNU ELPA, > IMHO, as GNU is all about free software and teaching people about free > software. By the same logic, eww is not for GNU ELPA or Emacs, since it allows people to browse the web without displaying license information. Also, repology itself is GNU GPL. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-30 21:01 ` Clément Pit-Claudel @ 2020-12-31 13:31 ` Jean Louis 0 siblings, 0 replies; 145+ messages in thread From: Jean Louis @ 2020-12-31 13:31 UTC (permalink / raw) To: Clément Pit-Claudel; +Cc: emacs-devel * Clément Pit-Claudel <cpitclaudel@gmail.com> [2020-12-31 00:02]: > On 12/30/20 2:34 PM, Jean Louis wrote: > > While I may find that package personally useful for research of > > various packages on multiple OS distributions, it is not for GNU ELPA, > > IMHO, as GNU is all about free software and teaching people about free > > software. > > By the same logic, eww is not for GNU ELPA or Emacs, since it allows > people to browse the web without displaying license information. I am trying to get what you mean, but it looks like I cannot. Maybe you quoted one part of text or let some other part out so that I cannot connect the dots. Browsers offer access to networks but not specific references to non free software. GNU project should not deliver browser that offers direct reference to a database of free software. If users do it themselves, they are free to do so, just as users are free to install proprietary software on GNU/Linux, those are private issues that are actually beyond GNU. GNU project is not about forbidding users do what they wish. GNU teaches users free software philosophy. Putting a package in GNU ELPA that does not make ethical distinction would be contrary to what is already being done in GNU and in FSF. GNU project teaches users about free software. It points out to problems with proprietary software. It does not and should not serve as a platform or access to platform for users of free software to search, find references to software without ethical distinction. Repology.org and package repology.el is contradiction to what GNU and FSF efforts are about. We teach users distinction between free software and proprietary software, and we tell people WHY. Please see the Free Software Directory: https://directory.fsf.org/wiki/Main_Page It is directory of free software. What I would not find logical is that we do not have GNU ELPA package that provides API to Free Software Directory. But we would then have repology.org package that provides API to software without ethical distinction, be it proprietary or free software or software with unclear licensing, it does not matter there. > Also, repology itself is GNU GPL. We discussed already that GNU GPL software may be ethical and not ethical. For example malware, viruses and backdoors can be also licensed as GNU GPL software but are not ethical. GNU GPL software may control or be made exclusively to work with proprietary software. It may provide access to search engine that provides information about software without ethical distinction if it is free software or proprietary. All those are examples showing how GNU GPL licensed software may not fulfill my personal ethical criteria. As this message is my personal opinion. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-30 19:34 ` Jean Louis 2020-12-30 21:01 ` Clément Pit-Claudel @ 2020-12-31 11:46 ` Nicolas Goaziou 2020-12-31 13:11 ` Jean Louis 1 sibling, 1 reply; 145+ messages in thread From: Nicolas Goaziou @ 2020-12-31 11:46 UTC (permalink / raw) To: emacs-devel Hello, Jean Louis <bugs@gnu.support> writes: > Additionally the lookup result does not provide license information > thus putting all proprietary software available from various package > repositories together with free sofware and leads people to > confusions. The license information is here, stored in each package. However, the UI does not display at the "project" level. You need to look at a package to see it. It is possible to display it at the "project" level, too, by configuring `repology-display-projects-columns'. See, for example, how outdated package versions are collected in this variable. However, depending on the repository, the license information may be incomplete, inaccurate, or downwards misleading. So I'm not sure it is a good idea to display it by default. It can be done, tho. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-31 11:46 ` Nicolas Goaziou @ 2020-12-31 13:11 ` Jean Louis 2020-12-31 20:30 ` Ulrich Mueller 0 siblings, 1 reply; 145+ messages in thread From: Jean Louis @ 2020-12-31 13:11 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-devel * Nicolas Goaziou <mail@nicolasgoaziou.fr> [2020-12-31 14:54]: > However, depending on the repository, the license information may be > incomplete, inaccurate, or downwards misleading. So I'm not sure it is > a good idea to display it by default. It can be done, tho. GNU project is development of free software. It does not contribute and should not contribute to installations, references, promotion or support to non-free software, neither it shall support remote servers doing so. Specific free GNU/Linux operating systems and their packages are promoted and supported by GNU project: https://www.gnu.org/distros/free-distros.html Others are not supported: https://www.gnu.org/distros/common-distros.html As non-free packages are not advertised by GNU project neither by free endorsed OSes it would be contradiction to advertise such non-free packages through this package. GNU ELPA should not promote such non-free packages and should not provide API to remote server that lists, searches, indexes and provides results where non-free packages may be included. The package you proposed does not teach users about free software but advertises non-free software. repology.org compiles databases of free software and non-free software together without any ethical distinction. It is in contradiction how endorsed free software GNU/Linux operating systems are structured, see: https://www.gnu.org/distros/free-system-distribution-guidelines.html Additionally it advertises third party server about which we know nothing of, which would collecting data from Emacs users. Repology server does not give credits to GNU. Why would GNU give credits and kudos to Repology server? Debian GNU/Linux is named just "Debian" at repology.org. GNU Guix is named just "Guix" instead of "GNU Guix" on repology.org Parabola GNU/Linux-libre is called "Parabola" without mentioning the full name of the system on repology.org Hyperbola GNU/Linux-libre is not mentioned by its full name, but rather just as "Hyperbola" on repology.org, not giving proper credits to GNU. Trisquel, etc. the same. GNU/Linux system is named "Linux" on repology.org, please see: Why do you call the system we use GNU/Linux and not Linux? https://www.gnu.org/gnu/gnu-linux-faq.html#why Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-31 13:11 ` Jean Louis @ 2020-12-31 20:30 ` Ulrich Mueller 2021-01-01 7:31 ` Richard Stallman 2021-01-01 10:05 ` Jean Louis 0 siblings, 2 replies; 145+ messages in thread From: Ulrich Mueller @ 2020-12-31 20:30 UTC (permalink / raw) To: emacs-devel >>>>> On Thu, 31 Dec 2020, Jean Louis wrote: > GNU project is development of free software. It does not contribute > and should not contribute to installations, references, promotion or > support to non-free software, neither it shall support remote servers > doing so. > Specific free GNU/Linux operating systems and their packages are > promoted and supported by GNU project: > https://www.gnu.org/distros/free-distros.html I've always wondered how many of the Emacs developers are actually using one of these? On free hardware with free firmware, because everything else would be inconsequent. > Others are not supported: > https://www.gnu.org/distros/common-distros.html > As non-free packages are not advertised by GNU project neither by free > endorsed OSes it would be contradiction to advertise such non-free > packages through this package. GNU ELPA should not promote such > non-free packages and should not provide API to remote server that > lists, searches, indexes and provides results where non-free packages > may be included. > The package you proposed does not teach users about free software but > advertises non-free software. > repology.org compiles databases of free software and non-free software > together without any ethical distinction. I find your standpoint rather extreme, because the vast majority of the projects there is distributed under a free software license. If there weren't any such services as repology.org, users would likely use a search engine to find a specific package. How is that better? > It is in contradiction how endorsed free software GNU/Linux operating > systems are structured, see: > https://www.gnu.org/distros/free-system-distribution-guidelines.html > Additionally it advertises third party server about which we know > nothing of, which would collecting data from Emacs users. IIUC their server's software is licensed under GPLv3+ and publicly available. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-31 20:30 ` Ulrich Mueller @ 2021-01-01 7:31 ` Richard Stallman 2021-01-01 10:05 ` Jean Louis 1 sibling, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-01 7:31 UTC (permalink / raw) To: Ulrich Mueller; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > repology.org compiles databases of free software and non-free software > > together without any ethical distinction. > I find your standpoint rather extreme, because the vast majority of the > projects there is distributed under a free software license. You and Jean Louis are talking about two different questions. Related, yes, but not the same. What he said and what you said do not directly conflict. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2020-12-31 20:30 ` Ulrich Mueller 2021-01-01 7:31 ` Richard Stallman @ 2021-01-01 10:05 ` Jean Louis 2021-01-01 11:56 ` Eli Zaretskii 2021-01-02 5:30 ` Richard Stallman 1 sibling, 2 replies; 145+ messages in thread From: Jean Louis @ 2021-01-01 10:05 UTC (permalink / raw) To: Ulrich Mueller; +Cc: emacs-devel * Ulrich Mueller <ulm@gentoo.org> [2020-12-31 23:32]: > > repology.org compiles databases of free software and non-free software > > together without any ethical distinction. > > I find your standpoint rather extreme, because the vast majority of the > projects there is distributed under a free software license. The difference is that references to non-free software would not be provided by GNU ELPA package to users. If free software references on GNU.org are extreme, then my standpoint is extreme too, but I am not a conformist that has desires to be in a non-extreme class of people so I do not mind how it is classified, seen, perceived or criticized. I do not make my analysis or present my personal opinions to conform them to non-extreme class. Just as the GNU website does not provide references to non-free software catalogue, then why should such package be part of GNU ELPA and unintentionally or intentionally promote non-free software. Note the "GNU" in GNU ELPA. And Happy New Free Software Year. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-01 10:05 ` Jean Louis @ 2021-01-01 11:56 ` Eli Zaretskii 2021-01-02 9:56 ` Jean Louis 2021-01-02 5:30 ` Richard Stallman 1 sibling, 1 reply; 145+ messages in thread From: Eli Zaretskii @ 2021-01-01 11:56 UTC (permalink / raw) To: Jean Louis; +Cc: ulm, emacs-devel > Date: Fri, 1 Jan 2021 13:05:54 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: emacs-devel@gnu.org > > references to non-free software would not be provided by GNU ELPA > package to users. Ulrich, please take what Jean says here with a grain of salt, because he doesn't speak on behalf of the Emacs project (even though he sometimes sounds like he is). These opinions are his own. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-01 11:56 ` Eli Zaretskii @ 2021-01-02 9:56 ` Jean Louis 0 siblings, 0 replies; 145+ messages in thread From: Jean Louis @ 2021-01-02 9:56 UTC (permalink / raw) To: Eli Zaretskii; +Cc: ulm, emacs-devel * Eli Zaretskii <eliz@gnu.org> [2021-01-01 14:57]: > > Date: Fri, 1 Jan 2021 13:05:54 +0300 > > From: Jean Louis <bugs@gnu.support> > > Cc: emacs-devel@gnu.org > > > > references to non-free software would not be provided by GNU ELPA > > package to users. > > Ulrich, please take what Jean says here with a grain of salt, because > he doesn't speak on behalf of the Emacs project (even though he > sometimes sounds like he is). These opinions are his own. Which I have myself explicitly and already mentioned it. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-01 10:05 ` Jean Louis 2021-01-01 11:56 ` Eli Zaretskii @ 2021-01-02 5:30 ` Richard Stallman 2021-01-04 12:09 ` Dmitry Gutov 1 sibling, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-02 5:30 UTC (permalink / raw) To: Jean Louis; +Cc: ulm, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Just as the GNU website does not provide references to non-free > software catalogue, then why should such package be part of GNU ELPA > and unintentionally or intentionally promote non-free software. Note > the "GNU" in GNU ELPA. There is no need to argue for or against this position, because it reflects the GNU Project's policy as stated in the node References in the GNU Coding Standards. We won't suggest that people use repology.org unless it changes its practice on this point. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-02 5:30 ` Richard Stallman @ 2021-01-04 12:09 ` Dmitry Gutov 2021-01-04 14:39 ` Alfred M. Szmidt 2021-01-05 6:33 ` Richard Stallman 0 siblings, 2 replies; 145+ messages in thread From: Dmitry Gutov @ 2021-01-04 12:09 UTC (permalink / raw) To: rms, Jean Louis; +Cc: ulm, emacs-devel On 02.01.2021 07:30, Richard Stallman wrote: > > Just as the GNU website does not provide references to non-free > > software catalogue, then why should such package be part of GNU ELPA > > and unintentionally or intentionally promote non-free software. Note > > the "GNU" in GNU ELPA. > > There is no need to argue for or against this position, because it > reflects the GNU Project's policy as stated in the node References in > the GNU Coding Standards. We won't suggest that people use > repology.org unless it changes its practice on this point. repology.org is not a software catalogue. It doesn't have any links to the programs themselves, or even pointers to their home pages. Its purpose is to show which version has been published where, and who is maintaining that. As such, it's untenable to suggest that this project, or the proposed package, promote any particular piece of software listed. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 12:09 ` Dmitry Gutov @ 2021-01-04 14:39 ` Alfred M. Szmidt 2021-01-04 15:00 ` Ulrich Mueller 2021-01-04 15:02 ` Dmitry Gutov 2021-01-05 6:33 ` Richard Stallman 1 sibling, 2 replies; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-04 14:39 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, rms, bugs, emacs-devel It doesn't have any links to the programs themselves, or even pointers to their home pages. Its purpose is to show which version has been published where, and who is maintaining that. That doesn't really matter, the list lists non-free software packages and users can easily think that the program is free software (since there is no license information associated with it). That alone is a good reason to not suggest it. Since this web site does almost the same job as the Free Software Directory, why not interface against that instead? That lists exclusivley packages that have been confirmed to be free software. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 14:39 ` Alfred M. Szmidt @ 2021-01-04 15:00 ` Ulrich Mueller 2021-01-04 16:32 ` Alfred M. Szmidt 2021-01-05 6:45 ` Richard Stallman 2021-01-04 15:02 ` Dmitry Gutov 1 sibling, 2 replies; 145+ messages in thread From: Ulrich Mueller @ 2021-01-04 15:00 UTC (permalink / raw) To: Alfred M. Szmidt; +Cc: ulm, emacs-devel, rms, bugs, Dmitry Gutov >>>>> On Mon, 04 Jan 2021, Alfred M Szmidt wrote: > That doesn't really matter, the list lists non-free software packages > and users can easily think that the program is free software (since > there is no license information associated with it). That alone is a > good reason to not suggest it. > Since this web site does almost the same job as the Free Software > Directory, why not interface against that instead? That lists > exclusivley packages that have been confirmed to be free software. These are completely different services. The FSD is a catalogue of free software with human readable descriptions (and IIUC, entries are maintained by humans). Whereas Repology provides lists of packages and their versions, with the info being obtained from various repositories in an automated way. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 15:00 ` Ulrich Mueller @ 2021-01-04 16:32 ` Alfred M. Szmidt 2021-01-05 6:45 ` Richard Stallman 1 sibling, 0 replies; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-04 16:32 UTC (permalink / raw) To: Ulrich Mueller; +Cc: ulm, emacs-devel, rms, bugs, dgutov > Since this web site does almost the same job as the Free Software > Directory, why not interface against that instead? That lists > exclusivley packages that have been confirmed to be free software. These are completely different services. The FSD is a catalogue of free software with human readable descriptions (and IIUC, entries are maintained by humans). Whereas Repology provides lists of packages and their versions, with the info being obtained from various repositories in an automated way. That is a difference in how they are implemented, now in their purpose, no? FSD lists the version of packages. ;; The results of a query revolve around three types of objects: ;; projects, packages and problems. Using this library, you can find ;; projects matching certain criteria, packages in a given project, From the above I don't see how they are "completely" different, it seems one could do the same but using the FSD -- the only thing missing might be "bug" reports. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 15:00 ` Ulrich Mueller 2021-01-04 16:32 ` Alfred M. Szmidt @ 2021-01-05 6:45 ` Richard Stallman 2021-01-05 8:56 ` Alfred M. Szmidt 1 sibling, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-05 6:45 UTC (permalink / raw) To: Ulrich Mueller; +Cc: ams, dgutov, ulm, bugs, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Whereas Repology provides lists of packages and > their versions, with the info being obtained from various repositories > in an automated way. Is Repology a Lisp program? Is Repology a list of packages and their versions? Is it both, packaged together? What makes it useful? Supposing there were no nonfree Elisp packages in the world, why would you want something like Repology? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-05 6:45 ` Richard Stallman @ 2021-01-05 8:56 ` Alfred M. Szmidt 2021-01-07 7:34 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-05 8:56 UTC (permalink / raw) To: rms; +Cc: ulm, dgutov, bugs, emacs-devel Is Repology a list of packages and their versions? It is a website that lists what binary (both free software and non-free software) packages are available in different opreating systems; with some version information, and some other meta data like current bugs reported against the program. Is it both, packaged together? repology.el is a emacs library(?) to access and query Repology.org for information about packages. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-05 8:56 ` Alfred M. Szmidt @ 2021-01-07 7:34 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-07 7:34 UTC (permalink / raw) To: Alfred M. Szmidt; +Cc: ulm, emacs-devel, bugs, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > It is a website that lists what binary (both free software and > non-free software) packages Too bad. We should avoid recommending use of repology.org. (This doesn't imply actively discouraging people from using it. There is no need to go THAT far.) If repology.el is a simple interface to repology.org, we should not recommend repology.el. Unless we can find a way to fix the problem of showing nonfree packages. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 14:39 ` Alfred M. Szmidt 2021-01-04 15:00 ` Ulrich Mueller @ 2021-01-04 15:02 ` Dmitry Gutov 2021-01-04 16:29 ` Alfred M. Szmidt 1 sibling, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-04 15:02 UTC (permalink / raw) To: Alfred M. Szmidt; +Cc: ulm, rms, bugs, emacs-devel On 04.01.2021 16:39, Alfred M. Szmidt wrote: > It doesn't have any links to the programs themselves, or even pointers > to their home pages. Its purpose is to show which version has been > published where, and who is maintaining that. > > That doesn't really matter, the list lists non-free software packages > and users can easily think that the program is free software (since > there is no license information associated with it). Do you have an example? Sounds like something that's easy to fix in the package's UI. > Since this web site does almost the same job as the Free Software > Directory, why not interface against that instead? That lists > exclusivley packages that have been confirmed to be free software. It does not do the same job. Again, it's not a software catalogue/directory. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 15:02 ` Dmitry Gutov @ 2021-01-04 16:29 ` Alfred M. Szmidt 2021-01-04 17:08 ` Dmitry Gutov 0 siblings, 1 reply; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-04 16:29 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, rms, bugs, emacs-devel > It doesn't have any links to the programs themselves, or even pointers > to their home pages. Its purpose is to show which version has been > published where, and who is maintaining that. > > That doesn't really matter, the list lists non-free software packages > and users can easily think that the program is free software (since > there is no license information associated with it). Do you have an example? nmap. Or anything to do with FPGA development. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 16:29 ` Alfred M. Szmidt @ 2021-01-04 17:08 ` Dmitry Gutov 2021-01-04 17:12 ` Alfred M. Szmidt 2021-01-06 5:02 ` Richard Stallman 0 siblings, 2 replies; 145+ messages in thread From: Dmitry Gutov @ 2021-01-04 17:08 UTC (permalink / raw) To: Alfred M. Szmidt; +Cc: ulm, rms, bugs, emacs-devel On 04.01.2021 18:29, Alfred M. Szmidt wrote: > > It doesn't have any links to the programs themselves, or even pointers > > to their home pages. Its purpose is to show which version has been > > published where, and who is maintaining that. > > > > That doesn't really matter, the list lists non-free software packages > > and users can easily think that the program is free software (since > > there is no license information associated with it). > > Do you have an example? > > nmap. What about it? An example would be a URL to a web page which shows something which might be misconstrued by the user. Especially when such situation is the fault of the project, and not of the underlying sources of information. https://repology.org/project/nmap/packages (okay, this shows the homepage too) clearly shows the non-standard license where it can. And the GPLv2 license for older versions. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:08 ` Dmitry Gutov @ 2021-01-04 17:12 ` Alfred M. Szmidt 2021-01-04 17:17 ` Dmitry Gutov 2021-01-04 17:43 ` Clément Pit-Claudel 2021-01-06 5:02 ` Richard Stallman 1 sibling, 2 replies; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-04 17:12 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, rms, bugs, emacs-devel > > It doesn't have any links to the programs themselves, or even pointers > > to their home pages. Its purpose is to show which version has been > > published where, and who is maintaining that. > > > > That doesn't really matter, the list lists non-free software packages > > and users can easily think that the program is free software (since > > there is no license information associated with it). > > Do you have an example? > > nmap. What about it? It is non-free software. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:12 ` Alfred M. Szmidt @ 2021-01-04 17:17 ` Dmitry Gutov 2021-01-04 17:58 ` Alfred M. Szmidt 2021-01-04 17:43 ` Clément Pit-Claudel 1 sibling, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-04 17:17 UTC (permalink / raw) To: Alfred M. Szmidt; +Cc: ulm, rms, bugs, emacs-devel On 04.01.2021 19:12, Alfred M. Szmidt wrote: > It is non-free software. Anything else you would like to address in my last email? ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:17 ` Dmitry Gutov @ 2021-01-04 17:58 ` Alfred M. Szmidt 0 siblings, 0 replies; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-04 17:58 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, rms, bugs, emacs-devel > It is non-free software. Anything else you would like to address in my last email? I don't see anything that needs to be addressed, so I did not address it -- it is all mentioned in (standards) References. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:12 ` Alfred M. Szmidt 2021-01-04 17:17 ` Dmitry Gutov @ 2021-01-04 17:43 ` Clément Pit-Claudel 2021-01-04 17:55 ` Vasilij Schneidermann 2021-01-04 19:14 ` Ulrich Mueller 1 sibling, 2 replies; 145+ messages in thread From: Clément Pit-Claudel @ 2021-01-04 17:43 UTC (permalink / raw) To: emacs-devel On 1/4/21 12:12 PM, Alfred M. Szmidt wrote: > > > It doesn't have any links to the programs themselves, or even pointers > > > to their home pages. Its purpose is to show which version has been > > > published where, and who is maintaining that. > > > > > > That doesn't really matter, the list lists non-free software packages > > > and users can easily think that the program is free software (since > > > there is no license information associated with it). > > > > Do you have an example? > > > > nmap. > > What about it? > > It is non-free software. Are you equating "free" with "GPL-compatible", or did I miss something about nmap? (Last time I checked, nmap was FLOSS) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:43 ` Clément Pit-Claudel @ 2021-01-04 17:55 ` Vasilij Schneidermann 2021-01-04 18:51 ` Clément Pit-Claudel 2021-01-06 5:03 ` Richard Stallman 2021-01-04 19:14 ` Ulrich Mueller 1 sibling, 2 replies; 145+ messages in thread From: Vasilij Schneidermann @ 2021-01-04 17:55 UTC (permalink / raw) To: Clément Pit-Claudel; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 518 bytes --] > Are you equating "free" with "GPL-compatible", or did I miss something > about nmap? (Last time I checked, nmap was FLOSS) While the evaluation is terse, it is warranted: nmap is listed as GPL2 in my package manager for some reason, but happens to use a custom license based on the GPL2: https://nmap.org/npsl/ One of the listed goals is "Prohibit redistribution and use of Nmap within proprietary hardware and software products." This most likely violates the four freedoms and thereby makes it GPL-incompatible. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:55 ` Vasilij Schneidermann @ 2021-01-04 18:51 ` Clément Pit-Claudel 2021-01-04 22:21 ` Vasilij Schneidermann 2021-01-06 5:03 ` Richard Stallman 1 sibling, 1 reply; 145+ messages in thread From: Clément Pit-Claudel @ 2021-01-04 18:51 UTC (permalink / raw) To: emacs-devel On 1/4/21 12:55 PM, Vasilij Schneidermann wrote: >> Are you equating "free" with "GPL-compatible", or did I miss something >> about nmap? (Last time I checked, nmap was FLOSS) > > While the evaluation is terse, it is warranted: nmap is listed as GPL2 > in my package manager for some reason, but happens to use a custom > license based on the GPL2: https://nmap.org/npsl/ > > One of the listed goals is "Prohibit redistribution and use of Nmap > within proprietary hardware and software products." This most likely > violates the four freedoms and thereby makes it GPL-incompatible. Yes, but GPL-compatibility isn't what we were debating, is it? The claim was that nmap is non-free. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 18:51 ` Clément Pit-Claudel @ 2021-01-04 22:21 ` Vasilij Schneidermann 2021-01-05 2:09 ` Stefan Monnier 0 siblings, 1 reply; 145+ messages in thread From: Vasilij Schneidermann @ 2021-01-04 22:21 UTC (permalink / raw) To: Clément Pit-Claudel; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 213 bytes --] > Yes, but GPL-compatibility isn't what we were debating, is it? The > claim was that nmap is non-free. Violating the four freedoms makes a license non-free, thereby having GPL incompatibility as a side effect. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 22:21 ` Vasilij Schneidermann @ 2021-01-05 2:09 ` Stefan Monnier 2021-01-05 6:42 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Stefan Monnier @ 2021-01-05 2:09 UTC (permalink / raw) To: Clément Pit-Claudel; +Cc: emacs-devel >> Yes, but GPL-compatibility isn't what we were debating, is it? The >> claim was that nmap is non-free. > Violating the four freedoms makes a license non-free, thereby having GPL > incompatibility as a side effect. I suggest you look a bit closer: the license was changed quite recently, and since the issue was brought up, the maintainers have clarified the intent, making it clear that the problems in the license are *not* intended are there is every reason to believe that they will be fixed soon. So, `nmap` has always been Free Software and the maintainers still want to keep it that way. The current license has *bugs*, that's it. Stefan ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-05 2:09 ` Stefan Monnier @ 2021-01-05 6:42 ` Richard Stallman 2021-01-05 9:28 ` Ulrich Mueller 0 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-05 6:42 UTC (permalink / raw) To: Stefan Monnier; +Cc: cpitclaudel, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I suggest you look a bit closer: the license was changed quite recently, > and since the issue was brought up, the maintainers have clarified the > intent, making it clear that the problems in the license are *not* > intended are there is every reason to believe that they will be > fixed soon. If they fix the problems, the problems will be gone. But it sounds like they are doing something strange and unusual and it is worth looking at THAT. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-05 6:42 ` Richard Stallman @ 2021-01-05 9:28 ` Ulrich Mueller 0 siblings, 0 replies; 145+ messages in thread From: Ulrich Mueller @ 2021-01-05 9:28 UTC (permalink / raw) To: Richard Stallman; +Cc: cpitclaudel, Stefan Monnier, emacs-devel >>>>> On Tue, 05 Jan 2021, Richard Stallman wrote: [about nmap] >> I suggest you look a bit closer: the license was changed quite >> recently, and since the issue was brought up, the maintainers have >> clarified the intent, making it clear that the problems in the >> license are *not* intended are there is every reason to believe that >> they will be fixed soon. > If they fix the problems, the problems will be gone. > But it sounds like they are doing something strange and unusual > and it is worth looking at THAT. That would be very valuable input indeed. Upstream has been made aware of the problem, but it looks like neither they nor anybody else participating in the discussion at https://github.com/nmap/nmap/issues/2199 have any legal background. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:55 ` Vasilij Schneidermann 2021-01-04 18:51 ` Clément Pit-Claudel @ 2021-01-06 5:03 ` Richard Stallman 2021-01-06 9:44 ` Alfred M. Szmidt 1 sibling, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-06 5:03 UTC (permalink / raw) To: Vasilij Schneidermann; +Cc: cpitclaudel, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > One of the listed goals is "Prohibit redistribution and use of Nmap > within proprietary hardware and software products." That goal sounds like it might conflict with the free software definition. I say "might" because I can't tell from just that. Maybe this is ok, maybe not. It would take some thought. What do they mean by "proprietary hardware products"? The meaning is not obvious, so we do not classify "hardware" as free or proprietary. (See https://gnu.org/philosophy/free-hardware-designs.html.) In any case, it is not their _goals_ that would either satisfy the free software definition or not. Rather, it is their actual _license_ that would make the difference. The goals might help interpret it, or might show what license changes they want to make. Would you like to email me their current license text plus what they say about its goals? Did someone say that they were continuing to adjust their license and what they are using is not final? I think so. Anyway, if repology.org has a general practice of listing only free software, I would not criticize it for having difficulty with an unclear case like this. What matters for judging repology.org is its general policy. Can someone show me that? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 5:03 ` Richard Stallman @ 2021-01-06 9:44 ` Alfred M. Szmidt 2021-01-07 17:51 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-06 9:44 UTC (permalink / raw) To: rms; +Cc: cpitclaudel, emacs-devel, mail Did someone say that they were continuing to adjust their license and what they are using is not final? I think so. Xilinx FPGA tool chains are listed in repology, I'm quite sure one could find more examples of other non-free software -- for example all of debians non-free repository seems to be listed there listed there, it lists non-free firmware, etc. Concentrating on nmap here is a redherring. Anyway, if repology.org has a general practice of listing only free software, I would not criticize it for having difficulty with an unclear case like this. It does not from what I could see on the web page, it lists everything that is added. What matters for judging repology.org is its general policy. Can someone show me that? They don't have one, what I could see. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 9:44 ` Alfred M. Szmidt @ 2021-01-07 17:51 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-07 17:51 UTC (permalink / raw) To: Alfred M. Szmidt; +Cc: cpitclaudel, emacs-devel, mail [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Anyway, if repology.org has a general practice of listing only free > software, I would not criticize it for having difficulty with an > unclear case like this. > It does not from what I could see on the web page, it lists everything > that is added. What repology is doing is a grave wrong to the free software community, so grave that a single apology would not be sufficient. They need to publish an apology, followed by a repology. ;-} -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:43 ` Clément Pit-Claudel 2021-01-04 17:55 ` Vasilij Schneidermann @ 2021-01-04 19:14 ` Ulrich Mueller 2021-01-04 19:17 ` Clément Pit-Claudel 1 sibling, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-04 19:14 UTC (permalink / raw) To: Clément Pit-Claudel; +Cc: emacs-devel >>>>> On Mon, 04 Jan 2021, Clément Pit-Claudel wrote: > On 1/4/21 12:12 PM, Alfred M. Szmidt wrote: >> > nmap. >> >> What about it? >> >> It is non-free software. > Are you equating "free" with "GPL-compatible", or did I miss something > about nmap? (Last time I checked, nmap was FLOSS) This is contested by several distros for nmap-7.90 and later, which comes with a changed license: https://github.com/nmap/nmap/issues/2199 ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 19:14 ` Ulrich Mueller @ 2021-01-04 19:17 ` Clément Pit-Claudel 0 siblings, 0 replies; 145+ messages in thread From: Clément Pit-Claudel @ 2021-01-04 19:17 UTC (permalink / raw) To: Ulrich Mueller; +Cc: emacs-devel On 1/4/21 2:14 PM, Ulrich Mueller wrote: >>>>>> On Mon, 04 Jan 2021, Clément Pit-Claudel wrote: > >> On 1/4/21 12:12 PM, Alfred M. Szmidt wrote: >>>> nmap. >>> >>> What about it? >>> >>> It is non-free software. > >> Are you equating "free" with "GPL-compatible", or did I miss something >> about nmap? (Last time I checked, nmap was FLOSS) > > This is contested by several distros for nmap-7.90 and later, which > comes with a changed license: > https://github.com/nmap/nmap/issues/2199 Thanks a lot for the pointer! ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 17:08 ` Dmitry Gutov 2021-01-04 17:12 ` Alfred M. Szmidt @ 2021-01-06 5:02 ` Richard Stallman 2021-01-06 10:58 ` Dmitry Gutov 2021-01-06 14:41 ` Jean Louis 1 sibling, 2 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-06 5:02 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ams, ulm, bugs, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > https://repology.org/project/nmap/packages (okay, this shows the > homepage too) clearly shows the non-standard license where it can. I am having trouble understanding that page. It gives a lot of details but does not explicitly say how they relate to each other. In particular, I don't know who the many packages listed relate to each other. I can only guess that they all relate to the program nmap somehow. Also, I don't know what facts that page is trying to present. Most importantly, does Repology list nmap with nonfree packages as a peculiar exception because it has had a peculiar history recently? Or does repology.org regularly list nonfree programs without trying to distinguish? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 5:02 ` Richard Stallman @ 2021-01-06 10:58 ` Dmitry Gutov 2021-01-06 14:41 ` Jean Louis 1 sibling, 0 replies; 145+ messages in thread From: Dmitry Gutov @ 2021-01-06 10:58 UTC (permalink / raw) To: rms; +Cc: ams, ulm, bugs, emacs-devel On 06.01.2021 07:02, Richard Stallman wrote: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > https://repology.org/project/nmap/packages (okay, this shows the > > homepage too) clearly shows the non-standard license where it can. > > I am having trouble understanding that page. It gives a lot of > details but does not explicitly say how they relate to each other. > In particular, I don't know who the many packages listed > relate to each other. I can only guess that they all relate to > the program nmap somehow. Seems like it shows all packages that have "nmap" in their name or description string there. > Also, I don't know what facts that page is trying to present. Check out https://repology.org/about: About Repology is a service which tracks and compares package versions in more than 120 package repositories. Purpose For package/port maintainers: Discover new releases of software you maintain packages for Find new projects to package Get in touch with fellow maintainers to improve packages together Keep package naming and versioning schemes in sync to other repos for your and your user's convenience Fix problems detected by repology, such as broken links For software authors: Keep track of where and how well your project is packaged Keep in touch with your product package maintainers For users: Discover new releases of software you use Pick distribution most suitable for you, in terms of package quantity, freshness or stability Keep in touch with maintainers of software you use > Most importantly, does Repology list nmap with nonfree packages as a > peculiar exception because it has had a peculiar history recently? Or > does repology.org regularly list nonfree programs without trying to > distinguish? It tries to provide the correct license information. That's about it. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 5:02 ` Richard Stallman 2021-01-06 10:58 ` Dmitry Gutov @ 2021-01-06 14:41 ` Jean Louis 2021-01-06 14:59 ` Arthur Miller 1 sibling, 1 reply; 145+ messages in thread From: Jean Louis @ 2021-01-06 14:41 UTC (permalink / raw) To: Richard Stallman; +Cc: ams, emacs-devel, ulm, Dmitry Gutov Example user experience with repology: 1. M-x load-file RET repology.el RET 2. M-x repology RET s search RET toys OK RET then I can find list like below. docbook-toys 5 - - etoys 40 5.0.2408 4.0.2340 and many others. Then if I click on `etoys' I get list like: AUR etoys 5.0.2408 - fallback-mnt-aur@repology Debian Oldstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Debian Stable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Debian Testing etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Debian Unstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Deepin etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Devuan 1.0 (Jessie) etoys 4.0.2340 non-free/games jredrejo@debian.org holger@debian.org Devuan 2.0 (ASCII) etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Devuan 3.0 (Beowulf) etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Devuan 4.0 (Chimaera) etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Devuan Unstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Kali Linux Rolling etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Pardus etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Parrot etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Raspbian Oldstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Raspbian Stable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk Raspbian Testing etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk In the same manner I can stumble upon nvidia or other non-free graphics drivers, and plethora of other non-free software: Debian Stable Backports nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Debian Testing nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Debian Unstable nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Devuan 4.0 (Chimaera) nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Devuan Unstable nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Kali Linux Rolling nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org MX Linux MX-17 Testing nvidia-graphics-drivers-tesla-418 418.165.02 non-free/libs pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org MX Linux MX-19 Testing nvidia-graphics-drivers-tesla-418 418.165.02 non-free/libs pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Parrot nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Raspbian Testing nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org Most of times it will not say clearly "non-free" as I have just listed those from Debian non-free. GNU ELPA should not provide access to an indexed catalogue of non-free software. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 14:41 ` Jean Louis @ 2021-01-06 14:59 ` Arthur Miller 2021-01-06 15:21 ` Jean Louis 0 siblings, 1 reply; 145+ messages in thread From: Arthur Miller @ 2021-01-06 14:59 UTC (permalink / raw) To: Richard Stallman; +Cc: ams, emacs-devel, ulm, Dmitry Gutov Jean Louis <bugs@gnu.support> writes: > Example user experience with repology: > > 1. M-x load-file RET repology.el RET > 2. M-x repology RET s search RET toys OK RET > > then I can find list like below. > > docbook-toys 5 - - > etoys 40 5.0.2408 4.0.2340 > > and many others. Then if I click on `etoys' I get list like: > > AUR etoys 5.0.2408 - fallback-mnt-aur@repology > Debian Oldstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Debian Stable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Debian Testing etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Debian Unstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Deepin etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Devuan 1.0 (Jessie) etoys 4.0.2340 non-free/games jredrejo@debian.org holger@debian.org > Devuan 2.0 (ASCII) etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Devuan 3.0 (Beowulf) etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Devuan 4.0 (Chimaera) etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Devuan Unstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Kali Linux Rolling etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Pardus etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Parrot etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Raspbian Oldstable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Raspbian Stable etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > Raspbian Testing etoys 5.0.2408 non-free/games pkg-sugar-devel@lists.alioth.debian.org dr@jones.dk > > In the same manner I can stumble upon nvidia or other non-free > graphics drivers, and plethora of other non-free software: > > Debian Stable Backports nvidia-graphics-drivers-tesla-418 418.165.02 > non-free/misc pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org > bluca@debian.org > Debian Testing nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc > pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org > Debian Unstable nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc > pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org > Devuan 4.0 (Chimaera) nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc > pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org > Devuan Unstable nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc > pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org > Kali Linux Rolling nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc > pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org > MX Linux MX-17 Testing nvidia-graphics-drivers-tesla-418 418.165.02 > non-free/libs pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org > bluca@debian.org > MX Linux MX-19 Testing nvidia-graphics-drivers-tesla-418 418.165.02 > non-free/libs pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org > bluca@debian.org > Parrot nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc > pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org > Raspbian Testing nvidia-graphics-drivers-tesla-418 418.165.02 non-free/misc > pkg-nvidia-devel@lists.alioth.debian.org anbe@debian.org bluca@debian.org > > Most of times it will not say clearly "non-free" as I have just listed > those from Debian non-free. > > GNU ELPA should not provide access to an indexed catalogue of non-free > software. > > Jean As I see, it says "non-free", so what is the problem? I think it is rather informative to see if a piece of software is free or not free, that way I can at least avoid non-free ones. Are we now dogmatically religious where non-free software is forbidden to even be mentioned as non-free? That smells to me as a slippery slope into dogmatism and absolutism. Is there free-speach if people are not allowed to speak freely about some subject(s) like mentioning non-free software? I think the problem for you is that you see that list as a "recommendation list". If you instead interpret it as a "black list", than having list of non-free software becomes a useful listing in terms of things to avoid :-). Cheers /a ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 14:59 ` Arthur Miller @ 2021-01-06 15:21 ` Jean Louis 2021-01-06 16:23 ` Arthur Miller 0 siblings, 1 reply; 145+ messages in thread From: Jean Louis @ 2021-01-06 15:21 UTC (permalink / raw) To: Arthur Miller; +Cc: ulm, ams, Dmitry Gutov, Richard Stallman, emacs-devel * Arthur Miller <arthur.miller@live.com> [2021-01-06 18:00]: > As I see, it says "non-free", so what is the problem? Maybe you should review the fact that Debian does designate their non-free repository but that repology.el package will show all other repositories with non-free software, not being designated as non-free by any manner. So your perception does not come from practical and personal use of that software, rather from my example, that was not exhaustive. Example with etoys package, as classified non-free in Debian will not be shown as non-free in Ubuntu: From repology.el output: Ubuntu 12.04 etoys 4.0.2340 multiverse/games jredrejo@debian.org holger@debian.org because the 4th column is name of repository in repology. It need not say "non-free" at all. When clicking on that entry above, user finds following: repo ubuntu_12_04 subrepo precise/multiverse srcname etoys visiblename etoys version 4.0.2340 maintainers jredrejo@debian.org holger@debian.org categories multiverse/games status outdated origversion 4.0.2340-1 > I think it is rather informative to see if a piece of software is free > or not free, that way I can at least avoid non-free ones. As from example above, it does not says nothing about the license at all and thus does not serve to you as user to "recognize if software is free or not-free". That is why you should make better your personal research. > Are we now dogmatically religious where non-free software is forbidden > to even be mentioned as non-free? That smells to me as a slippery slope > into dogmatism and absolutism. GNU.org website does not offer directories of various software where plethora of non-free software package descriptions can be found, researched, and inspected. Why should Emacs do that? It is not aligned with overall goals of GNU. It is matter of freedom and liberty and teaching people free software and not religion. > Is there free-speach if people are not allowed to speak freely about > some subject(s) like mentioning non-free software? That is absolutely not subject of repology.el package. It should be clear that everybody is free to speak about anything. It is not subject of this discussion. GNU is project about free software. It should not offer access to users to search, verify, find references to non-free software. Just think little about that, bakery is about baking bread, it should not (not normally) offer soaps on the bread shelves. Normally it will also not offer milk on the same shelves. Diary factories normally do not produce alcohol in their same factories. GNU.org is about free software, it is not about giving references to non-free software. Yet many non-free software are mentioned on GNU.org website and references are given to free software with similar functionality. If a package like repology.el would say this software ABC is non-free software, which you may replace by using this XYZ free software, that would be useful. If it only offers queries and results from a software database without distinction or without supporting GNU purposes, then it should not be in GNU ELPA. By free speech, it can be on any other server. Why not. > I think the problem for you is that you see that list as a > "recommendation list". If you instead interpret it as a "black > list", than having list of non-free software becomes a useful > listing in terms of things to avoid :-). I have no problem with anything. If it comes in GNU ELPA, I will denounce the package on my website and say why it should not be there, even if it is there. My opinions are personal and not representative of GNU project. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 15:21 ` Jean Louis @ 2021-01-06 16:23 ` Arthur Miller 2021-01-06 18:53 ` Jean Louis 0 siblings, 1 reply; 145+ messages in thread From: Arthur Miller @ 2021-01-06 16:23 UTC (permalink / raw) To: Richard Stallman; +Cc: ams, Dmitry Gutov, ulm, emacs-devel Jean Louis <bugs@gnu.support> writes: > * Arthur Miller <arthur.miller@live.com> [2021-01-06 18:00]: >> As I see, it says "non-free", so what is the problem? > > Maybe you should review the fact that Debian does designate their > non-free repository but that repology.el package will show all other > repositories with non-free software, not being designated as non-free > by any manner. So your perception does not come from practical and > personal use of that software, rather from my example, that was not > exhaustive. No. I don't use repology myself it is true. But if that is the case, then repology.el can fix it in it's gui? No? >> I think it is rather informative to see if a piece of software is free >> or not free, that way I can at least avoid non-free ones. > > As from example above, it does not says nothing about the license at > all and thus does not serve to you as user to "recognize if software > is free or not-free". That is why you should make better your personal > research. If it says non-free than it is quite clear for anyone with a bit of intelligence in their head that it is, well: NON-FREE! >> Are we now dogmatically religious where non-free software is forbidden >> to even be mentioned as non-free? That smells to me as a slippery slope >> into dogmatism and absolutism. > > GNU.org website does not offer directories of various software where > plethora of non-free software package descriptions can be found, > researched, and inspected. And? I don't like haggis; does it mean you should not like it? > It is matter of freedom and liberty and > teaching people free software and not religion. I didn't said that GNU teaches people about religion. I said you are religious dogmatic about software. >> Is there free-speach if people are not allowed to speak freely about >> some subject(s) like mentioning non-free software? > > That is absolutely not subject of repology.el package. It should be > clear that everybody is free to speak about anything. It is not > subject of this discussion. GNU is project about free software. It > should not offer access to users to search, verify, find references to > non-free software. So dogmatic. Why not? It may be useful for people to find references to non-free software so they are not misstankely using them. Isn't it? You know, a black list; sort of. > Just think little about that, bakery is about baking bread, it should > not (not normally) offer soaps on the bread shelves. Normally it will > also not offer milk on the same shelves. Unless owner decides to sell soaps and milk too. For the most part, it is just a practical choice by hardware used, storage space, demand etc. In software world, there are less practical limitations than in physical world. > GNU.org is about free software, it is not about giving references to > non-free software. Yet many non-free software are mentioned on GNU.org > website and references are given to free software with similar > functionality. > > If a package like repology.el would say this software ABC is non-free > software, which you may replace by using this XYZ free software, that > would be useful. If it only offers queries and results from a software > database without distinction or without supporting GNU purposes, then > it should not be in GNU ELPA. You have so little faith in other human beings to think with their own heads. However I don't think everyone is happy with decisions being made for them. Some people prefer liberty to decide for themselves, otherwise they might feel oppressed. Freedom and liberty is letting people decide for themselves. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 16:23 ` Arthur Miller @ 2021-01-06 18:53 ` Jean Louis 2021-01-06 19:26 ` Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 145+ messages in thread From: Jean Louis @ 2021-01-06 18:53 UTC (permalink / raw) To: Arthur Miller; +Cc: ulm, ams, emacs-devel, Richard Stallman, Dmitry Gutov * Arthur Miller <arthur.miller@live.com> [2021-01-06 19:24]: > > As from example above, it does not says nothing about the license at > > all and thus does not serve to you as user to "recognize if software > > is free or not-free". That is why you should make better your personal > > research. > If it says non-free than it is quite clear for anyone with a bit of > intelligence in their head that it is, well: NON-FREE! Try using it yourself. Since I gave you my last example, I did not get impression that you improved your perception. This is because you did not try it. My conclusion is that it does not say for every piece of software that it is non-free. It is probably only for those software from Debian, that it gives the name of repository in the fourth column and Debian keeps name of repository "non-free". Repology.org server provides references to software packages from plethora of repositories. Other repositories may not name the repository "non-free", so you may not easily distinguish about that. And, I also gave example that package information may not show at all which license is used by specific package. Sometimes it may show, sometimes not. Take for example the proprietary black list by the fully free Parabola GNU/Linux distribution: https://git.parabola.nu/blacklist.git/plain/blacklist.txt and then use repology.el package to search for those packages. Then try searching for a popular non-free browser such as "Opera" You may find an entry like this: SlackBuilds network/opera-developer 74.0.3890.0 network edps.mundognu@gmail.com where it gives following information: repo slackbuilds srcname network/opera-developer visiblename network/opera-developer version 74.0.3890.0 maintainers edps.mundognu@gmail.com downloads https://download1.operacdn.com/pub/opera-developer/74.0.3890.0/linux/opera-developer_74.0.3890.0_amd64.deb www https://www.opera.com/ categories network status ignored origversion - And in such information there is hyperlink on how to download non-free software. Nothing says if software is free or not. This is becuse SlackBuilds unethical repository probably does not provide license information on software they package, including proprietary software. If however, user clocks on the entry like this: nixpkgs unstable opera 68.0.3618.63 - fallback-mnt-nix@repology then one can get some information as the nixpkgs unethical repository, does provide information that they are distributing proprietary software, they mention it as "Unfree": repo nix_unstable name opera visiblename opera version 68.0.3618.63 maintainers fallback-mnt-nix@repology licenses Unfree www https://www.opera.com/ summary Web browser status outdated origversion - Other unethical repository like Solus would spit out result by repology.el like this: repo solus srcname opera-stable binname opera-stable visiblename opera-stable version 73.0.3856.329 maintainers harveydevel@gmail.com licenses Distributable www https://www.opera.com/ summary The Opera browser brings you more speed, more discoveries and more safety on the web - all for free categories network.web.browser status newest origversion - "Distributable" is vague and does not say really what license it is, but I do ensure you that Opera is proprietary software. And so on, and so on. By putting repology.el into GNU ELPA, GNU software like Emacs will become a good reference to unethical software repositories promoting among proprietary software. > > It is matter of freedom and liberty and > > teaching people free software and not religion. > I didn't said that GNU teaches people about religion. I said you are > religious dogmatic about software. Who I am, or how I am is not subject of this. I do need to conform to yours or anybody's standards or classes of society. Subject is the Emacs package repology.el and if inclusion into GN ELPA is aligned with GNU purposes. I am free software user and cannot recommend any proprietary software to any party, so I do not recommend that GNU Emacs in official GNU repository becomes a platform to promote proprietary software packages. And I can hardly understand why you promote such view point. People reading this mailing list shall know that GNU Emacs is about free software. Attempt to promote proprietary software by including repology.el in GNU ELPA is confusing free software users reading this mailing list. So if you wish to promote proprietary software just find some other platform, but not GNU.org. You could for example open up your website and open up your own ELPA repository and include repology.el and provide access to references on proprietary software. It would be less typing then what we discuss here. I do think that attempt to include the repology.el is the attempt to make better advertising for the unethical website repology.org Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 18:53 ` Jean Louis @ 2021-01-06 19:26 ` Eli Zaretskii 2021-01-06 21:18 ` Alfred M. Szmidt ` (2 more replies) 2021-01-06 20:36 ` Arthur Miller 2021-01-07 7:49 ` Richard Stallman 2 siblings, 3 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-06 19:26 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Wed, 6 Jan 2021 21:53:08 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: ulm@gentoo.org, ams@gnu.org, emacs-devel@gnu.org, > Richard Stallman <rms@gnu.org>, Dmitry Gutov <dgutov@yandex.ru> > > "Distributable" is vague and does not say really what license it is, > but I do ensure you that Opera is proprietary software. > > And so on, and so on. > > By putting repology.el into GNU ELPA, GNU software like Emacs will > become a good reference to unethical software repositories promoting > among proprietary software. Showing information about a package and a link to download it is a far cry from "promoting" it. Suppose I want to download a potentially non-free package to study its code, or even just to understand with what kind of license it is distributed (since you say the site itself doesn't tell) -- is this "verboten" as well in Jean Louis's interpretation of what a Free Software follower should and shouldn't do? IOW, since when providing _information_ about something means we endorse it? Are we allowed to discuss "the bad guys", or should we pretend they don't exist, for the fear that if we do mention them, that could be interpreted as "promoting" them and their views? If you think for a while, you will realize that this is the kind of slippery slope that leads to the company of the bastards that accused Richard in justifying obnoxious and criminal behavior. "You are either with us or against us." ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 19:26 ` Eli Zaretskii @ 2021-01-06 21:18 ` Alfred M. Szmidt 2021-01-06 21:25 ` Dmitry Gutov ` (2 more replies) 2021-01-07 7:49 ` Richard Stallman 2021-01-07 8:15 ` Jean Louis 2 siblings, 3 replies; 145+ messages in thread From: Alfred M. Szmidt @ 2021-01-06 21:18 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, bugs, ulm, emacs-devel, arthur.miller, dgutov Showing information about a package and a link to download it is a far cry from "promoting" it. Suppose I want to download a potentially non-free package to study its code, or even just to understand with what kind of license it is distributed (since you say the site itself doesn't tell) -- is this "verboten" as well in Jean Louis's interpretation of what a Free Software follower should and shouldn't do? I think the issue here isn't what you, I, or Jean Louis does -- but what the GNU project does. The GNU project doesn't want to give non-free software the remote changes of success, so mentioning or linking to it unless it is very well known would be working against its own goals. This is all written down in the GNU coding standards, what GNU project should or shouldn't do, in the now so overly quoted section 'References to Non-Free Software and Documentation'. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 21:18 ` Alfred M. Szmidt @ 2021-01-06 21:25 ` Dmitry Gutov 2021-01-07 7:47 ` Richard Stallman 2021-01-07 8:54 ` Jean Louis 2021-01-07 14:07 ` Eli Zaretskii 2 siblings, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-06 21:25 UTC (permalink / raw) To: Alfred M. Szmidt, Eli Zaretskii Cc: ulm, emacs-devel, arthur.miller, bugs, rms On 06.01.2021 23:18, Alfred M. Szmidt wrote: > The GNU project doesn't want to give non-free software the remote > changes of success, so mentioning or linking to it unless it is very > well known would be working against its own goals. This is all > written down in the GNU coding standards, what GNU project should or > shouldn't do, in the now so overly quoted section 'References to > Non-Free Software and Documentation'. If your interpretation is right (and I'm not sure it is), think this kind of "ostrich" approach to the adversary seems like the most puzzling part of the GNU policy. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 21:25 ` Dmitry Gutov @ 2021-01-07 7:47 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-07 7:47 UTC (permalink / raw) To: Dmitry Gutov; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, eliz [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > If your interpretation is right (and I'm not sure it is), think this > kind of "ostrich" approach to the adversary seems like the most puzzling > part of the GNU policy. This is a tricky trade-off between various disadvantages, so I think debating it would be a big time sink. If your judgment is different from mine, so be it. If someone has a constructive suggestion for a change in this policy, please send it to me personally. It is a tangent on this list. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 21:18 ` Alfred M. Szmidt 2021-01-06 21:25 ` Dmitry Gutov @ 2021-01-07 8:54 ` Jean Louis 2021-01-07 14:07 ` Eli Zaretskii 2 siblings, 0 replies; 145+ messages in thread From: Jean Louis @ 2021-01-07 8:54 UTC (permalink / raw) To: Alfred M. Szmidt Cc: rms, ulm, emacs-devel, arthur.miller, dgutov, Eli Zaretskii * Alfred M. Szmidt <ams@gnu.org> [2021-01-07 00:19]: > Showing information about a package and a link to download it is a far > cry from "promoting" it. > > Suppose I want to download a potentially non-free package to study its > code, or even just to understand with what kind of license it is > distributed (since you say the site itself doesn't tell) -- is this > "verboten" as well in Jean Louis's interpretation of what a Free > Software follower should and shouldn't do? I do not know now who really said above paragraph, I just wish to make it clear that I do not speak about what "free software follower should do or not" and I never spoke about that, the statements on repology.el were related on what should be put in GNU ELPA, or not, as it does not align to GNU project purposes. That people do what they wish to do is none of my business. So I never said anything ever on what a free software follower should do or not do. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 21:18 ` Alfred M. Szmidt 2021-01-06 21:25 ` Dmitry Gutov 2021-01-07 8:54 ` Jean Louis @ 2021-01-07 14:07 ` Eli Zaretskii 2 siblings, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-07 14:07 UTC (permalink / raw) To: Alfred M. Szmidt; +Cc: rms, bugs, ulm, emacs-devel, arthur.miller, dgutov > From: "Alfred M. Szmidt" <ams@gnu.org> > Cc: bugs@gnu.support, arthur.miller@live.com, rms@gnu.org, > dgutov@yandex.ru, ulm@gentoo.org, emacs-devel@gnu.org > Date: Wed, 06 Jan 2021 16:18:59 -0500 > > Suppose I want to download a potentially non-free package to study its > code, or even just to understand with what kind of license it is > distributed (since you say the site itself doesn't tell) -- is this > "verboten" as well in Jean Louis's interpretation of what a Free > Software follower should and shouldn't do? > > I think the issue here isn't what you, I, or Jean Louis does -- but > what the GNU project does. I was talking from the POV of a GNU maintainer. > The GNU project doesn't want to give non-free software the remote > changes of success, so mentioning or linking to it unless it is very > well known would be working against its own goals. So you are basically saying that no GNU package can ever help me find out information about potentially non-free software? Looking for such information is something I as a GNU maintainer need to do almost every day: someone proposes or mentions an Emacs package or a program that can be useful with Emacs, and the first things I want/need to find out are what kind of package is that? in what language is it written and what OSes it supports? what is its license? does it rely on other packages, and if so, what are their implementations and licenses? You are in effect saying that no GNU package can ever help me with these tasks, except if I'm looking for info about a Free Software package, because divulging any information about a non-free package means "promoting" it? That is a very strange and radical interpretation of "promotion", one that hurts our own cause by preventing me from quickly and reliably answering the above basic questions about any software package I ever come across. > This is all written down in the GNU coding standards, what GNU > project should or shouldn't do, in the now so overly quoted section > 'References to Non-Free Software and Documentation'. Some relevant quotes from that section: A GNU program should not recommend, promote, or grant legitimacy to the use of any non-free program. No problem here. However, you should give only the necessary information to help those who already use the non-free program to use your program with it—don’t give, or refer to, any further information about the proprietary program, and don’t imply that the proprietary program enhances your program, or that its existence is in any way a good thing. A somewhat different context not really relevant for our discussion, but still: no problem here, either. This text means that providing the basic information about a program is OK, as long as we don't give any impression that we endorse it or think that it is helping the users in any way. Referring to a web site that describes or recommends a non-free program is promoting that program, so please do not make links to (or mention by name) web sites that contain such material. I guess you mean this text, specifically the "describes" part (the "recommends" part is fine, IMO). I think interpreting the "describes" part of this text literally, specifically when discussing packages such as repology.el, is a mistake, which actually interferes with GNU maintainers' job of quickly and reliably identifying software that is non-free or otherwise problematic to our cause. The ability to find and study the code of any package is also an important method of figuring out what the package really is and does; a literal interpretation of the above text when applied to the current case is thus also a mistake, IMO. I wish the above text would make it more clear how to interpret it in cases like this one. You should not refer to AT&T’s web site if that recommends AT&T’s non-free software packages; you should not refer to a page p that links to AT&T’s site presenting it as a place to get some non-free program, because that part of the page p itself recommends and legitimizes the non-free program. I see no problem here, either: repology.org doesn't promote or legitimize any of the packages whose information it records. In sum, the text of that section in GSoC clearly wants to prevent any recommendation or endorsement or favorite description of non-free software, so I think its interpretation as precluding the display of _any_ information of such software, specifically the basics: where to find it and who maintains it -- such interpretation is a mistake, and the text in GSoC should be made clearer in that regard. Maybe we should continue this discussion on another, more suitable GNU list. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 19:26 ` Eli Zaretskii 2021-01-06 21:18 ` Alfred M. Szmidt @ 2021-01-07 7:49 ` Richard Stallman 2021-01-07 11:41 ` Dmitry Gutov 2021-01-07 14:24 ` Eli Zaretskii 2021-01-07 8:15 ` Jean Louis 2 siblings, 2 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-07 7:49 UTC (permalink / raw) To: Eli Zaretskii; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Suppose I want to download a potentially non-free package to study its > code, or even just to understand with what kind of license it is > distributed (since you say the site itself doesn't tell) -- is this > "verboten" as well in Jean Louis's interpretation of what a Free > Software follower should and shouldn't do? The GNU Project would not criticize anyone for that. Indeed, we don't generally criticize users for running nonfree programs. And we don't claim the power to "forbid" anything (except for GPL violations). You're condemning things which don't have to do with us. The issue at hand is not about what users are allowed to do. And Jean's message was not about what users are allowed to do. We are talking about what WE should, and shouldn't, say to the public in Emacs and other GNU packages. If you look once again at the References node, you'll see what this is about. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 7:49 ` Richard Stallman @ 2021-01-07 11:41 ` Dmitry Gutov 2021-01-09 6:39 ` Richard Stallman 2021-01-07 14:24 ` Eli Zaretskii 1 sibling, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-07 11:41 UTC (permalink / raw) To: rms, Eli Zaretskii; +Cc: arthur.miller, ulm, ams, bugs, emacs-devel On 07.01.2021 09:49, Richard Stallman wrote: > We are > talking about what WE should, and shouldn't, say to the public in > Emacs and other GNU packages. The first question we asked is whether publishing a license-agnostic package working off an automatically-generated database based on the repositories of all the GNU/Linux and BSD distros out there constitutes "saying" something "to the public". ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 11:41 ` Dmitry Gutov @ 2021-01-09 6:39 ` Richard Stallman 2021-01-09 10:50 ` Dmitry Gutov 0 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-09 6:39 UTC (permalink / raw) To: Dmitry Gutov; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, eliz [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > The first question we asked is whether publishing a license-agnostic > package working off an automatically-generated database based on the > repositories of all the GNU/Linux and BSD distros out there constitutes > "saying" something "to the public". For this purpose, what matters is whether this is a way of telling people about packages. See the node References. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-09 6:39 ` Richard Stallman @ 2021-01-09 10:50 ` Dmitry Gutov 0 siblings, 0 replies; 145+ messages in thread From: Dmitry Gutov @ 2021-01-09 10:50 UTC (permalink / raw) To: rms; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, eliz On 09.01.2021 08:39, Richard Stallman wrote: > > The first question we asked is whether publishing a license-agnostic > > package working off an automatically-generated database based on the > > repositories of all the GNU/Linux and BSD distros out there constitutes > > "saying" something "to the public". > > For this purpose, what matters is whether this is a way of telling people > about packages. See the node References. Well, I posit that this project is *not* a way that people discover new packages. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 7:49 ` Richard Stallman 2021-01-07 11:41 ` Dmitry Gutov @ 2021-01-07 14:24 ` Eli Zaretskii 1 sibling, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-07 14:24 UTC (permalink / raw) To: rms; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov > From: Richard Stallman <rms@gnu.org> > Cc: bugs@gnu.support, ulm@gentoo.org, emacs-devel@gnu.org, > ams@gnu.org, arthur.miller@live.com, dgutov@yandex.ru > Date: Thu, 07 Jan 2021 02:49:19 -0500 > > > Suppose I want to download a potentially non-free package to study its > > code, or even just to understand with what kind of license it is > > distributed (since you say the site itself doesn't tell) -- is this > > "verboten" as well in Jean Louis's interpretation of what a Free > > Software follower should and shouldn't do? > > The GNU Project would not criticize anyone for that. > Indeed, we don't generally criticize users for running nonfree programs. > And we don't claim the power to "forbid" anything (except for GPL violations). > You're condemning things which don't have to do with us. > > The issue at hand is not about what users are allowed to do. We are mis-communicating: I was talking about myself wearing the Emacs maintainer hat. See my other messages in this thread. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 19:26 ` Eli Zaretskii 2021-01-06 21:18 ` Alfred M. Szmidt 2021-01-07 7:49 ` Richard Stallman @ 2021-01-07 8:15 ` Jean Louis 2021-01-07 14:37 ` Eli Zaretskii 2 siblings, 1 reply; 145+ messages in thread From: Jean Louis @ 2021-01-07 8:15 UTC (permalink / raw) To: Eli Zaretskii Cc: rms, Jean Louis, ulm, emacs-devel, ams, arthur.miller, dgutov * Eli Zaretskii <eliz@gnu.org> [2021-01-06 22:27]: > > Date: Wed, 6 Jan 2021 21:53:08 +0300 > > From: Jean Louis <bugs@gnu.support> > > Cc: ulm@gentoo.org, ams@gnu.org, emacs-devel@gnu.org, > > Richard Stallman <rms@gnu.org>, Dmitry Gutov <dgutov@yandex.ru> > > > > "Distributable" is vague and does not say really what license it is, > > but I do ensure you that Opera is proprietary software. > > > > And so on, and so on. > > > > By putting repology.el into GNU ELPA, GNU software like Emacs will > > become a good reference to unethical software repositories promoting > > among proprietary software. > > Showing information about a package and a link to download it is a far > cry from "promoting" it. To promote means to contribute to the progress or growth of, in one definition, and in other it means to make publicity for something. Reference comes from Wordnet dictionary. repology.el is promoting software packages including many non-free software packages. You may have different opinion on what promoting means. I don't agree it is not promoting. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 8:15 ` Jean Louis @ 2021-01-07 14:37 ` Eli Zaretskii 0 siblings, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-07 14:37 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Thu, 7 Jan 2021 11:15:16 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: Jean Louis <bugs@gnu.support>, arthur.miller@live.com, > rms@gnu.org, ams@gnu.org, dgutov@yandex.ru, ulm@gentoo.org, > emacs-devel@gnu.org > > To promote means to contribute to the progress or growth of, in one > definition, and in other it means to make publicity for > something. repology.org does neither of these. It provides basic information about each package, and doesn't state any opinion on them, FAICT. It lets you judge that. That's neither promotion nor advancement nor publicity, in any reasonable sense of these words relevant to this discussion. > repology.el is promoting software packages including many non-free > software packages. I disagree. It allows me to quickly find basic information about a package, which is important in my job as an Emacs maintainer. I explained in my other messages why this is important and why I do it almost every day. > You may have different opinion on what promoting means. I don't agree > it is not promoting. You are entitled to your views, but here we discuss what Emacs as a project should do. That cannot be based on your or mine personal views. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 18:53 ` Jean Louis 2021-01-06 19:26 ` Eli Zaretskii @ 2021-01-06 20:36 ` Arthur Miller 2021-01-07 7:48 ` Richard Stallman 2021-01-07 7:49 ` Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: Arthur Miller @ 2021-01-06 20:36 UTC (permalink / raw) To: Richard Stallman; +Cc: ams, emacs-devel, ulm, Dmitry Gutov Jean Louis <bugs@gnu.support> writes: > * Arthur Miller <arthur.miller@live.com> [2021-01-06 19:24]: >> > As from example above, it does not says nothing about the license at >> > all and thus does not serve to you as user to "recognize if software >> > is free or not-free". That is why you should make better your personal >> > research. >> If it says non-free than it is quite clear for anyone with a bit of >> intelligence in their head that it is, well: NON-FREE! > > Try using it yourself. Since I gave you my last example, I did not get > impression that you improved your perception. This is because you did > not try it. My conclusion is that it does not say for every piece of > software that it is non-free. It is probably only for those software > from Debian, that it gives the name of repository in the fourth column > and Debian keeps name of repository "non-free". Repology.org server > provides references to software packages from plethora of > repositories. Other repositories may not name the repository > "non-free", so you may not easily distinguish about that. And, I also > gave example that package information may not show at all which > license is used by specific package. Sometimes it may show, sometimes > not. > > Take for example the proprietary black list by the fully free Parabola > GNU/Linux distribution: > https://git.parabola.nu/blacklist.git/plain/blacklist.txt > > and then use repology.el package to search for those packages. > > Then try searching for a popular non-free browser such as "Opera" > > You may find an entry like this: > > SlackBuilds network/opera-developer 74.0.3890.0 network > edps.mundognu@gmail.com > > where it gives following information: > > repo slackbuilds > srcname network/opera-developer > visiblename network/opera-developer > version 74.0.3890.0 > maintainers edps.mundognu@gmail.com > downloads https://download1.operacdn.com/pub/opera-developer/74.0.3890.0/linux/opera-developer_74.0.3890.0_amd64.deb > www https://www.opera.com/ > categories network > status ignored > origversion - > > And in such information there is hyperlink on how to download non-free > software. > > Nothing says if software is free or not. > > This is becuse SlackBuilds unethical repository probably does not > provide license information on software they package, including > proprietary software. > > If however, user clocks on the entry like this: > > nixpkgs unstable opera 68.0.3618.63 - > fallback-mnt-nix@repology > > then one can get some information as the nixpkgs unethical repository, > does provide information that they are distributing proprietary > software, they mention it as "Unfree": > > repo nix_unstable > name opera > visiblename opera > version 68.0.3618.63 > maintainers fallback-mnt-nix@repology > licenses Unfree > www https://www.opera.com/ > summary Web browser > status outdated > origversion - > > Other unethical repository like Solus would spit out result by > repology.el like this: > > repo solus > srcname opera-stable > binname opera-stable > visiblename opera-stable > version 73.0.3856.329 > maintainers harveydevel@gmail.com > licenses Distributable > www https://www.opera.com/ > summary The Opera browser brings you more speed, more discoveries and more safety on the web - all for free > categories network.web.browser > status newest > origversion - > > "Distributable" is vague and does not say really what license it is, > but I do ensure you that Opera is proprietary software. > > And so on, and so on. > > By putting repology.el into GNU ELPA, GNU software like Emacs will > become a good reference to unethical software repositories promoting > among proprietary software. > >> > It is matter of freedom and liberty and >> > teaching people free software and not religion. >> I didn't said that GNU teaches people about religion. I said you are >> religious dogmatic about software. > > Who I am, or how I am is not subject of this. I do need to conform to > yours or anybody's standards or classes of society. Ok. Fair enough; as long as you don't demand other people to live up to your standards. I am affraid by stigmatizing people for running some software you are actually indirectly demanding them to live up to your standards. (btw - I think you ment "I do not need ..." :-)) > Subject is the Emacs package repology.el and if inclusion into GN ELPA > is aligned with GNU purposes. I am free software user and cannot > recommend any proprietary software to any party, so I do not recommend > that GNU Emacs in official GNU repository becomes a platform to > promote proprietary software packages. And I can hardly understand why > you promote such view point. People reading this mailing list shall > know that GNU Emacs is about free software. Since you like dictionaries a lot, maybe you should look up word "information" and word "promotion" in some. They are two different things. I am not promoting non-free software, but I am very pragmatic person. As a curiosa, about me, I even went in a political party to promote actually free software; because I thought we could save A LOTS of taxpayers money in the long run, and could make the world a better place if we invested in free software isntead of sending money out of the contrey to Microsoft or Apple or other big tech Co:s. However dogmaticism and stigmaticism has never proven to be useful in the long run. On contrary it is unproductive and potentially harmful. It holds for every aspect of human life. So is neither ultra-radicalism, it has tendency to alienate people. > Attempt to promote proprietary software by including repology.el in > GNU ELPA is confusing free software users reading this mailing list. See above about dictionary. As a curiosa, I wonder what do you think, how much of medical software that powers life-holding machines in hospitals is *Free*? Should we erase all those chips and hardrives? What do you think about *that* unethical software? Do we have alternative? I really wish nobody ever gets into a respiratory machine, but those that end up there are probably thankful for whatever software runs it. Are those implicit users of "unethical softare" suddenly "unethical people" because they have no choice? Is it unethical to not jump in a lake and save a drowbing persons life if you can't swim? Pesonally, I wish we had only free software in this world; but until we have, I am affraid a people in that circumstance are thankful to have whatever there is. And yes, I agree repology could list the license along their tags and include license category to search/filter for, at least in their "Advanced ..." dialogue. Now when I see it I wonder even for whom is it useful, on first sight it does not even seem very useful, I don't really know. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 20:36 ` Arthur Miller @ 2021-01-07 7:48 ` Richard Stallman 2021-01-07 16:53 ` Arthur Miller 0 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-07 7:48 UTC (permalink / raw) To: Arthur Miller; +Cc: ams, dgutov, ulm, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Since you like dictionaries a lot, maybe you should look up word > "information" and word "promotion" in some. They are two different > things. The two are not the same thing, but providing information about something often has the effect of promoting it. The node References in the GNU Coding standards explains the relationship, including its subtleties. > However dogmaticism and stigmaticism has never proven to be useful in > the long run. On contrary it is unproductive and potentially harmful. It > holds for every aspect of human life. Maybe so, but what the node References actually says is not dogmatic. It also does not criticize anyone. It merely states our policy about how to handle such issues. > So is neither ultra-radicalism, it has tendency to alienate people. I agree, but we are not as radical as you're saying. > As a curiosa, I wonder what do you think, how much of medical software > that powers life-holding machines in hospitals is *Free*? Should we > erase all those chips and hardrives? What do you think about *that* > unethical software? Does anyone here advocate that? I don't. I understand that you feel offended. But responding to that by fighting "back" will only increase hostility. Someone else will fight "back" by attacking you. Please, everyone, stop attacking other people. If you can't stay calm, stay quiet. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 7:48 ` Richard Stallman @ 2021-01-07 16:53 ` Arthur Miller 2021-01-14 5:21 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Arthur Miller @ 2021-01-07 16:53 UTC (permalink / raw) To: Richard Stallman; +Cc: ams, dgutov, ulm, emacs-devel Richard Stallman <rms@gnu.org> writes: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > Since you like dictionaries a lot, maybe you should look up word > > "information" and word "promotion" in some. They are two different > > things. > > The two are not the same thing, but providing information about > something often has the effect of promoting it. I think personal judgement here is very important. Providing information about attrocities of the WWII has informational value to prevent same thing from hapening again. Yet I have also seen (and even met) people how are actually symptazing with the nazis rather then the offers (I am speaking of ultra-right neo-nazis). Nobody in their clear mind would see information about concentraion camps as a promotion. Yet some idiots treat it that way. The point of that ugly illustration is that value of the information is in the eyes of beholders; it is their judgement. I think that people in majority have tendency to choose "the good thing" when given enough information, knowledge and possibility of choice. When we teach kids not to lie or steal we are usually giving them information why it is not good to do so. The possibility of choice is very important too. It is easy to be "good" when one is not hungry and not living under a tree in -10 degree Celsius. I personally don't smoke or drink alkohol. I don't need any religion or law to prohibit me. I just don't think it goes well with the gym and my health. Last year I had maybe three or four glases of wine and I think three beers for the entire year (two of them while visiting Austria - one can't go to Austria and ot drink a glass of good wine or a beer or two). I also see lots of people in the gym that live similar lifes (with very little alkohol, smoke- and drug free). Thus I think that most of people will choose a better option (Free software) when given enough information (education?) and an option. I don't think we need to hide our heads in sand and pretend there is no non-free option. We just need to provide a compelling reason(s) why Free alternative is a better option. Just as illustration, if we educate people that they can do most of things they need with LibreOffice instead of Microsoft Office (which 90% of people probably can), they will not wish to buy it or use it. > The node References in the GNU Coding standards explains the relationship, > including its subtleties. > > > However dogmaticism and stigmaticism has never proven to be useful in > > the long run. On contrary it is unproductive and potentially harmful. It > > holds for every aspect of human life. > > Maybe so, but what the node References actually says is not dogmatic. > It also does not criticize anyone. It merely states our policy > about how to handle such issues. I think it depends on how people interprets it, like everything else in the life. Some people will interpret it dogmatically, some will not. > > > So is neither ultra-radicalism, it has tendency to alienate people. > > I agree, but we are not as radical as you're saying. > > > As a curiosa, I wonder what do you think, how much of medical software > > that powers life-holding machines in hospitals is *Free*? Should we > > erase all those chips and hardrives? What do you think about *that* > > unethical software? > > Does anyone here advocate that? I don't. Why not? It is a tricky question to answer, but I think it is important to have answer on that one. The question arises, if we wish to be consistent, are binary blobs unethical or not? In philosophy we have to be logically consistent. We can't have a rule that applies only sometimes. A rule either apply or don't. > I understand that you feel offended. I am not offended. Maybe it is my way of arguing that sounds to harsh, but personally I am not offended. Like everyone else here, I wish the best for both Emacs, Free software and Free world. I am very pragmatic person, and I believe that goals can be achieved in different ways. There is not one single answer to every problem, i.e. it is important to be flexible just as it is to stay with one's principles. > But responding to that by > fighting "back" will only increase hostility. Someone else will fight > "back" by attacking you. It seems to be a problem of social media and today's internet. Any critique is considered as an attack and people are just digging deeper into trenches. Sorry if I am too harsh on J-Louise. It was a response to J-Louise who adviced and teached earlier how one should read a dictionary when experiencing a trauma, so I thought he would appreciate the reference :-). ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 16:53 ` Arthur Miller @ 2021-01-14 5:21 ` Richard Stallman 2021-01-15 14:52 ` Arthur Miller 0 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-14 5:21 UTC (permalink / raw) To: Arthur Miller; +Cc: ams, dgutov, ulm, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I think personal judgement here is very important. Providing information > about attrocities of the WWII has informational value This is pertinent to the general topic of "providing information" but it is not pertinent to the specific topic, which is providing the information that there is a nonfree program called Foo which does X, Y and Z (which might be something you'd like to do, you being someone who doesn't hesitate to run a nonfree program. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-14 5:21 ` Richard Stallman @ 2021-01-15 14:52 ` Arthur Miller 2021-01-16 5:14 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Arthur Miller @ 2021-01-15 14:52 UTC (permalink / raw) To: Richard Stallman; +Cc: ams, dgutov, ulm, emacs-devel Richard Stallman <rms@gnu.org> writes: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > I think personal judgement here is very important. Providing information > > about attrocities of the WWII has informational value > > This is pertinent to the general topic of "providing information" > but it is not pertinent to the specific topic, which is > providing the information that there is a nonfree program > called Foo which does X, Y and Z (which might be something > you'd like to do, you being someone who doesn't hesitate > to run a nonfree program. Why do you think I don't hesitate to run a nonfree program? :-) I am not arguing for use of non-free programs; I am arguing about importance of having a consistent and sustainable philosophy useful as a set of guiding rules, insted of something that is left to subjective interpretation. So that people one day does not have to go to some emial conversation and check: what RMS did or said about this particular issue. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-15 14:52 ` Arthur Miller @ 2021-01-16 5:14 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-16 5:14 UTC (permalink / raw) To: Arthur Miller; +Cc: ams, emacs-devel, ulm, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > This is pertinent to the general topic of "providing information" > > but it is not pertinent to the specific topic, which is > > providing the information that there is a nonfree program > > called Foo which does X, Y and Z (which might be something > > you'd like to do, you being someone who doesn't hesitate > > to run a nonfree program. > Why do you think I don't hesitate to run a nonfree program? :-) I don't. I was using "you" to refer to a hypothetical person who doesn't hesitate to run a nonfree program. Maybe the smiley means you understand that. I am not sure. > I am not arguing for use of non-free programs; I am arguing about > importance of having a consistent and sustainable philosophy useful as a > set of guiding rules, insted of something that is left to subjective > interpretation. Requiring a judgment call, requiring interpretation, is not inconsistent. Many criteria that make sense for human judgment cannot be stated in a rigorously objective way. There are points where we _must_ appeal to human judgment because we don't know a batter way. What is the specific point? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-06 18:53 ` Jean Louis 2021-01-06 19:26 ` Eli Zaretskii 2021-01-06 20:36 ` Arthur Miller @ 2021-01-07 7:49 ` Richard Stallman 2021-01-07 9:00 ` Jean Louis ` (2 more replies) 2 siblings, 3 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-07 7:49 UTC (permalink / raw) To: Jean Louis; +Cc: ams, emacs-devel, ulm, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] You've brought us bad news about repology.org. Not only does it include nonfree packages with no effort to avoid them, it fails to provide enough information for us to easily filter them out. I see two ways we could possibly manage to use repology.org in the Free World. * Find a way to distinguish free from nonfree packages. I see two ideas One is to snarf the lists of free packages from Debian and Parabola. Another is to see if free packages list a license that shows they are free. You might have other ideas. * Ask the developer of repology.org to work with us to indicate which packages are free, maybe even provide a way to specify "show me only free packages". Does anyone have another idea? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 7:49 ` Richard Stallman @ 2021-01-07 9:00 ` Jean Louis 2021-01-08 6:21 ` Richard Stallman 2021-01-07 10:55 ` Ulrich Mueller 2021-01-07 15:05 ` [ELPA] New package: repology.el Stefan Monnier 2 siblings, 1 reply; 145+ messages in thread From: Jean Louis @ 2021-01-07 9:00 UTC (permalink / raw) To: Richard Stallman; +Cc: ams, emacs-devel, ulm, arthur.miller, dgutov * Richard Stallman <rms@gnu.org> [2021-01-07 10:50]: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > You've brought us bad news about repology.org. Not only does it include > nonfree packages with no effort to avoid them, it fails to provide > enough information for us to easily filter them out. > > I see two ways we could possibly manage to use repology.org in the > Free World. > > * Find a way to distinguish free from nonfree packages. I see two > ideas One is to snarf the lists of free packages from Debian and > Parabola. Another is to see if free packages list a license that > shows they are free. You might have other ideas. Good way to go is to duplicate repology.org server on other domain and provide package listings from fully free FSF endorsed GNU/Linux distributions or non-GNU fully free OS-es such as Replicant. One other way to go is to ask repology.org to provide access to fully free software so that package repology.el has access to only those packages as provided by fully free FSF endorsed GNU/Linux distribution repositories and those fully free non-GNU OS-es such as Replicant. Then repology.el could be modified to access the API to fully free packages ONLY, as then results would not show any proprietary software. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 9:00 ` Jean Louis @ 2021-01-08 6:21 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-08 6:21 UTC (permalink / raw) To: Jean Louis; +Cc: ams, emacs-devel, ulm, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Good way to go is to duplicate repology.org server on other domain and > provide package listings from fully free FSF endorsed GNU/Linux > distributions or non-GNU fully free OS-es such as Replicant. repology.org is indeed a tangent for emacs-devel, so let's move this also to emacs-tangents. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 7:49 ` Richard Stallman 2021-01-07 9:00 ` Jean Louis @ 2021-01-07 10:55 ` Ulrich Mueller 2021-01-09 6:34 ` Richard Stallman ` (2 more replies) 2021-01-07 15:05 ` [ELPA] New package: repology.el Stefan Monnier 2 siblings, 3 replies; 145+ messages in thread From: Ulrich Mueller @ 2021-01-07 10:55 UTC (permalink / raw) To: Richard Stallman; +Cc: Jean Louis, ulm, emacs-devel, ams, arthur.miller, dgutov >>>>> On Thu, 07 Jan 2021, Richard Stallman wrote: > I see two ways we could possibly manage to use repology.org in the > Free World. > * Find a way to distinguish free from nonfree packages. I see two > ideas One is to snarf the lists of free packages from Debian and > Parabola. Another is to see if free packages list a license that > shows they are free. You might have other ideas. > * Ask the developer of repology.org to work with us to indicate which > packages are free, maybe even provide a way to specify "show me only > free packages". One would first have to define what qualifies as a free package, and the world isn't all black-or-white there. For example, the tarball of org-mode as released by upstream [1] contains Relax-NG schemas [2] distributed under a license that doesn't allow modification. Does that make org-mode a non-free package? The way we handle this in Gentoo is not to install these non-free components by default. Users however have the option to enable their installation if they do two things: a) set a so-called USE flag, and b) explicitly accept these components' license. Another example is the intlfonts package [3], which contains some Tibetan fonts with a non-commercial restriction. Again, Gentoo handles this with a USE flag, so users have to explicitly ask for installation of these non-free fonts. There are many more packages like that, and I don't believe that one could simply divide them into free and non-free by just taking the package name. It will depend on what the distro does when installing them or creating a binary package from them. [1] https://orgmode.org/org-9.4.tar.gz [2] in directory etc/schema/ [3] https://directory.fsf.org/wiki/Intlfonts ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 10:55 ` Ulrich Mueller @ 2021-01-09 6:34 ` Richard Stallman 2021-01-09 21:07 ` Ulrich Mueller 2021-01-20 6:14 ` Richard Stallman 2021-02-16 5:21 ` freedom issues in free software Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-09 6:34 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > One would first have to define what qualifies as a free package, and the > world isn't all black-or-white there. The definition needs interpretation, and we publish interpretations in https://gnu.org/philosophy/free-sw.html. > For example, the tarball of org-mode as released by upstream [1] > contains Relax-NG schemas [2] distributed under a license that doesn't > allow modification. Does that make org-mode a non-free package? It looks like we will have to study the situation and reach a conclusion. > Another example is the intlfonts package [3], which contains some > Tibetan fonts with a non-commercial restriction. That sounds like a bug. Bugs happen, but they do not constitute a fundamental confusion. I will investigate. We're talking about how well it is possible for repology.el to distinguish free packages from nonfree packages on repology.org. The site does not distribute these packages, it only finds out about them by examining them. So I don't think we need to demand that this be 100% accurate. If a few nonfree packages slip by, it is nothing to tear our hair out about. We ought to do make our code effective overall. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-09 6:34 ` Richard Stallman @ 2021-01-09 21:07 ` Ulrich Mueller 2021-01-11 4:46 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-09 21:07 UTC (permalink / raw) To: Richard Stallman Cc: bugs, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov >>>>> On Sat, 09 Jan 2021, Richard Stallman wrote: >> For example, the tarball of org-mode as released by upstream [1] >> contains Relax-NG schemas [2] distributed under a license that doesn't >> allow modification. Does that make org-mode a non-free package? > It looks like we will have to study the situation and reach a > conclusion. >> Another example is the intlfonts package [3], which contains some >> Tibetan fonts with a non-commercial restriction. > That sounds like a bug. Bugs happen, but they do not constitute > a fundamental confusion. I will investigate. These were just meant as examples, and my comment wasn't about these two packages in particular. There are many more such cases of free packages that include some strictly optional non-free files. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-09 21:07 ` Ulrich Mueller @ 2021-01-11 4:46 ` Richard Stallman 2021-01-12 8:24 ` Ulrich Mueller 0 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-11 4:46 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > These were just meant as examples, and my comment wasn't about these two > packages in particular. There are many more such cases of free packages > that include some strictly optional non-free files. These are cases of a problem. Would you please give details so we can investigate and see what kind of problem each one is? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-11 4:46 ` Richard Stallman @ 2021-01-12 8:24 ` Ulrich Mueller 0 siblings, 0 replies; 145+ messages in thread From: Ulrich Mueller @ 2021-01-12 8:24 UTC (permalink / raw) To: Richard Stallman Cc: bugs, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov >>>>> On Mon, 11 Jan 2021, Richard Stallman wrote: > These are cases of a problem. Would you please give details > so we can investigate and see what kind of problem each one is? 1. org-mode installs the following two files: etc/schema/od-schema-v1.2-os.rnc etc/schema/od-manifest-schema-v1.2-os.rnc They can also be found in the Emacs repository: https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/schema Both files are licensed under the following terms: Copyright (c) OASIS Open 2002-2011, 2013. All Rights Reserved. All capitalized terms in the following text have the meanings assigned to them in the OASIS Intellectual Property Rights Policy (the "OASIS IPR Policy"). The full Policy may be found at the OASIS website. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published, and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this section are included on all such copies and derivative works. However, this document itself may not be modified in any way, including by removing the copyright notice or references to OASIS, except as needed for the purpose of developing any document or deliverable produced by an OASIS Technical Committee (in which case the rules applicable to copyrights, as set forth in the OASIS IPR Policy, must be followed) or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The key phrase is "this document itself may not be modified in any way". The files appear to be part of the Open Document standard, but as Relax-NG schemas they are functional data. It was also briefly mentioned in the debian-legal mailing list in 2018: https://lists.debian.org/debian-legal/2018/08/msg00007.html but AFAICS, Debian still distributes the files in their package. 2. As for the GNU Intlfonts package, that one may need a complete audit of all its files. I see some files in the public domain and some with an HPND license notice. Some Tibetan fonts come with the following notice including a non-commercial restriction: 97.1.21 Created by Toru TOMABECHI <Toru.Tomabechi@orient.unil.ch>. The glyphs are taken, using PS2PK and PK2BM, from TibMdxA type 1 font, originally designed by Christopher FYNN <cfynn@sahaja.demon.co.uk>. Slight modification has been made using XMBDFED and glyphs have been re-ordered. Original glyph design: Copyright (C) Christopher FYNN 1993-1994. Many thanks to Chris for kindly permitting its non-commercial use for our implementation. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 10:55 ` Ulrich Mueller 2021-01-09 6:34 ` Richard Stallman @ 2021-01-20 6:14 ` Richard Stallman 2021-01-21 11:09 ` Ulrich Mueller 2021-02-16 5:21 ` freedom issues in free software Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-20 6:14 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > For example, the tarball of org-mode as released by upstream [1] > contains Relax-NG schemas [2] distributed under a license that doesn't > allow modification. Does that make org-mode a non-free package? That is an important question, but I don't know the answer. Can you tell me what a Relax-NG schema is, and what it does? With that information I should be able to understand the issue. > Another example is the intlfonts package [3], which contains some > Tibetan fonts with a non-commercial restriction. It took time for me to reach Handa; he will investigate this. Problems like this are important, and we need to look at them one by one. A distro can fix the problem in various ways, but what we really should aim for is get them fixed upstream. It sounds like you are in a position to report many such problems. Would you like to help with a long-term effort to get such problems fixed upstream? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-20 6:14 ` Richard Stallman @ 2021-01-21 11:09 ` Ulrich Mueller 2021-01-22 6:06 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-21 11:09 UTC (permalink / raw) To: Richard Stallman Cc: bugs, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov >>>>> On Wed, 20 Jan 2021, Richard Stallman wrote: >> For example, the tarball of org-mode as released by upstream [1] >> contains Relax-NG schemas [2] distributed under a license that doesn't >> allow modification. Does that make org-mode a non-free package? > That is an important question, but I don't know the answer. > Can you tell me what a Relax-NG schema is, and what it does? > With that information I should be able to understand the issue. In a nutshell, a Relax-NG schema defines the grammar of an XML document, somewhat similar to a DTD (which is older as a concept). For example, nxml-mode can use such schemas for validation. (Strictly speaking, it uses their compact form RNC, but that's an unimportant detail.) In the concrete case, I believe the RNG schemas were taken from the Open Document standard. It is somewhat understandable that they don't want to allow modified versions of the standard, but that makes these schemas non-free. >> Another example is the intlfonts package [3], which contains some >> Tibetan fonts with a non-commercial restriction. > It took time for me to reach Handa; he will investigate this. Thanks. > Problems like this are important, and we need to look at them one by one. > A distro can fix the problem in various ways, but what we really should > aim for is get them fixed upstream. > It sounds like you are in a position to report many such problems. > Would you like to help with a long-term effort to get such problems > fixed upstream? Sure, I would be happy to help. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-21 11:09 ` Ulrich Mueller @ 2021-01-22 6:06 ` Richard Stallman 2021-01-22 9:43 ` Ulrich Mueller 0 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-22 6:06 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > In the concrete case, I believe the RNG schemas were taken from the Open > Document standard. It is somewhat understandable that they don't want to > allow modified versions of the standard, but that makes these schemas > non-free. In the short term, I think we need to delete them, but we can try asking the committee to liberate the code of those schemas under other names. What role do these particular schemas play in the standard? Are they examples? Are they used by the standards documents? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-22 6:06 ` Richard Stallman @ 2021-01-22 9:43 ` Ulrich Mueller 2021-01-24 6:35 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-22 9:43 UTC (permalink / raw) To: Richard Stallman Cc: bugs, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov >>>>> On Fri, 22 Jan 2021, Richard Stallman wrote: >> In the concrete case, I believe the RNG schemas were taken from the Open >> Document standard. It is somewhat understandable that they don't want to >> allow modified versions of the standard, but that makes these schemas >> non-free. > In the short term, I think we need to delete them, but we can try > asking the committee to liberate the code of those schemas under > other names. > What role do these particular schemas play in the standard? > Are they examples? Are they used by the standards documents? It's not entirely clear to me if they're considered part of the standard. They are referenced in [1] under "Related work", but it also says that "This specification consists of this document as well as the following documents, schemas and ontologies". [1] http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os.html ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-22 9:43 ` Ulrich Mueller @ 2021-01-24 6:35 ` Richard Stallman 2021-01-24 8:34 ` Ulrich Mueller 2021-01-24 10:53 ` Org schemas we talked to be non-free, was: " Jean Louis 0 siblings, 2 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-24 6:35 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > What role do these particular schemas play in the standard? > > Are they examples? Are they used by the standards documents? > It's not entirely clear to me if they're considered part of the > standard. It sounds like they are either examples or part of the standard and we cannot tell which. Is that right? Do users actually use them? > says that "This specification consists of this document as well as the > following documents, schemas and ontologies". I presume that is followed by a list of documents, schemas and ontologies. Could you please send me that list? Without that, I don't see what this implies. > [1] http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os.html I will fetch a copy. Would you please send me (off the list) one of these schemas so I can see what a typical schema looks like? Also, what is the relationship between Org mode and these schemes? How does it use them or operate on them? What does it do with them? What does it do if a document refers to a scheme and the schema is not defined? Do users ever modify the schemas for their own documents? Do they distribute the modified schemas along with their documents? Do users make their own schemas? Do users release their own schemas? Are any user-released schemas free? Do they expect users to actually use these specific schemas, or are they only meant to show what a schema looks like so you can write your own? Do users often use these schemas, or do they usually make their own? All these details of the context are crucial for finding a way to address this problem which won't be too much work for us or too painful for users. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-24 6:35 ` Richard Stallman @ 2021-01-24 8:34 ` Ulrich Mueller 2021-01-25 5:53 ` Richard Stallman 2021-01-24 10:53 ` Org schemas we talked to be non-free, was: " Jean Louis 1 sibling, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-24 8:34 UTC (permalink / raw) To: Richard Stallman Cc: bugs, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov >>>>> On Sun, 24 Jan 2021, Richard Stallman wrote: >> > What role do these particular schemas play in the standard? >> > Are they examples? Are they used by the standards documents? >> It's not entirely clear to me if they're considered part of the >> standard. > It sounds like they are either examples or part of the standard > and we cannot tell which. Is that right? At least I couldn't tell. > Do users actually use them? AFAICS, ox-odt.el uses them together with nxml-mode for auto-validation of OpenDocument files. So they are useful. Interestingly, the docstring of the org-odt-schema-dir variable contains the following note, indicating that the files weren't meant to be packaged: The OASIS schema files are available only in the org's private git repository. It is *not* bundled with GNU ELPA tar or standard Emacs distribution. Still, I think it would be preferable if upstream released them under a free license. >> says that "This specification consists of this document as well as the >> following documents, schemas and ontologies". > I presume that is followed by a list of documents, schemas and ontologies. > Could you please send me that list? Without that, I don't see > what this implies. >> [1] http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os.html > I will fetch a copy. > Would you please send me (off the list) one of these schemas so I can > see what a typical schema looks like? I'll send it off-list. > Also, what is the relationship between Org mode and these schemes? > How does it use them or operate on them? What does it do with them? > What does it do if a document refers to a scheme and the schema is > not defined? See above, they're used by ox-odt.el. AFAICT, nothing catastrophic will happen if a schema is missing, but validation of documents would be no longer possible. > Do users ever modify the schemas for their own documents? > Do they distribute the modified schemas along with their documents? I don't think so. OpenDocument is a standardised format, so modifying its schemas would make little sense for interoperability. > Do users make their own schemas? Do users release their own > schemas? Are any user-released schemas free? Users can create their own schemas for their own types of XML documents (which aren't necessarily related to OpenDocument), and they can release them under any license they want. > Do they expect users to actually use these specific schemas, > or are they only meant to show what a schema looks like > so you can write your own? > Do users often use these schemas, or do they usually make their own? My explanations above should answer these questions. > All these details of the context are crucial for finding a way to > address this problem which won't be too much work for us or too > painful for users. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-24 8:34 ` Ulrich Mueller @ 2021-01-25 5:53 ` Richard Stallman 2021-01-25 6:52 ` Jean Louis 2021-01-25 15:51 ` Dmitry Gutov 0 siblings, 2 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-25 5:53 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] I think I understand the facts of the situation. The OpenDocument schemas are nonfree. One uncertainty remains in my understanding. Are those Schemas a kind of software, or are they some other kind of thing? I think they are software, because they could be modified within an infinite space of possibilities. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 5:53 ` Richard Stallman @ 2021-01-25 6:52 ` Jean Louis 2021-01-25 12:11 ` Fabrice BAUZAC-STEHLY ` (2 more replies) 2021-01-25 15:51 ` Dmitry Gutov 1 sibling, 3 replies; 145+ messages in thread From: Jean Louis @ 2021-01-25 6:52 UTC (permalink / raw) To: rms, Richard Stallman, Ulrich Mueller Cc: ulm, dgutov, ams, arthur.miller, emacs-devel I think, but not sure, that schema is pattern on how documents should be interpreted by software. Without it, certain functions would not work. In my opinion it is one way of programming by pattern and this part of software. In itself it does nothing. It is not just a configuration file or data like list of colors or fonts. I think it is pattern that changes algorithm of software and thus part of software. On January 25, 2021 5:53:04 AM UTC, Richard Stallman <rms@gnu.org> wrote: >[[[ To any NSA and FBI agents reading my email: please consider ]]] >[[[ whether defending the US Constitution against all enemies, ]]] >[[[ foreign or domestic, requires you to follow Snowden's example. ]]] > >I think I understand the facts of the situation. >The OpenDocument schemas are nonfree. > >One uncertainty remains in my understanding. Are those >Schemas a kind of software, or are they some other kind of thing? > >I think they are software, because they could be modified within an >infinite space of possibilities. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 6:52 ` Jean Louis @ 2021-01-25 12:11 ` Fabrice BAUZAC-STEHLY 2021-01-25 15:29 ` Eli Zaretskii 2021-01-27 7:37 ` Richard Stallman 2 siblings, 0 replies; 145+ messages in thread From: Fabrice BAUZAC-STEHLY @ 2021-01-25 12:11 UTC (permalink / raw) To: Jean Louis; +Cc: rms, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov Jean Louis <bugs@gnu.support> writes: > I think, but not sure, that schema is pattern on how documents should > be interpreted by software. Without it, certain functions would not > work. In my opinion it is one way of programming by pattern and this > part of software. I happen to have worked on software that works with XML and which provides an XML schema with it. I think the XML schemas (be them Relax-NG or XML Schema Definition (XSD)) only indicate constraints in a tree of XML elements. For example, we can say the following set of constraints in either Relax-NG syntax or XSD syntax: Each <a> element must contain exactly one <b> element, followed by at least 2 <c> elements. Each <b> element can have an optional attribute "name" which value must be boolean, and must contain exactly one <c> element. Each <c> element must contain a string. It is somewhat similar to constraints I impose on the argument of my defun, e.g. "it must be a list with any number of elements, but each element must be a number or a list of strings" So for me an XML schema is something similar to a BNF grammar definition. Why would a schema need to be modified? I think there can be a lot of reasons. There may be several ways to represent the constraints, so another way might be more readable and it would then be a good idea to change it. Or, maybe there is a new version of the schema syntax and we would like to upgrade a schema with the new features of the new version which makes the schema more straightforward to read. Or something in the schema is not sufficiently constrained, so that users using a schema-verification tool would provide values that are not understood by a program, and we would need to change the schema so that users are warned that the thing they are putting in is not right. Or, a program now has extended capabilities which were not envisioned when the schema was written, so we would like to accept more things in XML and for that we would need to change the schema. Concerning the XML-processing software I have worked on, the schema had to be changed from version to version (it was delivered with each version) to cope with new needs and extend the features. It was a schema dedicated to this tool, not a standard supposed to be unique for many tools. But I think even a standard schema should not prevent an implementation to be able to support extensions of the standard schema to add more features. The implementation should be able to not only process XML files that comply to the standard schema, but also XML files that have additions that improve the functionality of the implementation. I don't know for sure whether schemas can be written in a way that never prevent extensions, such as: "each <a> should have one <b> child, but it is allowed to also put any other child under <a>". But even if there can be such very permissive schemas, we might want the program to come with its alternative schema (with additional features and XML elements and XML attributes) to ease data editing by users, because schemas are also used by XML editors to help the user fill in the blanks. However, a schema indicates types in a (possibly recursive) data structure, but does not otherwise influence how the data are processed. -- Fabrice Bauzac-Stehly PGP 01EEACF8244E9C14B551C5256ADA5F189BD322B6 old PGP 015AE9B25DCB0511D200A75DE5674DEA514C891D ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 6:52 ` Jean Louis 2021-01-25 12:11 ` Fabrice BAUZAC-STEHLY @ 2021-01-25 15:29 ` Eli Zaretskii 2021-01-27 7:37 ` Richard Stallman 2 siblings, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 15:29 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Mon, 25 Jan 2021 06:52:46 +0000 > From: Jean Louis <bugs@gnu.support> > Cc: ulm@gentoo.org, dgutov@yandex.ru, ams@gnu.org, arthur.miller@live.com, > emacs-devel@gnu.org > > I think, but not sure, that schema is pattern on how documents should be interpreted by software. Without it, certain functions would not work. In my opinion it is one way of programming by pattern and this part of software. > > In itself it does nothing. > > It is not just a configuration file or data like list of colors or fonts. I think it is pattern that changes algorithm of software and thus part of software. Therefore, it is not software. (And no, it doesn't change the algorithms.) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 6:52 ` Jean Louis 2021-01-25 12:11 ` Fabrice BAUZAC-STEHLY 2021-01-25 15:29 ` Eli Zaretskii @ 2021-01-27 7:37 ` Richard Stallman 2 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-27 7:37 UTC (permalink / raw) To: Jean Louis; +Cc: ulm, dgutov, ams, arthur.miller, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > In itself it does nothing. > It is not just a configuration file or data like list of colors or > fonts. I think it is pattern that changes algorithm of software > and thus part of software. It is now clear that you're right. However, if we were to include a list of colors or fonts _in a GNU package_ we would insist that the list be free. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 5:53 ` Richard Stallman 2021-01-25 6:52 ` Jean Louis @ 2021-01-25 15:51 ` Dmitry Gutov 2021-01-25 17:59 ` Jean Louis 2021-01-26 5:59 ` Richard Stallman 1 sibling, 2 replies; 145+ messages in thread From: Dmitry Gutov @ 2021-01-25 15:51 UTC (permalink / raw) To: rms, Ulrich Mueller; +Cc: ams, arthur.miller, bugs, emacs-devel On 25.01.2021 07:53, Richard Stallman wrote: > One uncertainty remains in my understanding. Are those > Schemas a kind of software, or are they some other kind of thing? > > I think they are software, because they could be modified within an > infinite space of possibilities. A picture can be modified within an infinite space of possibilities. A book can be modified. A mathematical equation can be modified. None of the above are software. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 15:51 ` Dmitry Gutov @ 2021-01-25 17:59 ` Jean Louis 2021-01-25 18:21 ` Dmitry Gutov ` (3 more replies) 2021-01-26 5:59 ` Richard Stallman 1 sibling, 4 replies; 145+ messages in thread From: Jean Louis @ 2021-01-25 17:59 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Ulrich Mueller, ams, rms, arthur.miller, emacs-devel * Dmitry Gutov <dgutov@yandex.ru> [2021-01-25 18:52]: > On 25.01.2021 07:53, Richard Stallman wrote: > > One uncertainty remains in my understanding. Are those > > Schemas a kind of software, or are they some other kind of thing? > > > > I think they are software, because they could be modified within an > > infinite space of possibilities. > > A picture can be modified within an infinite space of possibilities. A book > can be modified. A mathematical equation can be modified. > > None of the above are software. Software From Wordnet dictionary: * Overview of noun software The noun software has 1 sense (no senses from tagged texts) 1. software, software program, computer software, software system, software package, package -- ((computer science) written programs or procedures or rules and associated documentation pertaining to the operation of a computer system and that are stored in read/write memory; "the market for software is expected to expand") From Wikipedia: Software is a collection of instructions and data that tell the computer how to work. If schema is data it is part of software together with instructions. If schema represents rules how to produce digital document it is part of software. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 17:59 ` Jean Louis @ 2021-01-25 18:21 ` Dmitry Gutov 2021-01-26 3:40 ` Jean Louis 2021-01-26 6:10 ` Richard Stallman 2021-01-25 19:33 ` Eli Zaretskii ` (2 subsequent siblings) 3 siblings, 2 replies; 145+ messages in thread From: Dmitry Gutov @ 2021-01-25 18:21 UTC (permalink / raw) To: rms, Ulrich Mueller, emacs-devel, ams, arthur.miller On 25.01.2021 19:59, Jean Louis wrote: > If schema is data it is part of software together with instructions. > > If schema represents rules how to produce digital document it is part > of software. We don't consider the bitmap files in the Emacs distribution to be software. And yet, they contain the "rules" to produce each individual picture on the screen. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 18:21 ` Dmitry Gutov @ 2021-01-26 3:40 ` Jean Louis 2021-01-26 6:10 ` Richard Stallman 1 sibling, 0 replies; 145+ messages in thread From: Jean Louis @ 2021-01-26 3:40 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Ulrich Mueller, ams, rms, arthur.miller, emacs-devel * Dmitry Gutov <dgutov@yandex.ru> [2021-01-25 21:30]: > On 25.01.2021 19:59, Jean Louis wrote: > > If schema is data it is part of software together with instructions. > > > > If schema represents rules how to produce digital document it is part > > of software. > > We don't consider the bitmap files in the Emacs distribution to be software. > > And yet, they contain the "rules" to produce each individual picture on the > screen. So what is "software" for you? Maybe you use different definition. If we speak of software it is anything that one cannot physically by using hands touch, assemble, disassemble, and repair. It is related and opposite to hardware. It is data in any form that is stored digitally on hardware. Bitmap files and program are software. They are not hardware. In general, if one wants to know if something is software there is simple test: Is it hardware? If it is not hardware, but is stored on hardware memory devices then it is software. It can be a picture of course. It could be picture alone without any program to use that picture. Software is what is not hardware. If some schema is used to verify document in any manner that is definitely data and it is there for a program to process that data. Program’s function depends on that data, thus data becomes part of program. Such data can be optional. Program’s function can be optional. That does not make the data less part of specific software. It can be part of various other software packages. Software as general term is that data inside memory that is not hardware. Be it executable program or not. Software package is what is bundled together to make the whole program function. Program alone is software, but in example of Emacs there are many programs bundled together and they do not constitute plural of software such as Emacs softwareS, rather all Emacs package together is called software. All digital information coming in the Emacs package is "software". That is how all software packages in the world are marketed, sold, purchased, referred to. "Software" and "program" are different words with different definitions. Data may be separate from programs, but any digital data on computer is always processed by some programs. Any digital data is software because it is not hardware but is stored on hardware devices. So any picture, any type of file, or text is software. Any type of file is processed by program such as operating system to at least display that such file exists on hardware. One need not run the file. The file need not have specific procedure or set of instructions, thus it need not be program to be software. It is processed by software sooner or later. Software is what can be processed by CPU and is stored digitally. In my opinion, a computer program or other digital data written or printed on paper does not represent software. It is printout of software. But such printout does represent a computer program. One could call it "software" but I think that is mistaken as such cannot be directly run by CPU and it is not digitally stored. So such are not software for me. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 18:21 ` Dmitry Gutov 2021-01-26 3:40 ` Jean Louis @ 2021-01-26 6:10 ` Richard Stallman 2021-01-26 13:42 ` Stefan Monnier 1 sibling, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-26 6:10 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, ams, arthur.miller, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > We don't consider the bitmap files in the Emacs distribution to be software. Indeed, pictures are not software. But we treat pictures just like software as regards our ethical criteria for licensing the material in a GNU package. > And yet, they contain the "rules" to produce each individual picture on > the screen. That stretches the meaning of "rules", but we don't need to argue about it; for the topic at hand, it makes no difference. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-26 6:10 ` Richard Stallman @ 2021-01-26 13:42 ` Stefan Monnier 2021-01-27 18:32 ` Jean Louis 0 siblings, 1 reply; 145+ messages in thread From: Stefan Monnier @ 2021-01-26 13:42 UTC (permalink / raw) To: Richard Stallman; +Cc: ulm, emacs-devel, ams, arthur.miller, Dmitry Gutov > > We don't consider the bitmap files in the Emacs distribution to be software. > Indeed, pictures are not software. I don't think that holds either: the formats for images are domain-specific languages (DSL) in which to express how to build the final image. Most of those DSLs are too limited to be thought of as programming languages (i.e. they're not Turing complete, tho there are exceptions like PostScript), but if you think of the definition of Kolmogorov complexity, it's clear that a PNG file is a "program" written in a DSL. So, what this points to is that it's futile to try and decide whether something like that is software or not. Stefan ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-26 13:42 ` Stefan Monnier @ 2021-01-27 18:32 ` Jean Louis 0 siblings, 0 replies; 145+ messages in thread From: Jean Louis @ 2021-01-27 18:32 UTC (permalink / raw) To: Stefan Monnier Cc: Richard Stallman, ulm, emacs-devel, ams, arthur.miller, Dmitry Gutov * Stefan Monnier <monnier@iro.umontreal.ca> [2021-01-26 16:43]: > > > We don't consider the bitmap files in the Emacs distribution to be software. > > Indeed, pictures are not software. > > I don't think that holds either: the formats for images are > domain-specific languages (DSL) in which to express how to build the > final image. Most of those DSLs are too limited to be thought of as > programming languages (i.e. they're not Turing complete, tho there are > exceptions like PostScript), but if you think of the definition of > Kolmogorov complexity, it's clear that a PNG file is a "program" written > in a DSL. > > So, what this points to is that it's futile to try and decide whether > something like that is software or not. That is interesting insight, thank you. In my opinion we use here too often interchangeably "software" for "software program" or "computer program", while "software" as general term has broader definition. For example NEWS file is part of Emacs software, or part of software package, but not Emacs as software program. Wikipedia definition points out that all relevant documentation is also part of software that runs computer. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 17:59 ` Jean Louis 2021-01-25 18:21 ` Dmitry Gutov @ 2021-01-25 19:33 ` Eli Zaretskii 2021-01-25 19:38 ` Eli Zaretskii 2021-01-26 13:21 ` Richard Stallman 3 siblings, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 19:33 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Mon, 25 Jan 2021 20:59:14 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: Ulrich Mueller <ulm@gentoo.org>, ams@gnu.org, rms@gnu.org, > arthur.miller@live.com, emacs-devel@gnu.org > > > A picture can be modified within an infinite space of possibilities. A book > > can be modified. A mathematical equation can be modified. > > > > None of the above are software. > > Software > > >From Wordnet dictionary: > > * Overview of noun software Sigh... The Free Software movement was born out of this great concept: that programs are expressions of ideas -- algorithms and methods for solving complex problems -- and that free exchange of those ideas benefits mankind, and therefore preventing this free exchange is harmful. Now tell me what kind of a useful idea that should be shared do you find in a data type definition contained in an XML schema, which is basically a label: when I say "string" I mean this and that? Is this what Free Software is about? Maybe that's a better food for thought than an abstract definition from Wordnet (which you also mis-interpret to mean that "data" there means the kind of data we have in a schema). ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 17:59 ` Jean Louis 2021-01-25 18:21 ` Dmitry Gutov 2021-01-25 19:33 ` Eli Zaretskii @ 2021-01-25 19:38 ` Eli Zaretskii 2021-01-26 13:21 ` Richard Stallman 3 siblings, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 19:38 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Mon, 25 Jan 2021 20:59:14 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: Ulrich Mueller <ulm@gentoo.org>, ams@gnu.org, rms@gnu.org, > arthur.miller@live.com, emacs-devel@gnu.org > > If schema is data it is part of software together with instructions. You have misunderstood what "data" means in that definition. To realize why you misunderstood, consider this: a program can include "data" like the number 5.0e-10, but that doesn't make such a number any kind of software. Conclusion: not every kind of "data" can be considered to be so central to a program as to be an integral part of 'software". A judgment call is needed. > If schema represents rules how to produce digital document It doesn't. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 17:59 ` Jean Louis ` (2 preceding siblings ...) 2021-01-25 19:38 ` Eli Zaretskii @ 2021-01-26 13:21 ` Richard Stallman 3 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-26 13:21 UTC (permalink / raw) To: Jean Louis; +Cc: ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Software is a collection of instructions and data that tell the > computer how to work. > If schema is data it is part of software together with instructions. I made a mistake in raising the question of whether the schemas are software, because in regard to whether the program is free, that doesn't matter. Data for the program to use in order to operate is not software code, but it is part of the program so it needs to be free. For instance, images are not rules, not code, but we won't include an image in a free program if it is not free. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-25 15:51 ` Dmitry Gutov 2021-01-25 17:59 ` Jean Louis @ 2021-01-26 5:59 ` Richard Stallman 2021-01-26 13:15 ` Dmitry Gutov 1 sibling, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-26 5:59 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, bugs, ams, arthur.miller, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > I think they are software, because they could be modified within an > > infinite space of possibilities. > A picture can be modified within an infinite space of possibilities. A > book can be modified. A mathematical equation can be modified. That is true, but you've taken the question I raised for myself out of its context. The real question is, "In the context, is there any doubt that this is a piece of software? If not, what else could it be? I think it is clear that a specification of a data structure, meant to guide a program's operation on that data, is software. It is comparable to a bunch of struct and enum declarations which is how we use C header files to show the structure of other data. It may be true that any changes you make in these schemas would be tightly constrained _if you want them to interoperate with ODF_. The same is true for system header files, as long as you're going to use with GNU libc. The latter must be under a free license, and for the same reasons the former also. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-26 5:59 ` Richard Stallman @ 2021-01-26 13:15 ` Dmitry Gutov 2021-01-27 7:41 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-26 13:15 UTC (permalink / raw) To: rms; +Cc: ulm, bugs, ams, arthur.miller, emacs-devel On 26.01.2021 07:59, Richard Stallman wrote: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > > I think they are software, because they could be modified within an > > > infinite space of possibilities. > > > A picture can be modified within an infinite space of possibilities. A > > book can be modified. A mathematical equation can be modified. > > That is true, but you've taken the question I raised for myself out of > its context. The real question is, "In the context, is there any > doubt that this is a piece of software? If not, what else could it > be? > > I think it is clear that a specification of a data structure, meant to > guide a program's operation on that data, is software. It is > comparable to a bunch of struct and enum declarations which is how we > use C header files to show the structure of other data. I'm going to say that it's not a program, in the same way as images are not part of a program code. Unlike enums that have a role in writing the code and its compilation, and thus describe aspects of a program, schemas are structured documents which contain information pertaining to other documents. There are different things a program can do with a schema: it can determine whether a certain document is valid, or it can output some sort of structure describing the elements that are missing in the document, or it could even try to generate a sample document based on that schema (though it would require a fair amount of supporting code). This list is almost certainly incomplete. So a schema is not a program, nor a part of a particular program. That said, if we always require that accompanying data (such as images) to be distributed under free licenses, the "software or not" question is probably moot. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-26 13:15 ` Dmitry Gutov @ 2021-01-27 7:41 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-27 7:41 UTC (permalink / raw) To: Dmitry Gutov; +Cc: arthur.miller, ulm, ams, bugs, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > So a schema is not a program, nor a part of a particular program. A schema can be part of many programs -- all the programs that use it. > That said, if we always require that accompanying data (such as images) > to be distributed under free licenses, the "software or not" question is > probably moot. Our policies are not formulated using the concept of "accompanying". Data to be used with the program also should be free. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 6:35 ` Richard Stallman 2021-01-24 8:34 ` Ulrich Mueller @ 2021-01-24 10:53 ` Jean Louis 2021-01-24 17:50 ` Ulrich Mueller 1 sibling, 1 reply; 145+ messages in thread From: Jean Louis @ 2021-01-24 10:53 UTC (permalink / raw) To: Richard Stallman; +Cc: Ulrich Mueller, dgutov, ams, arthur.miller, emacs-devel [-- Attachment #1: Type: text/plain, Size: 777 bytes --] * Richard Stallman <rms@gnu.org> [2021-01-24 09:36]: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > > What role do these particular schemas play in the standard? > > > Are they examples? Are they used by the standards documents? > > > It's not entirely clear to me if they're considered part of the > > standard. > > It sounds like they are either examples or part of the standard > and we cannot tell which. Is that right? Schemas are attached. I see copyright notices inside and it appears to be fully free document modifiable and distributable as long as copyrights remains. Jean [-- Attachment #2: od-manifest-schema-v1.2-os.rnc --] [-- Type: text/plain, Size: 3815 bytes --] # Open Document Format for Office Applications (OpenDocument) Version 1.2 # OASIS Standard, 29 September 2011 # Manifest Relax-NG Schema # Source: http://docs.oasis-open.org/office/v1.2/os/ # Copyright (c) OASIS Open 2002-2011, 2013. All Rights Reserved. # # All capitalized terms in the following text have the meanings assigned to them # in the OASIS Intellectual Property Rights Policy (the "OASIS IPR Policy"). The # full Policy may be found at the OASIS website. # # This document and translations of it may be copied and furnished to others, and # derivative works that comment on or otherwise explain it or assist in its # implementation may be prepared, copied, published, and distributed, in whole or # in part, without restriction of any kind, provided that the above copyright # notice and this section are included on all such copies and derivative works. # However, this document itself may not be modified in any way, including by # removing the copyright notice or references to OASIS, except as needed for the # purpose of developing any document or deliverable produced by an OASIS # Technical Committee (in which case the rules applicable to copyrights, as set # forth in the OASIS IPR Policy, must be followed) or as required to translate it # into languages other than English. # # The limited permissions granted above are perpetual and will not be revoked by # OASIS or its successors or assigns. # # This document and the information contained herein is provided on an "AS IS" # basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT # LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT # INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR # FITNESS FOR A PARTICULAR PURPOSE. namespace manifest = "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" start = manifest manifest = element manifest:manifest { manifest-attlist, file-entry+ } manifest-attlist = attribute manifest:version { "1.2" } file-entry = element manifest:file-entry { file-entry-attlist, encryption-data? } file-entry-attlist = attribute manifest:full-path { \string } & attribute manifest:size { nonNegativeInteger }? & attribute manifest:media-type { \string } & attribute manifest:preferred-view-mode { "edit" | "presentation-slide-show" | "read-only" | namespacedToken }? & attribute manifest:version { \string }? encryption-data = element manifest:encryption-data { encryption-data-attlist, algorithm, start-key-generation?, key-derivation } encryption-data-attlist = attribute manifest:checksum-type { "SHA1/1K" | anyURI } & attribute manifest:checksum { base64Binary } algorithm = element manifest:algorithm { algorithm-attlist, anyElements } algorithm-attlist = attribute manifest:algorithm-name { "Blowfish CFB" | anyURI } & attribute manifest:initialisation-vector { base64Binary } anyAttListOrElements = attribute * { text }*, anyElements anyElements = element * { mixed { anyAttListOrElements } }* key-derivation = element manifest:key-derivation { key-derivation-attlist, empty } key-derivation-attlist = attribute manifest:key-derivation-name { "PBKDF2" | anyURI } & attribute manifest:salt { base64Binary } & attribute manifest:iteration-count { nonNegativeInteger } & attribute manifest:key-size { nonNegativeInteger }? start-key-generation = element manifest:start-key-generation { start-key-generation-attlist, empty } start-key-generation-attlist = attribute manifest:start-key-generation-name { "SHA1" | anyURI } & attribute manifest:key-size { nonNegativeInteger }? base64Binary = xsd:base64Binary namespacedToken = xsd:QName { pattern = "[^:]+:[^:]+" } nonNegativeInteger = xsd:nonNegativeInteger \string = xsd:string anyURI = xsd:anyURI [-- Attachment #3: od-schema-v1.2-os.rnc --] [-- Type: text/plain, Size: 213760 bytes --] # Open Document Format for Office Applications (OpenDocument) Version 1.2 # OASIS Standard, 29 September 2011 # Relax-NG Schema # Source: http://docs.oasis-open.org/office/v1.2/os/ # Copyright (c) OASIS Open 2002-2011, 2013. All Rights Reserved. # # All capitalized terms in the following text have the meanings assigned to them # in the OASIS Intellectual Property Rights Policy (the "OASIS IPR Policy"). The # full Policy may be found at the OASIS website. # # This document and translations of it may be copied and furnished to others, and # derivative works that comment on or otherwise explain it or assist in its # implementation may be prepared, copied, published, and distributed, in whole or # in part, without restriction of any kind, provided that the above copyright # notice and this section are included on all such copies and derivative works. # However, this document itself may not be modified in any way, including by # removing the copyright notice or references to OASIS, except as needed for the # purpose of developing any document or deliverable produced by an OASIS # Technical Committee (in which case the rules applicable to copyrights, as set # forth in the OASIS IPR Policy, must be followed) or as required to translate it # into languages other than English. # # The limited permissions granted above are perpetual and will not be revoked by # OASIS or its successors or assigns. # # This document and the information contained herein is provided on an "AS IS" # basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT # LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT # INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR # FITNESS FOR A PARTICULAR PURPOSE. namespace anim = "urn:oasis:names:tc:opendocument:xmlns:animation:1.0" namespace chart = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" namespace config = "urn:oasis:names:tc:opendocument:xmlns:config:1.0" namespace db = "urn:oasis:names:tc:opendocument:xmlns:database:1.0" namespace dc = "http://purl.org/dc/elements/1.1/" namespace dr3d = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" namespace draw = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" namespace fo = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" namespace form = "urn:oasis:names:tc:opendocument:xmlns:form:1.0" namespace grddl = "http://www.w3.org/2003/g/data-view#" namespace math = "http://www.w3.org/1998/Math/MathML" namespace meta = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0" namespace number = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" namespace office = "urn:oasis:names:tc:opendocument:xmlns:office:1.0" namespace presentation = "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" namespace script = "urn:oasis:names:tc:opendocument:xmlns:script:1.0" namespace smil = "urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0" namespace style = "urn:oasis:names:tc:opendocument:xmlns:style:1.0" namespace svg = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" namespace table = "urn:oasis:names:tc:opendocument:xmlns:table:1.0" namespace text = "urn:oasis:names:tc:opendocument:xmlns:text:1.0" namespace xforms = "http://www.w3.org/2002/xforms" namespace xhtml = "http://www.w3.org/1999/xhtml" namespace xlink = "http://www.w3.org/1999/xlink" office-process-content = attribute office:process-content { boolean }? start = office-document | office-document-content | office-document-styles | office-document-meta | office-document-settings office-document = element office:document { office-document-attrs, office-document-common-attrs, office-meta, office-settings, office-scripts, office-font-face-decls, office-styles, office-automatic-styles, office-master-styles, office-body } office-document-content = element office:document-content { office-document-common-attrs, office-scripts, office-font-face-decls, office-automatic-styles, office-body } office-document-styles = element office:document-styles { office-document-common-attrs, office-font-face-decls, office-styles, office-automatic-styles, office-master-styles } office-document-meta = element office:document-meta { office-document-common-attrs, office-meta } office-document-settings = element office:document-settings { office-document-common-attrs, office-settings } office-document-common-attrs = attribute office:version { "1.2" } & attribute grddl:transformation { list { anyIRI* } }? office-document-attrs = attribute office:mimetype { \string } office-meta = element office:meta { office-meta-content-strict }? office-meta-content-strict = office-meta-data* office-body = element office:body { office-body-content } office-body-content = element office:text { office-text-attlist, office-text-content-prelude, office-text-content-main, office-text-content-epilogue } | element office:drawing { office-drawing-attlist, office-drawing-content-prelude, office-drawing-content-main, office-drawing-content-epilogue } | element office:presentation { office-presentation-attlist, office-presentation-content-prelude, office-presentation-content-main, office-presentation-content-epilogue } | element office:spreadsheet { office-spreadsheet-attlist, office-spreadsheet-content-prelude, office-spreadsheet-content-main, office-spreadsheet-content-epilogue } | element office:chart { office-chart-attlist, office-chart-content-prelude, office-chart-content-main, office-chart-content-epilogue } | element office:image { office-image-attlist, office-image-content-prelude, office-image-content-main, office-image-content-epilogue } | office-database office-text-content-prelude = office-forms, text-tracked-changes, text-decls, table-decls office-text-content-main = text-content* | (text-page-sequence, (shape)*) text-content = text-h | text-p | text-list | text-numbered-paragraph | table-table | text-section | text-soft-page-break | text-table-of-content | text-illustration-index | text-table-index | text-object-index | text-user-index | text-alphabetical-index | text-bibliography | shape | change-marks office-text-content-epilogue = table-functions office-text-attlist = attribute text:global { boolean }? & attribute text:use-soft-page-breaks { boolean }? office-drawing-attlist = empty office-drawing-content-prelude = text-decls, table-decls office-drawing-content-main = draw-page* office-drawing-content-epilogue = table-functions office-presentation-attlist = empty office-presentation-content-prelude = text-decls, table-decls, presentation-decls office-presentation-content-main = draw-page* office-presentation-content-epilogue = presentation-settings, table-functions office-spreadsheet-content-prelude = table-tracked-changes?, text-decls, table-decls table-decls = table-calculation-settings?, table-content-validations?, table-label-ranges? office-spreadsheet-content-main = table-table* office-spreadsheet-content-epilogue = table-functions table-functions = table-named-expressions?, table-database-ranges?, table-data-pilot-tables?, table-consolidation?, table-dde-links? office-chart-attlist = empty office-chart-content-prelude = text-decls, table-decls office-chart-content-main = chart-chart office-chart-content-epilogue = table-functions office-image-attlist = empty office-image-content-prelude = empty office-image-content-main = draw-frame office-image-content-epilogue = empty office-settings = element office:settings { config-config-item-set+ }? config-config-item-set = element config:config-item-set { config-config-item-set-attlist, config-items } config-items = (config-config-item | config-config-item-set | config-config-item-map-named | config-config-item-map-indexed)+ config-config-item-set-attlist = attribute config:name { \string } config-config-item = element config:config-item { config-config-item-attlist, text } config-config-item-attlist = attribute config:name { \string } & attribute config:type { "boolean" | "short" | "int" | "long" | "double" | "string" | "datetime" | "base64Binary" } config-config-item-map-indexed = element config:config-item-map-indexed { config-config-item-map-indexed-attlist, config-config-item-map-entry+ } config-config-item-map-indexed-attlist = attribute config:name { \string } config-config-item-map-entry = element config:config-item-map-entry { config-config-item-map-entry-attlist, config-items } config-config-item-map-entry-attlist = attribute config:name { \string }? config-config-item-map-named = element config:config-item-map-named { config-config-item-map-named-attlist, config-config-item-map-entry+ } config-config-item-map-named-attlist = attribute config:name { \string } office-scripts = element office:scripts { office-script*, office-event-listeners? }? office-script = element office:script { office-script-attlist, mixed { anyElements } } office-script-attlist = attribute script:language { \string } office-font-face-decls = element office:font-face-decls { style-font-face* }? office-styles = element office:styles { styles & style-default-style* & style-default-page-layout? & text-outline-style? & text-notes-configuration* & text-bibliography-configuration? & text-linenumbering-configuration? & draw-gradient* & svg-linearGradient* & svg-radialGradient* & draw-hatch* & draw-fill-image* & draw-marker* & draw-stroke-dash* & draw-opacity* & style-presentation-page-layout* & table-table-template* }? office-automatic-styles = element office:automatic-styles { styles & style-page-layout* }? office-master-styles = element office:master-styles { style-master-page* & style-handout-master? & draw-layer-set? }? styles = style-style* & text-list-style* & number-number-style* & number-currency-style* & number-percentage-style* & number-date-style* & number-time-style* & number-boolean-style* & number-text-style* office-meta-data = element meta:generator { \string } | element dc:title { \string } | element dc:description { \string } | element dc:subject { \string } | element meta:keyword { \string } | element meta:initial-creator { \string } | dc-creator | element meta:printed-by { \string } | element meta:creation-date { dateTime } | dc-date | element meta:print-date { dateTime } | element meta:template { attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:actuate { "onRequest" }?, attribute xlink:title { \string }?, attribute meta:date { dateTime }? } | element meta:auto-reload { (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:show { "replace" }?, attribute xlink:actuate { "onLoad" }?)?, attribute meta:delay { duration }? } | element meta:hyperlink-behaviour { attribute office:target-frame-name { targetFrameName }?, attribute xlink:show { "new" | "replace" }? } | element dc:language { language } | element meta:editing-cycles { nonNegativeInteger } | element meta:editing-duration { duration } | element meta:document-statistic { attribute meta:page-count { nonNegativeInteger }?, attribute meta:table-count { nonNegativeInteger }?, attribute meta:draw-count { nonNegativeInteger }?, attribute meta:image-count { nonNegativeInteger }?, attribute meta:ole-object-count { nonNegativeInteger }?, attribute meta:object-count { nonNegativeInteger }?, attribute meta:paragraph-count { nonNegativeInteger }?, attribute meta:word-count { nonNegativeInteger }?, attribute meta:character-count { nonNegativeInteger }?, attribute meta:frame-count { nonNegativeInteger }?, attribute meta:sentence-count { nonNegativeInteger }?, attribute meta:syllable-count { nonNegativeInteger }?, attribute meta:non-whitespace-character-count { nonNegativeInteger }?, attribute meta:row-count { nonNegativeInteger }?, attribute meta:cell-count { nonNegativeInteger }? } | element meta:user-defined { attribute meta:name { \string }, ((attribute meta:value-type { "float" }, double) | (attribute meta:value-type { "date" }, dateOrDateTime) | (attribute meta:value-type { "time" }, duration) | (attribute meta:value-type { "boolean" }, boolean) | (attribute meta:value-type { "string" }, \string) | text) } dc-creator = element dc:creator { \string } dc-date = element dc:date { dateTime } text-h = element text:h { heading-attrs, paragraph-attrs, text-number?, paragraph-content-or-hyperlink* } heading-attrs = attribute text:outline-level { positiveInteger } & attribute text:restart-numbering { boolean }? & attribute text:start-value { nonNegativeInteger }? & attribute text:is-list-header { boolean }? text-number = element text:number { \string } text-p = element text:p { paragraph-attrs, paragraph-content-or-hyperlink* } paragraph-attrs = attribute text:style-name { styleNameRef }? & attribute text:class-names { styleNameRefs }? & attribute text:cond-style-name { styleNameRef }? & (xml-id, attribute text:id { NCName }?)? & common-in-content-meta-attlist? text-page-sequence = element text:page-sequence { text-page+ } text-page = element text:page { text-page-attlist, empty } text-page-attlist = attribute text:master-page-name { styleNameRef } text-list = element text:list { text-list-attr, text-list-header?, text-list-item* } text-list-attr = attribute text:style-name { styleNameRef }? & attribute text:continue-numbering { boolean }? & attribute text:continue-list { IDREF }? & xml-id? text-list-item = element text:list-item { text-list-item-attr, text-list-item-content } text-list-item-content = text-number?, (text-p | text-h | text-list | text-soft-page-break)* text-list-item-attr = attribute text:start-value { nonNegativeInteger }? & attribute text:style-override { styleNameRef }? & xml-id? text-list-header = element text:list-header { text-list-header-attr, text-list-item-content } text-list-header-attr = xml-id? text-numbered-paragraph = element text:numbered-paragraph { text-numbered-paragraph-attr, text-number?, (text-p | text-h) } text-numbered-paragraph-attr = attribute text:list-id { NCName } & attribute text:level { positiveInteger }? & (attribute text:style-name { styleNameRef }, attribute text:continue-numbering { boolean }, attribute text:start-value { nonNegativeInteger })? & xml-id? text-section = element text:section { text-section-attlist, (text-section-source | text-section-source-dde | empty), text-content* } text-section-attlist = common-section-attlist & (attribute text:display { "true" | "none" } | (attribute text:display { "condition" }, attribute text:condition { \string }) | empty) common-section-attlist = attribute text:style-name { styleNameRef }? & attribute text:name { \string } & attribute text:protected { boolean }? & attribute text:protection-key { \string }? & attribute text:protection-key-digest-algorithm { anyIRI }? & xml-id? text-section-source = element text:section-source { text-section-source-attr } text-section-source-attr = (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:show { "embed" }?)? & attribute text:section-name { \string }? & attribute text:filter-name { \string }? text-section-source-dde = office-dde-source text-tracked-changes = element text:tracked-changes { text-tracked-changes-attr, text-changed-region* }? text-tracked-changes-attr = attribute text:track-changes { boolean }? text-changed-region = element text:changed-region { text-changed-region-attr, text-changed-region-content } text-changed-region-attr = xml-id, attribute text:id { NCName }? text-changed-region-content = element text:insertion { office-change-info } | element text:deletion { office-change-info, text-content* } | element text:format-change { office-change-info } change-marks = element text:change { change-mark-attr } | element text:change-start { change-mark-attr } | element text:change-end { change-mark-attr } change-mark-attr = attribute text:change-id { IDREF } text-soft-page-break = element text:soft-page-break { empty } text-decls = element text:variable-decls { text-variable-decl* }?, element text:sequence-decls { text-sequence-decl* }?, element text:user-field-decls { text-user-field-decl* }?, element text:dde-connection-decls { text-dde-connection-decl* }?, text-alphabetical-index-auto-mark-file? paragraph-content-or-hyperlink = paragraph-content | text-a paragraph-content = text | element text:s { attribute text:c { nonNegativeInteger }? } | element text:tab { text-tab-attr } | element text:line-break { empty } | text-soft-page-break | element text:span { attribute text:style-name { styleNameRef }?, attribute text:class-names { styleNameRefs }?, paragraph-content-or-hyperlink* } | element text:meta { text-meta-attlist, paragraph-content-or-hyperlink* } | (text-bookmark | text-bookmark-start | text-bookmark-end) | element text:reference-mark { attribute text:name { \string } } | (element text:reference-mark-start { attribute text:name { \string } } | element text:reference-mark-end { attribute text:name { \string } }) | element text:note { text-note-class, attribute text:id { \string }?, element text:note-citation { attribute text:label { \string }?, text }, element text:note-body { text-content* } } | element text:ruby { attribute text:style-name { styleNameRef }?, element text:ruby-base { paragraph-content-or-hyperlink* }, element text:ruby-text { attribute text:style-name { styleNameRef }?, text } } | (office-annotation | office-annotation-end) | change-marks | shape | element text:date { text-date-attlist, text } | element text:time { text-time-attlist, text } | element text:page-number { text-page-number-attlist, text } | element text:page-continuation { text-page-continuation-attlist, text } | element text:sender-firstname { common-field-fixed-attlist, text } | element text:sender-lastname { common-field-fixed-attlist, text } | element text:sender-initials { common-field-fixed-attlist, text } | element text:sender-title { common-field-fixed-attlist, text } | element text:sender-position { common-field-fixed-attlist, text } | element text:sender-email { common-field-fixed-attlist, text } | element text:sender-phone-private { common-field-fixed-attlist, text } | element text:sender-fax { common-field-fixed-attlist, text } | element text:sender-company { common-field-fixed-attlist, text } | element text:sender-phone-work { common-field-fixed-attlist, text } | element text:sender-street { common-field-fixed-attlist, text } | element text:sender-city { common-field-fixed-attlist, text } | element text:sender-postal-code { common-field-fixed-attlist, text } | element text:sender-country { common-field-fixed-attlist, text } | element text:sender-state-or-province { common-field-fixed-attlist, text } | element text:author-name { common-field-fixed-attlist, text } | element text:author-initials { common-field-fixed-attlist, text } | element text:chapter { text-chapter-attlist, text } | element text:file-name { text-file-name-attlist, text } | element text:template-name { text-template-name-attlist, text } | element text:sheet-name { text } | element text:variable-set { (common-field-name-attlist & common-field-formula-attlist & common-value-and-type-attlist & common-field-display-value-none-attlist & common-field-data-style-name-attlist), text } | element text:variable-get { (common-field-name-attlist & common-field-display-value-formula-attlist & common-field-data-style-name-attlist), text } | element text:variable-input { (common-field-name-attlist & common-field-description-attlist & common-value-type-attlist & common-field-display-value-none-attlist & common-field-data-style-name-attlist), text } | element text:user-field-get { (common-field-name-attlist & common-field-display-value-formula-none-attlist & common-field-data-style-name-attlist), text } | element text:user-field-input { (common-field-name-attlist & common-field-description-attlist & common-field-data-style-name-attlist), text } | element text:sequence { (common-field-name-attlist & common-field-formula-attlist & common-field-num-format-attlist & text-sequence-ref-name), text } | element text:expression { (common-field-formula-attlist & common-value-and-type-attlist? & common-field-display-value-formula-attlist & common-field-data-style-name-attlist), text } | element text:text-input { common-field-description-attlist, text } | element text:initial-creator { common-field-fixed-attlist, text } | element text:creation-date { (common-field-fixed-attlist & common-field-data-style-name-attlist & attribute text:date-value { dateOrDateTime }?), text } | element text:creation-time { (common-field-fixed-attlist & common-field-data-style-name-attlist & attribute text:time-value { timeOrDateTime }?), text } | element text:description { common-field-fixed-attlist, text } | element text:user-defined { (common-field-fixed-attlist & attribute text:name { \string } & common-field-data-style-name-attlist & attribute office:value { double }? & attribute office:date-value { dateOrDateTime }? & attribute office:time-value { duration }? & attribute office:boolean-value { boolean }? & attribute office:string-value { \string }?), text } | element text:print-time { (common-field-fixed-attlist & common-field-data-style-name-attlist & attribute text:time-value { time }?), text } | element text:print-date { (common-field-fixed-attlist & common-field-data-style-name-attlist & attribute text:date-value { date }?), text } | element text:printed-by { common-field-fixed-attlist, text } | element text:title { common-field-fixed-attlist, text } | element text:subject { common-field-fixed-attlist, text } | element text:keywords { common-field-fixed-attlist, text } | element text:editing-cycles { common-field-fixed-attlist, text } | element text:editing-duration { (common-field-fixed-attlist & common-field-data-style-name-attlist & attribute text:duration { duration }?), text } | element text:modification-time { (common-field-fixed-attlist & common-field-data-style-name-attlist & attribute text:time-value { time }?), text } | element text:modification-date { (common-field-fixed-attlist & common-field-data-style-name-attlist & attribute text:date-value { date }?), text } | element text:creator { common-field-fixed-attlist, text } | element text:page-count | text:paragraph-count | text:word-count | text:character-count | text:table-count | text:image-count | text:object-count { common-field-num-format-attlist, text } | element text:database-display { text-database-display-attlist, text } | element text:database-next { text-database-next-attlist } | element text:database-row-select { text-database-row-select-attlist } | element text:database-row-number { (common-field-database-table & common-field-num-format-attlist & attribute text:value { nonNegativeInteger }?), text } | element text:database-name { common-field-database-table, text } | element text:page-variable-set { text-set-page-variable-attlist, text } | element text:page-variable-get { text-get-page-variable-attlist, text } | element text:placeholder { text-placeholder-attlist, text } | element text:conditional-text { text-conditional-text-attlist, text } | element text:hidden-text { text-hidden-text-attlist, text } | element text:reference-ref | text:bookmark-ref { text-common-ref-content & text-bookmark-ref-content } | element text:note-ref { text-common-ref-content & text-note-ref-content } | element text:sequence-ref { text-common-ref-content & text-sequence-ref-content } | element text:script { ((attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }) | text) & attribute script:language { \string }? } | element text:execute-macro { attribute text:name { \string }?, office-event-listeners?, text } | element text:hidden-paragraph { text-hidden-paragraph-attlist, text } | element text:dde-connection { attribute text:connection-name { \string }, text } | element text:measure { attribute text:kind { "value" | "unit" | "gap" }, text } | element text:table-formula { (common-field-formula-attlist & common-field-display-value-formula-attlist & common-field-data-style-name-attlist), text } | element text:meta-field { text-meta-field-attlist, paragraph-content-or-hyperlink* } | element text:toc-mark-start { text-toc-mark-start-attrs } | element text:toc-mark-end { text-id } | element text:toc-mark { attribute text:string-value { \string }, text-outline-level } | element text:user-index-mark-start { text-id, text-outline-level, text-index-name } | element text:user-index-mark-end { text-id } | element text:user-index-mark { attribute text:string-value { \string }, text-outline-level, text-index-name } | element text:alphabetical-index-mark-start { text-id, text-alphabetical-index-mark-attrs } | element text:alphabetical-index-mark-end { text-id } | element text:alphabetical-index-mark { attribute text:string-value { \string }, text-alphabetical-index-mark-attrs } | element text:bibliography-mark { attribute text:bibliography-type { text-bibliography-types }, attribute text:identifier | text:address | text:annote | text:author | text:booktitle | text:chapter | text:edition | text:editor | text:howpublished | text:institution | text:journal | text:month | text:note | text:number | text:organizations | text:pages | text:publisher | text:school | text:series | text:title | text:report-type | text:volume | text:year | text:url | text:custom1 | text:custom2 | text:custom3 | text:custom4 | text:custom5 | text:isbn | text:issn { \string }*, text } | element presentation:header { empty } | element presentation:footer { empty } | element presentation:date-time { empty } text-tab-attr = attribute text:tab-ref { nonNegativeInteger }? text-a = element text:a { text-a-attlist, office-event-listeners?, paragraph-content* } text-a-attlist = attribute office:name { \string }? & attribute office:title { \string }? & attribute xlink:type { "simple" } & attribute xlink:href { anyIRI } & attribute xlink:actuate { "onRequest" }? & attribute office:target-frame-name { targetFrameName }? & attribute xlink:show { "new" | "replace" }? & attribute text:style-name { styleNameRef }? & attribute text:visited-style-name { styleNameRef }? text-meta-attlist = common-in-content-meta-attlist? & xml-id? text-bookmark = element text:bookmark { text-bookmark-attlist, empty } text-bookmark-start = element text:bookmark-start { text-bookmark-start-attlist, empty } text-bookmark-end = element text:bookmark-end { text-bookmark-end-attlist, empty } text-bookmark-attlist = attribute text:name { \string } & xml-id? text-bookmark-start-attlist = attribute text:name { \string } & xml-id? & common-in-content-meta-attlist? text-bookmark-end-attlist = attribute text:name { \string } text-note-class = attribute text:note-class { "footnote" | "endnote" } text-date-attlist = (common-field-fixed-attlist & common-field-data-style-name-attlist) & attribute text:date-value { dateOrDateTime }? & attribute text:date-adjust { duration }? text-time-attlist = (common-field-fixed-attlist & common-field-data-style-name-attlist) & attribute text:time-value { timeOrDateTime }? & attribute text:time-adjust { duration }? text-page-number-attlist = (common-field-num-format-attlist & common-field-fixed-attlist) & attribute text:page-adjust { integer }? & attribute text:select-page { "previous" | "current" | "next" }? text-page-continuation-attlist = attribute text:select-page { "previous" | "next" } & attribute text:string-value { \string }? text-chapter-attlist = attribute text:display { "name" | "number" | "number-and-name" | "plain-number-and-name" | "plain-number" } & attribute text:outline-level { nonNegativeInteger } text-file-name-attlist = attribute text:display { "full" | "path" | "name" | "name-and-extension" }? & common-field-fixed-attlist text-template-name-attlist = attribute text:display { "full" | "path" | "name" | "name-and-extension" | "area" | "title" }? text-variable-decl = element text:variable-decl { common-field-name-attlist, common-value-type-attlist } text-user-field-decl = element text:user-field-decl { common-field-name-attlist, common-field-formula-attlist?, common-value-and-type-attlist } text-sequence-decl = element text:sequence-decl { text-sequence-decl-attlist } text-sequence-decl-attlist = common-field-name-attlist & attribute text:display-outline-level { nonNegativeInteger } & attribute text:separation-character { character }? text-sequence-ref-name = attribute text:ref-name { \string }? common-field-database-table = common-field-database-table-attlist, common-field-database-name common-field-database-name = attribute text:database-name { \string }? | form-connection-resource common-field-database-table-attlist = attribute text:table-name { \string } & attribute text:table-type { "table" | "query" | "command" }? text-database-display-attlist = common-field-database-table & common-field-data-style-name-attlist & attribute text:column-name { \string } text-database-next-attlist = common-field-database-table & attribute text:condition { \string }? text-database-row-select-attlist = common-field-database-table & attribute text:condition { \string }? & attribute text:row-number { nonNegativeInteger }? text-set-page-variable-attlist = attribute text:active { boolean }? & attribute text:page-adjust { integer }? text-get-page-variable-attlist = common-field-num-format-attlist text-placeholder-attlist = attribute text:placeholder-type { "text" | "table" | "text-box" | "image" | "object" } & common-field-description-attlist text-conditional-text-attlist = attribute text:condition { \string } & attribute text:string-value-if-true { \string } & attribute text:string-value-if-false { \string } & attribute text:current-value { boolean }? text-hidden-text-attlist = attribute text:condition { \string } & attribute text:string-value { \string } & attribute text:is-hidden { boolean }? text-common-ref-content = text & attribute text:ref-name { \string }? text-bookmark-ref-content = attribute text:reference-format { common-ref-format-values | "number-no-superior" | "number-all-superior" | "number" }? text-note-ref-content = attribute text:reference-format { common-ref-format-values }? & text-note-class text-sequence-ref-content = attribute text:reference-format { common-ref-format-values | "category-and-value" | "caption" | "value" }? common-ref-format-values = "page" | "chapter" | "direction" | "text" text-hidden-paragraph-attlist = attribute text:condition { \string } & attribute text:is-hidden { boolean }? text-meta-field-attlist = xml-id & common-field-data-style-name-attlist common-value-type-attlist = attribute office:value-type { valueType } common-value-and-type-attlist = (attribute office:value-type { "float" }, attribute office:value { double }) | (attribute office:value-type { "percentage" }, attribute office:value { double }) | (attribute office:value-type { "currency" }, attribute office:value { double }, attribute office:currency { \string }?) | (attribute office:value-type { "date" }, attribute office:date-value { dateOrDateTime }) | (attribute office:value-type { "time" }, attribute office:time-value { duration }) | (attribute office:value-type { "boolean" }, attribute office:boolean-value { boolean }) | (attribute office:value-type { "string" }, attribute office:string-value { \string }?) common-field-fixed-attlist = attribute text:fixed { boolean }? common-field-name-attlist = attribute text:name { variableName } common-field-description-attlist = attribute text:description { \string }? common-field-display-value-none-attlist = attribute text:display { "value" | "none" }? common-field-display-value-formula-none-attlist = attribute text:display { "value" | "formula" | "none" }? common-field-display-value-formula-attlist = attribute text:display { "value" | "formula" }? common-field-formula-attlist = attribute text:formula { \string }? common-field-data-style-name-attlist = attribute style:data-style-name { styleNameRef }? common-field-num-format-attlist = common-num-format-attlist? text-toc-mark-start-attrs = text-id, text-outline-level text-outline-level = attribute text:outline-level { positiveInteger }? text-id = attribute text:id { \string } text-index-name = attribute text:index-name { \string } text-alphabetical-index-mark-attrs = attribute text:key1 { \string }? & attribute text:key2 { \string }? & attribute text:string-value-phonetic { \string }? & attribute text:key1-phonetic { \string }? & attribute text:key2-phonetic { \string }? & attribute text:main-entry { boolean }? text-bibliography-types = "article" | "book" | "booklet" | "conference" | "custom1" | "custom2" | "custom3" | "custom4" | "custom5" | "email" | "inbook" | "incollection" | "inproceedings" | "journal" | "manual" | "mastersthesis" | "misc" | "phdthesis" | "proceedings" | "techreport" | "unpublished" | "www" text-index-body = element text:index-body { index-content-main* } index-content-main = text-content | text-index-title text-index-title = element text:index-title { common-section-attlist, index-content-main* } text-table-of-content = element text:table-of-content { common-section-attlist, text-table-of-content-source, text-index-body } text-table-of-content-source = element text:table-of-content-source { text-table-of-content-source-attlist, text-index-title-template?, text-table-of-content-entry-template*, text-index-source-styles* } text-table-of-content-source-attlist = attribute text:outline-level { positiveInteger }? & attribute text:use-outline-level { boolean }? & attribute text:use-index-marks { boolean }? & attribute text:use-index-source-styles { boolean }? & attribute text:index-scope { "document" | "chapter" }? & attribute text:relative-tab-stop-position { boolean }? text-table-of-content-entry-template = element text:table-of-content-entry-template { text-table-of-content-entry-template-attlist, text-table-of-content-children* } text-table-of-content-children = text-index-entry-chapter | text-index-entry-page-number | text-index-entry-text | text-index-entry-span | text-index-entry-tab-stop | text-index-entry-link-start | text-index-entry-link-end text-table-of-content-entry-template-attlist = attribute text:outline-level { positiveInteger } & attribute text:style-name { styleNameRef } text-illustration-index = element text:illustration-index { common-section-attlist, text-illustration-index-source, text-index-body } text-illustration-index-source = element text:illustration-index-source { text-illustration-index-source-attrs, text-index-title-template?, text-illustration-index-entry-template? } text-illustration-index-source-attrs = text-index-scope-attr & text-relative-tab-stop-position-attr & attribute text:use-caption { boolean }? & attribute text:caption-sequence-name { \string }? & attribute text:caption-sequence-format { "text" | "category-and-value" | "caption" }? text-index-scope-attr = attribute text:index-scope { "document" | "chapter" }? text-relative-tab-stop-position-attr = attribute text:relative-tab-stop-position { boolean }? text-illustration-index-entry-template = element text:illustration-index-entry-template { text-illustration-index-entry-content } text-illustration-index-entry-content = text-illustration-index-entry-template-attrs, (text-index-entry-chapter | text-index-entry-page-number | text-index-entry-text | text-index-entry-span | text-index-entry-tab-stop)* text-illustration-index-entry-template-attrs = attribute text:style-name { styleNameRef } text-table-index = element text:table-index { common-section-attlist, text-table-index-source, text-index-body } text-table-index-source = element text:table-index-source { text-illustration-index-source-attrs, text-index-title-template?, text-table-index-entry-template? } text-table-index-entry-template = element text:table-index-entry-template { text-illustration-index-entry-content } text-object-index = element text:object-index { common-section-attlist, text-object-index-source, text-index-body } text-object-index-source = element text:object-index-source { text-object-index-source-attrs, text-index-title-template?, text-object-index-entry-template? } text-object-index-source-attrs = text-index-scope-attr & text-relative-tab-stop-position-attr & attribute text:use-spreadsheet-objects { boolean }? & attribute text:use-math-objects { boolean }? & attribute text:use-draw-objects { boolean }? & attribute text:use-chart-objects { boolean }? & attribute text:use-other-objects { boolean }? text-object-index-entry-template = element text:object-index-entry-template { text-illustration-index-entry-content } text-user-index = element text:user-index { common-section-attlist, text-user-index-source, text-index-body } text-user-index-source = element text:user-index-source { text-user-index-source-attr, text-index-title-template?, text-user-index-entry-template*, text-index-source-styles* } text-user-index-source-attr = text-index-scope-attr & text-relative-tab-stop-position-attr & attribute text:use-index-marks { boolean }? & attribute text:use-index-source-styles { boolean }? & attribute text:use-graphics { boolean }? & attribute text:use-tables { boolean }? & attribute text:use-floating-frames { boolean }? & attribute text:use-objects { boolean }? & attribute text:copy-outline-levels { boolean }? & attribute text:index-name { \string } text-user-index-entry-template = element text:user-index-entry-template { text-user-index-entry-template-attrs, (text-index-entry-chapter | text-index-entry-page-number | text-index-entry-text | text-index-entry-span | text-index-entry-tab-stop)* } text-user-index-entry-template-attrs = attribute text:outline-level { positiveInteger } & attribute text:style-name { styleNameRef } text-alphabetical-index = element text:alphabetical-index { common-section-attlist, text-alphabetical-index-source, text-index-body } text-alphabetical-index-source = element text:alphabetical-index-source { text-alphabetical-index-source-attrs, text-index-title-template?, text-alphabetical-index-entry-template* } text-alphabetical-index-source-attrs = text-index-scope-attr & text-relative-tab-stop-position-attr & attribute text:ignore-case { boolean }? & attribute text:main-entry-style-name { styleNameRef }? & attribute text:alphabetical-separators { boolean }? & attribute text:combine-entries { boolean }? & attribute text:combine-entries-with-dash { boolean }? & attribute text:combine-entries-with-pp { boolean }? & attribute text:use-keys-as-entries { boolean }? & attribute text:capitalize-entries { boolean }? & attribute text:comma-separated { boolean }? & attribute fo:language { languageCode }? & attribute fo:country { countryCode }? & attribute fo:script { scriptCode }? & attribute style:rfc-language-tag { language }? & attribute text:sort-algorithm { \string }? text-alphabetical-index-auto-mark-file = element text:alphabetical-index-auto-mark-file { attribute xlink:type { "simple" }, attribute xlink:href { anyIRI } } text-alphabetical-index-entry-template = element text:alphabetical-index-entry-template { text-alphabetical-index-entry-template-attrs, (text-index-entry-chapter | text-index-entry-page-number | text-index-entry-text | text-index-entry-span | text-index-entry-tab-stop)* } text-alphabetical-index-entry-template-attrs = attribute text:outline-level { "1" | "2" | "3" | "separator" } & attribute text:style-name { styleNameRef } text-bibliography = element text:bibliography { common-section-attlist, text-bibliography-source, text-index-body } text-bibliography-source = element text:bibliography-source { text-index-title-template?, text-bibliography-entry-template* } text-bibliography-entry-template = element text:bibliography-entry-template { text-bibliography-entry-template-attrs, (text-index-entry-span | text-index-entry-tab-stop | text-index-entry-bibliography)* } text-bibliography-entry-template-attrs = attribute text:bibliography-type { text-bibliography-types } & attribute text:style-name { styleNameRef } text-index-source-styles = element text:index-source-styles { attribute text:outline-level { positiveInteger }, text-index-source-style* } text-index-source-style = element text:index-source-style { attribute text:style-name { styleName }, empty } text-index-title-template = element text:index-title-template { attribute text:style-name { styleNameRef }?, text } text-index-entry-chapter = element text:index-entry-chapter { attribute text:style-name { styleNameRef }?, text-index-entry-chapter-attrs } text-index-entry-chapter-attrs = attribute text:display { "name" | "number" | "number-and-name" | "plain-number" | "plain-number-and-name" }? & attribute text:outline-level { positiveInteger }? text-index-entry-text = element text:index-entry-text { attribute text:style-name { styleNameRef }? } text-index-entry-page-number = element text:index-entry-page-number { attribute text:style-name { styleNameRef }? } text-index-entry-span = element text:index-entry-span { attribute text:style-name { styleNameRef }?, text } text-index-entry-bibliography = element text:index-entry-bibliography { text-index-entry-bibliography-attrs } text-index-entry-bibliography-attrs = attribute text:style-name { styleNameRef }? & attribute text:bibliography-data-field { "address" | "annote" | "author" | "bibliography-type" | "booktitle" | "chapter" | "custom1" | "custom2" | "custom3" | "custom4" | "custom5" | "edition" | "editor" | "howpublished" | "identifier" | "institution" | "isbn" | "issn" | "journal" | "month" | "note" | "number" | "organizations" | "pages" | "publisher" | "report-type" | "school" | "series" | "title" | "url" | "volume" | "year" } text-index-entry-tab-stop = element text:index-entry-tab-stop { attribute text:style-name { styleNameRef }?, text-index-entry-tab-stop-attrs } text-index-entry-tab-stop-attrs = attribute style:leader-char { character }? & (attribute style:type { "right" } | (attribute style:type { "left" }, attribute style:position { length })) text-index-entry-link-start = element text:index-entry-link-start { attribute text:style-name { styleNameRef }? } text-index-entry-link-end = element text:index-entry-link-end { attribute text:style-name { styleNameRef }? } table-table = element table:table { table-table-attlist, table-title?, table-desc?, table-table-source?, office-dde-source?, table-scenario?, office-forms?, table-shapes?, table-columns-and-groups, table-rows-and-groups, table-named-expressions? } table-columns-and-groups = (table-table-column-group | table-columns-no-group)+ table-columns-no-group = (table-columns, (table-table-header-columns, table-columns?)?) | (table-table-header-columns, table-columns?) table-columns = table-table-columns | table-table-column+ table-rows-and-groups = (table-table-row-group | table-rows-no-group)+ table-rows-no-group = (table-rows, (table-table-header-rows, table-rows?)?) | (table-table-header-rows, table-rows?) table-rows = table-table-rows | (text-soft-page-break?, table-table-row)+ table-table-attlist = attribute table:name { \string }? & attribute table:style-name { styleNameRef }? & attribute table:template-name { \string }? & attribute table:use-first-row-styles { boolean }? & attribute table:use-last-row-styles { boolean }? & attribute table:use-first-column-styles { boolean }? & attribute table:use-last-column-styles { boolean }? & attribute table:use-banding-rows-styles { boolean }? & attribute table:use-banding-columns-styles { boolean }? & attribute table:protected { boolean }? & attribute table:protection-key { \string }? & attribute table:protection-key-digest-algorithm { anyIRI }? & attribute table:print { boolean }? & attribute table:print-ranges { cellRangeAddressList }? & xml-id? & attribute table:is-sub-table { boolean }? table-title = element table:title { text } table-desc = element table:desc { text } table-table-row = element table:table-row { table-table-row-attlist, (table-table-cell | table-covered-table-cell)+ } table-table-row-attlist = attribute table:number-rows-repeated { positiveInteger }? & attribute table:style-name { styleNameRef }? & attribute table:default-cell-style-name { styleNameRef }? & attribute table:visibility { table-visibility-value }? & xml-id? table-visibility-value = "visible" | "collapse" | "filter" table-table-cell = element table:table-cell { table-table-cell-attlist, table-table-cell-attlist-extra, table-table-cell-content } table-covered-table-cell = element table:covered-table-cell { table-table-cell-attlist, table-table-cell-content } table-table-cell-content = table-cell-range-source?, office-annotation?, table-detective?, text-content* table-table-cell-attlist = attribute table:number-columns-repeated { positiveInteger }? & attribute table:style-name { styleNameRef }? & attribute table:content-validation-name { \string }? & attribute table:formula { \string }? & common-value-and-type-attlist? & attribute table:protect { boolean }? & attribute table:protected { boolean }? & xml-id? & common-in-content-meta-attlist? table-table-cell-attlist-extra = attribute table:number-columns-spanned { positiveInteger }? & attribute table:number-rows-spanned { positiveInteger }? & attribute table:number-matrix-columns-spanned { positiveInteger }? & attribute table:number-matrix-rows-spanned { positiveInteger }? table-table-column = element table:table-column { table-table-column-attlist, empty } table-table-column-attlist = attribute table:number-columns-repeated { positiveInteger }? & attribute table:style-name { styleNameRef }? & attribute table:visibility { table-visibility-value }? & attribute table:default-cell-style-name { styleNameRef }? & xml-id? table-table-header-columns = element table:table-header-columns { table-table-column+ } table-table-columns = element table:table-columns { table-table-column+ } table-table-column-group = element table:table-column-group { table-table-column-group-attlist, table-columns-and-groups } table-table-column-group-attlist = attribute table:display { boolean }? table-table-header-rows = element table:table-header-rows { (text-soft-page-break?, table-table-row)+ } table-table-rows = element table:table-rows { (text-soft-page-break?, table-table-row)+ } table-table-row-group = element table:table-row-group { table-table-row-group-attlist, table-rows-and-groups } table-table-row-group-attlist = attribute table:display { boolean }? cellAddress = xsd:string { pattern = "($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+" } cellRangeAddress = xsd:string { pattern = "($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+(:($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+$?[0-9]+)?" } | xsd:string { pattern = "($?([^\. ']+|'([^']|'')+'))?\.$?[0-9]+:($?([^\. ']+|'([^']|'')+'))?\.$?[0-9]+" } | xsd:string { pattern = "($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+:($?([^\. ']+|'([^']|'')+'))?\.$?[A-Z]+" } cellRangeAddressList = xsd:string >> dc:description [ 'Value is a space separated list of "cellRangeAddress" patterns' ] table-table-source = element table:table-source { table-table-source-attlist, table-linked-source-attlist, empty } table-table-source-attlist = attribute table:mode { "copy-all" | "copy-results-only" }? & attribute table:table-name { \string }? table-linked-source-attlist = attribute xlink:type { "simple" } & attribute xlink:href { anyIRI } & attribute xlink:actuate { "onRequest" }? & attribute table:filter-name { \string }? & attribute table:filter-options { \string }? & attribute table:refresh-delay { duration }? table-scenario = element table:scenario { table-scenario-attlist, empty } table-scenario-attlist = attribute table:scenario-ranges { cellRangeAddressList } & attribute table:is-active { boolean } & attribute table:display-border { boolean }? & attribute table:border-color { color }? & attribute table:copy-back { boolean }? & attribute table:copy-styles { boolean }? & attribute table:copy-formulas { boolean }? & attribute table:comment { \string }? & attribute table:protected { boolean }? table-shapes = element table:shapes { shape+ } table-cell-range-source = element table:cell-range-source { table-table-cell-range-source-attlist, table-linked-source-attlist, empty } table-table-cell-range-source-attlist = attribute table:name { \string } & attribute table:last-column-spanned { positiveInteger } & attribute table:last-row-spanned { positiveInteger } table-detective = element table:detective { table-highlighted-range*, table-operation* } table-operation = element table:operation { table-operation-attlist, empty } table-operation-attlist = attribute table:name { "trace-dependents" | "remove-dependents" | "trace-precedents" | "remove-precedents" | "trace-errors" } & attribute table:index { nonNegativeInteger } table-highlighted-range = element table:highlighted-range { (table-highlighted-range-attlist | table-highlighted-range-attlist-invalid), empty } table-highlighted-range-attlist = attribute table:cell-range-address { cellRangeAddress }? & attribute table:direction { "from-another-table" | "to-another-table" | "from-same-table" } & attribute table:contains-error { boolean }? table-highlighted-range-attlist-invalid = attribute table:marked-invalid { boolean } office-spreadsheet-attlist = attribute table:structure-protected { boolean }?, attribute table:protection-key { \string }?, attribute table:protection-key-digest-algorithm { anyIRI }? table-calculation-settings = element table:calculation-settings { table-calculation-setting-attlist, table-null-date?, table-iteration? } table-calculation-setting-attlist = attribute table:case-sensitive { boolean }? & attribute table:precision-as-shown { boolean }? & attribute table:search-criteria-must-apply-to-whole-cell { boolean }? & attribute table:automatic-find-labels { boolean }? & attribute table:use-regular-expressions { boolean }? & attribute table:use-wildcards { boolean }? & attribute table:null-year { positiveInteger }? table-null-date = element table:null-date { attribute table:value-type { "date" }?, attribute table:date-value { date }?, empty } table-iteration = element table:iteration { attribute table:status { "enable" | "disable" }?, attribute table:steps { positiveInteger }?, attribute table:maximum-difference { double }?, empty } table-content-validations = element table:content-validations { table-content-validation+ } table-content-validation = element table:content-validation { table-validation-attlist, table-help-message?, (table-error-message | (table-error-macro, office-event-listeners))? } table-validation-attlist = attribute table:name { \string } & attribute table:condition { \string }? & attribute table:base-cell-address { cellAddress }? & attribute table:allow-empty-cell { boolean }? & attribute table:display-list { "none" | "unsorted" | "sort-ascending" }? table-help-message = element table:help-message { attribute table:title { \string }?, attribute table:display { boolean }?, text-p* } table-error-message = element table:error-message { attribute table:title { \string }?, attribute table:display { boolean }?, attribute table:message-type { "stop" | "warning" | "information" }?, text-p* } table-error-macro = element table:error-macro { attribute table:execute { boolean }? } table-label-ranges = element table:label-ranges { table-label-range* } table-label-range = element table:label-range { table-label-range-attlist, empty } table-label-range-attlist = attribute table:label-cell-range-address { cellRangeAddress } & attribute table:data-cell-range-address { cellRangeAddress } & attribute table:orientation { "column" | "row" } table-named-expressions = element table:named-expressions { (table-named-range | table-named-expression)* } table-named-range = element table:named-range { table-named-range-attlist, empty } table-named-range-attlist = attribute table:name { \string }, attribute table:cell-range-address { cellRangeAddress }, attribute table:base-cell-address { cellAddress }?, attribute table:range-usable-as { "none" | list { ("print-range" | "filter" | "repeat-row" | "repeat-column")+ } }? table-named-expression = element table:named-expression { table-named-expression-attlist, empty } table-named-expression-attlist = attribute table:name { \string }, attribute table:expression { \string }, attribute table:base-cell-address { cellAddress }? table-database-ranges = element table:database-ranges { table-database-range* } table-database-range = element table:database-range { table-database-range-attlist, (table-database-source-sql | table-database-source-table | table-database-source-query)?, table-filter?, table-sort?, table-subtotal-rules? } table-database-range-attlist = attribute table:name { \string }? & attribute table:is-selection { boolean }? & attribute table:on-update-keep-styles { boolean }? & attribute table:on-update-keep-size { boolean }? & attribute table:has-persistent-data { boolean }? & attribute table:orientation { "column" | "row" }? & attribute table:contains-header { boolean }? & attribute table:display-filter-buttons { boolean }? & attribute table:target-range-address { cellRangeAddress } & attribute table:refresh-delay { boolean }? table-database-source-sql = element table:database-source-sql { table-database-source-sql-attlist, empty } table-database-source-sql-attlist = attribute table:database-name { \string } & attribute table:sql-statement { \string } & attribute table:parse-sql-statement { boolean }? table-database-source-query = element table:database-source-table { table-database-source-table-attlist, empty } table-database-source-table-attlist = attribute table:database-name { \string } & attribute table:database-table-name { \string } table-database-source-table = element table:database-source-query { table-database-source-query-attlist, empty } table-database-source-query-attlist = attribute table:database-name { \string } & attribute table:query-name { \string } table-sort = element table:sort { table-sort-attlist, table-sort-by+ } table-sort-attlist = attribute table:bind-styles-to-content { boolean }? & attribute table:target-range-address { cellRangeAddress }? & attribute table:case-sensitive { boolean }? & attribute table:language { languageCode }? & attribute table:country { countryCode }? & attribute table:script { scriptCode }? & attribute table:rfc-language-tag { language }? & attribute table:algorithm { \string }? & attribute table:embedded-number-behavior { "alpha-numeric" | "integer" | "double" }? table-sort-by = element table:sort-by { table-sort-by-attlist, empty } table-sort-by-attlist = attribute table:field-number { nonNegativeInteger } & attribute table:data-type { "text" | "number" | "automatic" | \string }? & attribute table:order { "ascending" | "descending" }? table-subtotal-rules = element table:subtotal-rules { table-subtotal-rules-attlist, table-sort-groups?, table-subtotal-rule* } table-subtotal-rules-attlist = attribute table:bind-styles-to-content { boolean }? & attribute table:case-sensitive { boolean }? & attribute table:page-breaks-on-group-change { boolean }? table-sort-groups = element table:sort-groups { table-sort-groups-attlist, empty } table-sort-groups-attlist = attribute table:data-type { "text" | "number" | "automatic" | \string }? & attribute table:order { "ascending" | "descending" }? table-subtotal-rule = element table:subtotal-rule { table-subtotal-rule-attlist, table-subtotal-field* } table-subtotal-rule-attlist = attribute table:group-by-field-number { nonNegativeInteger } table-subtotal-field = element table:subtotal-field { table-subtotal-field-attlist, empty } table-subtotal-field-attlist = attribute table:field-number { nonNegativeInteger } & attribute table:function { "average" | "count" | "countnums" | "max" | "min" | "product" | "stdev" | "stdevp" | "sum" | "var" | "varp" | \string } table-filter = element table:filter { table-filter-attlist, (table-filter-condition | table-filter-and | table-filter-or) } table-filter-attlist = attribute table:target-range-address { cellRangeAddress }? & attribute table:condition-source { "self" | "cell-range" }? & attribute table:condition-source-range-address { cellRangeAddress }? & attribute table:display-duplicates { boolean }? table-filter-and = element table:filter-and { (table-filter-or | table-filter-condition)+ } table-filter-or = element table:filter-or { (table-filter-and | table-filter-condition)+ } table-filter-condition = element table:filter-condition { table-filter-condition-attlist, table-filter-set-item* } table-filter-condition-attlist = attribute table:field-number { nonNegativeInteger } & attribute table:value { \string | double } & attribute table:operator { \string } & attribute table:case-sensitive { \string }? & attribute table:data-type { "text" | "number" }? table-filter-set-item = element table:filter-set-item { attribute table:value { \string }, empty } table-data-pilot-tables = element table:data-pilot-tables { table-data-pilot-table* } table-data-pilot-table = element table:data-pilot-table { table-data-pilot-table-attlist, (table-database-source-sql | table-database-source-table | table-database-source-query | table-source-service | table-source-cell-range)?, table-data-pilot-field+ } table-data-pilot-table-attlist = attribute table:name { \string } & attribute table:application-data { \string }? & attribute table:grand-total { "none" | "row" | "column" | "both" }? & attribute table:ignore-empty-rows { boolean }? & attribute table:identify-categories { boolean }? & attribute table:target-range-address { cellRangeAddress } & attribute table:buttons { cellRangeAddressList }? & attribute table:show-filter-button { boolean }? & attribute table:drill-down-on-double-click { boolean }? table-source-cell-range = element table:source-cell-range { table-source-cell-range-attlist, table-filter? } table-source-cell-range-attlist = attribute table:cell-range-address { cellRangeAddress } table-source-service = element table:source-service { table-source-service-attlist, empty } table-source-service-attlist = attribute table:name { \string } & attribute table:source-name { \string } & attribute table:object-name { \string } & attribute table:user-name { \string }? & attribute table:password { \string }? table-data-pilot-field = element table:data-pilot-field { table-data-pilot-field-attlist, table-data-pilot-level?, table-data-pilot-field-reference?, table-data-pilot-groups? } table-data-pilot-field-attlist = attribute table:source-field-name { \string } & (attribute table:orientation { "row" | "column" | "data" | "hidden" } | (attribute table:orientation { "page" }, attribute table:selected-page { \string })) & attribute table:is-data-layout-field { \string }? & attribute table:function { "auto" | "average" | "count" | "countnums" | "max" | "min" | "product" | "stdev" | "stdevp" | "sum" | "var" | "varp" | \string }? & attribute table:used-hierarchy { integer }? table-data-pilot-level = element table:data-pilot-level { table-data-pilot-level-attlist, table-data-pilot-subtotals?, table-data-pilot-members?, table-data-pilot-display-info?, table-data-pilot-sort-info?, table-data-pilot-layout-info? } table-data-pilot-level-attlist = attribute table:show-empty { boolean }? table-data-pilot-subtotals = element table:data-pilot-subtotals { table-data-pilot-subtotal* } table-data-pilot-subtotal = element table:data-pilot-subtotal { table-data-pilot-subtotal-attlist, empty } table-data-pilot-subtotal-attlist = attribute table:function { "auto" | "average" | "count" | "countnums" | "max" | "min" | "product" | "stdev" | "stdevp" | "sum" | "var" | "varp" | \string } table-data-pilot-members = element table:data-pilot-members { table-data-pilot-member* } table-data-pilot-member = element table:data-pilot-member { table-data-pilot-member-attlist, empty } table-data-pilot-member-attlist = attribute table:name { \string } & attribute table:display { boolean }? & attribute table:show-details { boolean }? table-data-pilot-display-info = element table:data-pilot-display-info { table-data-pilot-display-info-attlist, empty } table-data-pilot-display-info-attlist = attribute table:enabled { boolean } & attribute table:data-field { \string } & attribute table:member-count { nonNegativeInteger } & attribute table:display-member-mode { "from-top" | "from-bottom" } table-data-pilot-sort-info = element table:data-pilot-sort-info { table-data-pilot-sort-info-attlist, empty } table-data-pilot-sort-info-attlist = ((attribute table:sort-mode { "data" }, attribute table:data-field { \string }) | attribute table:sort-mode { "none" | "manual" | "name" }) & attribute table:order { "ascending" | "descending" } table-data-pilot-layout-info = element table:data-pilot-layout-info { table-data-pilot-layout-info-attlist, empty } table-data-pilot-layout-info-attlist = attribute table:layout-mode { "tabular-layout" | "outline-subtotals-top" | "outline-subtotals-bottom" } & attribute table:add-empty-lines { boolean } table-data-pilot-field-reference = element table:data-pilot-field-reference { table-data-pilot-field-reference-attlist } table-data-pilot-field-reference-attlist = attribute table:field-name { \string } & ((attribute table:member-type { "named" }, attribute table:member-name { \string }) | attribute table:member-type { "previous" | "next" }) & attribute table:type { "none" | "member-difference" | "member-percentage" | "member-percentage-difference" | "running-total" | "row-percentage" | "column-percentage" | "total-percentage" | "index" } table-data-pilot-groups = element table:data-pilot-groups { table-data-pilot-groups-attlist, table-data-pilot-group+ } table-data-pilot-groups-attlist = attribute table:source-field-name { \string } & (attribute table:date-start { dateOrDateTime | "auto" } | attribute table:start { double | "auto" }) & (attribute table:date-end { dateOrDateTime | "auto" } | attribute table:end { double | "auto" }) & attribute table:step { double } & attribute table:grouped-by { "seconds" | "minutes" | "hours" | "days" | "months" | "quarters" | "years" } table-data-pilot-group = element table:data-pilot-group { table-data-pilot-group-attlist, table-data-pilot-group-member+ } table-data-pilot-group-attlist = attribute table:name { \string } table-data-pilot-group-member = element table:data-pilot-group-member { table-data-pilot-group-member-attlist } table-data-pilot-group-member-attlist = attribute table:name { \string } table-consolidation = element table:consolidation { table-consolidation-attlist, empty } table-consolidation-attlist = attribute table:function { "average" | "count" | "countnums" | "max" | "min" | "product" | "stdev" | "stdevp" | "sum" | "var" | "varp" | \string } & attribute table:source-cell-range-addresses { cellRangeAddressList } & attribute table:target-cell-address { cellAddress } & attribute table:use-labels { "none" | "row" | "column" | "both" }? & attribute table:link-to-source-data { boolean }? table-dde-links = element table:dde-links { table-dde-link+ } table-tracked-changes = element table:tracked-changes { table-tracked-changes-attlist, (table-cell-content-change | table-insertion | table-deletion | table-movement)* } table-tracked-changes-attlist = attribute table:track-changes { boolean }? table-insertion = element table:insertion { table-insertion-attlist, common-table-change-attlist, office-change-info, table-dependencies?, table-deletions? } table-insertion-attlist = attribute table:type { "row" | "column" | "table" } & attribute table:position { integer } & attribute table:count { positiveInteger }? & attribute table:table { integer }? table-dependencies = element table:dependencies { table-dependency+ } table-dependency = element table:dependency { attribute table:id { \string }, empty } table-deletions = element table:deletions { (table-cell-content-deletion | table-change-deletion)+ } table-cell-content-deletion = element table:cell-content-deletion { attribute table:id { \string }?, table-cell-address?, table-change-track-table-cell? } table-change-deletion = element table:change-deletion { attribute table:id { \string }?, empty } table-deletion = element table:deletion { table-deletion-attlist, common-table-change-attlist, office-change-info, table-dependencies?, table-deletions?, table-cut-offs? } table-deletion-attlist = attribute table:type { "row" | "column" | "table" } & attribute table:position { integer } & attribute table:table { integer }? & attribute table:multi-deletion-spanned { integer }? table-cut-offs = element table:cut-offs { table-movement-cut-off+ | (table-insertion-cut-off, table-movement-cut-off*) } table-insertion-cut-off = element table:insertion-cut-off { table-insertion-cut-off-attlist, empty } table-insertion-cut-off-attlist = attribute table:id { \string } & attribute table:position { integer } table-movement-cut-off = element table:movement-cut-off { table-movement-cut-off-attlist, empty } table-movement-cut-off-attlist = attribute table:position { integer } | (attribute table:start-position { integer }, attribute table:end-position { integer }) table-movement = element table:movement { common-table-change-attlist, table-source-range-address, table-target-range-address, office-change-info, table-dependencies?, table-deletions? } table-source-range-address = element table:source-range-address { common-table-range-attlist, empty } table-target-range-address = element table:target-range-address { common-table-range-attlist, empty } common-table-range-attlist = common-table-cell-address-attlist | common-table-cell-range-address-attlist common-table-cell-address-attlist = attribute table:column { integer }, attribute table:row { integer }, attribute table:table { integer } common-table-cell-range-address-attlist = attribute table:start-column { integer }, attribute table:start-row { integer }, attribute table:start-table { integer }, attribute table:end-column { integer }, attribute table:end-row { integer }, attribute table:end-table { integer } table-change-track-table-cell = element table:change-track-table-cell { table-change-track-table-cell-attlist, text-p* } table-change-track-table-cell-attlist = attribute table:cell-address { cellAddress }? & attribute table:matrix-covered { boolean }? & attribute table:formula { \string }? & attribute table:number-matrix-columns-spanned { positiveInteger }? & attribute table:number-matrix-rows-spanned { positiveInteger }? & common-value-and-type-attlist? table-cell-content-change = element table:cell-content-change { common-table-change-attlist, table-cell-address, office-change-info, table-dependencies?, table-deletions?, table-previous } table-cell-address = element table:cell-address { common-table-cell-address-attlist, empty } table-previous = element table:previous { attribute table:id { \string }?, table-change-track-table-cell } common-table-change-attlist = attribute table:id { \string } & attribute table:acceptance-state { "accepted" | "rejected" | "pending" }? & attribute table:rejecting-change-id { \string }? style-handout-master = element style:handout-master { common-presentation-header-footer-attlist, style-handout-master-attlist, shape* } style-handout-master-attlist = attribute presentation:presentation-page-layout-name { styleNameRef }? & attribute style:page-layout-name { styleNameRef } & attribute draw:style-name { styleNameRef }? draw-layer-set = element draw:layer-set { draw-layer* } draw-layer = element draw:layer { draw-layer-attlist, svg-title?, svg-desc? } draw-layer-attlist = attribute draw:name { \string } & attribute draw:protected { boolean }? & attribute draw:display { "always" | "screen" | "printer" | "none" }? draw-page = element draw:page { common-presentation-header-footer-attlist, draw-page-attlist, svg-title?, svg-desc?, draw-layer-set?, office-forms?, shape*, (presentation-animations | animation-element)?, presentation-notes? } draw-page-attlist = attribute draw:name { \string }? & attribute draw:style-name { styleNameRef }? & attribute draw:master-page-name { styleNameRef } & attribute presentation:presentation-page-layout-name { styleNameRef }? & (xml-id, attribute draw:id { NCName }?)? & attribute draw:nav-order { IDREFS }? common-presentation-header-footer-attlist = attribute presentation:use-header-name { \string }? & attribute presentation:use-footer-name { \string }? & attribute presentation:use-date-time-name { \string }? shape = shape-instance | draw-a shape-instance = draw-rect | draw-line | draw-polyline | draw-polygon | draw-regular-polygon | draw-path | draw-circle | draw-ellipse | draw-g | draw-page-thumbnail | draw-frame | draw-measure | draw-caption | draw-connector | draw-control | dr3d-scene | draw-custom-shape draw-rect = element draw:rect { draw-rect-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-rect-attlist = attribute draw:corner-radius { nonNegativeLength }? | (attribute svg:rx { nonNegativeLength }?, attribute svg:ry { nonNegativeLength }?) draw-line = element draw:line { draw-line-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-line-attlist = attribute svg:x1 { coordinate } & attribute svg:y1 { coordinate } & attribute svg:x2 { coordinate } & attribute svg:y2 { coordinate } draw-polyline = element draw:polyline { common-draw-points-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-viewbox-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } common-draw-points-attlist = attribute draw:points { points } draw-polygon = element draw:polygon { common-draw-points-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-viewbox-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-regular-polygon = element draw:regular-polygon { draw-regular-polygon-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-regular-polygon-attlist = (attribute draw:concave { "false" } | (attribute draw:concave { "true" }, draw-regular-polygon-sharpness-attlist)) & attribute draw:corners { positiveInteger } draw-regular-polygon-sharpness-attlist = attribute draw:sharpness { percent } draw-path = element draw:path { common-draw-path-data-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-viewbox-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } common-draw-path-data-attlist = attribute svg:d { pathData } draw-circle = element draw:circle { ((draw-circle-attlist, common-draw-circle-ellipse-pos-attlist) | (common-draw-position-attlist, common-draw-size-attlist)), common-draw-circle-ellipse-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } common-draw-circle-ellipse-pos-attlist = attribute svg:cx { coordinate }, attribute svg:cy { coordinate } draw-circle-attlist = attribute svg:r { length } common-draw-circle-ellipse-attlist = attribute draw:kind { "full" | "section" | "cut" | "arc" }? & attribute draw:start-angle { angle }? & attribute draw:end-angle { angle }? draw-ellipse = element draw:ellipse { ((draw-ellipse-attlist, common-draw-circle-ellipse-pos-attlist) | (common-draw-position-attlist, common-draw-size-attlist)), common-draw-circle-ellipse-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-ellipse-attlist = attribute svg:rx { length }, attribute svg:ry { length } draw-connector = element draw:connector { draw-connector-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, common-draw-viewbox-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-connector-attlist = attribute draw:type { "standard" | "lines" | "line" | "curve" }? & (attribute svg:x1 { coordinate }, attribute svg:y1 { coordinate })? & attribute draw:start-shape { IDREF }? & attribute draw:start-glue-point { nonNegativeInteger }? & (attribute svg:x2 { coordinate }, attribute svg:y2 { coordinate })? & attribute draw:end-shape { IDREF }? & attribute draw:end-glue-point { nonNegativeInteger }? & attribute draw:line-skew { list { length, (length, length?)? } }? & attribute svg:d { pathData }? draw-caption = element draw:caption { draw-caption-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-caption-attlist = (attribute draw:caption-point-x { coordinate }, attribute draw:caption-point-y { coordinate })? & attribute draw:corner-radius { nonNegativeLength }? draw-measure = element draw:measure { draw-measure-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text } draw-measure-attlist = attribute svg:x1 { coordinate } & attribute svg:y1 { coordinate } & attribute svg:x2 { coordinate } & attribute svg:y2 { coordinate } draw-control = element draw:control { draw-control-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, draw-glue-point* } draw-control-attlist = attribute draw:control { IDREF } draw-page-thumbnail = element draw:page-thumbnail { draw-page-thumbnail-attlist, common-draw-position-attlist, common-draw-size-attlist, presentation-shape-attlist, common-draw-shape-with-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc? } draw-page-thumbnail-attlist = attribute draw:page-number { positiveInteger }? draw-g = element draw:g { draw-g-attlist, common-draw-z-index-attlist, common-draw-name-attlist, common-draw-id-attlist, common-draw-style-name-attlist, common-text-spreadsheet-shape-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, shape* } draw-g-attlist = attribute svg:y { coordinate }? common-draw-name-attlist = attribute draw:name { \string }? common-draw-caption-id-attlist = attribute draw:caption-id { IDREF }? common-draw-position-attlist = attribute svg:x { coordinate }?, attribute svg:y { coordinate }? common-draw-size-attlist = attribute svg:width { length }?, attribute svg:height { length }? common-draw-transform-attlist = attribute draw:transform { \string }? common-draw-viewbox-attlist = attribute svg:viewBox { list { integer, integer, integer, integer } } common-draw-style-name-attlist = (attribute draw:style-name { styleNameRef }?, attribute draw:class-names { styleNameRefs }?) | (attribute presentation:style-name { styleNameRef }?, attribute presentation:class-names { styleNameRefs }?) common-draw-text-style-name-attlist = attribute draw:text-style-name { styleNameRef }? common-draw-layer-name-attlist = attribute draw:layer { \string }? common-draw-id-attlist = (xml-id, attribute draw:id { NCName }?)? common-draw-z-index-attlist = attribute draw:z-index { nonNegativeInteger }? common-text-spreadsheet-shape-attlist = attribute table:end-cell-address { cellAddress }? & attribute table:end-x { coordinate }? & attribute table:end-y { coordinate }? & attribute table:table-background { boolean }? & common-text-anchor-attlist common-text-anchor-attlist = attribute text:anchor-type { "page" | "frame" | "paragraph" | "char" | "as-char" }? & attribute text:anchor-page-number { positiveInteger }? draw-text = (text-p | text-list)* common-draw-shape-with-styles-attlist = common-draw-z-index-attlist, common-draw-id-attlist, common-draw-layer-name-attlist, common-draw-style-name-attlist, common-draw-transform-attlist, common-draw-name-attlist, common-text-spreadsheet-shape-attlist common-draw-shape-with-text-and-styles-attlist = common-draw-shape-with-styles-attlist, common-draw-text-style-name-attlist draw-glue-point = element draw:glue-point { draw-glue-point-attlist, empty } draw-glue-point-attlist = attribute draw:id { nonNegativeInteger } & attribute svg:x { distance | percent } & attribute svg:y { distance | percent } & attribute draw:align { "top-left" | "top" | "top-right" | "left" | "center" | "right" | "bottom-left" | "bottom-right" }? & attribute draw:escape-direction { "auto" | "left" | "right" | "up" | "down" | "horizontal" | "vertical" } svg-title = element svg:title { text } svg-desc = element svg:desc { text } draw-frame = element draw:frame { common-draw-shape-with-text-and-styles-attlist, common-draw-position-attlist, common-draw-rel-size-attlist, common-draw-caption-id-attlist, presentation-shape-attlist, draw-frame-attlist, (draw-text-box | draw-image | draw-object | draw-object-ole | draw-applet | draw-floating-frame | draw-plugin | table-table)*, office-event-listeners?, draw-glue-point*, draw-image-map?, svg-title?, svg-desc?, (draw-contour-polygon | draw-contour-path)? } common-draw-rel-size-attlist = common-draw-size-attlist, attribute style:rel-width { percent | "scale" | "scale-min" }?, attribute style:rel-height { percent | "scale" | "scale-min" }? draw-frame-attlist = attribute draw:copy-of { \string }? draw-text-box = element draw:text-box { draw-text-box-attlist, text-content* } draw-text-box-attlist = attribute draw:chain-next-name { \string }? & attribute draw:corner-radius { nonNegativeLength }? & attribute fo:min-height { length | percent }? & attribute fo:min-width { length | percent }? & attribute fo:max-height { length | percent }? & attribute fo:max-width { length | percent }? & (xml-id, attribute text:id { NCName }?)? draw-image = element draw:image { draw-image-attlist, (common-draw-data-attlist | office-binary-data), draw-text } common-draw-data-attlist = attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:show { "embed" }?, attribute xlink:actuate { "onLoad" }? office-binary-data = element office:binary-data { base64Binary } draw-image-attlist = attribute draw:filter-name { \string }? & xml-id? draw-object = element draw:object { draw-object-attlist, (common-draw-data-attlist | office-document | math-math) } draw-object-ole = element draw:object-ole { draw-object-ole-attlist, (common-draw-data-attlist | office-binary-data) } draw-object-attlist = attribute draw:notify-on-update-of-ranges { cellRangeAddressList | \string }? & xml-id? draw-object-ole-attlist = attribute draw:class-id { \string }? & xml-id? draw-applet = element draw:applet { draw-applet-attlist, common-draw-data-attlist?, draw-param* } draw-applet-attlist = attribute draw:code { \string }? & attribute draw:object { \string }? & attribute draw:archive { \string }? & attribute draw:may-script { boolean }? & xml-id? draw-plugin = element draw:plugin { draw-plugin-attlist, common-draw-data-attlist, draw-param* } draw-plugin-attlist = attribute draw:mime-type { \string }? & xml-id? draw-param = element draw:param { draw-param-attlist, empty } draw-param-attlist = attribute draw:name { \string }? & attribute draw:value { \string }? draw-floating-frame = element draw:floating-frame { draw-floating-frame-attlist, common-draw-data-attlist } draw-floating-frame-attlist = attribute draw:frame-name { \string }? & xml-id? draw-contour-polygon = element draw:contour-polygon { common-contour-attlist, common-draw-size-attlist, common-draw-viewbox-attlist, common-draw-points-attlist, empty } draw-contour-path = element draw:contour-path { common-contour-attlist, common-draw-size-attlist, common-draw-viewbox-attlist, common-draw-path-data-attlist, empty } common-contour-attlist = attribute draw:recreate-on-edit { boolean } draw-a = element draw:a { draw-a-attlist, shape-instance } draw-a-attlist = attribute xlink:type { "simple" } & attribute xlink:href { anyIRI } & attribute xlink:actuate { "onRequest" }? & attribute office:target-frame-name { targetFrameName }? & attribute xlink:show { "new" | "replace" }? & attribute office:name { \string }? & attribute office:title { \string }? & attribute office:server-map { boolean }? & xml-id? draw-image-map = element draw:image-map { (draw-area-rectangle | draw-area-circle | draw-area-polygon)* } draw-area-rectangle = element draw:area-rectangle { common-draw-area-attlist, attribute svg:x { coordinate }, attribute svg:y { coordinate }, attribute svg:width { length }, attribute svg:height { length }, svg-title?, svg-desc?, office-event-listeners? } draw-area-circle = element draw:area-circle { common-draw-area-attlist, attribute svg:cx { coordinate }, attribute svg:cy { coordinate }, attribute svg:r { length }, svg-title?, svg-desc?, office-event-listeners? } draw-area-polygon = element draw:area-polygon { common-draw-area-attlist, attribute svg:x { coordinate }, attribute svg:y { coordinate }, attribute svg:width { length }, attribute svg:height { length }, common-draw-viewbox-attlist, common-draw-points-attlist, svg-title?, svg-desc?, office-event-listeners? } common-draw-area-attlist = (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute office:target-frame-name { targetFrameName }?, attribute xlink:show { "new" | "replace" }?)? & attribute office:name { \string }? & attribute draw:nohref { "nohref" }? dr3d-scene = element dr3d:scene { dr3d-scene-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-style-name-attlist, common-draw-z-index-attlist, common-draw-id-attlist, common-draw-layer-name-attlist, common-text-spreadsheet-shape-attlist, common-dr3d-transform-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, dr3d-light*, shapes3d*, draw-glue-point* } shapes3d = dr3d-scene | dr3d-extrude | dr3d-sphere | dr3d-rotate | dr3d-cube dr3d-scene-attlist = attribute dr3d:vrp { vector3D }? & attribute dr3d:vpn { vector3D }? & attribute dr3d:vup { vector3D }? & attribute dr3d:projection { "parallel" | "perspective" }? & attribute dr3d:distance { length }? & attribute dr3d:focal-length { length }? & attribute dr3d:shadow-slant { angle }? & attribute dr3d:shade-mode { "flat" | "phong" | "gouraud" | "draft" }? & attribute dr3d:ambient-color { color }? & attribute dr3d:lighting-mode { boolean }? common-dr3d-transform-attlist = attribute dr3d:transform { \string }? dr3d-light = element dr3d:light { dr3d-light-attlist, empty } dr3d-light-attlist = attribute dr3d:diffuse-color { color }? & attribute dr3d:direction { vector3D } & attribute dr3d:enabled { boolean }? & attribute dr3d:specular { boolean }? dr3d-cube = element dr3d:cube { dr3d-cube-attlist, common-draw-z-index-attlist, common-draw-id-attlist, common-draw-layer-name-attlist, common-draw-style-name-attlist, common-dr3d-transform-attlist, empty } dr3d-cube-attlist = attribute dr3d:min-edge { vector3D }?, attribute dr3d:max-edge { vector3D }? dr3d-sphere = element dr3d:sphere { dr3d-sphere-attlist, common-draw-z-index-attlist, common-draw-id-attlist, common-draw-layer-name-attlist, common-draw-style-name-attlist, common-dr3d-transform-attlist, empty } dr3d-sphere-attlist = attribute dr3d:center { vector3D }? & attribute dr3d:size { vector3D }? dr3d-extrude = element dr3d:extrude { common-draw-path-data-attlist, common-draw-viewbox-attlist, common-draw-id-attlist, common-draw-z-index-attlist, common-draw-layer-name-attlist, common-draw-style-name-attlist, common-dr3d-transform-attlist, empty } dr3d-rotate = element dr3d:rotate { common-draw-viewbox-attlist, common-draw-path-data-attlist, common-draw-z-index-attlist, common-draw-id-attlist, common-draw-layer-name-attlist, common-draw-style-name-attlist, common-dr3d-transform-attlist, empty } draw-custom-shape = element draw:custom-shape { draw-custom-shape-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-shape-with-text-and-styles-attlist, common-draw-caption-id-attlist, svg-title?, svg-desc?, office-event-listeners?, draw-glue-point*, draw-text, draw-enhanced-geometry? } draw-custom-shape-attlist = attribute draw:engine { namespacedToken }? & attribute draw:data { \string }? draw-enhanced-geometry = element draw:enhanced-geometry { draw-enhanced-geometry-attlist, draw-equation*, draw-handle* } draw-enhanced-geometry-attlist = attribute draw:type { custom-shape-type }? & attribute svg:viewBox { list { integer, integer, integer, integer } }? & attribute draw:mirror-vertical { boolean }? & attribute draw:mirror-horizontal { boolean }? & attribute draw:text-rotate-angle { angle }? & attribute draw:extrusion-allowed { boolean }? & attribute draw:text-path-allowed { boolean }? & attribute draw:concentric-gradient-fill-allowed { boolean }? & attribute draw:extrusion { boolean }? & attribute draw:extrusion-brightness { zeroToHundredPercent }? & attribute draw:extrusion-depth { list { length, double } }? & attribute draw:extrusion-diffusion { percent }? & attribute draw:extrusion-number-of-line-segments { integer }? & attribute draw:extrusion-light-face { boolean }? & attribute draw:extrusion-first-light-harsh { boolean }? & attribute draw:extrusion-second-light-harsh { boolean }? & attribute draw:extrusion-first-light-level { zeroToHundredPercent }? & attribute draw:extrusion-second-light-level { zeroToHundredPercent }? & attribute draw:extrusion-first-light-direction { vector3D }? & attribute draw:extrusion-second-light-direction { vector3D }? & attribute draw:extrusion-metal { boolean }? & attribute dr3d:shade-mode { "flat" | "phong" | "gouraud" | "draft" }? & attribute draw:extrusion-rotation-angle { list { angle, angle } }? & attribute draw:extrusion-rotation-center { vector3D }? & attribute draw:extrusion-shininess { zeroToHundredPercent }? & attribute draw:extrusion-skew { list { double, angle } }? & attribute draw:extrusion-specularity { zeroToHundredPercent }? & attribute dr3d:projection { "parallel" | "perspective" }? & attribute draw:extrusion-viewpoint { point3D }? & attribute draw:extrusion-origin { list { extrusionOrigin, extrusionOrigin } }? & attribute draw:extrusion-color { boolean }? & attribute draw:enhanced-path { \string }? & attribute draw:path-stretchpoint-x { double }? & attribute draw:path-stretchpoint-y { double }? & attribute draw:text-areas { \string }? & attribute draw:glue-points { \string }? & attribute draw:glue-point-type { "none" | "segments" | "rectangle" }? & attribute draw:glue-point-leaving-directions { \string }? & attribute draw:text-path { boolean }? & attribute draw:text-path-mode { "normal" | "path" | "shape" }? & attribute draw:text-path-scale { "path" | "shape" }? & attribute draw:text-path-same-letter-heights { boolean }? & attribute draw:modifiers { \string }? custom-shape-type = "non-primitive" | \string point3D = xsd:string { pattern = "\([ ]*-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc))([ ]+-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc))){2}[ ]*\)" } extrusionOrigin = xsd:double { minInclusive = "-0.5" maxInclusive = "0.5" } draw-equation = element draw:equation { draw-equation-attlist, empty } draw-equation-attlist = attribute draw:name { \string }? & attribute draw:formula { \string }? draw-handle = element draw:handle { draw-handle-attlist, empty } draw-handle-attlist = attribute draw:handle-mirror-vertical { boolean }? & attribute draw:handle-mirror-horizontal { boolean }? & attribute draw:handle-switched { boolean }? & attribute draw:handle-position { \string } & attribute draw:handle-range-x-minimum { \string }? & attribute draw:handle-range-x-maximum { \string }? & attribute draw:handle-range-y-minimum { \string }? & attribute draw:handle-range-y-maximum { \string }? & attribute draw:handle-polar { \string }? & attribute draw:handle-radius-range-minimum { \string }? & attribute draw:handle-radius-range-maximum { \string }? presentation-shape-attlist = attribute presentation:class { presentation-classes }? & attribute presentation:placeholder { boolean }? & attribute presentation:user-transformed { boolean }? presentation-classes = "title" | "outline" | "subtitle" | "text" | "graphic" | "object" | "chart" | "table" | "orgchart" | "page" | "notes" | "handout" | "header" | "footer" | "date-time" | "page-number" presentation-animations = element presentation:animations { (presentation-animation-elements | presentation-animation-group)* } presentation-animation-elements = presentation-show-shape | presentation-show-text | presentation-hide-shape | presentation-hide-text | presentation-dim | presentation-play presentation-sound = element presentation:sound { presentation-sound-attlist, attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:actuate { "onRequest" }?, attribute xlink:show { "new" | "replace" }?, empty } presentation-sound-attlist = attribute presentation:play-full { boolean }? & xml-id? presentation-show-shape = element presentation:show-shape { common-presentation-effect-attlist, presentation-sound? } common-presentation-effect-attlist = attribute draw:shape-id { IDREF } & attribute presentation:effect { presentationEffects }? & attribute presentation:direction { presentationEffectDirections }? & attribute presentation:speed { presentationSpeeds }? & attribute presentation:delay { duration }? & attribute presentation:start-scale { percent }? & attribute presentation:path-id { \string }? presentationEffects = "none" | "fade" | "move" | "stripes" | "open" | "close" | "dissolve" | "wavyline" | "random" | "lines" | "laser" | "appear" | "hide" | "move-short" | "checkerboard" | "rotate" | "stretch" presentationEffectDirections = "none" | "from-left" | "from-top" | "from-right" | "from-bottom" | "from-center" | "from-upper-left" | "from-upper-right" | "from-lower-left" | "from-lower-right" | "to-left" | "to-top" | "to-right" | "to-bottom" | "to-upper-left" | "to-upper-right" | "to-lower-right" | "to-lower-left" | "path" | "spiral-inward-left" | "spiral-inward-right" | "spiral-outward-left" | "spiral-outward-right" | "vertical" | "horizontal" | "to-center" | "clockwise" | "counter-clockwise" presentationSpeeds = "slow" | "medium" | "fast" presentation-show-text = element presentation:show-text { common-presentation-effect-attlist, presentation-sound? } presentation-hide-shape = element presentation:hide-shape { common-presentation-effect-attlist, presentation-sound? } presentation-hide-text = element presentation:hide-text { common-presentation-effect-attlist, presentation-sound? } presentation-dim = element presentation:dim { presentation-dim-attlist, presentation-sound? } presentation-dim-attlist = attribute draw:shape-id { IDREF } & attribute draw:color { color } presentation-play = element presentation:play { presentation-play-attlist, empty } presentation-play-attlist = attribute draw:shape-id { IDREF }, attribute presentation:speed { presentationSpeeds }? presentation-animation-group = element presentation:animation-group { presentation-animation-elements* } common-anim-attlist = attribute presentation:node-type { "default" | "on-click" | "with-previous" | "after-previous" | "timing-root" | "main-sequence" | "interactive-sequence" }? & attribute presentation:preset-id { \string }? & attribute presentation:preset-sub-type { \string }? & attribute presentation:preset-class { "custom" | "entrance" | "exit" | "emphasis" | "motion-path" | "ole-action" | "media-call" }? & attribute presentation:master-element { IDREF }? & attribute presentation:group-id { \string }? & (xml-id, attribute anim:id { NCName }?)? presentation-event-listener = element presentation:event-listener { presentation-event-listener-attlist, presentation-sound? } presentation-event-listener-attlist = attribute script:event-name { \string } & attribute presentation:action { "none" | "previous-page" | "next-page" | "first-page" | "last-page" | "hide" | "stop" | "execute" | "show" | "verb" | "fade-out" | "sound" | "last-visited-page" } & attribute presentation:effect { presentationEffects }? & attribute presentation:direction { presentationEffectDirections }? & attribute presentation:speed { presentationSpeeds }? & attribute presentation:start-scale { percent }? & (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:show { "embed" }?, attribute xlink:actuate { "onRequest" }?)? & attribute presentation:verb { nonNegativeInteger }? presentation-decls = presentation-decl* presentation-decl = element presentation:header-decl { presentation-header-decl-attlist, text } | element presentation:footer-decl { presentation-footer-decl-attlist, text } | element presentation:date-time-decl { presentation-date-time-decl-attlist, text } presentation-header-decl-attlist = attribute presentation:name { \string } presentation-footer-decl-attlist = attribute presentation:name { \string } presentation-date-time-decl-attlist = attribute presentation:name { \string } & attribute presentation:source { "fixed" | "current-date" } & attribute style:data-style-name { styleNameRef }? presentation-settings = element presentation:settings { presentation-settings-attlist, presentation-show* }? presentation-settings-attlist = attribute presentation:start-page { \string }? & attribute presentation:show { \string }? & attribute presentation:full-screen { boolean }? & attribute presentation:endless { boolean }? & attribute presentation:pause { duration }? & attribute presentation:show-logo { boolean }? & attribute presentation:force-manual { boolean }? & attribute presentation:mouse-visible { boolean }? & attribute presentation:mouse-as-pen { boolean }? & attribute presentation:start-with-navigator { boolean }? & attribute presentation:animations { "enabled" | "disabled" }? & attribute presentation:transition-on-click { "enabled" | "disabled" }? & attribute presentation:stay-on-top { boolean }? & attribute presentation:show-end-of-presentation-slide { boolean }? presentation-show = element presentation:show { presentation-show-attlist, empty } presentation-show-attlist = attribute presentation:name { \string } & attribute presentation:pages { \string } chart-chart = element chart:chart { chart-chart-attlist, chart-title?, chart-subtitle?, chart-footer?, chart-legend?, chart-plot-area, table-table? } chart-chart-attlist = attribute chart:class { namespacedToken } & common-draw-size-attlist & attribute chart:column-mapping { \string }? & attribute chart:row-mapping { \string }? & attribute chart:style-name { styleNameRef }? & (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI })? & xml-id? chart-title = element chart:title { chart-title-attlist, text-p? } chart-title-attlist = attribute table:cell-range { cellRangeAddressList }? & common-draw-position-attlist & attribute chart:style-name { styleNameRef }? chart-subtitle = element chart:subtitle { chart-title-attlist, text-p? } chart-footer = element chart:footer { chart-title-attlist, text-p? } chart-legend = element chart:legend { chart-legend-attlist, text-p? } chart-legend-attlist = ((attribute chart:legend-position { "start" | "end" | "top" | "bottom" }, attribute chart:legend-align { "start" | "center" | "end" }?) | attribute chart:legend-position { "top-start" | "bottom-start" | "top-end" | "bottom-end" } | empty) & common-draw-position-attlist & (attribute style:legend-expansion { "wide" | "high" | "balanced" } | (attribute style:legend-expansion { "custom" }, attribute style:legend-expansion-aspect-ratio { double }) | empty) & attribute chart:style-name { styleNameRef }? chart-plot-area = element chart:plot-area { chart-plot-area-attlist, dr3d-light*, chart-axis*, chart-series*, chart-stock-gain-marker?, chart-stock-loss-marker?, chart-stock-range-line?, chart-wall?, chart-floor? } chart-plot-area-attlist = common-draw-position-attlist & common-draw-size-attlist & attribute chart:style-name { styleNameRef }? & attribute table:cell-range-address { cellRangeAddressList }? & attribute chart:data-source-has-labels { "none" | "row" | "column" | "both" }? & dr3d-scene-attlist & common-dr3d-transform-attlist & xml-id? chart-wall = element chart:wall { chart-wall-attlist, empty } chart-wall-attlist = attribute svg:width { length }? & attribute chart:style-name { styleNameRef }? chart-floor = element chart:floor { chart-floor-attlist, empty } chart-floor-attlist = attribute svg:width { length }? & attribute chart:style-name { styleNameRef }? chart-axis = element chart:axis { chart-axis-attlist, chart-title?, chart-categories?, chart-grid* } chart-axis-attlist = attribute chart:dimension { chart-dimension } & attribute chart:name { \string }? & attribute chart:style-name { styleNameRef }? chart-dimension = "x" | "y" | "z" chart-categories = element chart:categories { attribute table:cell-range-address { cellRangeAddressList }? } chart-grid = element chart:grid { chart-grid-attlist } chart-grid-attlist = attribute chart:class { "major" | "minor" }? & attribute chart:style-name { styleNameRef }? chart-series = element chart:series { chart-series-attlist, chart-domain*, chart-mean-value?, chart-regression-curve*, chart-error-indicator*, chart-data-point*, chart-data-label? } chart-series-attlist = attribute chart:values-cell-range-address { cellRangeAddressList }? & attribute chart:label-cell-address { cellRangeAddressList }? & attribute chart:class { namespacedToken }? & attribute chart:attached-axis { \string }? & attribute chart:style-name { styleNameRef }? & xml-id? chart-domain = element chart:domain { attribute table:cell-range-address { cellRangeAddressList }? } chart-data-point = element chart:data-point { chart-data-point-attlist, chart-data-label? } chart-data-point-attlist = attribute chart:repeated { positiveInteger }? & attribute chart:style-name { styleNameRef }? & xml-id? chart-data-label = element chart:data-label { chart-data-label-attlist, text-p? } chart-data-label-attlist = common-draw-position-attlist & attribute chart:style-name { styleNameRef }? chart-mean-value = element chart:mean-value { chart-mean-value-attlist, empty } chart-mean-value-attlist = attribute chart:style-name { styleNameRef }? chart-error-indicator = element chart:error-indicator { chart-error-indicator-attlist, empty } chart-error-indicator-attlist = attribute chart:style-name { styleNameRef }? & attribute chart:dimension { chart-dimension } chart-regression-curve = element chart:regression-curve { chart-regression-curve-attlist, chart-equation? } chart-regression-curve-attlist = attribute chart:style-name { styleNameRef }? chart-equation = element chart:equation { chart-equation-attlist, text-p? } chart-equation-attlist = attribute chart:automatic-content { boolean }? & attribute chart:display-r-square { boolean }? & attribute chart:display-equation { boolean }? & common-draw-position-attlist & attribute chart:style-name { styleNameRef }? chart-stock-gain-marker = element chart:stock-gain-marker { common-stock-marker-attlist } chart-stock-loss-marker = element chart:stock-loss-marker { common-stock-marker-attlist } chart-stock-range-line = element chart:stock-range-line { common-stock-marker-attlist } common-stock-marker-attlist = attribute chart:style-name { styleNameRef }? office-database = element office:database { db-data-source, db-forms?, db-reports?, db-queries?, db-table-presentations?, db-schema-definition? } db-data-source = element db:data-source { db-data-source-attlist, db-connection-data, db-driver-settings?, db-application-connection-settings? } db-data-source-attlist = empty db-connection-data = element db:connection-data { db-connection-data-attlist, (db-database-description | db-connection-resource), db-login? } db-connection-data-attlist = empty db-database-description = element db:database-description { db-database-description-attlist, (db-file-based-database | db-server-database) } db-database-description-attlist = empty db-file-based-database = element db:file-based-database { db-file-based-database-attlist } db-file-based-database-attlist = attribute xlink:type { "simple" } & attribute xlink:href { anyIRI } & attribute db:media-type { \string } & attribute db:extension { \string }? db-server-database = element db:server-database { db-server-database-attlist, empty } db-server-database-attlist = attribute db:type { namespacedToken } & (db-host-and-port | db-local-socket-name) & attribute db:database-name { \string }? db-host-and-port = attribute db:hostname { \string }, attribute db:port { positiveInteger }? db-local-socket-name = attribute db:local-socket { \string }? db-connection-resource = element db:connection-resource { db-connection-resource-attlist, empty } db-connection-resource-attlist = attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:show { "none" }?, attribute xlink:actuate { "onRequest" }? db-login = element db:login { db-login-attlist, empty } db-login-attlist = (attribute db:user-name { \string } | attribute db:use-system-user { boolean })? & attribute db:is-password-required { boolean }? & attribute db:login-timeout { positiveInteger }? db-driver-settings = element db:driver-settings { db-driver-settings-attlist, db-auto-increment?, db-delimiter?, db-character-set?, db-table-settings? } db-driver-settings-attlist = db-show-deleted & attribute db:system-driver-settings { \string }? & attribute db:base-dn { \string }? & db-is-first-row-header-line & attribute db:parameter-name-substitution { boolean }? db-show-deleted = attribute db:show-deleted { boolean }? db-is-first-row-header-line = attribute db:is-first-row-header-line { boolean }? db-auto-increment = element db:auto-increment { db-auto-increment-attlist, empty } db-auto-increment-attlist = attribute db:additional-column-statement { \string }? & attribute db:row-retrieving-statement { \string }? db-delimiter = element db:delimiter { db-delimiter-attlist, empty } db-delimiter-attlist = attribute db:field { \string }? & attribute db:string { \string }? & attribute db:decimal { \string }? & attribute db:thousand { \string }? db-character-set = element db:character-set { db-character-set-attlist, empty } db-character-set-attlist = attribute db:encoding { textEncoding }? db-table-settings = element db:table-settings { db-table-setting* } db-table-setting = element db:table-setting { db-table-setting-attlist, db-delimiter?, db-character-set?, empty } db-table-setting-attlist = db-is-first-row-header-line, db-show-deleted db-application-connection-settings = element db:application-connection-settings { db-application-connection-settings-attlist, db-table-filter?, db-table-type-filter?, db-data-source-settings? } db-application-connection-settings-attlist = attribute db:is-table-name-length-limited { boolean }? & attribute db:enable-sql92-check { boolean }? & attribute db:append-table-alias-name { boolean }? & attribute db:ignore-driver-privileges { boolean }? & attribute db:boolean-comparison-mode { "equal-integer" | "is-boolean" | "equal-boolean" | "equal-use-only-zero" }? & attribute db:use-catalog { boolean }? & attribute db:max-row-count { integer }? & attribute db:suppress-version-columns { boolean }? db-table-filter = element db:table-filter { db-table-filter-attlist, db-table-include-filter?, db-table-exclude-filter? } db-table-filter-attlist = empty db-table-include-filter = element db:table-include-filter { db-table-include-filter-attlist, db-table-filter-pattern+ } db-table-include-filter-attlist = empty db-table-exclude-filter = element db:table-exclude-filter { db-table-exclude-filter-attlist, db-table-filter-pattern+ } db-table-exclude-filter-attlist = empty db-table-filter-pattern = element db:table-filter-pattern { db-table-filter-pattern-attlist, \string } db-table-filter-pattern-attlist = empty db-table-type-filter = element db:table-type-filter { db-table-type-filter-attlist, db-table-type* } db-table-type-filter-attlist = empty db-table-type = element db:table-type { db-table-type-attlist, \string } db-table-type-attlist = empty db-data-source-settings = element db:data-source-settings { db-data-source-settings-attlist, db-data-source-setting+ } db-data-source-settings-attlist = empty db-data-source-setting = element db:data-source-setting { db-data-source-setting-attlist, db-data-source-setting-value+ } db-data-source-setting-attlist = attribute db:data-source-setting-is-list { boolean }? & attribute db:data-source-setting-name { \string } & attribute db:data-source-setting-type { db-data-source-setting-types } db-data-source-setting-types = "boolean" | "short" | "int" | "long" | "double" | "string" db-data-source-setting-value = element db:data-source-setting-value { db-data-source-setting-value-attlist, \string } db-data-source-setting-value-attlist = empty db-forms = element db:forms { db-forms-attlist, (db-component | db-component-collection)* } db-forms-attlist = empty db-reports = element db:reports { db-reports-attlist, (db-component | db-component-collection)* } db-reports-attlist = empty db-component-collection = element db:component-collection { db-component-collection-attlist, common-db-object-name, common-db-object-title, common-db-object-description, (db-component | db-component-collection)* } db-component-collection-attlist = empty db-component = element db:component { db-component-attlist, common-db-object-name, common-db-object-title, common-db-object-description, (office-document | math-math)? } db-component-attlist = (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:show { "none" }?, attribute xlink:actuate { "onRequest" }?)? & attribute db:as-template { boolean }? db-queries = element db:queries { db-queries-attlist, (db-query | db-query-collection)* } db-queries-attlist = empty db-query-collection = element db:query-collection { db-query-collection-attlist, common-db-object-name, common-db-object-title, common-db-object-description, (db-query | db-query-collection)* } db-query-collection-attlist = empty db-query = element db:query { db-query-attlist, common-db-object-name, common-db-object-title, common-db-object-description, common-db-table-style-name, db-order-statement?, db-filter-statement?, db-columns?, db-update-table? } db-query-attlist = attribute db:command { \string } & attribute db:escape-processing { boolean }? db-order-statement = element db:order-statement { db-command, db-apply-command, empty } db-filter-statement = element db:filter-statement { db-command, db-apply-command, empty } db-update-table = element db:update-table { common-db-table-name-attlist } db-table-presentations = element db:table-representations { db-table-presentations-attlist, db-table-presentation* } db-table-presentations-attlist = empty db-table-presentation = element db:table-representation { db-table-presentation-attlist, common-db-table-name-attlist, common-db-object-title, common-db-object-description, common-db-table-style-name, db-order-statement?, db-filter-statement?, db-columns? } db-table-presentation-attlist = empty db-columns = element db:columns { db-columns-attlist, db-column+ } db-columns-attlist = empty db-column = element db:column { db-column-attlist, common-db-object-name, common-db-object-title, common-db-object-description, common-db-default-value } db-column-attlist = attribute db:visible { boolean }? & attribute db:style-name { styleNameRef }? & attribute db:default-cell-style-name { styleNameRef }? db-command = attribute db:command { \string } db-apply-command = attribute db:apply-command { boolean }? common-db-table-name-attlist = attribute db:name { \string } & attribute db:catalog-name { \string }? & attribute db:schema-name { \string }? common-db-object-name = attribute db:name { \string } common-db-object-title = attribute db:title { \string }? common-db-object-description = attribute db:description { \string }? common-db-table-style-name = attribute db:style-name { styleNameRef }? & attribute db:default-row-style-name { styleNameRef }? common-db-default-value = common-value-and-type-attlist? db-schema-definition = element db:schema-definition { db-schema-definition-attlist, db-table-definitions } db-schema-definition-attlist = empty db-table-definitions = element db:table-definitions { db-table-definitions-attlist, db-table-definition* } db-table-definitions-attlist = empty db-table-definition = element db:table-definition { common-db-table-name-attlist, db-table-definition-attlist, db-column-definitions, db-keys?, db-indices? } db-table-definition-attlist = attribute db:type { \string }? db-column-definitions = element db:column-definitions { db-column-definitions-attlist, db-column-definition+ } db-column-definitions-attlist = empty db-column-definition = element db:column-definition { db-column-definition-attlist, common-db-default-value } db-column-definition-attlist = attribute db:name { \string } & attribute db:data-type { db-data-types }? & attribute db:type-name { \string }? & attribute db:precision { positiveInteger }? & attribute db:scale { positiveInteger }? & attribute db:is-nullable { "no-nulls" | "nullable" }? & attribute db:is-empty-allowed { boolean }? & attribute db:is-autoincrement { boolean }? db-data-types = "bit" | "boolean" | "tinyint" | "smallint" | "integer" | "bigint" | "float" | "real" | "double" | "numeric" | "decimal" | "char" | "varchar" | "longvarchar" | "date" | "time" | "timestmp" | "binary" | "varbinary" | "longvarbinary" | "sqlnull" | "other" | "object" | "distinct" | "struct" | "array" | "blob" | "clob" | "ref" db-keys = element db:keys { db-keys-attlist, db-key+ } db-keys-attlist = empty db-key = element db:key { db-key-attlist, db-key-columns+ } db-key-attlist = attribute db:name { \string }? & attribute db:type { "primary" | "unique" | "foreign" } & attribute db:referenced-table-name { \string }? & attribute db:update-rule { "cascade" | "restrict" | "set-null" | "no-action" | "set-default" }? & attribute db:delete-rule { "cascade" | "restrict" | "set-null" | "no-action" | "set-default" }? db-key-columns = element db:key-columns { db-key-columns-attlist, db-key-column+ } db-key-columns-attlist = empty db-key-column = element db:key-column { db-key-column-attlist, empty } db-key-column-attlist = attribute db:name { \string }? & attribute db:related-column-name { \string }? db-indices = element db:indices { db-indices-attlist, db-index+ } db-indices-attlist = empty db-index = element db:index { db-index-attlist, db-index-columns+ } db-index-attlist = attribute db:name { \string } & attribute db:catalog-name { \string }? & attribute db:is-unique { boolean }? & attribute db:is-clustered { boolean }? db-index-columns = element db:index-columns { db-index-column+ } db-index-column = element db:index-column { db-index-column-attlist, empty } db-index-column-attlist = attribute db:name { \string } & attribute db:is-ascending { boolean }? office-forms = element office:forms { office-forms-attlist, (form-form | xforms-model)* }? office-forms-attlist = attribute form:automatic-focus { boolean }? & attribute form:apply-design-mode { boolean }? form-form = element form:form { common-form-control-attlist, form-form-attlist, form-properties?, office-event-listeners?, (controls | form-form)*, form-connection-resource? } form-form-attlist = (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:actuate { "onRequest" }?)? & attribute office:target-frame { targetFrameName }? & attribute form:method { "get" | "post" | \string }? & attribute form:enctype { \string }? & attribute form:allow-deletes { boolean }? & attribute form:allow-inserts { boolean }? & attribute form:allow-updates { boolean }? & attribute form:apply-filter { boolean }? & attribute form:command-type { "table" | "query" | "command" }? & attribute form:command { \string }? & attribute form:datasource { anyIRI | \string }? & attribute form:master-fields { \string }? & attribute form:detail-fields { \string }? & attribute form:escape-processing { boolean }? & attribute form:filter { \string }? & attribute form:ignore-result { boolean }? & attribute form:navigation-mode { navigation }? & attribute form:order { \string }? & attribute form:tab-cycle { tab-cycles }? navigation = "none" | "current" | "parent" tab-cycles = "records" | "current" | "page" form-connection-resource = element form:connection-resource { attribute xlink:href { anyIRI }, empty } xforms-model = element xforms:model { anyAttListOrElements } column-controls = element form:text { form-text-attlist, common-form-control-content } | element form:textarea { form-textarea-attlist, common-form-control-content, text-p* } | element form:formatted-text { form-formatted-text-attlist, common-form-control-content } | element form:number { form-number-attlist, common-numeric-control-attlist, common-form-control-content, common-linked-cell, common-spin-button, common-repeat, common-delay-for-repeat } | element form:date { form-date-attlist, common-numeric-control-attlist, common-form-control-content, common-linked-cell, common-spin-button, common-repeat, common-delay-for-repeat } | element form:time { form-time-attlist, common-numeric-control-attlist, common-form-control-content, common-linked-cell, common-spin-button, common-repeat, common-delay-for-repeat } | element form:combobox { form-combobox-attlist, common-form-control-content, form-item* } | element form:listbox { form-listbox-attlist, common-form-control-content, form-option* } | element form:checkbox { form-checkbox-attlist, common-form-control-content } controls = column-controls | element form:password { form-password-attlist, common-form-control-content } | element form:file { form-file-attlist, common-form-control-content } | element form:fixed-text { form-fixed-text-attlist, common-form-control-content } | element form:button { form-button-attlist, common-form-control-content } | element form:image { form-image-attlist, common-form-control-content } | element form:radio { form-radio-attlist, common-form-control-content } | element form:frame { form-frame-attlist, common-form-control-content } | element form:image-frame { form-image-frame-attlist, common-form-control-content } | element form:hidden { form-hidden-attlist, common-form-control-content } | element form:grid { form-grid-attlist, common-form-control-content, form-column* } | element form:value-range { form-value-range-attlist, common-form-control-content } | element form:generic-control { form-generic-control-attlist, common-form-control-content } form-text-attlist = form-control-attlist, common-current-value-attlist, common-disabled-attlist, common-maxlength-attlist, common-printable-attlist, common-readonly-attlist, common-tab-attlist, common-title-attlist, common-value-attlist, common-convert-empty-attlist, common-data-field-attlist, common-linked-cell form-control-attlist = common-form-control-attlist, common-control-id-attlist, xforms-bind-attlist common-form-control-content = form-properties?, office-event-listeners? form-textarea-attlist = form-control-attlist, common-current-value-attlist, common-disabled-attlist, common-maxlength-attlist, common-printable-attlist, common-readonly-attlist, common-tab-attlist, common-title-attlist, common-value-attlist, common-convert-empty-attlist, common-data-field-attlist, common-linked-cell form-password-attlist = form-control-attlist & common-disabled-attlist & common-maxlength-attlist & common-printable-attlist & common-tab-attlist & common-title-attlist & common-value-attlist & common-convert-empty-attlist & common-linked-cell & attribute form:echo-char { character }? form-file-attlist = form-control-attlist, common-current-value-attlist, common-disabled-attlist, common-maxlength-attlist, common-printable-attlist, common-readonly-attlist, common-tab-attlist, common-title-attlist, common-value-attlist, common-linked-cell form-formatted-text-attlist = form-control-attlist & common-current-value-attlist & common-disabled-attlist & common-maxlength-attlist & common-printable-attlist & common-readonly-attlist & common-tab-attlist & common-title-attlist & common-value-attlist & common-convert-empty-attlist & common-data-field-attlist & common-linked-cell & common-spin-button & common-repeat & common-delay-for-repeat & attribute form:max-value { \string }? & attribute form:min-value { \string }? & attribute form:validation { boolean }? common-numeric-control-attlist = form-control-attlist, common-disabled-attlist, common-maxlength-attlist, common-printable-attlist, common-readonly-attlist, common-tab-attlist, common-title-attlist, common-convert-empty-attlist, common-data-field-attlist form-number-attlist = attribute form:value { double }? & attribute form:current-value { double }? & attribute form:min-value { double }? & attribute form:max-value { double }? form-date-attlist = attribute form:value { date }? & attribute form:current-value { date }? & attribute form:min-value { date }? & attribute form:max-value { date }? form-time-attlist = attribute form:value { time }? & attribute form:current-value { time }? & attribute form:min-value { time }? & attribute form:max-value { time }? form-fixed-text-attlist = form-control-attlist & for & common-disabled-attlist & label & common-printable-attlist & common-title-attlist & attribute form:multi-line { boolean }? form-combobox-attlist = form-control-attlist & common-current-value-attlist & common-disabled-attlist & dropdown & common-maxlength-attlist & common-printable-attlist & common-readonly-attlist & size & common-tab-attlist & common-title-attlist & common-value-attlist & common-convert-empty-attlist & common-data-field-attlist & list-source & list-source-type & common-linked-cell & common-source-cell-range & attribute form:auto-complete { boolean }? form-item = element form:item { form-item-attlist, text } form-item-attlist = label form-listbox-attlist = form-control-attlist & common-disabled-attlist & dropdown & common-printable-attlist & size & common-tab-attlist & common-title-attlist & bound-column & common-data-field-attlist & list-source & list-source-type & common-linked-cell & list-linkage-type & common-source-cell-range & attribute form:multiple { boolean }? & attribute form:xforms-list-source { \string }? list-linkage-type = attribute form:list-linkage-type { "selection" | "selection-indices" }? form-option = element form:option { form-option-attlist, text } form-option-attlist = current-selected, selected, label, common-value-attlist form-button-attlist = form-control-attlist & button-type & common-disabled-attlist & label & image-data & common-printable-attlist & common-tab-attlist & target-frame & target-location & common-title-attlist & common-value-attlist & common-form-relative-image-position-attlist & common-repeat & common-delay-for-repeat & attribute form:default-button { boolean }? & attribute form:toggle { boolean }? & attribute form:focus-on-click { boolean }? & attribute form:xforms-submission { \string }? form-image-attlist = form-control-attlist, button-type, common-disabled-attlist, image-data, common-printable-attlist, common-tab-attlist, target-frame, target-location, common-title-attlist, common-value-attlist form-checkbox-attlist = form-control-attlist & common-disabled-attlist & label & common-printable-attlist & common-tab-attlist & common-title-attlist & common-value-attlist & common-data-field-attlist & common-form-visual-effect-attlist & common-form-relative-image-position-attlist & common-linked-cell & attribute form:current-state { states }? & attribute form:is-tristate { boolean }? & attribute form:state { states }? states = "unchecked" | "checked" | "unknown" form-radio-attlist = form-control-attlist, current-selected, common-disabled-attlist, label, common-printable-attlist, selected, common-tab-attlist, common-title-attlist, common-value-attlist, common-data-field-attlist, common-form-visual-effect-attlist, common-form-relative-image-position-attlist, common-linked-cell form-frame-attlist = form-control-attlist, common-disabled-attlist, for, label, common-printable-attlist, common-title-attlist form-image-frame-attlist = form-control-attlist, common-disabled-attlist, image-data, common-printable-attlist, common-readonly-attlist, common-title-attlist, common-data-field-attlist form-hidden-attlist = form-control-attlist, common-value-attlist form-grid-attlist = form-control-attlist, common-disabled-attlist, common-printable-attlist, common-tab-attlist, common-title-attlist form-column = element form:column { form-column-attlist, column-controls+ } form-column-attlist = common-form-control-attlist, label, text-style-name text-style-name = attribute form:text-style-name { styleNameRef }? form-value-range-attlist = form-control-attlist & common-disabled-attlist & common-printable-attlist & common-tab-attlist & common-title-attlist & common-value-attlist & common-linked-cell & common-repeat & common-delay-for-repeat & attribute form:max-value { integer }? & attribute form:min-value { integer }? & attribute form:step-size { positiveInteger }? & attribute form:page-step-size { positiveInteger }? & attribute form:orientation { "horizontal" | "vertical" }? form-generic-control-attlist = form-control-attlist common-form-control-attlist = attribute form:name { \string }? & attribute form:control-implementation { namespacedToken }? xforms-bind-attlist = attribute xforms:bind { \string }? types = "submit" | "reset" | "push" | "url" button-type = attribute form:button-type { types }? common-control-id-attlist = xml-id, attribute form:id { NCName }? current-selected = attribute form:current-selected { boolean }? common-value-attlist = attribute form:value { \string }? common-current-value-attlist = attribute form:current-value { \string }? common-disabled-attlist = attribute form:disabled { boolean }? dropdown = attribute form:dropdown { boolean }? for = attribute form:for { \string }? image-data = attribute form:image-data { anyIRI }? label = attribute form:label { \string }? common-maxlength-attlist = attribute form:max-length { nonNegativeInteger }? common-printable-attlist = attribute form:printable { boolean }? common-readonly-attlist = attribute form:readonly { boolean }? selected = attribute form:selected { boolean }? size = attribute form:size { nonNegativeInteger }? common-tab-attlist = attribute form:tab-index { nonNegativeInteger }? & attribute form:tab-stop { boolean }? target-frame = attribute office:target-frame { targetFrameName }? target-location = attribute xlink:href { anyIRI }? common-title-attlist = attribute form:title { \string }? common-form-visual-effect-attlist = attribute form:visual-effect { "flat" | "3d" }? common-form-relative-image-position-attlist = attribute form:image-position { "center" }? | (attribute form:image-position { "start" | "end" | "top" | "bottom" }, attribute form:image-align { "start" | "center" | "end" }?) bound-column = attribute form:bound-column { \string }? common-convert-empty-attlist = attribute form:convert-empty-to-null { boolean }? common-data-field-attlist = attribute form:data-field { \string }? list-source = attribute form:list-source { \string }? list-source-type = attribute form:list-source-type { "table" | "query" | "sql" | "sql-pass-through" | "value-list" | "table-fields" }? common-linked-cell = attribute form:linked-cell { cellAddress | \string }? common-source-cell-range = attribute form:source-cell-range { cellRangeAddress | \string }? common-spin-button = attribute form:spin-button { boolean }? common-repeat = attribute form:repeat { boolean }? common-delay-for-repeat = attribute form:delay-for-repeat { duration }? form-properties = element form:properties { form-property+ } form-property = element form:property { form-property-name, form-property-value-and-type-attlist } | element form:list-property { form-property-name, form-property-type-and-value-list } form-property-name = attribute form:property-name { \string } form-property-value-and-type-attlist = common-value-and-type-attlist | attribute office:value-type { "void" } form-property-type-and-value-list = (attribute office:value-type { "float" }, element form:list-value { attribute office:value { double } }*) | (attribute office:value-type { "percentage" }, element form:list-value { attribute office:value { double } }*) | (attribute office:value-type { "currency" }, element form:list-value { attribute office:value { double }, attribute office:currency { \string }? }*) | (attribute office:value-type { "date" }, element form:list-value { attribute office:date-value { dateOrDateTime } }*) | (attribute office:value-type { "time" }, element form:list-value { attribute office:time-value { duration } }*) | (attribute office:value-type { "boolean" }, element form:list-value { attribute office:boolean-value { boolean } }*) | (attribute office:value-type { "string" }, element form:list-value { attribute office:string-value { \string } }*) | attribute office:value-type { "void" } office-annotation = element office:annotation { office-annotation-attlist, draw-caption-attlist, common-draw-position-attlist, common-draw-size-attlist, common-draw-shape-with-text-and-styles-attlist, dc-creator?, dc-date?, meta-date-string?, (text-p | text-list)* } office-annotation-end = element office:annotation-end { office-annotation-end-attlist } office-annotation-attlist = attribute office:display { boolean }? & common-office-annotation-name-attlist? office-annotation-end-attlist = common-office-annotation-name-attlist common-office-annotation-name-attlist = attribute office:name { \string } meta-date-string = element meta:date-string { \string } common-num-format-prefix-suffix-attlist = attribute style:num-prefix { \string }?, attribute style:num-suffix { \string }? common-num-format-attlist = attribute style:num-format { "1" | "i" | "I" | \string | empty } | (attribute style:num-format { "a" | "A" }, style-num-letter-sync-attlist) | empty style-num-letter-sync-attlist = attribute style:num-letter-sync { boolean }? office-change-info = element office:change-info { dc-creator, dc-date, text-p* } office-event-listeners = element office:event-listeners { (script-event-listener | presentation-event-listener)* } script-event-listener = element script:event-listener { script-event-listener-attlist, empty } script-event-listener-attlist = attribute script:event-name { \string } & attribute script:language { \string } & (attribute script:macro-name { \string } | (attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:actuate { "onRequest" }?)) math-math = element math:math { mathMarkup } [ dc:description [ "To avoid inclusion of the complete MathML schema, anything is allowed within a math:math top-level element" ] ] mathMarkup = (attribute * { text } | text | element * { mathMarkup })* text-dde-connection-decl = element text:dde-connection-decl { text-dde-connection-decl-attlist, common-dde-connection-decl-attlist } text-dde-connection-decl-attlist = attribute office:name { \string } common-dde-connection-decl-attlist = attribute office:dde-application { \string } & attribute office:dde-topic { \string } & attribute office:dde-item { \string } & attribute office:automatic-update { boolean }? table-dde-link = element table:dde-link { office-dde-source, table-table } office-dde-source = element office:dde-source { office-dde-source-attlist, common-dde-connection-decl-attlist } office-dde-source-attlist = attribute office:name { \string }? & attribute office:conversion-mode { "into-default-style-data-style" | "into-english-number" | "keep-text" }? animation-element = element anim:animate { common-anim-target-attlist, common-anim-named-target-attlist, common-anim-values-attlist, common-anim-spline-mode-attlist, common-spline-anim-value-attlist, common-timing-attlist, common-anim-add-accum-attlist } | element anim:set { common-anim-target-attlist, common-anim-named-target-attlist, common-anim-set-values-attlist, common-timing-attlist, common-anim-add-accum-attlist } | element anim:animateMotion { anim-animate-motion-attlist, common-anim-target-attlist, common-anim-named-target-attlist, common-anim-add-accum-attlist, common-anim-values-attlist, common-timing-attlist, common-spline-anim-value-attlist } | element anim:animateColor { common-anim-target-attlist, common-anim-named-target-attlist, common-anim-add-accum-attlist, common-anim-values-attlist, common-anim-spline-mode-attlist, common-spline-anim-value-attlist, anim-animate-color-attlist, common-timing-attlist } | element anim:animateTransform { common-anim-target-attlist, common-anim-named-target-attlist, common-anim-add-accum-attlist, common-anim-values-attlist, anim-animate-transform-attlist, common-timing-attlist } | element anim:transitionFilter { common-anim-target-attlist, common-anim-add-accum-attlist, common-anim-values-attlist, common-anim-spline-mode-attlist, anim-transition-filter-attlist, common-timing-attlist } | element anim:par { common-anim-attlist, common-timing-attlist, common-endsync-timing-attlist, animation-element* } | element anim:seq { common-anim-attlist, common-endsync-timing-attlist, common-timing-attlist, animation-element* } | element anim:iterate { common-anim-attlist, anim-iterate-attlist, common-timing-attlist, common-endsync-timing-attlist, animation-element* } | element anim:audio { common-anim-attlist, anim-audio-attlist, common-basic-timing-attlist } | element anim:command { common-anim-attlist, anim-command-attlist, common-begin-end-timing-attlist, common-anim-target-attlist, element anim:param { attribute anim:name { \string }, attribute anim:value { \string } }* } anim-animate-motion-attlist = attribute svg:path { pathData }? & attribute svg:origin { \string }? & attribute smil:calcMode { "discrete" | "linear" | "paced" | "spline" }? anim-animate-color-attlist = attribute anim:color-interpolation { "rgb" | "hsl" }? & attribute anim:color-interpolation-direction { "clockwise" | "counter-clockwise" }? anim-animate-transform-attlist = attribute svg:type { "translate" | "scale" | "rotate" | "skewX" | "skewY" } anim-transition-filter-attlist = attribute smil:type { \string } & attribute smil:subtype { \string }? & attribute smil:direction { "forward" | "reverse" }? & attribute smil:fadeColor { color }? & attribute smil:mode { "in" | "out" }? common-anim-target-attlist = attribute smil:targetElement { IDREF }? & attribute anim:sub-item { \string }? common-anim-named-target-attlist = attribute smil:attributeName { \string } common-anim-values-attlist = attribute smil:values { \string }? & attribute anim:formula { \string }? & common-anim-set-values-attlist & attribute smil:from { \string }? & attribute smil:by { \string }? common-anim-spline-mode-attlist = attribute smil:calcMode { "discrete" | "linear" | "paced" | "spline" }? common-spline-anim-value-attlist = attribute smil:keyTimes { \string }? & attribute smil:keySplines { \string }? common-anim-add-accum-attlist = attribute smil:accumulate { "none" | "sum" }? & attribute smil:additive { "replace" | "sum" }? common-anim-set-values-attlist = attribute smil:to { \string }? common-begin-end-timing-attlist = attribute smil:begin { \string }? & attribute smil:end { \string }? common-dur-timing-attlist = attribute smil:dur { \string }? common-endsync-timing-attlist = attribute smil:endsync { "first" | "last" | "all" | "media" | IDREF }? common-repeat-timing-attlist = attribute smil:repeatDur { \string }?, attribute smil:repeatCount { nonNegativeDecimal | "indefinite" }? nonNegativeDecimal = xsd:decimal { minInclusive = "0.0" } common-fill-timing-attlist = attribute smil:fill { "remove" | "freeze" | "hold" | "auto" | "default" | "transition" }? common-fill-default-attlist = attribute smil:fillDefault { "remove" | "freeze" | "hold" | "transition" | "auto" | "inherit" }? common-restart-timing-attlist = attribute smil:restart { "never" | "always" | "whenNotActive" | "default" }? common-restart-default-attlist = attribute smil:restartDefault { "never" | "always" | "whenNotActive" | "inherit" }? common-time-manip-attlist = attribute smil:accelerate { zeroToOneDecimal }? & attribute smil:decelerate { zeroToOneDecimal }? & attribute smil:autoReverse { boolean }? zeroToOneDecimal = xsd:decimal { minInclusive = "0" maxInclusive = "1" } common-basic-timing-attlist = common-begin-end-timing-attlist, common-dur-timing-attlist, common-repeat-timing-attlist, common-restart-timing-attlist, common-restart-default-attlist, common-fill-timing-attlist, common-fill-default-attlist common-timing-attlist = common-basic-timing-attlist, common-time-manip-attlist anim-iterate-attlist = common-anim-target-attlist & attribute anim:iterate-type { \string }? & attribute anim:iterate-interval { duration }? anim-audio-attlist = attribute xlink:href { anyIRI }? & attribute anim:audio-level { double }? anim-command-attlist = attribute anim:command { \string } style-style = element style:style { style-style-attlist, style-style-content, style-map* } common-in-content-meta-attlist = attribute xhtml:about { URIorSafeCURIE }, attribute xhtml:property { CURIEs }, common-meta-literal-attlist common-meta-literal-attlist = attribute xhtml:datatype { CURIE }?, attribute xhtml:content { \string }? xml-id = attribute xml:id { ID } style-style-attlist = attribute style:name { styleName } & attribute style:display-name { \string }? & attribute style:parent-style-name { styleNameRef }? & attribute style:next-style-name { styleNameRef }? & attribute style:list-level { positiveInteger | empty }? & attribute style:list-style-name { styleName | empty }? & attribute style:master-page-name { styleNameRef }? & attribute style:auto-update { boolean }? & attribute style:data-style-name { styleNameRef }? & attribute style:percentage-data-style-name { styleNameRef }? & attribute style:class { \string }? & attribute style:default-outline-level { positiveInteger | empty }? style-map = element style:map { style-map-attlist, empty } style-map-attlist = attribute style:condition { \string } & attribute style:apply-style-name { styleNameRef } & attribute style:base-cell-address { cellAddress }? style-default-style = element style:default-style { style-style-content } style-page-layout = element style:page-layout { style-page-layout-attlist, style-page-layout-content } style-page-layout-content = style-page-layout-properties?, style-header-style?, style-footer-style? style-page-layout-attlist = attribute style:name { styleName } & attribute style:page-usage { "all" | "left" | "right" | "mirrored" }? style-header-style = element style:header-style { style-header-footer-properties? } style-footer-style = element style:footer-style { style-header-footer-properties? } style-default-page-layout = element style:default-page-layout { style-page-layout-content } style-master-page = element style:master-page { style-master-page-attlist, (style-header, style-header-left?)?, (style-footer, style-footer-left?)?, draw-layer-set?, office-forms?, shape*, animation-element?, presentation-notes? } style-master-page-attlist = attribute style:name { styleName } & attribute style:display-name { \string }? & attribute style:page-layout-name { styleNameRef } & attribute draw:style-name { styleNameRef }? & attribute style:next-style-name { styleNameRef }? style-header = element style:header { common-style-header-footer-attlist, header-footer-content } style-footer = element style:footer { common-style-header-footer-attlist, header-footer-content } style-header-left = element style:header-left { common-style-header-footer-attlist, header-footer-content } style-footer-left = element style:footer-left { common-style-header-footer-attlist, header-footer-content } header-footer-content = (text-tracked-changes, text-decls, (text-h | text-p | text-list | table-table | text-section | text-table-of-content | text-illustration-index | text-table-index | text-object-index | text-user-index | text-alphabetical-index | text-bibliography | text-index-title | change-marks)*) | (style-region-left?, style-region-center?, style-region-right?) common-style-header-footer-attlist = attribute style:display { boolean }? style-region-left = element style:region-left { region-content } style-region-center = element style:region-center { region-content } style-region-right = element style:region-right { region-content } region-content = text-p* presentation-notes = element presentation:notes { common-presentation-header-footer-attlist, presentation-notes-attlist, office-forms, shape* } presentation-notes-attlist = attribute style:page-layout-name { styleNameRef }? & attribute draw:style-name { styleNameRef }? table-table-template = element table:table-template { table-table-template-attlist, table-first-row?, table-last-row?, table-first-column?, table-last-column?, table-body, table-even-rows?, table-odd-rows?, table-even-columns?, table-odd-columns?, table-background? } table-table-template-attlist = attribute table:name { \string } & attribute table:first-row-start-column { rowOrCol } & attribute table:first-row-end-column { rowOrCol } & attribute table:last-row-start-column { rowOrCol } & attribute table:last-row-end-column { rowOrCol } rowOrCol = "row" | "column" table-first-row = element table:first-row { common-table-template-attlist, empty } table-last-row = element table:last-row { common-table-template-attlist, empty } table-first-column = element table:first-column { common-table-template-attlist, empty } table-last-column = element table:last-column { common-table-template-attlist, empty } table-body = element table:body { common-table-template-attlist, empty } table-even-rows = element table:even-rows { common-table-template-attlist, empty } table-odd-rows = element table:odd-rows { common-table-template-attlist, empty } table-even-columns = element table:even-columns { common-table-template-attlist, empty } table-odd-columns = element table:odd-columns { common-table-template-attlist, empty } common-table-template-attlist = attribute table:style-name { styleNameRef }, attribute table:paragraph-style-name { styleNameRef }? table-background = element table:background { table-background-attlist, empty } table-background-attlist = attribute table:style-name { styleNameRef } style-font-face = element style:font-face { style-font-face-attlist, svg-font-face-src?, svg-definition-src? } style-font-face-attlist = attribute svg:font-family { \string }? & attribute svg:font-style { fontStyle }? & attribute svg:font-variant { fontVariant }? & attribute svg:font-weight { fontWeight }? & attribute svg:font-stretch { "normal" | "ultra-condensed" | "extra-condensed" | "condensed" | "semi-condensed" | "semi-expanded" | "expanded" | "extra-expanded" | "ultra-expanded" }? & attribute svg:font-size { positiveLength }? & attribute svg:unicode-range { \string }? & attribute svg:units-per-em { integer }? & attribute svg:panose-1 { \string }? & attribute svg:stemv { integer }? & attribute svg:stemh { integer }? & attribute svg:slope { integer }? & attribute svg:cap-height { integer }? & attribute svg:x-height { integer }? & attribute svg:accent-height { integer }? & attribute svg:ascent { integer }? & attribute svg:descent { integer }? & attribute svg:widths { \string }? & attribute svg:bbox { \string }? & attribute svg:ideographic { integer }? & attribute svg:alphabetic { integer }? & attribute svg:mathematical { integer }? & attribute svg:hanging { integer }? & attribute svg:v-ideographic { integer }? & attribute svg:v-alphabetic { integer }? & attribute svg:v-mathematical { integer }? & attribute svg:v-hanging { integer }? & attribute svg:underline-position { integer }? & attribute svg:underline-thickness { integer }? & attribute svg:strikethrough-position { integer }? & attribute svg:strikethrough-thickness { integer }? & attribute svg:overline-position { integer }? & attribute svg:overline-thickness { integer }? & attribute style:name { \string } & attribute style:font-adornments { \string }? & attribute style:font-family-generic { fontFamilyGeneric }? & attribute style:font-pitch { fontPitch }? & attribute style:font-charset { textEncoding }? svg-font-face-src = element svg:font-face-src { (svg-font-face-uri | svg-font-face-name)+ } svg-font-face-uri = element svg:font-face-uri { common-svg-font-face-xlink-attlist, svg-font-face-format* } svg-font-face-format = element svg:font-face-format { attribute svg:string { \string }?, empty } svg-font-face-name = element svg:font-face-name { attribute svg:name { \string }?, empty } svg-definition-src = element svg:definition-src { common-svg-font-face-xlink-attlist, empty } common-svg-font-face-xlink-attlist = attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:actuate { "onRequest" }? number-number-style = element number:number-style { common-data-style-attlist, style-text-properties?, number-text?, (any-number, number-text?)?, style-map* } any-number = number-number | number-scientific-number | number-fraction number-number = element number:number { number-number-attlist, common-decimal-places-attlist, common-number-attlist, number-embedded-text* } number-number-attlist = attribute number:decimal-replacement { \string }? & attribute number:display-factor { double }? number-embedded-text = element number:embedded-text { number-embedded-text-attlist, text } number-embedded-text-attlist = attribute number:position { integer } number-scientific-number = element number:scientific-number { number-scientific-number-attlist, common-decimal-places-attlist, common-number-attlist, empty } number-scientific-number-attlist = attribute number:min-exponent-digits { integer }? number-fraction = element number:fraction { number-fraction-attlist, common-number-attlist, empty } number-fraction-attlist = attribute number:min-numerator-digits { integer }? & attribute number:min-denominator-digits { integer }? & attribute number:denominator-value { integer }? number-currency-style = element number:currency-style { common-data-style-attlist, common-auto-reorder-attlist, style-text-properties?, number-text?, ((number-and-text, currency-symbol-and-text?) | (currency-symbol-and-text, number-and-text?))?, style-map* } currency-symbol-and-text = number-currency-symbol, number-text? number-and-text = number-number, number-text? number-currency-symbol = element number:currency-symbol { number-currency-symbol-attlist, text } number-currency-symbol-attlist = attribute number:language { languageCode }?, attribute number:country { countryCode }?, attribute number:script { scriptCode }?, attribute number:rfc-language-tag { language }? number-percentage-style = element number:percentage-style { common-data-style-attlist, style-text-properties?, number-text?, number-and-text?, style-map* } number-date-style = element number:date-style { common-data-style-attlist, common-auto-reorder-attlist, common-format-source-attlist, style-text-properties?, number-text?, (any-date, number-text?)+, style-map* } any-date = number-day | number-month | number-year | number-era | number-day-of-week | number-week-of-year | number-quarter | number-hours | number-am-pm | number-minutes | number-seconds number-day = element number:day { number-day-attlist, common-calendar-attlist, empty } number-day-attlist = attribute number:style { "short" | "long" }? number-month = element number:month { number-month-attlist, common-calendar-attlist, empty } number-month-attlist = attribute number:textual { boolean }? & attribute number:possessive-form { boolean }? & attribute number:style { "short" | "long" }? number-year = element number:year { number-year-attlist, common-calendar-attlist, empty } number-year-attlist = attribute number:style { "short" | "long" }? number-era = element number:era { number-era-attlist, common-calendar-attlist, empty } number-era-attlist = attribute number:style { "short" | "long" }? number-day-of-week = element number:day-of-week { number-day-of-week-attlist, common-calendar-attlist, empty } number-day-of-week-attlist = attribute number:style { "short" | "long" }? number-week-of-year = element number:week-of-year { common-calendar-attlist, empty } number-quarter = element number:quarter { number-quarter-attlist, common-calendar-attlist, empty } number-quarter-attlist = attribute number:style { "short" | "long" }? number-time-style = element number:time-style { number-time-style-attlist, common-data-style-attlist, common-format-source-attlist, style-text-properties?, number-text?, (any-time, number-text?)+, style-map* } any-time = number-hours | number-am-pm | number-minutes | number-seconds number-time-style-attlist = attribute number:truncate-on-overflow { boolean }? number-hours = element number:hours { number-hours-attlist, empty } number-hours-attlist = attribute number:style { "short" | "long" }? number-minutes = element number:minutes { number-minutes-attlist, empty } number-minutes-attlist = attribute number:style { "short" | "long" }? number-seconds = element number:seconds { number-seconds-attlist, empty } number-seconds-attlist = attribute number:style { "short" | "long" }? & attribute number:decimal-places { integer }? number-am-pm = element number:am-pm { empty } number-boolean-style = element number:boolean-style { common-data-style-attlist, style-text-properties?, number-text?, (number-boolean, number-text?)?, style-map* } number-boolean = element number:boolean { empty } number-text-style = element number:text-style { common-data-style-attlist, style-text-properties?, number-text?, (number-text-content, number-text?)*, style-map* } number-text = element number:text { text } number-text-content = element number:text-content { empty } common-data-style-attlist = attribute style:name { styleName } & attribute style:display-name { \string }? & attribute number:language { languageCode }? & attribute number:country { countryCode }? & attribute number:script { scriptCode }? & attribute number:rfc-language-tag { language }? & attribute number:title { \string }? & attribute style:volatile { boolean }? & attribute number:transliteration-format { \string }? & attribute number:transliteration-language { countryCode }? & attribute number:transliteration-country { countryCode }? & attribute number:transliteration-style { "short" | "medium" | "long" }? common-auto-reorder-attlist = attribute number:automatic-order { boolean }? common-format-source-attlist = attribute number:format-source { "fixed" | "language" }? common-decimal-places-attlist = attribute number:decimal-places { integer }? common-number-attlist = attribute number:min-integer-digits { integer }? & attribute number:grouping { boolean }? common-calendar-attlist = attribute number:calendar { "gregorian" | "gengou" | "ROC" | "hanja_yoil" | "hanja" | "hijri" | "jewish" | "buddhist" | \string }? style-style-content = (attribute style:family { "text" }, style-text-properties?) | (attribute style:family { "paragraph" }, style-paragraph-properties?, style-text-properties?) | (attribute style:family { "section" }, style-section-properties?) | (attribute style:family { "ruby" }, style-ruby-properties?) | (attribute style:family { "table" }, style-table-properties?) | (attribute style:family { "table-column" }, style-table-column-properties?) | (attribute style:family { "table-row" }, style-table-row-properties?) | (attribute style:family { "table-cell" }, style-table-cell-properties?, style-paragraph-properties?, style-text-properties?) | (attribute style:family { "graphic" | "presentation" }, style-graphic-properties?, style-paragraph-properties?, style-text-properties?) | (attribute style:family { "drawing-page" }, style-drawing-page-properties?) | (attribute style:family { "chart" }, style-chart-properties?, style-graphic-properties?, style-paragraph-properties?, style-text-properties?) text-linenumbering-configuration = element text:linenumbering-configuration { text-linenumbering-configuration-attlist, text-linenumbering-separator? } text-linenumbering-configuration-attlist = attribute text:number-lines { boolean }? & common-num-format-attlist? & attribute text:style-name { styleNameRef }? & attribute text:increment { nonNegativeInteger }? & attribute text:number-position { "left" | "right" | "inner" | "outer" }? & attribute text:offset { nonNegativeLength }? & attribute text:count-empty-lines { boolean }? & attribute text:count-in-text-boxes { boolean }? & attribute text:restart-on-page { boolean }? text-linenumbering-separator = element text:linenumbering-separator { attribute text:increment { nonNegativeInteger }?, text } text-notes-configuration = element text:notes-configuration { text-notes-configuration-content } text-notes-configuration-content = text-note-class & attribute text:citation-style-name { styleNameRef }? & attribute text:citation-body-style-name { styleNameRef }? & attribute text:default-style-name { styleNameRef }? & attribute text:master-page-name { styleNameRef }? & attribute text:start-value { nonNegativeInteger }? & common-num-format-prefix-suffix-attlist & common-num-format-attlist? & attribute text:start-numbering-at { "document" | "chapter" | "page" }? & attribute text:footnotes-position { "text" | "page" | "section" | "document" }? & element text:note-continuation-notice-forward { text }? & element text:note-continuation-notice-backward { text }? text-bibliography-configuration = element text:bibliography-configuration { text-bibliography-configuration-attlist, text-sort-key* } text-bibliography-configuration-attlist = attribute text:prefix { \string }? & attribute text:suffix { \string }? & attribute text:numbered-entries { boolean }? & attribute text:sort-by-position { boolean }? & attribute fo:language { languageCode }? & attribute fo:country { countryCode }? & attribute fo:script { scriptCode }? & attribute style:rfc-language-tag { language }? & attribute text:sort-algorithm { \string }? text-sort-key = element text:sort-key { text-sort-key-attlist, empty } text-sort-key-attlist = attribute text:key { "address" | "annote" | "author" | "bibliography-type" | "booktitle" | "chapter" | "custom1" | "custom2" | "custom3" | "custom4" | "custom5" | "edition" | "editor" | "howpublished" | "identifier" | "institution" | "isbn" | "issn" | "journal" | "month" | "note" | "number" | "organizations" | "pages" | "publisher" | "report-type" | "school" | "series" | "title" | "url" | "volume" | "year" }, attribute text:sort-ascending { boolean }? text-list-style = element text:list-style { text-list-style-attr, text-list-style-content* } text-list-style-attr = attribute style:name { styleName } & attribute style:display-name { \string }? & attribute text:consecutive-numbering { boolean }? text-list-style-content = element text:list-level-style-number { text-list-level-style-attr, text-list-level-style-number-attr, style-list-level-properties?, style-text-properties? } | element text:list-level-style-bullet { text-list-level-style-attr, text-list-level-style-bullet-attr, style-list-level-properties?, style-text-properties? } | element text:list-level-style-image { text-list-level-style-attr, text-list-level-style-image-attr, style-list-level-properties? } text-list-level-style-number-attr = attribute text:style-name { styleNameRef }? & common-num-format-attlist & common-num-format-prefix-suffix-attlist & attribute text:display-levels { positiveInteger }? & attribute text:start-value { positiveInteger }? text-list-level-style-bullet-attr = attribute text:style-name { styleNameRef }? & attribute text:bullet-char { character } & common-num-format-prefix-suffix-attlist & attribute text:bullet-relative-size { percent }? text-list-level-style-image-attr = common-draw-data-attlist | office-binary-data text-list-level-style-attr = attribute text:level { positiveInteger } text-outline-style = element text:outline-style { text-outline-style-attr, text-outline-level-style+ } text-outline-style-attr = attribute style:name { styleName } text-outline-level-style = element text:outline-level-style { text-outline-level-style-attlist, style-list-level-properties?, style-text-properties? } text-outline-level-style-attlist = attribute text:level { positiveInteger } & attribute text:style-name { styleNameRef }? & common-num-format-attlist & common-num-format-prefix-suffix-attlist & attribute text:display-levels { positiveInteger }? & attribute text:start-value { positiveInteger }? style-graphic-properties = element style:graphic-properties { style-graphic-properties-content-strict } style-graphic-properties-content-strict = style-graphic-properties-attlist, style-graphic-fill-properties-attlist, style-graphic-properties-elements style-drawing-page-properties = element style:drawing-page-properties { style-drawing-page-properties-content-strict } style-drawing-page-properties-content-strict = style-graphic-fill-properties-attlist, style-drawing-page-properties-attlist, style-drawing-page-properties-elements draw-gradient = element draw:gradient { common-draw-gradient-attlist, draw-gradient-attlist, empty } common-draw-gradient-attlist = attribute draw:name { styleName }? & attribute draw:display-name { \string }? & attribute draw:style { gradient-style } & attribute draw:cx { percent }? & attribute draw:cy { percent }? & attribute draw:angle { angle }? & attribute draw:border { percent }? gradient-style = "linear" | "axial" | "radial" | "ellipsoid" | "square" | "rectangular" draw-gradient-attlist = attribute draw:start-color { color }? & attribute draw:end-color { color }? & attribute draw:start-intensity { zeroToHundredPercent }? & attribute draw:end-intensity { zeroToHundredPercent }? svg-linearGradient = element svg:linearGradient { common-svg-gradient-attlist, attribute svg:x1 { coordinate | percent }?, attribute svg:y1 { coordinate | percent }?, attribute svg:x2 { coordinate | percent }?, attribute svg:y2 { coordinate | percent }?, svg-stop* } svg-radialGradient = element svg:radialGradient { common-svg-gradient-attlist, attribute svg:cx { coordinate | percent }?, attribute svg:cy { coordinate | percent }?, attribute svg:r { coordinate | percent }?, attribute svg:fx { coordinate | percent }?, attribute svg:fy { coordinate | percent }?, svg-stop* } svg-stop = element svg:stop { attribute svg:offset { double | percent }, attribute svg:stop-color { color }?, attribute svg:stop-opacity { double }? } common-svg-gradient-attlist = attribute svg:gradientUnits { "objectBoundingBox" }? & attribute svg:gradientTransform { \string }? & attribute svg:spreadMethod { "pad" | "reflect" | "repeat" }? & attribute draw:name { styleName } & attribute draw:display-name { \string }? draw-hatch = element draw:hatch { draw-hatch-attlist, empty } draw-hatch-attlist = attribute draw:name { styleName } & attribute draw:display-name { \string }? & attribute draw:style { "single" | "double" | "triple" } & attribute draw:color { color }? & attribute draw:distance { length }? & attribute draw:rotation { angle }? draw-fill-image = element draw:fill-image { draw-fill-image-attlist, attribute xlink:type { "simple" }, attribute xlink:href { anyIRI }, attribute xlink:show { "embed" }?, attribute xlink:actuate { "onLoad" }?, empty } draw-fill-image-attlist = attribute draw:name { styleName } & attribute draw:display-name { \string }? & attribute svg:width { length }? & attribute svg:height { length }? draw-opacity = element draw:opacity { common-draw-gradient-attlist, draw-opacity-attlist, empty } draw-opacity-attlist = attribute draw:start { zeroToHundredPercent }?, attribute draw:end { zeroToHundredPercent }? draw-marker = element draw:marker { draw-marker-attlist, common-draw-viewbox-attlist, common-draw-path-data-attlist, empty } draw-marker-attlist = attribute draw:name { styleName } & attribute draw:display-name { \string }? draw-stroke-dash = element draw:stroke-dash { draw-stroke-dash-attlist, empty } draw-stroke-dash-attlist = attribute draw:name { styleName } & attribute draw:display-name { \string }? & attribute draw:style { "rect" | "round" }? & attribute draw:dots1 { integer }? & attribute draw:dots1-length { length | percent }? & attribute draw:dots2 { integer }? & attribute draw:dots2-length { length | percent }? & attribute draw:distance { length | percent }? style-presentation-page-layout = element style:presentation-page-layout { attribute style:name { styleName }, attribute style:display-name { \string }?, presentation-placeholder* } presentation-placeholder = element presentation:placeholder { attribute presentation:object { presentation-classes }, attribute svg:x { coordinate | percent }, attribute svg:y { coordinate | percent }, attribute svg:width { length | percent }, attribute svg:height { length | percent }, empty } style-page-layout-properties = element style:page-layout-properties { style-page-layout-properties-content-strict } style-page-layout-properties-content-strict = style-page-layout-properties-attlist, style-page-layout-properties-elements style-page-layout-properties-attlist = attribute fo:page-width { length }? & attribute fo:page-height { length }? & common-num-format-attlist? & common-num-format-prefix-suffix-attlist & attribute style:paper-tray-name { "default" | \string }? & attribute style:print-orientation { "portrait" | "landscape" }? & common-horizontal-margin-attlist & common-vertical-margin-attlist & common-margin-attlist & common-border-attlist & common-border-line-width-attlist & common-padding-attlist & common-shadow-attlist & common-background-color-attlist & attribute style:register-truth-ref-style-name { styleNameRef }? & attribute style:print { list { ("headers" | "grid" | "annotations" | "objects" | "charts" | "drawings" | "formulas" | "zero-values")* } }? & attribute style:print-page-order { "ttb" | "ltr" }? & attribute style:first-page-number { positiveInteger | "continue" }? & attribute style:scale-to { percent }? & attribute style:scale-to-pages { positiveInteger }? & attribute style:table-centering { "horizontal" | "vertical" | "both" | "none" }? & attribute style:footnote-max-height { length }? & common-writing-mode-attlist & attribute style:layout-grid-mode { "none" | "line" | "both" }? & attribute style:layout-grid-standard-mode { boolean }? & attribute style:layout-grid-base-height { length }? & attribute style:layout-grid-ruby-height { length }? & attribute style:layout-grid-lines { positiveInteger }? & attribute style:layout-grid-base-width { length }? & attribute style:layout-grid-color { color }? & attribute style:layout-grid-ruby-below { boolean }? & attribute style:layout-grid-print { boolean }? & attribute style:layout-grid-display { boolean }? & attribute style:layout-grid-snap-to { boolean }? style-page-layout-properties-elements = style-background-image & style-columns & style-footnote-sep style-footnote-sep = element style:footnote-sep { style-footnote-sep-attlist, empty }? style-footnote-sep-attlist = attribute style:width { length }?, attribute style:rel-width { percent }?, attribute style:color { color }?, attribute style:line-style { lineStyle }?, attribute style:adjustment { "left" | "center" | "right" }?, attribute style:distance-before-sep { length }?, attribute style:distance-after-sep { length }? style-header-footer-properties = element style:header-footer-properties { style-header-footer-properties-content-strict } style-header-footer-properties-content-strict = style-header-footer-properties-attlist, style-header-footer-properties-elements style-header-footer-properties-attlist = attribute svg:height { length }? & attribute fo:min-height { length }? & common-horizontal-margin-attlist & common-vertical-margin-attlist & common-margin-attlist & common-border-attlist & common-border-line-width-attlist & common-padding-attlist & common-background-color-attlist & common-shadow-attlist & attribute style:dynamic-spacing { boolean }? style-header-footer-properties-elements = style-background-image style-text-properties = element style:text-properties { style-text-properties-content-strict } style-text-properties-content-strict = style-text-properties-attlist, style-text-properties-elements style-text-properties-elements = empty style-text-properties-attlist = attribute fo:font-variant { fontVariant }? & attribute fo:text-transform { "none" | "lowercase" | "uppercase" | "capitalize" }? & attribute fo:color { color }? & attribute style:use-window-font-color { boolean }? & attribute style:text-outline { boolean }? & attribute style:text-line-through-type { lineType }? & attribute style:text-line-through-style { lineStyle }? & attribute style:text-line-through-width { lineWidth }? & attribute style:text-line-through-color { "font-color" | color }? & attribute style:text-line-through-text { \string }? & attribute style:text-line-through-text-style { styleNameRef }? & attribute style:text-position { list { (percent | "super" | "sub"), percent? } }? & attribute style:font-name { \string }? & attribute style:font-name-asian { \string }? & attribute style:font-name-complex { \string }? & attribute fo:font-family { \string }? & attribute style:font-family-asian { \string }? & attribute style:font-family-complex { \string }? & attribute style:font-family-generic { fontFamilyGeneric }? & attribute style:font-family-generic-asian { fontFamilyGeneric }? & attribute style:font-family-generic-complex { fontFamilyGeneric }? & attribute style:font-style-name { \string }? & attribute style:font-style-name-asian { \string }? & attribute style:font-style-name-complex { \string }? & attribute style:font-pitch { fontPitch }? & attribute style:font-pitch-asian { fontPitch }? & attribute style:font-pitch-complex { fontPitch }? & attribute style:font-charset { textEncoding }? & attribute style:font-charset-asian { textEncoding }? & attribute style:font-charset-complex { textEncoding }? & attribute fo:font-size { positiveLength | percent }? & attribute style:font-size-asian { positiveLength | percent }? & attribute style:font-size-complex { positiveLength | percent }? & attribute style:font-size-rel { length }? & attribute style:font-size-rel-asian { length }? & attribute style:font-size-rel-complex { length }? & attribute style:script-type { "latin" | "asian" | "complex" | "ignore" }? & attribute fo:letter-spacing { length | "normal" }? & attribute fo:language { languageCode }? & attribute style:language-asian { languageCode }? & attribute style:language-complex { languageCode }? & attribute fo:country { countryCode }? & attribute style:country-asian { countryCode }? & attribute style:country-complex { countryCode }? & attribute fo:script { scriptCode }? & attribute style:script-asian { scriptCode }? & attribute style:script-complex { scriptCode }? & attribute style:rfc-language-tag { language }? & attribute style:rfc-language-tag-asian { language }? & attribute style:rfc-language-tag-complex { language }? & attribute fo:font-style { fontStyle }? & attribute style:font-style-asian { fontStyle }? & attribute style:font-style-complex { fontStyle }? & attribute style:font-relief { "none" | "embossed" | "engraved" }? & attribute fo:text-shadow { shadowType }? & attribute style:text-underline-type { lineType }? & attribute style:text-underline-style { lineStyle }? & attribute style:text-underline-width { lineWidth }? & attribute style:text-underline-color { "font-color" | color }? & attribute style:text-overline-type { lineType }? & attribute style:text-overline-style { lineStyle }? & attribute style:text-overline-width { lineWidth }? & attribute style:text-overline-color { "font-color" | color }? & attribute style:text-overline-mode { lineMode }? & attribute fo:font-weight { fontWeight }? & attribute style:font-weight-asian { fontWeight }? & attribute style:font-weight-complex { fontWeight }? & attribute style:text-underline-mode { lineMode }? & attribute style:text-line-through-mode { lineMode }? & attribute style:letter-kerning { boolean }? & attribute style:text-blinking { boolean }? & common-background-color-attlist & attribute style:text-combine { "none" | "letters" | "lines" }? & attribute style:text-combine-start-char { character }? & attribute style:text-combine-end-char { character }? & attribute style:text-emphasize { "none" | list { ("none" | "accent" | "dot" | "circle" | "disc"), ("above" | "below") } }? & attribute style:text-scale { percent }? & attribute style:text-rotation-angle { angle }? & attribute style:text-rotation-scale { "fixed" | "line-height" }? & attribute fo:hyphenate { boolean }? & attribute fo:hyphenation-remain-char-count { positiveInteger }? & attribute fo:hyphenation-push-char-count { positiveInteger }? & (attribute text:display { "true" } | attribute text:display { "none" } | (attribute text:display { "condition" }, attribute text:condition { "none" }) | empty) fontVariant = "normal" | "small-caps" fontFamilyGeneric = "roman" | "swiss" | "modern" | "decorative" | "script" | "system" fontPitch = "fixed" | "variable" textEncoding = xsd:string { pattern = "[A-Za-z][A-Za-z0-9._\-]*" } fontStyle = "normal" | "italic" | "oblique" shadowType = "none" | \string lineType = "none" | "single" | "double" lineStyle = "none" | "solid" | "dotted" | "dash" | "long-dash" | "dot-dash" | "dot-dot-dash" | "wave" lineWidth = "auto" | "normal" | "bold" | "thin" | "medium" | "thick" | positiveInteger | percent | positiveLength fontWeight = "normal" | "bold" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" lineMode = "continuous" | "skip-white-space" style-paragraph-properties = element style:paragraph-properties { style-paragraph-properties-content-strict } style-paragraph-properties-content-strict = style-paragraph-properties-attlist, style-paragraph-properties-elements style-paragraph-properties-attlist = attribute fo:line-height { "normal" | nonNegativeLength | percent }? & attribute style:line-height-at-least { nonNegativeLength }? & attribute style:line-spacing { length }? & attribute style:font-independent-line-spacing { boolean }? & common-text-align & attribute fo:text-align-last { "start" | "center" | "justify" }? & attribute style:justify-single-word { boolean }? & attribute fo:keep-together { "auto" | "always" }? & attribute fo:widows { nonNegativeInteger }? & attribute fo:orphans { nonNegativeInteger }? & attribute style:tab-stop-distance { nonNegativeLength }? & attribute fo:hyphenation-keep { "auto" | "page" }? & attribute fo:hyphenation-ladder-count { "no-limit" | positiveInteger }? & attribute style:register-true { boolean }? & common-horizontal-margin-attlist & attribute fo:text-indent { length | percent }? & attribute style:auto-text-indent { boolean }? & common-vertical-margin-attlist & common-margin-attlist & common-break-attlist & common-background-color-attlist & common-border-attlist & common-border-line-width-attlist & attribute style:join-border { boolean }? & common-padding-attlist & common-shadow-attlist & common-keep-with-next-attlist & attribute text:number-lines { boolean }? & attribute text:line-number { nonNegativeInteger }? & attribute style:text-autospace { "none" | "ideograph-alpha" }? & attribute style:punctuation-wrap { "simple" | "hanging" }? & attribute style:line-break { "normal" | "strict" }? & attribute style:vertical-align { "top" | "middle" | "bottom" | "auto" | "baseline" }? & common-writing-mode-attlist & attribute style:writing-mode-automatic { boolean }? & attribute style:snap-to-layout-grid { boolean }? & common-page-number-attlist & common-background-transparency-attlist common-text-align = attribute fo:text-align { "start" | "end" | "left" | "right" | "center" | "justify" }? style-paragraph-properties-elements = style-tab-stops & style-drop-cap & style-background-image style-tab-stops = element style:tab-stops { style-tab-stop* }? style-tab-stop = element style:tab-stop { style-tab-stop-attlist, empty } style-tab-stop-attlist = attribute style:position { length } & (attribute style:type { "left" | "center" | "right" }? | (attribute style:type { "char" }, style-tab-stop-char-attlist)) & attribute style:leader-type { lineType }? & attribute style:leader-style { lineStyle }? & attribute style:leader-width { lineWidth }? & attribute style:leader-color { "font-color" | color }? & attribute style:leader-text { character }? & attribute style:leader-text-style { styleNameRef }? style-tab-stop-char-attlist = attribute style:char { character } style-drop-cap = element style:drop-cap { style-drop-cap-attlist, empty }? style-drop-cap-attlist = attribute style:length { "word" | positiveInteger }? & attribute style:lines { positiveInteger }? & attribute style:distance { length }? & attribute style:style-name { styleNameRef }? common-horizontal-margin-attlist = attribute fo:margin-left { length | percent }?, attribute fo:margin-right { length | percent }? common-vertical-margin-attlist = attribute fo:margin-top { nonNegativeLength | percent }?, attribute fo:margin-bottom { nonNegativeLength | percent }? common-margin-attlist = attribute fo:margin { nonNegativeLength | percent }? common-break-attlist = attribute fo:break-before { "auto" | "column" | "page" }?, attribute fo:break-after { "auto" | "column" | "page" }? common-background-color-attlist = attribute fo:background-color { "transparent" | color }? style-background-image = element style:background-image { style-background-image-attlist, (common-draw-data-attlist | office-binary-data | empty) }? style-background-image-attlist = attribute style:repeat { "no-repeat" | "repeat" | "stretch" }? & attribute style:position { "left" | "center" | "right" | "top" | "bottom" | list { horiBackPos, vertBackPos } | list { vertBackPos, horiBackPos } }? & attribute style:filter-name { \string }? & attribute draw:opacity { zeroToHundredPercent }? horiBackPos = "left" | "center" | "right" vertBackPos = "top" | "center" | "bottom" common-border-attlist = attribute fo:border { \string }?, attribute fo:border-top { \string }?, attribute fo:border-bottom { \string }?, attribute fo:border-left { \string }?, attribute fo:border-right { \string }? common-border-line-width-attlist = attribute style:border-line-width { borderWidths }?, attribute style:border-line-width-top { borderWidths }?, attribute style:border-line-width-bottom { borderWidths }?, attribute style:border-line-width-left { borderWidths }?, attribute style:border-line-width-right { borderWidths }? borderWidths = list { positiveLength, positiveLength, positiveLength } common-padding-attlist = attribute fo:padding { nonNegativeLength }?, attribute fo:padding-top { nonNegativeLength }?, attribute fo:padding-bottom { nonNegativeLength }?, attribute fo:padding-left { nonNegativeLength }?, attribute fo:padding-right { nonNegativeLength }? common-shadow-attlist = attribute style:shadow { shadowType }? common-keep-with-next-attlist = attribute fo:keep-with-next { "auto" | "always" }? common-writing-mode-attlist = attribute style:writing-mode { "lr-tb" | "rl-tb" | "tb-rl" | "tb-lr" | "lr" | "rl" | "tb" | "page" }? common-page-number-attlist = attribute style:page-number { positiveInteger | "auto" }? common-background-transparency-attlist = attribute style:background-transparency { zeroToHundredPercent }? style-ruby-properties = element style:ruby-properties { style-ruby-properties-content-strict } style-ruby-properties-content-strict = style-ruby-properties-attlist, style-ruby-properties-elements style-ruby-properties-elements = empty style-ruby-properties-attlist = attribute style:ruby-position { "above" | "below" }? & attribute style:ruby-align { "left" | "center" | "right" | "distribute-letter" | "distribute-space" }? style-section-properties = element style:section-properties { style-section-properties-content-strict } style-section-properties-content-strict = style-section-properties-attlist, style-section-properties-elements style-section-properties-attlist = common-background-color-attlist & common-horizontal-margin-attlist & attribute style:protect { boolean }? & common-editable-attlist & attribute text:dont-balance-text-columns { boolean }? & common-writing-mode-attlist style-section-properties-elements = style-background-image & style-columns & text-notes-configuration* style-columns = element style:columns { style-columns-attlist, style-column-sep?, style-column* }? style-columns-attlist = attribute fo:column-count { positiveInteger } & attribute fo:column-gap { length }? style-column = element style:column { style-column-attlist } style-column-attlist = attribute style:rel-width { relativeLength } & attribute fo:start-indent { length }? & attribute fo:end-indent { length }? & attribute fo:space-before { length }? & attribute fo:space-after { length }? style-column-sep = element style:column-sep { style-column-sep-attlist } style-column-sep-attlist = attribute style:style { "none" | "solid" | "dotted" | "dashed" | "dot-dashed" }? & attribute style:width { length } & attribute style:height { zeroToHundredPercent }? & attribute style:vertical-align { "top" | "middle" | "bottom" }? & attribute style:color { color }? style-table-properties = element style:table-properties { style-table-properties-content-strict } style-table-properties-content-strict = style-table-properties-attlist, style-table-properties-elements style-table-properties-attlist = attribute style:width { positiveLength }? & attribute style:rel-width { percent }? & attribute table:align { "left" | "center" | "right" | "margins" }? & common-horizontal-margin-attlist & common-vertical-margin-attlist & common-margin-attlist & common-page-number-attlist & common-break-attlist & common-background-color-attlist & common-shadow-attlist & common-keep-with-next-attlist & attribute style:may-break-between-rows { boolean }? & attribute table:border-model { "collapsing" | "separating" }? & common-writing-mode-attlist & attribute table:display { boolean }? style-table-properties-elements = style-background-image style-table-column-properties = element style:table-column-properties { style-table-column-properties-content-strict } style-table-column-properties-content-strict = style-table-column-properties-attlist, style-table-column-properties-elements style-table-column-properties-elements = empty style-table-column-properties-attlist = attribute style:column-width { positiveLength }? & attribute style:rel-column-width { relativeLength }? & attribute style:use-optimal-column-width { boolean }? & common-break-attlist style-table-row-properties = element style:table-row-properties { style-table-row-properties-content-strict } style-table-row-properties-content-strict = style-table-row-properties-attlist, style-table-row-properties-elements style-table-row-properties-attlist = attribute style:row-height { positiveLength }? & attribute style:min-row-height { nonNegativeLength }? & attribute style:use-optimal-row-height { boolean }? & common-background-color-attlist & common-break-attlist & attribute fo:keep-together { "auto" | "always" }? style-table-row-properties-elements = style-background-image style-table-cell-properties = element style:table-cell-properties { style-table-cell-properties-content-strict } style-table-cell-properties-content-strict = style-table-cell-properties-attlist, style-table-cell-properties-elements style-table-cell-properties-attlist = attribute style:vertical-align { "top" | "middle" | "bottom" | "automatic" }? & attribute style:text-align-source { "fix" | "value-type" }? & common-style-direction-attlist & attribute style:glyph-orientation-vertical { "auto" | "0" | "0deg" | "0rad" | "0grad" }? & common-writing-mode-attlist & common-shadow-attlist & common-background-color-attlist & common-border-attlist & attribute style:diagonal-tl-br { \string }? & attribute style:diagonal-tl-br-widths { borderWidths }? & attribute style:diagonal-bl-tr { \string }? & attribute style:diagonal-bl-tr-widths { borderWidths }? & common-border-line-width-attlist & common-padding-attlist & attribute fo:wrap-option { "no-wrap" | "wrap" }? & common-rotation-angle-attlist & attribute style:rotation-align { "none" | "bottom" | "top" | "center" }? & attribute style:cell-protect { "none" | "hidden-and-protected" | list { ("protected" | "formula-hidden")+ } }? & attribute style:print-content { boolean }? & attribute style:decimal-places { nonNegativeInteger }? & attribute style:repeat-content { boolean }? & attribute style:shrink-to-fit { boolean }? common-style-direction-attlist = attribute style:direction { "ltr" | "ttb" }? style-table-cell-properties-elements = style-background-image common-rotation-angle-attlist = attribute style:rotation-angle { angle }? style-list-level-properties = element style:list-level-properties { style-list-level-properties-content-strict } style-list-level-properties-content-strict = style-list-level-properties-attlist, style-list-level-properties-elements style-list-level-properties-attlist = common-text-align & attribute text:space-before { length }? & attribute text:min-label-width { nonNegativeLength }? & attribute text:min-label-distance { nonNegativeLength }? & attribute style:font-name { \string }? & attribute fo:width { positiveLength }? & attribute fo:height { positiveLength }? & common-vertical-rel-attlist & common-vertical-pos-attlist & attribute text:list-level-position-and-space-mode { "label-width-and-position" | "label-alignment" }? style-list-level-properties-elements = style-list-level-label-alignment style-list-level-label-alignment = element style:list-level-label-alignment { style-list-level-label-alignment-attlist, empty }? style-list-level-label-alignment-attlist = attribute text:label-followed-by { "listtab" | "space" | "nothing" } & attribute text:list-tab-stop-position { length }? & attribute fo:text-indent { length }? & attribute fo:margin-left { length }? style-graphic-properties-attlist = attribute draw:stroke { "none" | "dash" | "solid" }? & attribute draw:stroke-dash { styleNameRef }? & attribute draw:stroke-dash-names { styleNameRefs }? & attribute svg:stroke-width { length }? & attribute svg:stroke-color { color }? & attribute draw:marker-start { styleNameRef }? & attribute draw:marker-end { styleNameRef }? & attribute draw:marker-start-width { length }? & attribute draw:marker-end-width { length }? & attribute draw:marker-start-center { boolean }? & attribute draw:marker-end-center { boolean }? & attribute svg:stroke-opacity { xsd:double { minInclusive = "0" maxInclusive = "1" } | zeroToHundredPercent }? & attribute draw:stroke-linejoin { "miter" | "round" | "bevel" | "middle" | "none" }? & attribute svg:stroke-linecap { "butt" | "square" | "round" }? & attribute draw:symbol-color { color }? & attribute text:animation { "none" | "scroll" | "alternate" | "slide" }? & attribute text:animation-direction { "left" | "right" | "up" | "down" }? & attribute text:animation-start-inside { boolean }? & attribute text:animation-stop-inside { boolean }? & attribute text:animation-repeat { nonNegativeInteger }? & attribute text:animation-delay { duration }? & attribute text:animation-steps { length }? & attribute draw:auto-grow-width { boolean }? & attribute draw:auto-grow-height { boolean }? & attribute draw:fit-to-size { boolean }? & attribute draw:fit-to-contour { boolean }? & attribute draw:textarea-vertical-align { "top" | "middle" | "bottom" | "justify" }? & attribute draw:textarea-horizontal-align { "left" | "center" | "right" | "justify" }? & attribute fo:wrap-option { "no-wrap" | "wrap" }? & attribute style:shrink-to-fit { boolean }? & attribute draw:color-mode { "greyscale" | "mono" | "watermark" | "standard" }? & attribute draw:color-inversion { boolean }? & attribute draw:luminance { zeroToHundredPercent }? & attribute draw:contrast { percent }? & attribute draw:gamma { percent }? & attribute draw:red { signedZeroToHundredPercent }? & attribute draw:green { signedZeroToHundredPercent }? & attribute draw:blue { signedZeroToHundredPercent }? & attribute draw:image-opacity { zeroToHundredPercent }? & attribute draw:shadow { "visible" | "hidden" }? & attribute draw:shadow-offset-x { length }? & attribute draw:shadow-offset-y { length }? & attribute draw:shadow-color { color }? & attribute draw:shadow-opacity { zeroToHundredPercent }? & attribute draw:start-line-spacing-horizontal { distance }? & attribute draw:start-line-spacing-vertical { distance }? & attribute draw:end-line-spacing-horizontal { distance }? & attribute draw:end-line-spacing-vertical { distance }? & attribute draw:line-distance { distance }? & attribute draw:guide-overhang { length }? & attribute draw:guide-distance { distance }? & attribute draw:start-guide { length }? & attribute draw:end-guide { length }? & attribute draw:placing { "below" | "above" }? & attribute draw:parallel { boolean }? & attribute draw:measure-align { "automatic" | "left-outside" | "inside" | "right-outside" }? & attribute draw:measure-vertical-align { "automatic" | "above" | "below" | "center" }? & attribute draw:unit { "automatic" | "mm" | "cm" | "m" | "km" | "pt" | "pc" | "inch" | "ft" | "mi" }? & attribute draw:show-unit { boolean }? & attribute draw:decimal-places { nonNegativeInteger }? & attribute draw:caption-type { "straight-line" | "angled-line" | "angled-connector-line" }? & attribute draw:caption-angle-type { "fixed" | "free" }? & attribute draw:caption-angle { angle }? & attribute draw:caption-gap { distance }? & attribute draw:caption-escape-direction { "horizontal" | "vertical" | "auto" }? & attribute draw:caption-escape { length | percent }? & attribute draw:caption-line-length { length }? & attribute draw:caption-fit-line-length { boolean }? & attribute dr3d:horizontal-segments { nonNegativeInteger }? & attribute dr3d:vertical-segments { nonNegativeInteger }? & attribute dr3d:edge-rounding { percent }? & attribute dr3d:edge-rounding-mode { "correct" | "attractive" }? & attribute dr3d:back-scale { percent }? & attribute dr3d:depth { length }? & attribute dr3d:backface-culling { "enabled" | "disabled" }? & attribute dr3d:end-angle { angle }? & attribute dr3d:close-front { boolean }? & attribute dr3d:close-back { boolean }? & attribute dr3d:lighting-mode { "standard" | "double-sided" }? & attribute dr3d:normals-kind { "object" | "flat" | "sphere" }? & attribute dr3d:normals-direction { "normal" | "inverse" }? & attribute dr3d:texture-generation-mode-x { "object" | "parallel" | "sphere" }? & attribute dr3d:texture-generation-mode-y { "object" | "parallel" | "sphere" }? & attribute dr3d:texture-kind { "luminance" | "intensity" | "color" }? & attribute dr3d:texture-filter { "enabled" | "disabled" }? & attribute dr3d:texture-mode { "replace" | "modulate" | "blend" }? & attribute dr3d:ambient-color { color }? & attribute dr3d:emissive-color { color }? & attribute dr3d:specular-color { color }? & attribute dr3d:diffuse-color { color }? & attribute dr3d:shininess { percent }? & attribute dr3d:shadow { "visible" | "hidden" }? & common-draw-rel-size-attlist & attribute fo:min-width { length | percent }? & attribute fo:min-height { length | percent }? & attribute fo:max-height { length | percent }? & attribute fo:max-width { length | percent }? & common-horizontal-margin-attlist & common-vertical-margin-attlist & common-margin-attlist & attribute style:print-content { boolean }? & attribute style:protect { "none" | list { ("content" | "position" | "size")+ } }? & attribute style:horizontal-pos { "left" | "center" | "right" | "from-left" | "inside" | "outside" | "from-inside" }? & attribute svg:x { coordinate }? & attribute style:horizontal-rel { "page" | "page-content" | "page-start-margin" | "page-end-margin" | "frame" | "frame-content" | "frame-start-margin" | "frame-end-margin" | "paragraph" | "paragraph-content" | "paragraph-start-margin" | "paragraph-end-margin" | "char" }? & common-vertical-pos-attlist & common-vertical-rel-attlist & common-text-anchor-attlist & common-border-attlist & common-border-line-width-attlist & common-padding-attlist & common-shadow-attlist & common-background-color-attlist & common-background-transparency-attlist & common-editable-attlist & attribute style:wrap { "none" | "left" | "right" | "parallel" | "dynamic" | "run-through" | "biggest" }? & attribute style:wrap-dynamic-threshold { nonNegativeLength }? & attribute style:number-wrapped-paragraphs { "no-limit" | positiveInteger }? & attribute style:wrap-contour { boolean }? & attribute style:wrap-contour-mode { "full" | "outside" }? & attribute style:run-through { "foreground" | "background" }? & attribute style:flow-with-text { boolean }? & attribute style:overflow-behavior { "clip" | "auto-create-new-frame" }? & attribute style:mirror { "none" | "vertical" | horizontal-mirror | list { "vertical", horizontal-mirror } | list { horizontal-mirror, "vertical" } }? & attribute fo:clip { "auto" | clipShape }? & attribute draw:wrap-influence-on-position { "iterative" | "once-concurrent" | "once-successive" }? & common-writing-mode-attlist & attribute draw:frame-display-scrollbar { boolean }? & attribute draw:frame-display-border { boolean }? & attribute draw:frame-margin-horizontal { nonNegativePixelLength }? & attribute draw:frame-margin-vertical { nonNegativePixelLength }? & attribute draw:visible-area-left { nonNegativeLength }? & attribute draw:visible-area-top { nonNegativeLength }? & attribute draw:visible-area-width { positiveLength }? & attribute draw:visible-area-height { positiveLength }? & attribute draw:draw-aspect { "content" | "thumbnail" | "icon" | "print-view" }? & attribute draw:ole-draw-aspect { nonNegativeInteger }? style-graphic-fill-properties-attlist = attribute draw:fill { "none" | "solid" | "bitmap" | "gradient" | "hatch" }? & attribute draw:fill-color { color }? & attribute draw:secondary-fill-color { color }? & attribute draw:fill-gradient-name { styleNameRef }? & attribute draw:gradient-step-count { nonNegativeInteger }? & attribute draw:fill-hatch-name { styleNameRef }? & attribute draw:fill-hatch-solid { boolean }? & attribute draw:fill-image-name { styleNameRef }? & attribute style:repeat { "no-repeat" | "repeat" | "stretch" }? & attribute draw:fill-image-width { length | percent }? & attribute draw:fill-image-height { length | percent }? & attribute draw:fill-image-ref-point-x { percent }? & attribute draw:fill-image-ref-point-y { percent }? & attribute draw:fill-image-ref-point { "top-left" | "top" | "top-right" | "left" | "center" | "right" | "bottom-left" | "bottom" | "bottom-right" }? & attribute draw:tile-repeat-offset { list { zeroToHundredPercent, ("horizontal" | "vertical") } }? & attribute draw:opacity { zeroToHundredPercent }? & attribute draw:opacity-name { styleNameRef }? & attribute svg:fill-rule { "nonzero" | "evenodd" }? style-graphic-properties-elements = text-list-style? & style-background-image & style-columns common-vertical-pos-attlist = attribute style:vertical-pos { "top" | "middle" | "bottom" | "from-top" | "below" }?, attribute svg:y { coordinate }? common-vertical-rel-attlist = attribute style:vertical-rel { "page" | "page-content" | "frame" | "frame-content" | "paragraph" | "paragraph-content" | "char" | "line" | "baseline" | "text" }? common-editable-attlist = attribute style:editable { boolean }? horizontal-mirror = "horizontal" | "horizontal-on-odd" | "horizontal-on-even" clipShape = xsd:string { pattern = "rect\([ ]*((-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)))|(auto))([ ]*,[ ]*((-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc))))|(auto)){3}[ ]*\)" } nonNegativePixelLength = xsd:string { pattern = "([0-9]+(\.[0-9]*)?|\.[0-9]+)(px)" } style-chart-properties = element style:chart-properties { style-chart-properties-content-strict } style-chart-properties-content-strict = style-chart-properties-attlist, style-chart-properties-elements style-chart-properties-elements = empty style-chart-properties-attlist = attribute chart:scale-text { boolean }? & attribute chart:three-dimensional { boolean }? & attribute chart:deep { boolean }? & attribute chart:right-angled-axes { boolean }? & (attribute chart:symbol-type { "none" } | attribute chart:symbol-type { "automatic" } | (attribute chart:symbol-type { "named-symbol" }, attribute chart:symbol-name { "square" | "diamond" | "arrow-down" | "arrow-up" | "arrow-right" | "arrow-left" | "bow-tie" | "hourglass" | "circle" | "star" | "x" | "plus" | "asterisk" | "horizontal-bar" | "vertical-bar" }) | (attribute chart:symbol-type { "image" }, element chart:symbol-image { attribute xlink:href { anyIRI } }) | empty) & attribute chart:symbol-width { nonNegativeLength }? & attribute chart:symbol-height { nonNegativeLength }? & attribute chart:sort-by-x-values { boolean }? & attribute chart:vertical { boolean }? & attribute chart:connect-bars { boolean }? & attribute chart:gap-width { integer }? & attribute chart:overlap { integer }? & attribute chart:group-bars-per-axis { boolean }? & attribute chart:japanese-candle-stick { boolean }? & attribute chart:interpolation { "none" | "cubic-spline" | "b-spline" }? & attribute chart:spline-order { positiveInteger }? & attribute chart:spline-resolution { positiveInteger }? & attribute chart:pie-offset { nonNegativeInteger }? & attribute chart:angle-offset { angle }? & attribute chart:hole-size { percent }? & attribute chart:lines { boolean }? & attribute chart:solid-type { "cuboid" | "cylinder" | "cone" | "pyramid" }? & attribute chart:stacked { boolean }? & attribute chart:percentage { boolean }? & attribute chart:treat-empty-cells { "use-zero" | "leave-gap" | "ignore" }? & attribute chart:link-data-style-to-source { boolean }? & attribute chart:logarithmic { boolean }? & attribute chart:maximum { double }? & attribute chart:minimum { double }? & attribute chart:origin { double }? & attribute chart:interval-major { double }? & attribute chart:interval-minor-divisor { positiveInteger }? & attribute chart:tick-marks-major-inner { boolean }? & attribute chart:tick-marks-major-outer { boolean }? & attribute chart:tick-marks-minor-inner { boolean }? & attribute chart:tick-marks-minor-outer { boolean }? & attribute chart:reverse-direction { boolean }? & attribute chart:display-label { boolean }? & attribute chart:text-overlap { boolean }? & attribute text:line-break { boolean }? & attribute chart:label-arrangement { "side-by-side" | "stagger-even" | "stagger-odd" }? & common-style-direction-attlist & common-rotation-angle-attlist & attribute chart:data-label-number { "none" | "value" | "percentage" | "value-and-percentage" }? & attribute chart:data-label-text { boolean }? & attribute chart:data-label-symbol { boolean }? & element chart:label-separator { text-p }? & attribute chart:label-position { labelPositions }? & attribute chart:label-position-negative { labelPositions }? & attribute chart:visible { boolean }? & attribute chart:auto-position { boolean }? & attribute chart:auto-size { boolean }? & attribute chart:mean-value { boolean }? & attribute chart:error-category { "none" | "variance" | "standard-deviation" | "percentage" | "error-margin" | "constant" | "standard-error" | "cell-range" }? & attribute chart:error-percentage { double }? & attribute chart:error-margin { double }? & attribute chart:error-lower-limit { double }? & attribute chart:error-upper-limit { double }? & attribute chart:error-upper-indicator { boolean }? & attribute chart:error-lower-indicator { boolean }? & attribute chart:error-lower-range { cellRangeAddressList }? & attribute chart:error-upper-range { cellRangeAddressList }? & attribute chart:series-source { "columns" | "rows" }? & attribute chart:regression-type { "none" | "linear" | "logarithmic" | "exponential" | "power" }? & attribute chart:axis-position { "start" | "end" | double }? & attribute chart:axis-label-position { "near-axis" | "near-axis-other-side" | "outside-start" | "outside-end" }? & attribute chart:tick-mark-position { "at-labels" | "at-axis" | "at-labels-and-axis" }? & attribute chart:include-hidden-cells { boolean }? labelPositions = "avoid-overlap" | "center" | "top" | "top-right" | "right" | "bottom-right" | "bottom" | "bottom-left" | "left" | "top-left" | "inside" | "outside" | "near-origin" style-drawing-page-properties-attlist = attribute presentation:transition-type { "manual" | "automatic" | "semi-automatic" }? & attribute presentation:transition-style { "none" | "fade-from-left" | "fade-from-top" | "fade-from-right" | "fade-from-bottom" | "fade-from-upperleft" | "fade-from-upperright" | "fade-from-lowerleft" | "fade-from-lowerright" | "move-from-left" | "move-from-top" | "move-from-right" | "move-from-bottom" | "move-from-upperleft" | "move-from-upperright" | "move-from-lowerleft" | "move-from-lowerright" | "uncover-to-left" | "uncover-to-top" | "uncover-to-right" | "uncover-to-bottom" | "uncover-to-upperleft" | "uncover-to-upperright" | "uncover-to-lowerleft" | "uncover-to-lowerright" | "fade-to-center" | "fade-from-center" | "vertical-stripes" | "horizontal-stripes" | "clockwise" | "counterclockwise" | "open-vertical" | "open-horizontal" | "close-vertical" | "close-horizontal" | "wavyline-from-left" | "wavyline-from-top" | "wavyline-from-right" | "wavyline-from-bottom" | "spiralin-left" | "spiralin-right" | "spiralout-left" | "spiralout-right" | "roll-from-top" | "roll-from-left" | "roll-from-right" | "roll-from-bottom" | "stretch-from-left" | "stretch-from-top" | "stretch-from-right" | "stretch-from-bottom" | "vertical-lines" | "horizontal-lines" | "dissolve" | "random" | "vertical-checkerboard" | "horizontal-checkerboard" | "interlocking-horizontal-left" | "interlocking-horizontal-right" | "interlocking-vertical-top" | "interlocking-vertical-bottom" | "fly-away" | "open" | "close" | "melt" }? & attribute presentation:transition-speed { presentationSpeeds }? & attribute smil:type { \string }? & attribute smil:subtype { \string }? & attribute smil:direction { "forward" | "reverse" }? & attribute smil:fadeColor { color }? & attribute presentation:duration { duration }? & attribute presentation:visibility { "visible" | "hidden" }? & attribute draw:background-size { "full" | "border" }? & attribute presentation:background-objects-visible { boolean }? & attribute presentation:background-visible { boolean }? & attribute presentation:display-header { boolean }? & attribute presentation:display-footer { boolean }? & attribute presentation:display-page-number { boolean }? & attribute presentation:display-date-time { boolean }? style-drawing-page-properties-elements = presentation-sound? \string = xsd:string date = xsd:date time = xsd:time dateTime = xsd:dateTime duration = xsd:duration integer = xsd:integer nonNegativeInteger = xsd:nonNegativeInteger positiveInteger = xsd:positiveInteger double = xsd:double anyURI = xsd:anyURI base64Binary = xsd:base64Binary ID = xsd:ID IDREF = xsd:IDREF IDREFS = xsd:IDREFS NCName = xsd:NCName boolean = "true" | "false" dateOrDateTime = xsd:date | xsd:dateTime timeOrDateTime = xsd:time | xsd:dateTime language = xsd:language countryCode = xsd:token { pattern = "[A-Za-z0-9]{1,8}" } languageCode = xsd:token { pattern = "[A-Za-z]{1,8}" } scriptCode = xsd:token { pattern = "[A-Za-z0-9]{1,8}" } character = xsd:string { length = "1" } length = xsd:string { pattern = "-?([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px))" } nonNegativeLength = xsd:string { pattern = "([0-9]+(\.[0-9]*)?|\.[0-9]+)((cm)|(mm)|(in)|(pt)|(pc)|(px))" } positiveLength = xsd:string { pattern = "([0-9]*[1-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px))" } percent = xsd:string { pattern = "-?([0-9]+(\.[0-9]*)?|\.[0-9]+)%" } zeroToHundredPercent = xsd:string { pattern = "([0-9]?[0-9](\.[0-9]*)?|100(\.0*)?|\.[0-9]+)%" } signedZeroToHundredPercent = xsd:string { pattern = "-?([0-9]?[0-9](\.[0-9]*)?|100(\.0*)?|\.[0-9]+)%" } relativeLength = xsd:string { pattern = "[0-9]+\*" } coordinate = length distance = length color = xsd:string { pattern = "#[0-9a-fA-F]{6}" } angle = xsd:string CURIE = xsd:string { pattern = "(([\i-[:]][\c-[:]]*)?:)?.+" minLength = "1" } CURIEs = list { CURIE+ } SafeCURIE = xsd:string { pattern = "\[(([\i-[:]][\c-[:]]*)?:)?.+\]" minLength = "3" } URIorSafeCURIE = anyURI | SafeCURIE styleName = xsd:NCName styleNameRef = xsd:NCName | empty styleNameRefs = list { xsd:NCName* } variableName = xsd:string targetFrameName = "_self" | "_blank" | "_parent" | "_top" | \string valueType = "float" | "time" | "date" | "percentage" | "currency" | "boolean" | "string" points = xsd:string { pattern = "-?[0-9]+,-?[0-9]+([ ]+-?[0-9]+,-?[0-9]+)*" } pathData = xsd:string vector3D = xsd:string { pattern = "\([ ]*-?([0-9]+(\.[0-9]*)?|\.[0-9]+)([ ]+-?([0-9]+(\.[0-9]*)?|\.[0-9]+)){2}[ ]*\)" } namespacedToken = xsd:QName { pattern = "[^:]+:[^:]+" } anyIRI = xsd:anyURI >> dc:description [ "An IRI-reference as defined in [RFC3987]. See ODF 1.2 Part 1 section 18.3." ] anyAttListOrElements = attribute * { text }*, anyElements anyElements = element * { mixed { anyAttListOrElements } }* [-- Attachment #4: schemas.xml --] [-- Type: application/xml, Size: 402 bytes --] ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 10:53 ` Org schemas we talked to be non-free, was: " Jean Louis @ 2021-01-24 17:50 ` Ulrich Mueller 2021-01-24 19:12 ` Jean Louis 2021-01-25 5:51 ` Richard Stallman 0 siblings, 2 replies; 145+ messages in thread From: Ulrich Mueller @ 2021-01-24 17:50 UTC (permalink / raw) To: Richard Stallman; +Cc: Ulrich Mueller, dgutov, ams, arthur.miller, emacs-devel >>>>> On Sun, 24 Jan 2021, Jean Louis wrote: > Schemas are attached. > I see copyright notices inside and it appears to be fully free > document modifiable and distributable as long as copyrights remains. Read these notices carefully. The key paragraph is this: This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ or assist in its implementation may be prepared, copied, published, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this section are included on all such copies and derivative works. Only a special class of derivative works can be distributed freely, and it sounds like some of these would fall under "fair use" anyway. Certainly this isn't enough to qualify as a free software license? However, this document itself may not be modified in any way, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ including by removing the copyright notice or references to OASIS, except as needed for the purpose of developing any document or deliverable produced by an OASIS Technical Committee (in which case the rules applicable to copyrights, as set forth in the OASIS IPR Policy, must be followed) or as required to translate it into languages other than English. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 17:50 ` Ulrich Mueller @ 2021-01-24 19:12 ` Jean Louis 2021-01-24 19:53 ` Eli Zaretskii ` (2 more replies) 2021-01-25 5:51 ` Richard Stallman 1 sibling, 3 replies; 145+ messages in thread From: Jean Louis @ 2021-01-24 19:12 UTC (permalink / raw) To: Ulrich Mueller; +Cc: ams, emacs-devel, Richard Stallman, arthur.miller, dgutov * Ulrich Mueller <ulm@gentoo.org> [2021-01-24 20:51]: > >>>>> On Sun, 24 Jan 2021, Jean Louis wrote: > > > Schemas are attached. > > > I see copyright notices inside and it appears to be fully free > > document modifiable and distributable as long as copyrights remains. > > Read these notices carefully. The key paragraph is this: > > This document and translations of it may be copied and furnished to > others, and derivative works that comment on or otherwise explain it > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > or assist in its implementation may be prepared, copied, published, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > and distributed, in whole or in part, without restriction of any > kind, provided that the above copyright notice and this section are > included on all such copies and derivative works. > > Only a special class of derivative works can be distributed freely, > and it sounds like some of these would fall under "fair use" anyway. > Certainly this isn't enough to qualify as a free software license? > > However, this document itself may not be modified in any way, > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > including by removing the copyright notice or references to OASIS, > except as needed for the purpose of developing any document or > deliverable produced by an OASIS Technical Committee (in which case > the rules applicable to copyrights, as set forth in the OASIS IPR > Policy, must be followed) or as required to translate it into > languages other than English. Then it is not free. Maybe Org mode shall switch from using OASIS infested non-free specification to Libreoffice. I could not find those files in Libreoffice folders. But they could be somewhere hidden. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 19:12 ` Jean Louis @ 2021-01-24 19:53 ` Eli Zaretskii 2021-01-24 20:36 ` Ulrich Mueller ` (2 more replies) 2021-01-24 20:46 ` tomas 2021-01-25 5:53 ` Richard Stallman 2 siblings, 3 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-24 19:53 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Sun, 24 Jan 2021 22:12:17 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: ams@gnu.org, emacs-devel@gnu.org, Richard Stallman <rms@gnu.org>, > arthur.miller@live.com, dgutov@yandex.ru > > > Only a special class of derivative works can be distributed freely, > > and it sounds like some of these would fall under "fair use" anyway. > > Certainly this isn't enough to qualify as a free software license? > > > > However, this document itself may not be modified in any way, > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > including by removing the copyright notice or references to OASIS, > > except as needed for the purpose of developing any document or > > deliverable produced by an OASIS Technical Committee (in which case > > the rules applicable to copyrights, as set forth in the OASIS IPR > > Policy, must be followed) or as required to translate it into > > languages other than English. > > Then it is not free. Forgive me for a possibly naïve question, but why on earth would you want to modify a schema? It's the same as modifying a physical law. Would you say that E = mc² is "non-free" because it cannot be meaningfully modified at will? ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 19:53 ` Eli Zaretskii @ 2021-01-24 20:36 ` Ulrich Mueller 2021-01-25 15:06 ` Eli Zaretskii 2021-01-24 20:47 ` Jean Louis 2021-01-25 5:53 ` Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-24 20:36 UTC (permalink / raw) To: Eli Zaretskii Cc: rms, Jean Louis, ulm, emacs-devel, ams, arthur.miller, dgutov >>>>> On Sun, 24 Jan 2021, Eli Zaretskii wrote: >> > Only a special class of derivative works can be distributed freely, >> > and it sounds like some of these would fall under "fair use" anyway. >> > Certainly this isn't enough to qualify as a free software license? >> > >> > However, this document itself may not be modified in any way, >> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >> > including by removing the copyright notice or references to OASIS, >> > except as needed for the purpose of developing any document or >> > deliverable produced by an OASIS Technical Committee (in which case >> > the rules applicable to copyrights, as set forth in the OASIS IPR >> > Policy, must be followed) or as required to translate it into >> > languages other than English. >> >> Then it is not free. > Forgive me for a possibly naïve question, but why on earth would you > want to modify a schema? I think the core question isn't if the files can be modified, but if their license allows including them with a free software package. At least if you apply the usual criteria mechanically, I believe the answer would be "no". > It's the same as modifying a physical law. Would you say that E = mc² > is "non-free" because it cannot be meaningfully modified at will? That's an awful analogy. For example, you can modify (i.e. generalise) the formula to E² = p²c² + m²c⁴ for an object with nonzero momentum. :-) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 20:36 ` Ulrich Mueller @ 2021-01-25 15:06 ` Eli Zaretskii 2021-01-26 6:01 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 15:06 UTC (permalink / raw) To: Ulrich Mueller; +Cc: rms, bugs, ulm, emacs-devel, ams, arthur.miller, dgutov > From: Ulrich Mueller <ulm@gentoo.org> > Cc: Jean Louis <bugs@gnu.support>, ulm@gentoo.org, rms@gnu.org, > dgutov@yandex.ru, ams@gnu.org, arthur.miller@live.com, > emacs-devel@gnu.org > Date: Sun, 24 Jan 2021 21:36:54 +0100 > > >>>>> On Sun, 24 Jan 2021, Eli Zaretskii wrote: > > >> > Only a special class of derivative works can be distributed freely, > >> > and it sounds like some of these would fall under "fair use" anyway. > >> > Certainly this isn't enough to qualify as a free software license? > >> > > >> > However, this document itself may not be modified in any way, > >> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > >> > including by removing the copyright notice or references to OASIS, > >> > except as needed for the purpose of developing any document or > >> > deliverable produced by an OASIS Technical Committee (in which case > >> > the rules applicable to copyrights, as set forth in the OASIS IPR > >> > Policy, must be followed) or as required to translate it into > >> > languages other than English. > >> > >> Then it is not free. > > > Forgive me for a possibly naïve question, but why on earth would you > > want to modify a schema? > > I think the core question isn't if the files can be modified, but if > their license allows including them with a free software package. Where does the stuff that you quoted disallow that? > At least if you apply the usual criteria mechanically, I believe the > answer would be "no". I very much hope that we don't apply anything of this kind mechanically. > > It's the same as modifying a physical law. Would you say that E = mc² > > is "non-free" because it cannot be meaningfully modified at will? > > That's an awful analogy. Why "awful"? A physical law describes some part of the reality, and an XML schema describes a certain kind of documents and data types. > For example, you can modify (i.e. generalise) the formula to E² = > p²c² + m²c⁴ for an object with nonzero momentum. :-) A schema can be similarly "generalized" (a.k.a. "extended") without changing it: you include the schema in your own and then add your own data types and conditions. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 15:06 ` Eli Zaretskii @ 2021-01-26 6:01 ` Richard Stallman 2021-01-26 15:57 ` Eli Zaretskii 0 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-26 6:01 UTC (permalink / raw) To: Eli Zaretskii; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > A schema can be similarly "generalized" (a.k.a. "extended") without > changing it: you include the schema in your own and then add your own > data types and conditions. Can you please show me how sort of generalization is done? It isn't allowed by editing the schema; the license of the schema does not give permission for such modifications. Is there some other mechanism that can be used to do that job? If so, could you please show me something about that mechanism, and what it can and can't do? The license of TeX says that modifying the TeX source file is forbidden -- but you can make changes for running it, with a change file. A change file can be used to make any change whatsoever, so in effect this is just a requirement abuot how to package a modified version of TeX, nothing more. That's why TeX qualifies as free software. If there is a similar authorized patching system for XML schemas, maybe that suffices to make the Open Documentation schemas free in effect even with their current license. But that depends on the details, on what range of things the patching system can do. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 6:01 ` Richard Stallman @ 2021-01-26 15:57 ` Eli Zaretskii 2021-01-26 16:03 ` Dmitry Gutov 2021-01-28 6:29 ` Richard Stallman 0 siblings, 2 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-26 15:57 UTC (permalink / raw) To: rms; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov > From: Richard Stallman <rms@gnu.org> > Cc: ulm@gentoo.org, bugs@gnu.support, ulm@gentoo.org, > emacs-devel@gnu.org, ams@gnu.org, arthur.miller@live.com, > dgutov@yandex.ru > Date: Tue, 26 Jan 2021 01:01:07 -0500 > > > A schema can be similarly "generalized" (a.k.a. "extended") without > > changing it: you include the schema in your own and then add your own > > data types and conditions. > > Can you please show me how sort of generalization is done? It isn't > allowed by editing the schema; the license of the schema does not give > permission for such modifications. > > Is there some other mechanism that can be used to do that job? If so, > could you please show me something about that mechanism, and what it > can and can't do? Basically you reference the original schema in yours, and then add your extensions or overrides. There are several methods available for that, but the simplest one is to define new elements using the ones defined in the original schema. Here's a simple example: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="USaddress"> <xs:complexType> <xs:sequence> <xs:element name="street1" type="xs:string" minOccurs="0"/> <xs:element name="street2" type="xs:string" minOccurs="0"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> This defines an element "US Address" using xs:string type defined in the W3C XMLSchema. Then you can define a new element "Contact", on top of that, by adding a name to an address: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- Reference to External Module containing USaddress definition --> <xs:include schemaLocation="USaddress.xsd"/> <!-- Element containing USaddress element from included module --> <xs:complexType name="contact"> <xs:sequence> <xs:element name="Name" type="xs:string"/> <xs:element ref="USaddress"/> </xs:sequence> </xs:complexType> </xs:schema> You can also extend an existing type: <xs:complexType name="extendedNameType"> <xs:extension base="nameType"> <xs:sequence> <xs:element name="gen" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexType> This extends the existing type "nameType" (presumably defined in some schema you include as above) by adding to it the sub-element "gen". There's also a facility to redefine existing data types. Etc. etc. This way, there's no reason to change the original schema, you just extend it in your own schema, using the original one as the baseline. A few resources to read up on this: https://www.w3schools.com/xml/el_extension.asp https://www.ibm.com/developerworks/library/x-xtendschema/index.html https://stackoverflow.com/questions/3392402/how-do-i-extend-a-base-schema-with-custom-elements-while-remaining-open-to-chang ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 15:57 ` Eli Zaretskii @ 2021-01-26 16:03 ` Dmitry Gutov 2021-01-26 16:13 ` Eli Zaretskii 2021-01-28 6:29 ` Richard Stallman 1 sibling, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-26 16:03 UTC (permalink / raw) To: Eli Zaretskii, rms; +Cc: arthur.miller, ulm, ams, bugs, emacs-devel On 26.01.2021 17:57, Eli Zaretskii wrote: > There are several methods available for that, but the simplest one is > to define new elements using the ones defined in the original schema. Wouldn't that make it a derivative work? ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 16:03 ` Dmitry Gutov @ 2021-01-26 16:13 ` Eli Zaretskii 2021-01-26 16:14 ` Dmitry Gutov 0 siblings, 1 reply; 145+ messages in thread From: Eli Zaretskii @ 2021-01-26 16:13 UTC (permalink / raw) To: Dmitry Gutov; +Cc: rms, bugs, ulm, emacs-devel, ams, arthur.miller > From: Dmitry Gutov <dgutov@yandex.ru> > Date: Tue, 26 Jan 2021 18:03:48 +0200 > Cc: arthur.miller@live.com, ulm@gentoo.org, ams@gnu.org, bugs@gnu.support, > emacs-devel@gnu.org > > On 26.01.2021 17:57, Eli Zaretskii wrote: > > There are several methods available for that, but the simplest one is > > to define new elements using the ones defined in the original schema. > > Wouldn't that make it a derivative work? I don't know. What if it does? ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 16:13 ` Eli Zaretskii @ 2021-01-26 16:14 ` Dmitry Gutov 2021-01-26 16:31 ` Eli Zaretskii 0 siblings, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-26 16:14 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, bugs, ulm, emacs-devel, ams, arthur.miller On 26.01.2021 18:13, Eli Zaretskii wrote: >>> There are several methods available for that, but the simplest one is >>> to define new elements using the ones defined in the original schema. >> Wouldn't that make it a derivative work? > I don't know. What if it does? The original schema's license can impose restrictions on that. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 16:14 ` Dmitry Gutov @ 2021-01-26 16:31 ` Eli Zaretskii 2021-01-26 22:55 ` Dmitry Gutov 0 siblings, 1 reply; 145+ messages in thread From: Eli Zaretskii @ 2021-01-26 16:31 UTC (permalink / raw) To: Dmitry Gutov; +Cc: rms, bugs, ulm, emacs-devel, ams, arthur.miller > Cc: rms@gnu.org, arthur.miller@live.com, ulm@gentoo.org, ams@gnu.org, > bugs@gnu.support, emacs-devel@gnu.org > From: Dmitry Gutov <dgutov@yandex.ru> > Date: Tue, 26 Jan 2021 18:14:31 +0200 > > On 26.01.2021 18:13, Eli Zaretskii wrote: > >>> There are several methods available for that, but the simplest one is > >>> to define new elements using the ones defined in the original schema. > >> Wouldn't that make it a derivative work? > > I don't know. What if it does? > > The original schema's license can impose restrictions on that. Does it, though? And if it does, how useful is such a schema? ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 16:31 ` Eli Zaretskii @ 2021-01-26 22:55 ` Dmitry Gutov 0 siblings, 0 replies; 145+ messages in thread From: Dmitry Gutov @ 2021-01-26 22:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, bugs, ulm, emacs-devel, ams, arthur.miller On 26.01.2021 18:31, Eli Zaretskii wrote: >>>>> There are several methods available for that, but the simplest one is >>>>> to define new elements using the ones defined in the original schema. >>>> Wouldn't that make it a derivative work? >>> I don't know. What if it does? >> The original schema's license can impose restrictions on that. > Does it, though? The OASIS schemas we're talking about have a license blurb that starts with "All right reserved", and then only mentiones permissions to do derivative works "that comment on or otherwise explain it or assist in its implementation", which doesn't seem to cover derivative schemas for, say, experimentation. Of course, many cases could be covered by Fair Use, and even those that don't, the likelihood of being sued is vanishingly low, and the main goal of theirs seems to be to avoid being misrepresented by others (e.g. by removing the authorship or keeping it but changing the contents somehow maliciously), but as a matter of license, permission for arbitrary derivative works seems absent. IANAL, consult your lawyer, etc. > And if it does, how useful is such a schema? Just as a way to describe a certain fixed format, I guess? The wording of their rules seems pretty bureaucratic. It seems you need to join OASIS (or work in a company that is part of it) to safely contribute to any new version of the format. Which is disappointing. Again, IANAL, and perhaps there are some better explanations in their policy somewhere on the website. I just could find them so far. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 15:57 ` Eli Zaretskii 2021-01-26 16:03 ` Dmitry Gutov @ 2021-01-28 6:29 ` Richard Stallman 2021-01-28 14:08 ` Eli Zaretskii 1 sibling, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-28 6:29 UTC (permalink / raw) To: Eli Zaretskii; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Is this extension mechanism limited to adding new fields and options? That may be sufficient most of the time in practice, but not enough to make it free. The reason that TeX change files are sufficient is that, being edit scripts, they can represent deletions as well as additions. You said there are other methods: > There are several methods available for that, but the simplest one is > to define new elements using the ones defined in the original schema. Do the other methods enable the changes that this method does not? Dmitry wrote: > Wouldn't that make it a derivative work? That is a subtle question. If the schemas mechanism is designed for such use, maybe that's an argument that it is permitted. If it comes down to it, I can consult a lawyer about that question. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-28 6:29 ` Richard Stallman @ 2021-01-28 14:08 ` Eli Zaretskii 2021-01-29 6:36 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Eli Zaretskii @ 2021-01-28 14:08 UTC (permalink / raw) To: rms; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov > From: Richard Stallman <rms@gnu.org> > Cc: ulm@gentoo.org, bugs@gnu.support, ulm@gentoo.org, > emacs-devel@gnu.org, ams@gnu.org, arthur.miller@live.com, > dgutov@yandex.ru > Date: Thu, 28 Jan 2021 01:29:08 -0500 > > Is this extension mechanism limited to adding new fields and options? > That may be sufficient most of the time in practice, but not enough > to make it free. Here's an example of redefining a type. Suppose a schema defines a type named yearType: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:simpleType name="yearType"> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </xsd:schema> Here's how you redefine yearType to force it to have 4 characters, no more, no less: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:redefine schemaLocation="prod1.xsd"> <xsd:simpleType name="yearType"> <xsd:restriction base="yearType"> <xsd:length value="4"/> </xsd:restriction> </xsd:simpleType> </xsd:redefine> <xsd:element name="fullYear" type="yearType"/> </xsd:schema> where prod1.xsd is the previous schema that defines the original yearType. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-28 14:08 ` Eli Zaretskii @ 2021-01-29 6:36 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-29 6:36 UTC (permalink / raw) To: Eli Zaretskii; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Here's how you redefine yearType to force it to have 4 characters, no > more, no less: I have to struggle to understand it, since it is full of constructs and symbols whose meaning I never knew. But it looks like you're saying that it is possible to start with one of those schemas and redefine more or less any part of it. Maybe that makes it comparable to the TeX case. I am trying toget in touch with someone on the committee to discuss the issue with. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 19:53 ` Eli Zaretskii 2021-01-24 20:36 ` Ulrich Mueller @ 2021-01-24 20:47 ` Jean Louis 2021-01-25 15:13 ` Eli Zaretskii 2021-01-25 5:53 ` Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: Jean Louis @ 2021-01-24 20:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov * Eli Zaretskii <eliz@gnu.org> [2021-01-24 22:53]: > Forgive me for a possibly naïve question, but why on earth would you > want to modify a schema? It's the same as modifying a physical law. > Would you say that E = mc² is "non-free" because it cannot be > meaningfully modified at will? I understand it. If that schema defines a document format and document format cannot be modified then I do not see how software that handles that document format is free. Programmers should be able to improve the format or make it incompatible as it is part of the overall document creation. It is not software but data used by software. Data should be modifiable in my opinion. Let us say enriched mode in Emacs, if it would not be modifiable by programmers who fork Emacs, I am not sure if Emacs would be free software. How about Org mode itself? If its format would not be modifiable, then we would not have software similar on Org or based on Org mode, such as: OneModel — an Alternative to emacs org-mode https://soylentnews.org/article.pl?sid=16/04/23/0149257 Maybe we would not have Orgzly as mobile Org mode application that is not Emacs. Maybe there would be not Vim Org mode and so on. I just hope that Libreoffice is not using non-free OASIS schemas. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 20:47 ` Jean Louis @ 2021-01-25 15:13 ` Eli Zaretskii 2021-01-25 17:50 ` Jean Louis ` (2 more replies) 0 siblings, 3 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 15:13 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Sun, 24 Jan 2021 23:47:42 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: ulm@gentoo.org, rms@gnu.org, dgutov@yandex.ru, ams@gnu.org, > arthur.miller@live.com, emacs-devel@gnu.org > > I understand it. If that schema defines a document format and document > format cannot be modified then I do not see how software that handles > that document format is free. Programmers should be able to improve > the format or make it incompatible as it is part of the overall > document creation. It is not software but data used by software. Data > should be modifiable in my opinion. Modifications of a schema produce a file that can no longer be used with the same collection of documents and protocols. So such modifications are not useful. I very much hope that we as a movement will not insist on abstract "freedom" to make useless modifications just for the sake of modifications. To me, Free Software movement is a pragmatic movement that picks up its fights wisely, and this particular fight isn't, it's a Quixotic fight for a useless goal. > Let us say enriched mode in Emacs, if it would not be modifiable by > programmers who fork Emacs, I am not sure if Emacs would be free > software. Enriched mode doesn't have or use a schema, so this example is inapplicable. > How about Org mode itself? If its format would not be modifiable, then > we would not have software similar on Org or based on Org mode, such > as: > > OneModel — an Alternative to emacs org-mode > https://soylentnews.org/article.pl?sid=16/04/23/0149257 Is OneModel compatible with Org? If it is, then it's an extension, not some modification. If it isn't compatible, then it's simply a different schema, unrelated to Org. > I just hope that Libreoffice is not using non-free OASIS schemas. They would be silly if they didn't. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 15:13 ` Eli Zaretskii @ 2021-01-25 17:50 ` Jean Louis 2021-01-25 17:56 ` Jean Louis 2021-01-25 20:10 ` Ulrich Mueller 2 siblings, 0 replies; 145+ messages in thread From: Jean Louis @ 2021-01-25 17:50 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov * Eli Zaretskii <eliz@gnu.org> [2021-01-25 18:14]: > > Date: Sun, 24 Jan 2021 23:47:42 +0300 > > From: Jean Louis <bugs@gnu.support> > > Cc: ulm@gentoo.org, rms@gnu.org, dgutov@yandex.ru, ams@gnu.org, > > arthur.miller@live.com, emacs-devel@gnu.org > > > > I understand it. If that schema defines a document format and document > > format cannot be modified then I do not see how software that handles > > that document format is free. Programmers should be able to improve > > the format or make it incompatible as it is part of the overall > > document creation. It is not software but data used by software. Data > > should be modifiable in my opinion. > > Modifications of a schema produce a file that can no longer be used > with the same collection of documents and protocols. So such > modifications are not useful. I very much hope that we as a movement > will not insist on abstract "freedom" to make useless modifications > just for the sake of modifications. To me, Free Software movement is > a pragmatic movement that picks up its fights wisely, and this > particular fight isn't, it's a Quixotic fight for a useless goal. That may be. I do not know. I find it alright to fork various software and change the final format of a document and produce new software with it. That is why also schemas should be modifiable. Otherwise it could make all software producing those documents non-free. I am just not sure if that schema does what I think it does. Of course people would not really make useless modifications. There are reasons why and how modifications are made, why sometimes forks are necessary. Libreoffice is itself fork from Openoffice. I do not see it being useless, now it is everywhere. I cannot even find Openoffice easy. It is useful. Then again without all the combinations of useless and useful things we would not be able to distinguish between each other. Plethora of people will make some useless things, but some of those useless will incite other people to make useful things. Those are butterfly effects, we better not underestimate it. Some projects will stall. Why does Guile language support Emacs Lisp? One could say it is useless to create new implementation of Emacs Lisp. Or new implementation of Common Lisp. In relation to formats, such should be free and modifiable, people shall be able to build upon them and create new formats. Some will be useless some will be useful. But without freedom, we will not even know it. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 15:13 ` Eli Zaretskii 2021-01-25 17:50 ` Jean Louis @ 2021-01-25 17:56 ` Jean Louis 2021-01-25 19:27 ` Eli Zaretskii 2021-01-26 6:09 ` Richard Stallman 2021-01-25 20:10 ` Ulrich Mueller 2 siblings, 2 replies; 145+ messages in thread From: Jean Louis @ 2021-01-25 17:56 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov * Eli Zaretskii <eliz@gnu.org> [2021-01-25 18:14]: > > Let us say enriched mode in Emacs, if it would not be modifiable by > > programmers who fork Emacs, I am not sure if Emacs would be free > > software. > > Enriched mode doesn't have or use a schema, so this example is > inapplicable. But it has its format. Right? Content-Type: text/enriched Text-Width: 70 <center> Hello there</center> How about programmer comes and says, now I want to call it Enriched mode, but internally it has to look like this: FORMAT: Enriched Width: 70 <PUT-MIDDLE> Hello there</DONE> > > How about Org mode itself? If its format would not be modifiable, then > > we would not have software similar on Org or based on Org mode, such > > as: > > > > OneModel — an Alternative to emacs org-mode > > https://soylentnews.org/article.pl?sid=16/04/23/0149257 > > Is OneModel compatible with Org? If it is, then it's an extension, > not some modification. If it isn't compatible, then it's simply a > different schema, unrelated to Org. Exactly, I was thinking we were chatting about that. Of course that by changing schema one may get incompatible formats. And that shall be software freedom. We have to allow programmers to make any formats and build upon previous formats. Incompatibility or not, that is not major point. When StarOffice was made first time its format was incompatible to many other formats. It was proprietary software. I know it as I have purchased it in Germany and used. Without that incompatible format we would not have today Open Document Format. So those schemas should be also free that new formats can be devised. The history of StarOffice/OpenOffice/LibreOffice shows that freedom is important and that people build upon it. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 17:56 ` Jean Louis @ 2021-01-25 19:27 ` Eli Zaretskii 2021-01-26 3:50 ` Jean Louis 2021-01-26 6:09 ` Richard Stallman 1 sibling, 1 reply; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 19:27 UTC (permalink / raw) To: Jean Louis; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov > Date: Mon, 25 Jan 2021 20:56:21 +0300 > From: Jean Louis <bugs@gnu.support> > Cc: ulm@gentoo.org, rms@gnu.org, dgutov@yandex.ru, ams@gnu.org, > arthur.miller@live.com, emacs-devel@gnu.org > > * Eli Zaretskii <eliz@gnu.org> [2021-01-25 18:14]: > > > Let us say enriched mode in Emacs, if it would not be modifiable by > > > programmers who fork Emacs, I am not sure if Emacs would be free > > > software. > > > > Enriched mode doesn't have or use a schema, so this example is > > inapplicable. > > But it has its format. Right? Its format is determined by the code, not by a DTD. And that format is specific to Enriched mode alone, it's its private format that is not shared with any other application. > How about programmer comes and says, now I want to call it Enriched > mode, but internally it has to look like this: > > FORMAT: Enriched > Width: 70 > > <PUT-MIDDLE> > > Hello there</DONE> How is this relevant to the issue we are discussing? > Exactly, I was thinking we were chatting about that. Of course that by > changing schema one may get incompatible formats. And that shall be > software freedom. We have to allow programmers to make any formats and > build upon previous formats. > > Incompatibility or not, that is not major point. It is exactly the major point. If you want to create a new schema, you can. > When StarOffice was made first time its format was incompatible to > many other formats. We are not talking about format of office files, we are talking about definitions of data types shared by gazillions of files used for very different purposes. It's a completely different use case. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 19:27 ` Eli Zaretskii @ 2021-01-26 3:50 ` Jean Louis 0 siblings, 0 replies; 145+ messages in thread From: Jean Louis @ 2021-01-26 3:50 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, ulm, emacs-devel, ams, arthur.miller, dgutov * Eli Zaretskii <eliz@gnu.org> [2021-01-25 22:27]: > > Date: Mon, 25 Jan 2021 20:56:21 +0300 > > From: Jean Louis <bugs@gnu.support> > > Cc: ulm@gentoo.org, rms@gnu.org, dgutov@yandex.ru, ams@gnu.org, > > arthur.miller@live.com, emacs-devel@gnu.org > > > > * Eli Zaretskii <eliz@gnu.org> [2021-01-25 18:14]: > > > > Let us say enriched mode in Emacs, if it would not be modifiable by > > > > programmers who fork Emacs, I am not sure if Emacs would be free > > > > software. > > > > > > Enriched mode doesn't have or use a schema, so this example is > > > inapplicable. > > > > But it has its format. Right? > > Its format is determined by the code, not by a DTD. And that format > is specific to Enriched mode alone, it's its private format that is > not shared with any other application. I was assuming it is determined by code. The specification need not be anywhere written in easy manner such as some schema. But it is written in the code and users are free to modify it. So when speaking of freedom users are free to modify the format of that document. I hope so. Freedom gives user opportunity not to make it private format. That is how new software comes into existence. If there is no freedom to modify and distribute and build upon it then programmers will most probably be reluctant to create new works. > > How about programmer comes and says, now I want to call it Enriched > > mode, but internally it has to look like this: > > > > FORMAT: Enriched > > Width: 70 > > > > <PUT-MIDDLE> > > > > Hello there</DONE> > > How is this relevant to the issue we are discussing? Maybe we shall first agree what we are discussing? I am talking about free software and freedom and if non-free program dependent data such as schemas should or should not be distributed with the Org package. What is the issue that we discuss according to you? > > Exactly, I was thinking we were chatting about that. Of course that by > > changing schema one may get incompatible formats. And that shall be > > software freedom. We have to allow programmers to make any formats and > > build upon previous formats. > > > > Incompatibility or not, that is not major point. > > It is exactly the major point. If you want to create a new schema, > you can. But you cannot modify the file that came along with free software. Of course we can create new schemas and new programs from scratch. But if we cannot modify that data coming along with free software such as Org package then Org package as software package is not fully free package. Maybe those functions that depend on non-free data shall be taken out of the Org mode and be distributed separately. It also brings up question if LibreOffice is really Libre if it depends on such non-free schema. > > When StarOffice was made first time its format was incompatible to > > many other formats. > > We are not talking about format of office files, we are talking about > definitions of data types shared by gazillions of files used for very > different purposes. It's a completely different use case. Your reference of the text I wrote is out of the intended context. You said it was useless to change schema and I have pointed out back to same LibreOffice/OpenOffice/StarOffice that it actually improved itself in few decades exactly because somebody was allowed to change the formats. Even if it maybe was not fully free, at least somebody was improving upon it. So the option to improve the format of a document is beneficial and rather useful even if it would break or change some compatibilities from past. My point was that when people are given freedom they are allowed to create new software and build upon the existing one. When bundling non-free schema with Org, do we give that freedom to receiver or not? If we do not give the freedom to user receiving the Org package then maybe such schema shall be removed from the package and functions depending on such non-free schema removed. Jean ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 17:56 ` Jean Louis 2021-01-25 19:27 ` Eli Zaretskii @ 2021-01-26 6:09 ` Richard Stallman 1 sibling, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-26 6:09 UTC (permalink / raw) To: Jean Louis; +Cc: ulm, emacs-devel, ams, arthur.miller, dgutov, eliz [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > Enriched mode doesn't have or use a schema, so this example is > > inapplicable. > But it has its format. Right? It isn't useful to compare these schemas to Enriched mode in this discussion, because this issue is not about a general idea. It is about how to treat a specific part of the implementation. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 15:13 ` Eli Zaretskii 2021-01-25 17:50 ` Jean Louis 2021-01-25 17:56 ` Jean Louis @ 2021-01-25 20:10 ` Ulrich Mueller 2021-01-25 20:21 ` Eli Zaretskii 2021-01-26 6:09 ` Richard Stallman 2 siblings, 2 replies; 145+ messages in thread From: Ulrich Mueller @ 2021-01-25 20:10 UTC (permalink / raw) To: Eli Zaretskii Cc: rms, Jean Louis, ulm, emacs-devel, ams, arthur.miller, dgutov >>>>> On Mon, 25 Jan 2021, Eli Zaretskii wrote: > Modifications of a schema produce a file that can no longer be used > with the same collection of documents and protocols. So such > modifications are not useful. I very much hope that we as a movement > will not insist on abstract "freedom" to make useless modifications > just for the sake of modifications. To me, Free Software movement is > a pragmatic movement that picks up its fights wisely, and this > particular fight isn't, it's a Quixotic fight for a useless goal. Of the files included with Emacs, maybe the the Unicode data files are the ones that resemble the purpose of the schemas most closely. As they are also part of a standard, modifying them (e.g., put "A" at a position other than 0x41) wouldn't make much sense either. Nevertheless, they are distributed under a license [1] that allows "to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies". [1] https://www.unicode.org/license.html ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 20:10 ` Ulrich Mueller @ 2021-01-25 20:21 ` Eli Zaretskii 2021-01-26 6:09 ` Richard Stallman 1 sibling, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 20:21 UTC (permalink / raw) To: Ulrich Mueller; +Cc: rms, bugs, ulm, emacs-devel, ams, arthur.miller, dgutov > From: Ulrich Mueller <ulm@gentoo.org> > Cc: Jean Louis <bugs@gnu.support>, rms@gnu.org, ulm@gentoo.org, > emacs-devel@gnu.org, ams@gnu.org, arthur.miller@live.com, > dgutov@yandex.ru > Date: Mon, 25 Jan 2021 21:10:21 +0100 > > Of the files included with Emacs, maybe the the Unicode data files are > the ones that resemble the purpose of the schemas most closely. As they > are also part of a standard, modifying them (e.g., put "A" at a position > other than 0x41) wouldn't make much sense either. > > Nevertheless, they are distributed under a license [1] that allows > "to deal in the Data Files or Software without restriction, including > without limitation the rights to use, copy, modify, merge, publish, > distribute, and/or sell copies". But we did nothing to have that license, it's how the Unicode Consortium distributes the UCD files. So I don't see how this is relevant to the issue at hand -- unless you'd like to propose that we approach the Unicode Consortium asking them whether they would like to replace their license with a non-free one... ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 20:10 ` Ulrich Mueller 2021-01-25 20:21 ` Eli Zaretskii @ 2021-01-26 6:09 ` Richard Stallman 1 sibling, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-26 6:09 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov, eliz [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Of the files included with Emacs, maybe the the Unicode data files are > the ones that resemble the purpose of the schemas most closely. As they > are also part of a standard, modifying them (e.g., put "A" at a position > other than 0x41) wouldn't make much sense either. > Nevertheless, they are distributed under a license [1] that allows > "to deal in the Data Files or Software without restriction, including > without limitation the rights to use, copy, modify, merge, publish, > distribute, and/or sell copies". This is something we could usefully cite if we approach OASIS to ask to put these schemas under a free license. It provides precedent. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 19:53 ` Eli Zaretskii 2021-01-24 20:36 ` Ulrich Mueller 2021-01-24 20:47 ` Jean Louis @ 2021-01-25 5:53 ` Richard Stallman 2021-01-25 15:27 ` Eli Zaretskii 2 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-25 5:53 UTC (permalink / raw) To: Eli Zaretskii; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Forgive me for a possibly naïve question, but why on earth would you > want to modify a schema? It's the same as modifying a physical law. > Would you say that E = mc² is "non-free" because it cannot be > meaningfully modified at will? We can't modify physics, but a physicist might very well want to modify the equation E = mc². For instance, perse might want to use natural units, in which c = 1, which would give E = m. Then perse might want to generalize to handle an object not at rest, by including its momentum. That gives E² - p² = m². Or perse might want to express that in 4-dimensional covariant form as μ 2 2 2 p p = m = p p - p p - p p - p p = E - p μ 0 0 1 1 2 2 3 3 And that's considering only _valid_ equations for relating mass and energy. I might want to modify the equation to make it be valid for some other purpose, or to present an instance of an equation which is not valid. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 5:53 ` Richard Stallman @ 2021-01-25 15:27 ` Eli Zaretskii 0 siblings, 0 replies; 145+ messages in thread From: Eli Zaretskii @ 2021-01-25 15:27 UTC (permalink / raw) To: rms; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov > From: Richard Stallman <rms@gnu.org> > Cc: bugs@gnu.support, ulm@gentoo.org, dgutov@yandex.ru, ams@gnu.org, > arthur.miller@live.com, emacs-devel@gnu.org > Date: Mon, 25 Jan 2021 00:53:57 -0500 > > > Forgive me for a possibly naïve question, but why on earth would you > > want to modify a schema? It's the same as modifying a physical law. > > > Would you say that E = mc² is "non-free" because it cannot be > > meaningfully modified at will? > > We can't modify physics Exactly. And similarly with the data types described by a schema: changing the description doesn't change the things it describes, it just makes the description inaccurate and thus useless. > but a physicist might very well want to modify > the equation E = mc². For instance, perse might want to use natural units, > in which c = 1, which would give E = m. A schema supports extension, which IMO is the analogy of that. > And that's considering only _valid_ equations for relating mass and > energy. I might want to modify the equation to make it be valid for > some other purpose, or to present an instance of an equation which is > not valid. I very much hope we won't fight a Quixotic battle so that we could make a schema invalid. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 19:12 ` Jean Louis 2021-01-24 19:53 ` Eli Zaretskii @ 2021-01-24 20:46 ` tomas 2021-01-27 7:35 ` Richard Stallman 2021-01-25 5:53 ` Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: tomas @ 2021-01-24 20:46 UTC (permalink / raw) To: emacs-devel; +Cc: Ulrich Mueller, ams, Richard Stallman, arthur.miller, dgutov [-- Attachment #1: Type: text/plain, Size: 2379 bytes --] On Sun, Jan 24, 2021 at 10:12:17PM +0300, Jean Louis wrote: > * Ulrich Mueller <ulm@gentoo.org> [2021-01-24 20:51]: > > >>>>> On Sun, 24 Jan 2021, Jean Louis wrote: > > > > > Schemas are attached. > > > > > I see copyright notices inside and it appears to be fully free > > > document modifiable and distributable as long as copyrights remains. > > > > Read these notices carefully. The key paragraph is this: > > > > This document and translations of it may be copied and furnished to > > others, and derivative works that comment on or otherwise explain it > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > or assist in its implementation may be prepared, copied, published, > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > and distributed, in whole or in part, without restriction of any > > kind, provided that the above copyright notice and this section are > > included on all such copies and derivative works. > > > > Only a special class of derivative works can be distributed freely, > > and it sounds like some of these would fall under "fair use" anyway. > > Certainly this isn't enough to qualify as a free software license? > > > > However, this document itself may not be modified in any way, > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > including by removing the copyright notice or references to OASIS, > > except as needed for the purpose of developing any document or > > deliverable produced by an OASIS Technical Committee (in which case > > the rules applicable to copyrights, as set forth in the OASIS IPR > > Policy, must be followed) or as required to translate it into > > languages other than English. > > Then it is not free. > > Maybe Org mode shall switch from using OASIS infested non-free > specification to Libreoffice. I could not find those files in > Libreoffice folders. But they could be somewhere hidden. LibreOffice's format (ODF) /is/ an OASIS standard [1]. (I have the impression that we might be interpreting to much into the RelaxNG immutability. After all, things like RFCs are, in their way immutable -- you can't change RFC8555 and keep calling it by the same name. Perhaps it'd make sense to talk to the OASIS folks. Cheers [1] https://wiki.documentfoundation.org/OASIS - t [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 20:46 ` tomas @ 2021-01-27 7:35 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-27 7:35 UTC (permalink / raw) To: tomas; +Cc: ulm, dgutov, ams, arthur.miller, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > (I have the impression that we might be interpreting to much into > the RelaxNG immutability. After all, things like RFCs are, in their > way immutable -- you can't change RFC8555 and keep calling it by > the same name. GNU software usually follows standards, and occasionally departs from them. (See node Non-GNU Standards in the GNU Coding Standards.) But the standards a program follows are not part of the program itself. You might think of using a standards document as part of the program's documentation, but we never do that, precisely because standards documents are typically immutable. Documentation must be free (see https://gnu.org/philosophy/free-doc.html). -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 19:12 ` Jean Louis 2021-01-24 19:53 ` Eli Zaretskii 2021-01-24 20:46 ` tomas @ 2021-01-25 5:53 ` Richard Stallman 2021-01-25 9:27 ` Ulrich Mueller 2 siblings, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-25 5:53 UTC (permalink / raw) To: Jean Louis; +Cc: ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Maybe Org mode shall switch from using OASIS infested non-free > specification to Libreoffice. I could not find those files in > Libreoffice folders. But they could be somewhere hidden. This is an interesting issue. If you could verify that LibreOffice does not contain those nonfree schemas, that would be very good news! You don't have to check it yourself -- you could find an expert who understands how LibreOffice works, someone who knows the answer and can explain it. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 5:53 ` Richard Stallman @ 2021-01-25 9:27 ` Ulrich Mueller 2021-01-26 6:03 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-25 9:27 UTC (permalink / raw) To: Richard Stallman; +Cc: Jean Louis, ulm, emacs-devel, ams, arthur.miller, dgutov >>>>> On Mon, 25 Jan 2021, Richard Stallman wrote: >> Maybe Org mode shall switch from using OASIS infested non-free >> specification to Libreoffice. I could not find those files in >> Libreoffice folders. But they could be somewhere hidden. > This is an interesting issue. If you could verify that LibreOffice > does not contain those nonfree schemas, that would be very good news! I fear we are out of luck there. Libreoffice documentation at https://help.libreoffice.org/3.3/Common/XML_File_Formats#Definition_of_the_XML_formats says "The schema for the OpenDocument formats can be found on the www.oasis-open.org web site", i.e., it points to the same nonfree files. I've also checked the Gentoo app-office/libreoffice-7.0.4.2 package, and it doesn't install any Relax-NG schemas. It only installs DTDs for the older OpenOffice.org 1.x format. These are licensed under MPL-2.0. Maybe it's time to contact OASIS Open and ask them if they would consider relicensing the Relax-NG schemas. Does somebody know one of the persons from their committee, because that may be a good place to start: https://www.oasis-open.org/committees/membership.php?wg_abbrev=office ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-25 9:27 ` Ulrich Mueller @ 2021-01-26 6:03 ` Richard Stallman 2021-01-26 9:24 ` Ulrich Mueller ` (2 more replies) 0 siblings, 3 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-26 6:03 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I fear we are out of luck there. Libreoffice documentation at > https://help.libreoffice.org/3.3/Common/XML_File_Formats#Definition_of_the_XML_formats > says "The schema for the OpenDocument formats can be found on the > www.oasis-open.org web site", i.e., it points to the same nonfree files. If we were looking for alternative definitions of those formats, you found that there were none there. But that doesn't necessarily mean there is a problem in LibreOffice. > I've also checked the Gentoo app-office/libreoffice-7.0.4.2 package, > and it doesn't install any Relax-NG schemas. It only installs DTDs for > the older OpenOffice.org 1.x format. These are licensed under MPL-2.0. It sounds like those are enough in practice. That is a vital bit of good news. In what directory does it install them? I'd like to see which ones the Trisquel package contains. What is the command I should use in dpkg to find out what files a package contains? > Maybe it's time to contact OASIS Open and ask them if they would > consider relicensing the Relax-NG schemas. I think we will do that, but let's not rush. We just got mail from someone who knows more than we do about Relax-NG schemas. Let's see what we can learn from per about how to deal with this. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 6:03 ` Richard Stallman @ 2021-01-26 9:24 ` Ulrich Mueller 2021-01-27 7:43 ` Richard Stallman 2021-01-26 15:43 ` Jose A. Ortega Ruiz 2021-01-26 16:48 ` Kévin Le Gouguec 2 siblings, 1 reply; 145+ messages in thread From: Ulrich Mueller @ 2021-01-26 9:24 UTC (permalink / raw) To: Richard Stallman Cc: bugs, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov >>>>> On Tue, 26 Jan 2021, Richard Stallman wrote: >> I've also checked the Gentoo app-office/libreoffice-7.0.4.2 package, >> and it doesn't install any Relax-NG schemas. It only installs DTDs for >> the older OpenOffice.org 1.x format. These are licensed under MPL-2.0. > It sounds like those are enough in practice. That is a vital bit of > good news. In what directory does it install them? I'd like to see > which ones the Trisquel package contains. The Gentoo package installs the DTDs in /usr/<libdir>/libreoffice/share/dtd/officedocument/1_0/ where <libdir> is lib or lib64 depending on the system. > What is the command I should use in dpkg to find out what files a > package contains? No idea. I've checked the Ubuntu package list on the web though, and the DTDs are in their libreoffice-common package, same path as above (with libdir=lib). ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 9:24 ` Ulrich Mueller @ 2021-01-27 7:43 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-27 7:43 UTC (permalink / raw) To: Ulrich Mueller; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Thanks. Now I see that Trisquel has installed the DTDs there, and they are free. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 6:03 ` Richard Stallman 2021-01-26 9:24 ` Ulrich Mueller @ 2021-01-26 15:43 ` Jose A. Ortega Ruiz 2021-01-26 16:48 ` Kévin Le Gouguec 2 siblings, 0 replies; 145+ messages in thread From: Jose A. Ortega Ruiz @ 2021-01-26 15:43 UTC (permalink / raw) To: emacs-devel On Tue, Jan 26 2021, Richard Stallman wrote: > What is the command I should use in dpkg to find out what files a > package contains? dpkg -L <package-name> ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 6:03 ` Richard Stallman 2021-01-26 9:24 ` Ulrich Mueller 2021-01-26 15:43 ` Jose A. Ortega Ruiz @ 2021-01-26 16:48 ` Kévin Le Gouguec 2021-01-28 6:34 ` Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: Kévin Le Gouguec @ 2021-01-26 16:48 UTC (permalink / raw) To: Richard Stallman Cc: bugs, Ulrich Mueller, emacs-devel, ams, arthur.miller, dgutov Richard Stallman <rms@gnu.org> writes: > What is the command I should use in dpkg to find out what files a > package contains? $ dpkg --listfiles $packagename # or -L for short. In the case of libreoffice, which is composed of many packages, that's not enough to find the files you are after. There might be a way to query dkpg for all packages matching a pattern; if bash completions are enabled, one can also start typing "dpkg -L libreoffice" then hit M-* to ask readline to insert all completions. Piping this into "grep dtd" yields the answer Ulrich gave. Another way to get this answer: $ dpkg --search dtd | grep libreoffice --search $pattern (or -S for short) lists all files from installed packages which match $pattern, prepended with the name of the package. ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-26 16:48 ` Kévin Le Gouguec @ 2021-01-28 6:34 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-28 6:34 UTC (permalink / raw) To: Kévin Le Gouguec Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] I think the issue about LibreOffice is not about DTDs, because the DTDs seem to be free. The question about LibreOffice that is pertinent to this issue is whether it contains any form of those schemas. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: Org schemas we talked to be non-free, was: [ELPA] New package: repology.el 2021-01-24 17:50 ` Ulrich Mueller 2021-01-24 19:12 ` Jean Louis @ 2021-01-25 5:51 ` Richard Stallman 1 sibling, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-25 5:51 UTC (permalink / raw) To: Ulrich Mueller; +Cc: ulm, dgutov, ams, arthur.miller, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Only a special class of derivative works can be distributed freely, > and it sounds like some of these would fall under "fair use" anyway. > Certainly this isn't enough to qualify as a free software license? Sad to say, you are right -- it is not a free license. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* freedom issues in free software 2021-01-07 10:55 ` Ulrich Mueller 2021-01-09 6:34 ` Richard Stallman 2021-01-20 6:14 ` Richard Stallman @ 2021-02-16 5:21 ` Richard Stallman 2 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-02-16 5:21 UTC (permalink / raw) To: Ulrich Mueller; +Cc: emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] A month ago you reported an apparent problem of nonfree software in GNU intlfonts and another in Org-mode. I did not know about either of them. i investigated them both. The one in intlfonts is fixed. The one in Org-mode appears not to be a real problem, but we are going to finish checking. It is very important to address these problems. Your message suggested you know of more of them. Would you please tell them to me? If they are not about Emacs, you don't need to send them to emacs-devel. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 7:49 ` Richard Stallman 2021-01-07 9:00 ` Jean Louis 2021-01-07 10:55 ` Ulrich Mueller @ 2021-01-07 15:05 ` Stefan Monnier 2021-01-13 15:57 ` Richard Stallman 2 siblings, 1 reply; 145+ messages in thread From: Stefan Monnier @ 2021-01-07 15:05 UTC (permalink / raw) To: Richard Stallman; +Cc: Jean Louis, ulm, emacs-devel, ams, arthur.miller, dgutov Could you people actually read what goes in this thread before getting on your high horses. The author already sent a new version days ago which tries to filter out non-free packages (and I'm working with him to refine his code). 'Nough said, Stefan Richard Stallman [2021-01-07 02:49:31] wrote: > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > You've brought us bad news about repology.org. Not only does it include > nonfree packages with no effort to avoid them, it fails to provide > enough information for us to easily filter them out. > > I see two ways we could possibly manage to use repology.org in the > Free World. > > * Find a way to distinguish free from nonfree packages. I see two > ideas One is to snarf the lists of free packages from Debian and > Parabola. Another is to see if free packages list a license that > shows they are free. You might have other ideas. > > * Ask the developer of repology.org to work with us to indicate which > packages are free, maybe even provide a way to specify "show me only > free packages". > > Does anyone have another idea? ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-07 15:05 ` [ELPA] New package: repology.el Stefan Monnier @ 2021-01-13 15:57 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-13 15:57 UTC (permalink / raw) To: Stefan Monnier; +Cc: bugs, ulm, emacs-devel, ams, arthur.miller, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Could you people actually read what goes in this thread before getting > on your high horses. The author already sent a new version days ago > which tries to filter out non-free packages (and I'm working with him > to refine his code). That's good news. Thank you for working on this. I saw your message just today. I wish I had seen it before, but I have been unable to keep up with the volume of mail in my inbox. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-04 12:09 ` Dmitry Gutov 2021-01-04 14:39 ` Alfred M. Szmidt @ 2021-01-05 6:33 ` Richard Stallman 2021-01-05 11:21 ` Dmitry Gutov 1 sibling, 1 reply; 145+ messages in thread From: Richard Stallman @ 2021-01-05 6:33 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, bugs, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > It doesn't have any links to the programs themselves, or even pointers > to their home pages. Its purpose is to show which version has been > published where, and who is maintaining that. I am not sure that difference is crucial. > As such, it's untenable to suggest that this project, or the proposed > package, promote any particular piece of software listed. I am not convinced -- but I'm willing to take a concrete look at what you're talking about. Would you please show me a couple of entries in repology? For instance, how about the one about LLVM? -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-05 6:33 ` Richard Stallman @ 2021-01-05 11:21 ` Dmitry Gutov 2021-01-07 7:32 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Dmitry Gutov @ 2021-01-05 11:21 UTC (permalink / raw) To: rms; +Cc: ulm, bugs, emacs-devel On 05.01.2021 08:33, Richard Stallman wrote: > > As such, it's untenable to suggest that this project, or the proposed > > package, promote any particular piece of software listed. > > I am not convinced -- but I'm willing to take a concrete look at what > you're talking about. Would you please show me a couple of entries > in repology? For instance, how about the one about LLVM? I'm not sure how to do that, the entry is pretty big. But here are two excerpts from two tabs: Repository Package name Version Category Maintainer(s) Adélie Linux current user clang-doc 8.0.1 - awilfox@adelielinux.org Adélie Linux current user clang-analyzer 8.0.1 - awilfox@adelielinux.org Adélie Linux current user clang-libs 8.0.1 - awilfox@adelielinux.org Adélie Linux current user llvm8 8.0.1 - awilfox@adelielinux.org Adélie Linux current user llvm8-libs 8.0.1 - awilfox@adelielinux.org ... Fedora Rawhide clang 11.0.1 Unspecified - Fedora Rawhide compiler-rt 11.0.1 Unspecified - Fedora Rawhide flang 11.0.1 Unspecified - Fedora Rawhide libcxx 11.0.1 Unspecified - Fedora Rawhide libcxxabi 11.0.1 Unspecified - ... and clang 8.0.1 (8.0.1-r0) Summary: A C language family front-end for LLVM Maintainer: awilfox@adelielinux.org License: NCSA Package-related links: APKBUILD Homepage: https://llvm.org/ user Adélie Linux current clang-analyzer 8.0.1 (8.0.1-r0) Summary: Clang source code analysis framework Maintainer: awilfox@adelielinux.org License: NCSA Package-related links: APKBUILD Homepage: https://llvm.org/ user Adélie Linux current clang-dev 8.0.1 (8.0.1-r0) Summary: A C language family front-end for LLVM (development files) Maintainer: awilfox@adelielinux.org License: NCSA Package-related links: APKBUILD Homepage: https://llvm.org/ user Adélie Linux current ... ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el 2021-01-05 11:21 ` Dmitry Gutov @ 2021-01-07 7:32 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-07 7:32 UTC (permalink / raw) To: Dmitry Gutov; +Cc: ulm, bugs, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I'm not sure how to do that, the entry is pretty big. But here are two > excerpts from two tabs: Thanks. That gives me an idea at one level of what it's doing. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el (v2) 2020-12-30 16:23 [ELPA] New package: repology.el Nicolas Goaziou 2020-12-30 19:34 ` Jean Louis @ 2020-12-30 21:58 ` Nicolas Goaziou 2021-01-04 11:45 ` [ELPA] New package: repology.el (v3) Nicolas Goaziou 1 sibling, 1 reply; 145+ messages in thread From: Nicolas Goaziou @ 2020-12-30 21:58 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 589 bytes --] Nicolas Goaziou <mail@nicolasgoaziou.fr> writes: > I wrote a small library to access to Repology API > (<https://repology.org>) from Emacs. I'd like to submit it for inclusion > in GNU ELPA, as it might be useful to others. > > I'm attaching the sole file since it has no interweb existence so far. > > Please let me know if it is not suitable for inclusion, or needs more > work. It needed more work… After this brown paper bag announce, the next revision hopefully fixes compilation warnings and expounds the docstring of the main interactive function. Here it is. [-- Attachment #2: Repology library (0.9.1) --] [-- Type: application/emacs-lisp, Size: 41701 bytes --] ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el (v3) 2020-12-30 21:58 ` [ELPA] New package: repology.el (v2) Nicolas Goaziou @ 2021-01-04 11:45 ` Nicolas Goaziou 2021-01-04 17:32 ` Stefan Monnier 0 siblings, 1 reply; 145+ messages in thread From: Nicolas Goaziou @ 2021-01-04 11:45 UTC (permalink / raw) To: emacs-devel Nicolas Goaziou <mail@nicolasgoaziou.fr> writes: > Nicolas Goaziou <mail@nicolasgoaziou.fr> writes: > >> I wrote a small library to access to Repology API >> (<https://repology.org>) from Emacs. I'd like to submit it for inclusion >> in GNU ELPA, as it might be useful to others. >> >> I'm attaching the sole file since it has no interweb existence so far. >> >> Please let me know if it is not suitable for inclusion, or needs more >> work. > > It needed more work… After this brown paper bag announce, the next > revision hopefully fixes compilation warnings and expounds the docstring > of the main interactive function. Here it is. So, IIUC, my work is not GNU-compatible. Well. I managed to create a third version of the library (i.e., version 0.10), which tries, in a best effort attempt, to hide any project with a dubious license. It works by matching a list of pre-defined regexps against the license string of the software. There are obvious limitations in that process: - the list of regexps is certainly incomplete, - some licenses are inaccurate in the database, - "unfreedom" is subtler than what softwares can guess, it requires lawyers sometimes. So, one could argue it may give a false sense of "security". Best effort attempt, as I wrote… In addition, I can also add a list of projects to ignore, if requested. I'm not attaching the new file to avoid spamming the list with anti-GNU software. But I'm asking it again, to be sure: do you think this new attempt could go to GNU (or Non-GNU) ELPA with that change, or is anything Repology-related verboten there? Regards, ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el (v3) 2021-01-04 11:45 ` [ELPA] New package: repology.el (v3) Nicolas Goaziou @ 2021-01-04 17:32 ` Stefan Monnier 2021-01-19 9:50 ` [ELPA] New package: repology.el (v4) Nicolas Goaziou 0 siblings, 1 reply; 145+ messages in thread From: Stefan Monnier @ 2021-01-04 17:32 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: emacs-devel > I'm not attaching the new file to avoid spamming the list with anti-GNU > software. But I'm asking it again, to be sure: do you think this new > attempt could go to GNU (or Non-GNU) ELPA with that change, or is > anything Repology-related verboten there? I do think it's acceptable, yes, thank you. If the code has all copyright assigned (e.g. is fully yours), then it can go to `elpa.git`. If you have write access, then you can even add it yourself. Let me know if you need help, Stefan ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el (v4) 2021-01-04 17:32 ` Stefan Monnier @ 2021-01-19 9:50 ` Nicolas Goaziou 2021-01-20 6:13 ` Richard Stallman 0 siblings, 1 reply; 145+ messages in thread From: Nicolas Goaziou @ 2021-01-19 9:50 UTC (permalink / raw) To: emacs-devel; +Cc: Stefan Monnier Hello, As announced a few days ago, and with the guidance of Stefan Monnier, I tweaked "repology.el" so it is somewhat aware about freedom, and cautious about what it displays. TL;DR: it is currently located at <https://elpa.gnu.org/devel/repology.html>. Here is its current commentary section. The third and fifth paragraphs are of particular interest for the discussion. This package provides tools to query Repology API (<https://repology.org/api>), process results, and display them. The results of a query revolve around three types of objects: projects, packages and problems. Using this library, you can find projects matching certain criteria, packages in a given project, and possible problems in some repository. See `repology-search-projects', `repology-lookup-project', and `repology-report-problems'. Projects-related requests are limited to `repology-projects-limit'. All requests are cached during `repology-cache-duration' seconds. By default, only projects recognized as free are included in the search results. You can control this behavior with the variable `repology-free-only-projects'. The function `repology-check-freedom' is responsible for guessing if a project, or a package, is free. You can then access data from those various objects using dedicated accessors. See, for example, `repology-project-name', `repology-project-packages', `repology-package-field', or `repology-problem-field'. You can also decide to display (a subset of) results in a tabulated list. See `repology-display-package', `repology-display-packages', `repology-display-projects' and `repology-display-problems'. You can control various aspects of the display, like the colors used (see `repology-status-faces'), or the columns shown (see `repology-display-packages-columns',`repology-display-projects-columns', and `repology-display-problems-columns'). When projects or packages are displayed, pressing <RET> gives you more information about the item at point, whereas pressing <F> reports their "freedom" status. For example, the following expression displays all outdated projects named after "emacs" and containing a package in GNU Guix repository that I do not ignore: (repology-display-projects (seq-filter (lambda (project) (not (member (repology-project-name project) my-ignored-projects))) (repology-search-projects :search "emacs" :inrepo "gnuguix" :outdated "on"))) Eventually, this library provides an interactive function with a spartan interface wrapping this up: `repology'. Since it builds and displays incrementally search filters, you may use it as a template to create your own queries. The library distinguishes between three categories of freedom for projects/packages: free, non-free, and unknown. Out of the 200.000 projects from Repology, it currently considers that about 73.000 are free, 300 are non-free, and the rest is unknown. Out of the box, the interface now only displays projects _most likely free_ (more in this below). It is also possible to configure it so it displays both free and unknown categories, or everything. The commentary section in "repology-license.el" explains how freedom state is obtained: This library provides the `repology-check-freedom' function, which returns t when a package or a project can be considered as free, nil it is identified as being non-free, and `unknown' otherwise. The decision is made by polling a number of "Reference repositories", defined in `repology-license-reference-repositories'. If the ratio of "Free" votes is above `repology-license-poll-threshold', the project is declared as free. In order to see the results of each vote, and possibly debug the process, you can set `repology-license-debug' to a non-nil value. Currently, reference repositories are: Debian, Fedora, OpenSUSE, Gentoo, Mageia, along with all FSF-endorsed distributions known to Repology: GNU Guix, Hyperbola, Parabola, PureOS, and Trisquel. I also added GNU ELPA as a specialized repository. The poll threshold is set to 0.5, so a package/project needs a strict majority of "Free" votes to be considered as free. As explained above, it is possible to look at the vote results to understand the final decision for each project. I hope this is now more in line with GNU expectations. Let me know if you have questions, or suggestions. Regards, -- Nicolas Goaziou ^ permalink raw reply [flat|nested] 145+ messages in thread
* Re: [ELPA] New package: repology.el (v4) 2021-01-19 9:50 ` [ELPA] New package: repology.el (v4) Nicolas Goaziou @ 2021-01-20 6:13 ` Richard Stallman 0 siblings, 0 replies; 145+ messages in thread From: Richard Stallman @ 2021-01-20 6:13 UTC (permalink / raw) To: Nicolas Goaziou; +Cc: monnier, emacs-devel [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > As announced a few days ago, and with the guidance of Stefan Monnier, > I tweaked "repology.el" so it is somewhat aware about freedom, and > cautious about what it displays. Thanks to both of you. -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 145+ messages in thread
end of thread, other threads:[~2021-02-16 5:21 UTC | newest] Thread overview: 145+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-12-30 16:23 [ELPA] New package: repology.el Nicolas Goaziou 2020-12-30 19:34 ` Jean Louis 2020-12-30 21:01 ` Clément Pit-Claudel 2020-12-31 13:31 ` Jean Louis 2020-12-31 11:46 ` Nicolas Goaziou 2020-12-31 13:11 ` Jean Louis 2020-12-31 20:30 ` Ulrich Mueller 2021-01-01 7:31 ` Richard Stallman 2021-01-01 10:05 ` Jean Louis 2021-01-01 11:56 ` Eli Zaretskii 2021-01-02 9:56 ` Jean Louis 2021-01-02 5:30 ` Richard Stallman 2021-01-04 12:09 ` Dmitry Gutov 2021-01-04 14:39 ` Alfred M. Szmidt 2021-01-04 15:00 ` Ulrich Mueller 2021-01-04 16:32 ` Alfred M. Szmidt 2021-01-05 6:45 ` Richard Stallman 2021-01-05 8:56 ` Alfred M. Szmidt 2021-01-07 7:34 ` Richard Stallman 2021-01-04 15:02 ` Dmitry Gutov 2021-01-04 16:29 ` Alfred M. Szmidt 2021-01-04 17:08 ` Dmitry Gutov 2021-01-04 17:12 ` Alfred M. Szmidt 2021-01-04 17:17 ` Dmitry Gutov 2021-01-04 17:58 ` Alfred M. Szmidt 2021-01-04 17:43 ` Clément Pit-Claudel 2021-01-04 17:55 ` Vasilij Schneidermann 2021-01-04 18:51 ` Clément Pit-Claudel 2021-01-04 22:21 ` Vasilij Schneidermann 2021-01-05 2:09 ` Stefan Monnier 2021-01-05 6:42 ` Richard Stallman 2021-01-05 9:28 ` Ulrich Mueller 2021-01-06 5:03 ` Richard Stallman 2021-01-06 9:44 ` Alfred M. Szmidt 2021-01-07 17:51 ` Richard Stallman 2021-01-04 19:14 ` Ulrich Mueller 2021-01-04 19:17 ` Clément Pit-Claudel 2021-01-06 5:02 ` Richard Stallman 2021-01-06 10:58 ` Dmitry Gutov 2021-01-06 14:41 ` Jean Louis 2021-01-06 14:59 ` Arthur Miller 2021-01-06 15:21 ` Jean Louis 2021-01-06 16:23 ` Arthur Miller 2021-01-06 18:53 ` Jean Louis 2021-01-06 19:26 ` Eli Zaretskii 2021-01-06 21:18 ` Alfred M. Szmidt 2021-01-06 21:25 ` Dmitry Gutov 2021-01-07 7:47 ` Richard Stallman 2021-01-07 8:54 ` Jean Louis 2021-01-07 14:07 ` Eli Zaretskii 2021-01-07 7:49 ` Richard Stallman 2021-01-07 11:41 ` Dmitry Gutov 2021-01-09 6:39 ` Richard Stallman 2021-01-09 10:50 ` Dmitry Gutov 2021-01-07 14:24 ` Eli Zaretskii 2021-01-07 8:15 ` Jean Louis 2021-01-07 14:37 ` Eli Zaretskii 2021-01-06 20:36 ` Arthur Miller 2021-01-07 7:48 ` Richard Stallman 2021-01-07 16:53 ` Arthur Miller 2021-01-14 5:21 ` Richard Stallman 2021-01-15 14:52 ` Arthur Miller 2021-01-16 5:14 ` Richard Stallman 2021-01-07 7:49 ` Richard Stallman 2021-01-07 9:00 ` Jean Louis 2021-01-08 6:21 ` Richard Stallman 2021-01-07 10:55 ` Ulrich Mueller 2021-01-09 6:34 ` Richard Stallman 2021-01-09 21:07 ` Ulrich Mueller 2021-01-11 4:46 ` Richard Stallman 2021-01-12 8:24 ` Ulrich Mueller 2021-01-20 6:14 ` Richard Stallman 2021-01-21 11:09 ` Ulrich Mueller 2021-01-22 6:06 ` Richard Stallman 2021-01-22 9:43 ` Ulrich Mueller 2021-01-24 6:35 ` Richard Stallman 2021-01-24 8:34 ` Ulrich Mueller 2021-01-25 5:53 ` Richard Stallman 2021-01-25 6:52 ` Jean Louis 2021-01-25 12:11 ` Fabrice BAUZAC-STEHLY 2021-01-25 15:29 ` Eli Zaretskii 2021-01-27 7:37 ` Richard Stallman 2021-01-25 15:51 ` Dmitry Gutov 2021-01-25 17:59 ` Jean Louis 2021-01-25 18:21 ` Dmitry Gutov 2021-01-26 3:40 ` Jean Louis 2021-01-26 6:10 ` Richard Stallman 2021-01-26 13:42 ` Stefan Monnier 2021-01-27 18:32 ` Jean Louis 2021-01-25 19:33 ` Eli Zaretskii 2021-01-25 19:38 ` Eli Zaretskii 2021-01-26 13:21 ` Richard Stallman 2021-01-26 5:59 ` Richard Stallman 2021-01-26 13:15 ` Dmitry Gutov 2021-01-27 7:41 ` Richard Stallman 2021-01-24 10:53 ` Org schemas we talked to be non-free, was: " Jean Louis 2021-01-24 17:50 ` Ulrich Mueller 2021-01-24 19:12 ` Jean Louis 2021-01-24 19:53 ` Eli Zaretskii 2021-01-24 20:36 ` Ulrich Mueller 2021-01-25 15:06 ` Eli Zaretskii 2021-01-26 6:01 ` Richard Stallman 2021-01-26 15:57 ` Eli Zaretskii 2021-01-26 16:03 ` Dmitry Gutov 2021-01-26 16:13 ` Eli Zaretskii 2021-01-26 16:14 ` Dmitry Gutov 2021-01-26 16:31 ` Eli Zaretskii 2021-01-26 22:55 ` Dmitry Gutov 2021-01-28 6:29 ` Richard Stallman 2021-01-28 14:08 ` Eli Zaretskii 2021-01-29 6:36 ` Richard Stallman 2021-01-24 20:47 ` Jean Louis 2021-01-25 15:13 ` Eli Zaretskii 2021-01-25 17:50 ` Jean Louis 2021-01-25 17:56 ` Jean Louis 2021-01-25 19:27 ` Eli Zaretskii 2021-01-26 3:50 ` Jean Louis 2021-01-26 6:09 ` Richard Stallman 2021-01-25 20:10 ` Ulrich Mueller 2021-01-25 20:21 ` Eli Zaretskii 2021-01-26 6:09 ` Richard Stallman 2021-01-25 5:53 ` Richard Stallman 2021-01-25 15:27 ` Eli Zaretskii 2021-01-24 20:46 ` tomas 2021-01-27 7:35 ` Richard Stallman 2021-01-25 5:53 ` Richard Stallman 2021-01-25 9:27 ` Ulrich Mueller 2021-01-26 6:03 ` Richard Stallman 2021-01-26 9:24 ` Ulrich Mueller 2021-01-27 7:43 ` Richard Stallman 2021-01-26 15:43 ` Jose A. Ortega Ruiz 2021-01-26 16:48 ` Kévin Le Gouguec 2021-01-28 6:34 ` Richard Stallman 2021-01-25 5:51 ` Richard Stallman 2021-02-16 5:21 ` freedom issues in free software Richard Stallman 2021-01-07 15:05 ` [ELPA] New package: repology.el Stefan Monnier 2021-01-13 15:57 ` Richard Stallman 2021-01-05 6:33 ` Richard Stallman 2021-01-05 11:21 ` Dmitry Gutov 2021-01-07 7:32 ` Richard Stallman 2020-12-30 21:58 ` [ELPA] New package: repology.el (v2) Nicolas Goaziou 2021-01-04 11:45 ` [ELPA] New package: repology.el (v3) Nicolas Goaziou 2021-01-04 17:32 ` Stefan Monnier 2021-01-19 9:50 ` [ELPA] New package: repology.el (v4) Nicolas Goaziou 2021-01-20 6:13 ` Richard Stallman
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).