emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFH] thoughts on porting an Emacs etc/schema/ change


From: Kyle Meyer
Subject: [RFH] thoughts on porting an Emacs etc/schema/ change
Date: Mon, 24 May 2021 00:57:36 -0400

I'm trying to figure out how to port changes to etc/schema/ files in the
Emacs repo back to the Org repo.  I'd appreciate feedback from anyone
who knows anything about the etc/schema/ files in Org's tree and/or
ox-odt.


Background
==========

Org has a few files in etc/schema:

  org$ git ls-files --stage etc/schema
  100644 87f84d1ea87e1e0eef759fac1bd7db74ce0a704e 0     
etc/schema/od-manifest-schema-v1.2-os.rnc
  100644 8d679d62e4ef1a21707250cf4cabcd5b657d7683 0     
etc/schema/od-schema-v1.2-os.rnc
  100644 f1e0ed7856f24c58488bbeac1df922a7d5100776 0     etc/schema/schemas.xml

Two of those are in Emacs's tree as is:

  emacs$ git ls-tree -r origin/emacs-27 -- etc/schema/ | grep od
  100644 blob 87f84d1ea87e1e0eef759fac1bd7db74ce0a704e  
etc/schema/od-manifest-schema-v1.2-os.rnc
  100644 blob 8d679d62e4ef1a21707250cf4cabcd5b657d7683  
etc/schema/od-schema-v1.2-os.rnc

The contents of Org's etc/schema/schemas.xml, on the other hand, are
_added_ within Emacs's etc/schema/schemas.xml.

  org$ git show f1e0ed7856f24c58488bbeac1df922a7d5100776
  <?xml version="1.0"?>
  <locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0";>
    <documentElement prefix="office" typeId="OpenDocument"/>
    <documentElement prefix="manifest" localName="manifest" 
typeId="OpenDocument Manifest"/>
    <typeId id="OpenDocument" uri="od-schema-v1.2-os.rnc"/>
    <typeId id="OpenDocument Manifest" uri="od-manifest-schema-v1.2-os.rnc"/>
  </locatingRules>

  emacs$ git show origin/emacs-27:etc/schema/schemas.xml | wc -l
  65

  emacs$ git show origin/emacs-27:etc/schema/schemas.xml | grep -i 
'opendoc\|od-'
    <documentElement prefix="office" typeId="OpenDocument"/>
    <documentElement prefix="manifest" localName="manifest" 
typeId="OpenDocument Manifest"/>
    <typeId id="OpenDocument" uri="od-schema-v1.2-os.rnc"/>
    <typeId id="OpenDocument Manifest" uri="od-manifest-schema-v1.2-os.rnc"/>


Changes on the Emacs master branch
==================================

A commit on Emacs's master branch (author cc'd) makes changes to these
files.

  emacs $ git ls-tree -r master -- etc/schema/ | grep od
  100644 blob 87f84d1ea87e1e0eef759fac1bd7db74ce0a704e  
etc/schema/od-manifest-schema-v1.2-os.rnc

  emacs$ git show --numstat --format=%B f1f351def3d84813d2c4b2174dfef07b01bec058
  Update rnc to use Open Document's Relax-NG schema to version 1.3
  
  * Use the LibreOffice Relax-NG files since they include a hack to
     support 1.2.
  * rng source:
     https://raw.githubusercontent.com/freedesktop/libreoffice-core/master/
     schema/libreoffice/OpenDocument-schema-v1.3%2Blibreoffice.rng
  * translation to rnc with trang:
     trang -I rng -O rnc OpenDocument-schema-v1.3+libreoffice.rng \
         OpenDocument-schema-v1.3+libreoffice.rnc
  
  
  892     0       etc/schema/OpenDocument-schema-v1.3+libreoffice.rnc
  5914    5780    etc/schema/{od-schema-v1.2-os.rnc => 
OpenDocument-schema-v1.3.rnc}
  5       1       etc/schema/schemas.xml

Here are the changes to schemas.xml:

  emacs$ git diff f1f351def3d84813d2c4b2174dfef07b01bec058^- 
etc/schema/schemas.xml
  diff --git a/etc/schema/schemas.xml b/etc/schema/schemas.xml
  index 7fd91b8c72..f8acb0d40c 100644
  --- a/etc/schema/schemas.xml
  +++ b/etc/schema/schemas.xml
  @@ -31,6 +31,10 @@
     <namespace ns="http://relaxng.org/ns/structure/1.0"; typeId="RELAX NG"/>
     <namespace ns="http://thaiopensource.com/ns/locating-rules/1.0";
               uri="locate.rnc"/>
  +  <namespace ns="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
typeId="LibreOffice"/>
  +  <namespace 
ns="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" 
typeId="LibreOffice"/>
  +  <namespace 
ns="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
typeId="LibreOffice"/>
  +  <namespace ns="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" 
typeId="OpenDocument Manifest"/>
   
     <documentElement localName="stylesheet" typeId="XSLT"/>
     <documentElement prefix="xsl" localName="transform" typeId="XSLT"/>
  @@ -59,7 +63,7 @@
   
     <documentElement prefix="office" typeId="OpenDocument"/>
     <documentElement prefix="manifest" localName="manifest" 
typeId="OpenDocument Manifest"/>
  -  <typeId id="OpenDocument" uri="od-schema-v1.2-os.rnc"/>
  +  <typeId id="LibreOffice" uri="OpenDocument-schema-v1.3+libreoffice.rnc"/>
     <typeId id="OpenDocument Manifest" uri="od-manifest-schema-v1.2-os.rnc"/>
   
   </locatingRules>


Porting to Org's tree
=====================

So, coming back to the Org repo, I guess that'd be

  * delete the od-schema-v1.2-os.rnc file and add
    OpenDocument-schema-v1.3.rnc

  * update the typeID line for od-schema-v1.2-os.rnc in Org's
    etc/schema/schemas.xml to match the
    OpenDocument-schema-v1.3+libreoffice.rnc line in the diff above

  * add the namespace lines to Org's etc/schema/schemas.xml (?)

But I know nothing about those files or ox-odt, so testing it on my end
would mostly be fumbling around to see if I spot any breakage when
exporting with ox-odt.

Does the above approach look reasonable?  Will it break ox-odt or be
problematic for some other reason?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]