Browse Source

Initial revision

git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@2 4b5297f7-1745-476d-ba37-a9c6900126ab
xep-0352-v0.2
Peter Saint-Andre 17 years ago
commit
2ac91f50c8
  1. 31
      all.sh
  2. 187
      announce.py
  3. 9
      archive.sh
  4. 143
      deferred.py
  5. 21
      editor.shtml
  6. 399
      fo.xsl
  7. 12
      gen.sh
  8. BIN
      gps_datum.gif
  9. 24
      gps_datum.html
  10. 29
      index.shtml
  11. 121
      inxep.py
  12. 91
      ipr-policy.shtml
  13. 146
      lastcall.py
  14. 73
      protopage.xsl
  15. 122
      ref.xsl
  16. 15
      submit.shtml
  17. 688
      xep-0001.xml
  18. 42
      xep-0002.xml
  19. 347
      xep-0003.xml
  20. 709
      xep-0004.xml
  21. 108
      xep-0005.xml
  22. 96
      xep-0006.xml
  23. 73
      xep-0007.xml
  24. 138
      xep-0008.xml
  25. 316
      xep-0009.xml
  26. 55
      xep-0010.xml
  27. 483
      xep-0011.xml
  28. 159
      xep-0012.xml
  29. 447
      xep-0013.xml
  30. 70
      xep-0014.xml
  31. 258
      xep-0015.xml
  32. 236
      xep-0016.xml
  33. 83
      xep-0017.xml
  34. 135
      xep-0018.xml
  35. 81
      xep-0019.xml
  36. 296
      xep-0020.xml
  37. 343
      xep-0021.xml
  38. 321
      xep-0022.xml
  39. 175
      xep-0023.xml
  40. 1132
      xep-0024.xml
  41. 386
      xep-0025.xml
  42. 209
      xep-0026.xml
  43. 183
      xep-0027.xml
  44. 13
      xep-0028.xml
  45. 117
      xep-0029.xml
  46. 1032
      xep-0030.xml
  47. 2328
      xep-0031.xml
  48. 158
      xep-0032.xml
  49. 667
      xep-0033.xml
  50. 249
      xep-0034.xml
  51. 129
      xep-0035.xml
  52. 126
      xep-0036.xml
  53. 848
      xep-0037.xml
  54. 365
      xep-0038.xml
  55. 426
      xep-0039.xml
  56. 270
      xep-0040.xml
  57. 266
      xep-0041.xml
  58. 1075
      xep-0042.xml
  59. 793
      xep-0043.xml
  60. 172
      xep-0044.xml
  61. 5206
      xep-0045.xml
  62. 216
      xep-0046.xml
  63. 291
      xep-0047.xml
  64. 171
      xep-0048.xml
  65. 252
      xep-0049.xml
  66. 983
      xep-0050.xml
  67. 272
      xep-0051.xml
  68. 387
      xep-0052.xml
  69. 86
      xep-0053.xml
  70. 524
      xep-0054.xml
  71. 327
      xep-0055.xml
  72. 181
      xep-0056.xml
  73. 182
      xep-0057.xml
  74. 173
      xep-0058.xml
  75. 561
      xep-0059.xml
  76. 6429
      xep-0060.xml
  77. 83
      xep-0061.xml
  78. 347
      xep-0062.xml
  79. 107
      xep-0063.xml
  80. 78
      xep-0064.xml
  81. 827
      xep-0065.xml
  82. 294
      xep-0066.xml
  83. 200
      xep-0067.xml
  84. 374
      xep-0068.xml
  85. 51
      xep-0069.xml
  86. 385
      xep-0070.xml
  87. 1178
      xep-0071.xml
  88. 1204
      xep-0072.xml
  89. 160
      xep-0073.xml
  90. 169
      xep-0074.xml
  91. 1821
      xep-0075.xml
  92. 95
      xep-0076.xml
  93. 900
      xep-0077.xml
  94. 369
      xep-0078.xml
  95. 1310
      xep-0079.xml
  96. 524
      xep-0080.xml
  97. 270
      xep-0081.xml
  98. 150
      xep-0082.xml
  99. 154
      xep-0083.xml
  100. 561
      xep-0084.xml
  101. Some files were not shown because too many files have changed in this diff Show More

31
all.sh

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
#!/bin/sh
# for each XEP, generates HTML file and IETF reference, then copies XML file
# also generates HTML for the README and template
# finally, copies the stylesheet, DTD, and schema
# usage: ./all.sh
xeppath=/var/www/stage.xmpp.org/extensions
ls xep-0*.xml > tmp.txt
sed s/xep-\(.*\).xml/\1/ tmp.txt > nums.txt
rm tmp.txt
while read f
do
xsltproc xep.xsl xep-$f.xml > $xeppath/xep-$f.html
xsltproc ref.xsl xep-$f.xml > $xeppath/refs/reference.JSF.XEP-$f.xml
cp xep-$f.xml $xeppath/
done < nums.txt
rm nums.txt
xsltproc xep.xsl xep-README.xml > $xeppath/README.html
xsltproc xep.xsl xep-template.xml > $xeppath/template.html
cp xep.dtd $xeppath/
cp xep.ent $xeppath/
cp xep.xsd $xeppath/
cp xep.xsl $xeppath/
# END

187
announce.py

@ -0,0 +1,187 @@ @@ -0,0 +1,187 @@
#!/usr/bin/env python
# File: announce.py
# Version: 0.8
# Description: a script for announcing XEPs
# Last Modified: 2006-10-03
# Author: Peter Saint-Andre (stpeter@jabber.org)
# License: public domain
# HowTo: ./announce.py xepnum dbuser dbpw 'cvsmodsurl'
# NOTE: the cvsmodsurl MUST be in quotes!
# IMPORTS:
#
import glob
import MySQLdb
import os
from select import select
import smtplib
import socket
from string import split,strip,join,find
import sys
import time
from xml.dom.minidom import parse,parseString,Document
def getText(nodelist):
thisText = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
thisText = thisText + node.data
return thisText
# get the seconds in the Unix era
now = int(time.time())
# READ IN ARGS:
#
# 1. XEP number
# 2. database user
# 3. database password
xepnum = sys.argv[1];
dbuser = sys.argv[2];
dbpw = sys.argv[3];
mods = sys.argv[4];
xepfile = 'xep-' + xepnum + '.xml'
# PARSE XEP HEADERS:
#
# - title
# - abstract
# - version
# - date
# - initials
# - remark
thexep = parse(xepfile)
xepNode = (thexep.getElementsByTagName("xep")[0])
headerNode = (xepNode.getElementsByTagName("header")[0])
titleNode = (headerNode.getElementsByTagName("title")[0])
title = getText(titleNode.childNodes)
abstractNode = (headerNode.getElementsByTagName("abstract")[0])
abstract = getText(abstractNode.childNodes)
statusNode = (headerNode.getElementsByTagName("status")[0])
xepstatus = getText(statusNode.childNodes)
typeNode = (headerNode.getElementsByTagName("type")[0])
xeptype = getText(typeNode.childNodes)
revNode = (headerNode.getElementsByTagName("revision")[0])
versionNode = (revNode.getElementsByTagName("version")[0])
version = getText(versionNode.childNodes)
dateNode = (revNode.getElementsByTagName("date")[0])
date = getText(dateNode.childNodes)
initialsNode = (revNode.getElementsByTagName("initials")[0])
initials = getText(initialsNode.childNodes)
remNode = (revNode.getElementsByTagName("remark")[0])
# could be <p> or <ul>
testRemarkNode = remNode.firstChild.nodeName
# print testRemarkNode
if (testRemarkNode == "p"):
remarkNode = (remNode.getElementsByTagName("p")[0])
remark = getText(remarkNode.childNodes)
else:
remark = "[See revision history]"
# what kind of action are we taking?
xepflag = ""
if (version == "0.1"):
xepflag = "new"
elif ((version == "1.0") & (xeptype == "Standards Track")):
xepflag = "draft"
elif ((version == "1.0") & (xeptype != "Standards Track")):
xepflag = "active"
elif (version == "2.0"):
xepflag = "final"
elif (xepstatus == "Retracted"):
xepflag = "retract"
elif (xepstatus == "Deferred"):
xepflag = "defer"
# UPDATE DATABASE:
#
# number is $xepnum
# name is $title
# type is $xeptype
# status is $xepstatus
# notes is "Version $version of XEP-$xepnum released $date."
# version is $version
# last_modified is $now
# abstract is $abstract
# changelog is "$remark ($initials)"
db = MySQLdb.connect("localhost", dbuser, dbpw, "foundation")
cursor = db.cursor()
theNotes = "Version " + version + " of XEP-" + xepnum + " released " + date + "."
theLog = remark + " (" + initials + ")"
if xepflag == "new":
theStatement = "INSERT INTO jeps VALUES ('" + str(xepnum) + "', '" + title + "', '" + xeptype + "', '" + xepstatus + "', '" + theNotes + "', '" + str(version) + "', '" + str(now) + "', '" + abstract + "', '" + theLog + "', '0', '5', 'Proposed', 'none');"
cursor.execute(theStatement)
else:
theStatement = "UPDATE jeps SET name='" + title + "', type='" + xeptype + "', status='" + xepstatus + "', notes='" + theNotes + "', version='" + str(version) + "', last_modified='" + str(now) + "', abstract='" + abstract + "', changelog='" + theLog + "' WHERE number='" + str(xepnum) + "';"
cursor.execute(theStatement)
result = cursor.fetchall()
## SEND MAIL:
#
# From: editor@jabber.org
# To: standards-jig@jabber.org
# Subject: UPDATED: XEP-$xepnum ($title)
# [or "NEW..." if version 0.1]
# Body:
# Version $version of XEP-$xepnum ($title) is now available.
# Abstract: $abstract
# Changelog: $remark ($initials)
# CVS Diff: $mods
# URL: http://www.xmpp.org/extensions/xep-$xepnum.html
fromaddr = "editor@jabber.org"
# for testing...
# toaddrs = "stpeter@jabber.org"
# for real...
toaddrs = "standards-jig@jabber.org"
if xepflag == "new":
thesubject = 'NEW: XEP-'
elif xepflag == "draft":
thesubject = 'DRAFT: XEP-'
toaddrs = toaddrs + ", jdev@jabber.org"
elif xepflag == "final":
thesubject = 'FINAL: XEP-'
toaddrs = toaddrs + ", jdev@jabber.org"
elif xepflag == "active":
thesubject = 'ACTIVE: XEP-'
elif xepflag == "retract":
thesubject = 'RETRACTED: XEP-'
elif xepflag == "defer":
thesubject = 'DEFERRED: XEP-'
else:
thesubject = 'UPDATED: XEP-'
thesubject = thesubject + xepnum + ' (' + title + ')'
versionline = 'Version ' + version + ' of XEP-' + xepnum + ' (' + title + ') has been released.'
abstractline = 'Abstract: ' + abstract
changelogline = 'Changelog: ' + remark + ' (' + initials + ')'
modsline = 'CVS Diff: ' + mods
urlline = 'URL: http://www.xmpp.org/extensions/xep-' + xepnum + '.html'
msg = "From: XMPP Extensions Editor <%s>\r\n" % fromaddr
msg = msg + "To: %s\r\n" % toaddrs
msg = msg + "Subject: %s\r\n" % thesubject
msg = msg + versionline
msg = msg + "\r\n\n"
msg = msg + abstractline
msg = msg + "\r\n\n"
msg = msg + changelogline
msg = msg + "\r\n\n"
msg = msg + modsline
msg = msg + "\r\n\n"
msg = msg + urlline
msg = msg + "\r\n\n"
server = smtplib.SMTP('localhost')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
# END

9
archive.sh

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
#!/bin/sh
# archive an old version of a XEP (before publishing new version)
# usage: ./archive.sh xepnum version
xeppath=/var/www/xmpp.org/extensions
cp $xeppath/xep-$1.html $jeppath/attic/xep-$1-$2.html
# end

143
deferred.py

@ -0,0 +1,143 @@ @@ -0,0 +1,143 @@
#!/usr/bin/env python
# File: deferred.py
# Version: 0.2
# Description: a script for setting a JEP to Deferred
# Last Modified: 2006-04-24
# Author: Peter Saint-Andre (stpeter@jabber.org)
# License: public domain
# HowTo: ./deferred.py jepnum dbuser dbpw
# IMPORTS:
#
import glob
import MySQLdb
import os
from select import select
import smtplib
import socket
from string import split,strip,join,find
import sys
import time
from xml.dom.minidom import parse,parseString,Document
def getText(nodelist):
thisText = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
thisText = thisText + node.data
return thisText
# get the seconds in the Unix era
now = int(time.time())
# READ IN ARGS:
#
# 1. JEP number
# 2. database user
# 3. database password
jepnum = sys.argv[1];
dbuser = sys.argv[2];
dbpw = sys.argv[3];
jepfile = jepnum + '/jep-' + jepnum + '.xml'
# PARSE JEP HEADERS:
#
# - title
# - abstract
# - version
# - date
# - initials
# - remark
thejep = parse(jepfile)
jepNode = (thejep.getElementsByTagName("jep")[0])
headerNode = (jepNode.getElementsByTagName("header")[0])
titleNode = (headerNode.getElementsByTagName("title")[0])
title = getText(titleNode.childNodes)
abstractNode = (headerNode.getElementsByTagName("abstract")[0])
abstract = getText(abstractNode.childNodes)
statusNode = (headerNode.getElementsByTagName("status")[0])
jepstatus = getText(statusNode.childNodes)
typeNode = (headerNode.getElementsByTagName("type")[0])
jeptype = getText(typeNode.childNodes)
revNode = (headerNode.getElementsByTagName("revision")[0])
versionNode = (revNode.getElementsByTagName("version")[0])
version = getText(versionNode.childNodes)
dateNode = (revNode.getElementsByTagName("date")[0])
date = getText(dateNode.childNodes)
initialsNode = (revNode.getElementsByTagName("initials")[0])
initials = getText(initialsNode.childNodes)
remarkNode = (revNode.getElementsByTagName("remark")[0])
remark = getText(remarkNode.childNodes)
# UPDATE DATABASE:
#
# number is $jepnum
# name is $title
# type is $jeptype
# status is $jepstatus
# notes is "Version $version of JEP-$jepnum released $date."
# version is $version
# last_modified is $now
# abstract is $abstract
# changelog is "$remark ($initials)"
db = MySQLdb.connect("localhost", dbuser, dbpw, "foundation")
cursor = db.cursor()
theNotes = "Version " + version + " of JEP-" + jepnum + " released " + date + "; consideration deferred because of inactivity."
theLog = remark + " (" + initials + ")"
theStatement = "UPDATE jeps SET name='" + title + "', type='" + jeptype + "', status='Deferred', notes='" + theNotes + "', version='" + str(version) + "', last_modified='" + str(now) + "', abstract='" + abstract + "', changelog='" + theLog + "' WHERE number='" + str(jepnum) + "';"
cursor.execute(theStatement)
result = cursor.fetchall()
# SEND MAIL:
#
# From: editor@jabber.org
# To: standards-jig@jabber.org
# Subject: DEFERRED: JEP-$jepnum ($title)
# Body:
# JEP-$jepnum ($title) has been Deferred because of inactivity.
#
# Abstract: $abstract
#
# URL: http://www.jabber.org/jeps/jep-$jepnum.html
#
# If and when a new revision of this JEP is published,
# its status will be changed back to Experimental.
#
fromaddr = "editor@jabber.org"
# for testing...
# toaddrs = "stpeter@jabber.org"
# for real...
toaddrs = "standards-jig@jabber.org"
thesubject = 'DEFERRED: JEP-' + jepnum + " (" + title + ")"
introline = 'JEP-' + jepnum + ' (' + title + ') has been Deferred because of inactivity.'
abstractline = 'Abstract: ' + abstract
urlline = 'URL: http://www.jabber.org/jeps/jep-' + jepnum + '.html'
endline = 'If and when a new revision of this JEP is published, its status will be changed back to Experimental.'
#msg = "From: %s\r\n" % fromaddr
msg = "From: JEP Editor <%s>\r\n" % fromaddr
msg = msg + "To: %s\r\n" % toaddrs
msg = msg + "Subject: %s\r\n" % thesubject
msg = msg + introline
msg = msg + "\r\n\n"
msg = msg + abstractline
msg = msg + "\r\n\n"
msg = msg + urlline
msg = msg + "\r\n\n"
msg = msg + endline
msg = msg + "\r\n"
server = smtplib.SMTP('localhost')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
# END

21
editor.shtml

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
<html>
<head>
<title>XEP Editor</title>
<!--#include virtual="/includes/head.txt" -->
<h2>XEP Editor</h2>
<p>In accordance with <a href="jep-0001.html">XEP-0001</a>, the XEP Editor is responsible for overall management of the Jabber Software Foundation's standards process and publication of <a href="/extensions/">XMPP Extension Protocols</a>; in particular, the XEP Editor:</p>
<ul>
<li>works with XEP authors</li>
<li>ensures that each XEP is properly formatted</li>
<li>assigns a unique number to each XEP</li>
<li>assigns or modifies the status of each XEP</li>
<li>maintains each XEP under <a href="http://www.jabberstudio.org/cgi-bin/viewcvs.cgi/jeps/">source control</a></li>
<li>maintains the canonical <a href="/extensions/">list of XEPs</a></li>
<li>publishes each XEP to the xmpp.org website</li>
<li>publicly announces the existence and status of each XEP</li>
<li>gathers and tallies the votes of the <a href="/council/">XMPP Council</a></li>
<li>fulfills the responsibilities of the <a href="/registrar/">XMPP Registrar</a></li>
</ul>
<p>Since the founding of the Jabber Software Foundation in 2001, the XEP Editor has been <a href="http://www.jabber.org/people/stpeter.shtml">Peter Saint-Andre</a>, who may be contacted via &lt;&#101;&#100;&#105;&#116;&#111;&#114;&#64;&#106;&#97;&#98;&#98;&#101;&#114;&#46;&#111;&#114;&#103&gt;.</p>
</div>
<!--#include virtual="/includes/foot.txt" -->

399
fo.xsl

@ -0,0 +1,399 @@ @@ -0,0 +1,399 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<root>
<layout-master-set>
<simple-page-master master-name="cover">
<region-body margin-left="1in" margin-right="1in" margin-top="2.5in" margin-bottom="1in"/>
</simple-page-master>
<!--<simple-page-master master-name="doc_info">
<region-body margin-left="1in" margin-top="1in" margin-right="1in" margin-bottom="1in"/>
</simple-page-master>
<simple-page-master master-name="toc_page">
<region-body margin-left="1in" margin-top="1in" margin-right="1in" margin-bottom="1in"/>
</simple-page-master>-->
<simple-page-master master-name="std_page">
<region-body margin-left="1in" margin-top="1in" margin-right="1in" margin-bottom="1in"/>
<region-before extent="1in" display-align="after"/>
<region-after extent="1in" display-align="before"/>
</simple-page-master>
<page-sequence-master master-name="jep_sequence">
<single-page-master-reference master-reference="cover"/>
<!--<single-page-master-reference master-reference="doc_info"/>
<single-page-master-reference master-reference="toc_page"/>-->
<repeatable-page-master-reference master-reference="std_page"/>
</page-sequence-master>
</layout-master-set>
<page-sequence master-reference="jep_sequence">
<flow flow-name="xsl-region-body" font-family="serif" color="black" font-size="10pt">
<block space-before="1.5in" text-align="right" font-family="sans-serif" font-size="18pt">
JEP-<xsl:value-of select="/jep/header/number"/>
</block>
<block text-align="right" font-family="sans-serif" font-size="18pt">
<xsl:value-of select="/jep/header/title"/>
</block>
<!--</flow>
</page-sequence>
<page-sequence master-reference="doc_info">
<flow flow-name="xsl-region-body" font-family="serif" font-size="10pt" color="black">-->
<block font-family="sans-serif" font-size="14pt" space-after=".5em" break-before="page">Document Information</block>
<block font-size="12pt" font-weight="bold">Document Author(s)</block>
<block>
<inline font-weight="bold">Name: </inline>
<inline>
<xsl:value-of select="/jep/header/author/firstname"/>
<xsl:value-of select="/jep/header/author/surname"/>
</inline>
</block>
<block>
<inline font-weight="bold">Email: </inline>
<inline>
<xsl:value-of select="/jep/header/author/email"/>
</inline>
</block>
<block space-after=".5em">
<inline font-weight="bold">JID: </inline>
<inline>
<xsl:value-of select="/jep/header/author/jid"/>
</inline>
</block>
<block font-size="12pt" font-weight="bold">Abstract</block>
<block space-after=".5em">
<xsl:value-of select="/jep/header/abstract"/>
</block>
<block font-size="12pt" font-weight="bold">Document Status</block>
<block space-after=".5em">
<xsl:value-of select="/jep/header/status"/>
</block>
<block font-size="12pt" font-weight="bold">Dependencies/References</block>
<block space-after=".5em">
<xsl:value-of select="/jep/header/dependencies"/>
</block>
<block font-size="12pt" font-weight="bold">Legal Notice</block>
<block space-after=".5em">
<xsl:value-of select="/jep/header/legal"/>
</block>
<block font-size="12pt" font-weight="bold" space-after=".5em">Revision History</block>
<table table-layout="fixed" border-width=".25pt" border-color="black" border-style="solid">
<table-column text-align="center" column-width=".625in" column-number="1"/>
<table-column text-align="center" column-width=".75in" column-number="2"/>
<table-column text-align="center" column-width=".5in" column-number="3"/>
<table-column column-width="4.125in" column-number="4"/>
<table-body>
<table-row background-color="black" color="white" font-weight="bold">
<table-cell padding="3pt">
<block>Version</block>
</table-cell>
<table-cell padding="3pt">
<block>Date</block>
</table-cell>
<table-cell padding="3pt">
<block>Initials</block>
</table-cell>
<table-cell padding="3pt">
<block>Comment</block>
</table-cell>
</table-row>
<xsl:apply-templates select="/jep/header"/>
</table-body>
</table>
<!--</flow>
</page-sequence>
<page-sequence master-reference="toc_page" force-page-count="no-force" format="i">
<flow flow-name="xsl-region-body" font-family="serif" font-size="10pt" color="black">-->
<xsl:call-template name="processTOC"/>
</flow>
</page-sequence>
<page-sequence master-reference="std_page" initial-page-number="1">
<!--<static-content flow-name="xsl-region-before" margin-top=".5in">
<block margin-left="1in" margin-right="1in" text-align-last="justify" font-size="9pt" font-family="sans-serif" color="silver">
<xsl:value-of select="/jep/header/customer"/>
<leader leader-pattern="space"/>
Requirements Proposal
</block>
<block margin-left="1in" margin-right="1in" padding-bottom="10pt" border-after-color="black" border-after-width=".25pt" border-after-style="solid" text-align-last="justify" font-size="9pt" font-family="sans-serif" color="silver">
<xsl:value-of select="/jep/header/title"/>
<leader leader-pattern="space"/>
<xsl:value-of select="/jep/header/revision[last()]/date"/>
</block>
</static-content>-->
<static-content flow-name="xsl-region-after">
<block margin-left="1in" margin-right="1in" padding-top="10pt" border-before-color="black" border-before-width=".125pt" border-before-style="solid" text-align-last="justify" font-size="8pt" font-family="sans-serif" color="black">
IJEP-<xsl:value-of select="/jep/header/number"/>:<xsl:text> </xsl:text>
<xsl:value-of select="/jep/header/title"/>
<leader leader-pattern="space"/>
Page <page-number/> of <page-number-citation ref-id="lastpage"/>
</block>
</static-content>
<flow flow-name="xsl-region-body" font-family="serif" font-size="10pt" color="black">
<xsl:apply-templates select="/jep/section1"/>
<block font-family="sans-serif" font-size="12pt" color="black" space-before=".5em" space-after=".5em">Notes:</block>
<xsl:apply-templates select="//note" mode="endlist"/>
<block id="lastpage"/>
</flow>
</page-sequence>
</root>
</xsl:template>
<!-- From the docbook XSL -->
<xsl:template name="object.id">
<xsl:param name="object" select="."/>
<xsl:choose>
<xsl:when test="$object/@id">
<xsl:value-of select="$object/@id"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="generate-id($object)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="processTOC">
<block font-family="sans-serif" font-size="14pt" space-after=".5em" break-before="page">Table of Contents</block>
<xsl:apply-templates select="//section1" mode="toc"/>
</xsl:template>
<xsl:template match="/jep/header/revision">
<table-row>
<table-cell padding="3pt">
<block>
<xsl:value-of select="version"/>
</block>
</table-cell>
<table-cell padding="3pt">
<block>
<xsl:value-of select="date"/>
</block>
</table-cell>
<table-cell padding="3pt">
<block>
<xsl:value-of select="initials"/>
</block>
</table-cell>
<table-cell padding="3pt">
<block>
<xsl:value-of select="remark"/>
</block>
</table-cell>
</table-row>
</xsl:template>
<xsl:template match="section1" mode="toc">
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="num">
<xsl:number level="multiple" count="section1"/>
<xsl:text>.</xsl:text>
</xsl:variable>
<xsl:variable name="sect2.count" select="count(section2)"/>
<xsl:value-of select="$num"/>
<xsl:text> </xsl:text>
<block text-align-last="justify" font-variant="small-caps">
<xsl:value-of select="$num"/>
<xsl:value-of select="@topic"/>
<xsl:text> </xsl:text>
<leader leader-pattern="rule" space-end=".125in"/>
<xsl:text> </xsl:text>
<page-number-citation ref-id="sect-{$oid}"/>
</block>
<xsl:if test="$sect2.count &gt; 0">
<xsl:apply-templates select="section2" mode="toc">
<xsl:with-param name="prevnum" select="$num"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
<xsl:template match="section1">
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="num">
<xsl:number level="multiple" count="section1"/>
<xsl:text>.</xsl:text>
</xsl:variable>
<!--<xsl:number level="single" count="section1"/>-->
<block id="sect-{$oid}" font-family="sans-serif" font-size="14pt" space-after="1em" space-before="1em" font-weight="bold">
<xsl:value-of select="$num"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@topic"/>
</block>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="section2" mode="toc">
<xsl:param name="prevnum" select='""'/>
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="num">
<xsl:value-of select="$prevnum"/>
<xsl:number level="multiple" count="section2"/>
<xsl:text>.</xsl:text>
</xsl:variable>
<xsl:variable name="sect3.count" select="count(section3)"/>
<block text-align-last="justify" margin-left="1em">
<xsl:value-of select="$num"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@topic"/>
<xsl:text> </xsl:text>
<leader leader-pattern="rule" space-end=".125in"/>
<xsl:text> </xsl:text>
<page-number-citation ref-id="sect-{$oid}"/>
</block>
<xsl:if test="$sect3.count &gt; 0">
<xsl:apply-templates select="section3" mode="toc">
<xsl:with-param name="prevnum" select="$num"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
<xsl:template match="section2">
<xsl:param name="prevnum" select='""'/>
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="num">
<xsl:number level="single" count="section1"/>.<xsl:number level="multiple" count="section2"/>
<xsl:text>.</xsl:text>
</xsl:variable>
<xsl:variable name="sect3.count" select="count(section3)"/>
<block id="sect-{$oid}" font-weight="bold" font-family="sans-serif">
<xsl:value-of select="$num"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@topic"/>
</block>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="section3" mode="toc">
<xsl:param name="prevnum" select='""'/>
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<xsl:variable name="num">
<xsl:value-of select="$prevnum"/>
<xsl:number level="multiple" count="section3"/>
<xsl:text>.</xsl:text>
</xsl:variable>
<block text-align-last="justify" margin-left="1em">
<xsl:value-of select="$num"/>
<xsl:text> </xsl:text>
<xsl:value-of select="@topic"/>
<xsl:text> </xsl:text>
<leader leader-pattern="rule" space-end=".125in"/>
<xsl:text> </xsl:text>
<page-number-citation ref-id="sect-{$oid}"/>
</block>
</xsl:template>
<xsl:template match="section3">
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<block id="sect-{$oid}" margin-left=".5em">
<xsl:if test="../../@type='functional-spec'">FR-<xsl:number level="single" count="section2"/>.<xsl:number level="single" count="section3"/>
</xsl:if>
<xsl:if test="../../@type='supp-spec'">SS-<xsl:number level="single" count="section2"/>.<xsl:number level="single" count="section3"/>
</xsl:if>
<xsl:text> </xsl:text>
<xsl:value-of select="@topic"/>
<xsl:apply-templates/>
</block>
</xsl:template>
<xsl:template match="p">
<block space-before=".5em" space-after=".5em">
<xsl:apply-templates/>
</block>
</xsl:template>
<xsl:template match="code">
<block space-after="1em" margin-bottom="1em" margin-left="1em" font-family="monospace" font-size="8pt" font-weight="normal" white-space-collapse="false" keep-together.within-page="always">
<xsl:value-of select="."/>
</block>
</xsl:template>
<xsl:template match="example">
<table table-layout="fixed" width="100%" space-after="1em">
<table-column column-width="proportional-column-width(1)"/>
<table-body>
<table-row keep-with-next="always">
<table-cell>
<block margin-left=".5em" space-after=".5em" space-before=".5em" font-weight="600" font-size="9pt">
Example <xsl:number level="any" count="example"/>.<xsl:text> </xsl:text>
<xsl:value-of select="@caption"/>
</block>
</table-cell>
</table-row>
<table-row>
<table-cell>
<block margin-left="1em" font-family="monospace" font-size="8pt" font-weight="normal" white-space-collapse="false" keep-together.within-page="always">
<xsl:value-of select="."/>
</block>
</table-cell>
</table-row>
</table-body>
</table>
</xsl:template>
<xsl:template match="note">
<xsl:variable name="notenum">
<xsl:number level="any" count="note"/>
</xsl:variable>
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<inline>[<basic-link color="blue" font-weight="bold" internal-destination="nt-{$oid}">
<xsl:value-of select="$notenum"/>
</basic-link>]</inline>
</xsl:template>
<xsl:template match="note" mode="endlist">
<xsl:variable name="oid">
<xsl:call-template name="object.id"/>
</xsl:variable>
<block id="nt-{$oid}" margin=".5em" font-size="8pt">
<xsl:value-of select="position()"/>. <xsl:apply-templates/>
</block>
</xsl:template>
<xsl:template match="link">
<basic-link external-destination="{@url}" text-decoration="underline" color="blue">
<xsl:apply-templates/>
</basic-link>
</xsl:template>
<xsl:template match="strong">
<inline font-weight="bold">
<xsl:apply-templates/>
</inline>
</xsl:template>
<xsl:template match="em">
<inline font-style="italic">
<xsl:apply-templates/>
</inline>
</xsl:template>
<xsl:template match="ul">
<list-block provisional-distance-between-starts="10pt" provisional-label-separation="3pt" space-after=".5em" space-start="1em" margin-left="1em">
<xsl:apply-templates select="li" mode="ul"/>
</list-block>
</xsl:template>
<xsl:template match="ol">
<list-block provisional-distance-between-starts="10pt" provisional-label-separation="3pt" space-after=".5em" space-start="1em" margin-left="1em">
<xsl:apply-templates select="li" mode="ol"/>
</list-block>
</xsl:template>
<xsl:template match="li" mode="ul">
<list-item>
<list-item-label end-indent="label-end()">
<block>&#x2022;</block>
</list-item-label>
<list-item-body start-indent="body-start()">
<block>
<xsl:value-of select="."/>
</block>
</list-item-body>
</list-item>
</xsl:template>
<xsl:template match="li" mode="ol">
<xsl:variable name="num">
<xsl:number level="multiple" count="li"/>
</xsl:variable>
<list-item>
<list-item-label end-indent="label-end()">
<block>
<xsl:value-of select="$num"/>.</block>
</list-item-label>
<list-item-body start-indent="body-start()">
<block>
<xsl:value-of select="."/>
</block>
</list-item-body>
</list-item>
</xsl:template>
</xsl:stylesheet>

12
gen.sh

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
#!/bin/sh
# for one XEP, generates HTML file and IETF reference, then copies XML file
# usage: ./gen.sh xxxx
# (where xxxx is the 4-digit XEP number)
xeppath=/var/www/stage.xmpp.org/extensions
xsltproc xep.xsl xep-$1.xml > $xeppath/jep-$1.html
xsltproc ref.xsl xep-$1.xml > $xeppath/refs/reference.JSF.XEP-$1.xml
cp xep-$1.xml $xeppath/
# end

BIN
gps_datum.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

24
gps_datum.html

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
<html>
<head>
<title>GPS Datum Example</title>
</head>
<body>
<h1>GPS Datum Example</h1>
<p>The following example of GPS datum differences was kindly provided by Randy Steele of Apollo, Pennsylvania (URL: &lt;<a href="http://www.nb.net/~resteele/">http://www.nb.net/~resteele/</a>&gt;) and is archived here so that a permanent link is available from <a href="http://www.jabber.org/jeps/jep-0080.html">JEP-0080: User Geolocation</a>.</p>
<p>BEGIN EXAMPLE</p>
<hr />
<p>This is an example of the differences in the datums you can use with a GPS.
Below is a site I was checking out. I marked it on my GPS in the field. When I got back
home to find it on the topo map, I noticed something was not right. Using
the UTM coordinates from the GPS, I located the site on the topo map. But
the map site and the site I checked in the field did not match. The terrain
was different, the site I actually checked was near the road (the top red
circle). I then remembered about map datums. The topo map was made to NAD27, while
my GPS was set to WGS84. After changing the GPS to the NAD27 datum, all was fine.
So the moral of this story is: MAKE SURE THE GPS DATUM AND THE MAP DATUM MATCH!!!
Note the difference in the circle locations. I also changed my GPS datum to NAD27.</p>
<p><img src='gps_datum.gif' alt='GPS Datum Example' longdesc='An example of different GPS readings when using a datum of NAD27 vs. WGS84, provided by Randy Steele'/>
<hr />
<p>END EXAMPLE</p>
</body>
</html>

29
index.shtml

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
<html>
<head>
<title>XMPP Extensions</title>
<!--#include virtual="/includes/head.txt" -->
<h2>XMPP Extensions</h2>
<p><a class="standardsButton" href="atom.xml">ATOM</a>&nbsp;&nbsp;<a class="standardsButton" href="rss.xml">RSS</a></p>
<p>The <a href='http://www.jabber.org/jsf/'>Jabber Software Foundation</a> (JSF) develops extensions to <a href="http://www.xmpp.org/">XMPP</a> through a standards process centered around XMPP Extension Protocols (XEPs). The <a href="xep-0001.html">process</a> is managed by the <a href="editor.shtml">XMPP Extensions Editor</a> and involves intensive discussion on the <a href="http://mail.jabber.org/mailman/listinfo/standards-jig/">Standards-JIG mailing list</a>, formal review and <a href="/council/votes.shtml">voting</a> by the <a href="/council/">XMPP Council</a>, and modification based on implementation experience and interoperability testing. All documents in the XEP series are available under a liberal <a href="ipr-policy.shtml">IPR Policy</a> for wide implementation. Submissions are <a href='submit.shtml'>welcome</a> (see also the <a href="/extensions/inbox/">&quot;inbox&quot;</a>). Changes are tracked via a <a href="http://www.jabberstudio.org/cgi-bin/viewcvs.cgi/jeps/">CVS repository</a> (see <a href='http://www.jabberstudio.org/cvs.php'>instructions</a>), <a href="/extensions/attic/">old versions</a> are available, and IETF-style <a href="/extensions/refs/">XML reference files</a> are provided.</p>
<p>This page lists approved XMPP extensions as well as proposals that are under active consideration. A <a href="all.shtml">list of all XEPs</a> (including retracted, rejected, deprecated, and obsolete XEPs) is also available. Good places for developers to start are the <a href='xep-0073.html'>basic</a> and <a href='xep-0117.html'>intermediate</a> protocol suites.</p>
<p><em>Note: The following table is sortable, just click on the headers (click twice to reverse the sort order).</em></p>
<table border='1' cellpadding='3' cellspacing='0' class='sortable' id='xeplist'>
<tr class='jepheader'>
<th align='left'>Number</th>
<th align='left'>Name</th>
<th align='left'>Type</th>
<th align='left'>Status</th>
<th align='left'>Date</th>
</tr>
<!--#include virtual="/includes/xeps-default.txt" -->
</table>
</div>
<!--#include virtual="/includes/foot.txt" -->

121
inxep.py

@ -0,0 +1,121 @@ @@ -0,0 +1,121 @@
#!/usr/bin/env python
# File: protojep.py
# Version: 0.1
# Description: a script for announcing proto-JEPs
# Last Modified: 2004-09-14
# Author: Peter Saint-Andre (stpeter@jabber.org)
# License: public domain
# HowTo: ./protojep.py filename
# (note: do not include extension!)
# IMPORTS:
#
import glob
import os
from select import select
import smtplib
import socket
from string import split,strip,join,find
import sys
import time
from xml.dom.minidom import parse,parseString,Document
def getText(nodelist):
thisText = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
thisText = thisText + node.data
return thisText
# READ IN ARGS:
#
# 1. JEP filename (sans extension)
jepname = sys.argv[1];
jepfile = 'inbox/' + jepname + '.xml'
# PARSE JEP HEADERS:
#
# - title
# - abstract
# - version
# - date
# - initials
# - remark
thejep = parse(jepfile)
jepNode = (thejep.getElementsByTagName("jep")[0])
headerNode = (jepNode.getElementsByTagName("header")[0])
titleNode = (headerNode.getElementsByTagName("title")[0])
title = getText(titleNode.childNodes)
abstractNode = (headerNode.getElementsByTagName("abstract")[0])
abstract = getText(abstractNode.childNodes)
statusNode = (headerNode.getElementsByTagName("status")[0])
jepstatus = getText(statusNode.childNodes)
typeNode = (headerNode.getElementsByTagName("type")[0])
jeptype = getText(typeNode.childNodes)
revNode = (headerNode.getElementsByTagName("revision")[0])
versionNode = (revNode.getElementsByTagName("version")[0])
version = getText(versionNode.childNodes)
dateNode = (revNode.getElementsByTagName("date")[0])
date = getText(dateNode.childNodes)
initialsNode = (revNode.getElementsByTagName("initials")[0])
initials = getText(initialsNode.childNodes)
remarkNode = (revNode.getElementsByTagName("remark")[0])
remark = getText(remarkNode.childNodes)
# SEND MAIL:
#
# From: editor@jabber.org
# To: standards-jig@jabber.org
# Subject: LAST CALL: JEP-$jepnum ($title)
# Body:
# The JEP Editor has received a proposal for a new JEP.
#
# Title: $title
#
# Abstract: $abstract
#
# URL: http://www.jabber.org/jeps/inbox/$jepname.html
#
# The Jabber Council will now consider whether to accept
# this proposal as a full JEP.
#
fromaddr = "editor@jabber.org"
# for testing...
# toaddrs = "stpeter@jabber.org"
# for real...
toaddrs = "standards-jig@jabber.org"
thesubject = 'proto-JEP: ' + title
introline = 'The JEP Editor has received a proposal for a new JEP.'
titleline = 'Title: ' + title
abstractline = 'Abstract: ' + abstract
urlline = 'URL: http://www.jabber.org/jeps/inbox/' + jepname + '.html'
actionline = 'The Jabber Council will decide within 7 days (or at its next meeting) whether to accept this proposal as an official JEP.'
#msg = "From: %s\r\n" % fromaddr
msg = "From: JEP Editor <%s>\r\n" % fromaddr
msg = msg + "To: %s\r\n" % toaddrs
msg = msg + "Subject: %s\r\n" % thesubject
msg = msg + introline
msg = msg + "\r\n\n"
msg = msg + titleline
msg = msg + "\r\n\n"
msg = msg + abstractline
msg = msg + "\r\n\n"
msg = msg + urlline
msg = msg + "\r\n\n"
msg = msg + actionline
msg = msg + "\r\n\n"
server = smtplib.SMTP('localhost')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
# END

91
ipr-policy.shtml

@ -0,0 +1,91 @@ @@ -0,0 +1,91 @@
<html>
<head>
<title>JSF IPR Policy</title>
<!--#include virtual="/includes/head.txt" -->
<h2>JSF IPR Policy</h2>
<p>This document defines the official policy of the <a href='http://www.jabber.org/jsf/'>Jabber Software Foundation</a> regarding intellectual property rights (IPR) pertaining to <a href='http://www.xmpp.org/extensions/'>XMPP Extension Protocol</a> (XEPs) specifications.</p>
<p><em>Version 1.2</em></p>
<p><hr></p>
<strong>Table of Contents:</strong><br><dl>
<dt>1. <a href="#intro">Introduction</a></dt>
<dl>
<dt>1.1. <a href="#intro-history">History</a></dt>
<dt>1.2. <a href="#intro-role">Purpose</a></dt>
</dl>
<dt>2. <a href="#terms">Terms</a></dt>
<dl>
<dt>2.1. <a href="#xmpp">XMPP</a></dt>
<dt>2.2. <a href="#extension">XMPP Extension Protocol</a></dt>
<dt>2.3. <a href="#implementation">Implementation</a></dt>
<dt>2.4. <a href="#claim">Intellectual Property Claim</a></dt>
</dl>
<dt>3. <a href="#contributing">Terms of Contributing to XMPP Extensions</a></dt>
<dl>
<dt>3.1. <a href="#contrib-ownership">Ownership</a></dt>
<dt>3.2. <a href="#contrib-approval">Approval of XMPP Extensions</a></dt>
<dt>3.3. <a href="#contrib-private">A Note about Private Extensions</a></dt>
</dl>
<dt>4. <a href="#legal">Legal Notice</a>
</dt>
</dl>
<p><hr></p>
<h2>1. <a name="intro"></a>Introduction</h2>
<p>This document defines the official policy of the Jabber Software Foundation (JSF) regarding intellectual property rights (IPR) as they pertain to extensions to XMPP in the form of XMPP Extension Protocol specifications (XEPs). [<a href="#note1">1</a>]</p>
<blockquote>
<h3>1.1 <a name="intro-history"></a>History</h3>
<p>The Jabber/XMPP protocols have been under development since 1998 and have been discussed and documented in public forums since January 1999 in the open-source projects that were a precursor to the JSF. Through force of history and activity since its founding in the summmer of 2001, the JSF has assumed responsibility for managing the evolution of the Jabber/XMPP protocols in two ways: (1) through working with the IETF to standardize the core protocols under the name Extensible Messaging and Presence Protocol (XMPP); and (2) through the definition of extensions to the core protocol in the JSF's XMPP Extension Protocol (XEP) specification series. Through this work, the JSF has in effect "homesteaded" the domain of XMPP Extensions and has acted as a trusted third party or "intellectual property conservancy" [<a href="#note2">2</a>] to which new and established participants in the Jabber community have entrusted their XMPP Extensions.</p>
<h3>1.2 <a name="intro-role"></a>Purpose</h3>
<p>The JSF does not seek to disparage the legitimate rights of any individual or organization to assert ownership over an Implementation of XMPP or of any XMPP Extension. However, the JSF must ensure that XMPP Extensions do not pollute the free and open nature of the protocols. Preventing such pollution means that in perpetuity any entity may independently, and without payment or hindrance, create, use, sell, distribute, or dispose of implementations of XMPP and of any XMPP Extension. Such is the intent of this policy.</p>
</blockquote>
<h2>2. <a name="terms"></a>Terms</h2>
<blockquote>
<h3>2.1 <a name="xmpp"></a>XMPP</a>
</h3>
<p>The core XML streaming, instant messaging, and presence protocols developed by the Jabber community have been contributed by the JSF to the Internet Engineering Task Force (IETF) under the name Extensible Messaging and Presence Protocol (XMPP). XMPP is all and only these core protocols, as currently defined in <a href='http://www.ietf.org/rfc/rfc3920.txt'>RFC 3920</a> and <a href='http://www.ietf.org/rfc/rfc3921.txt'>RFC 3921</a>.</p>
</blockquote>
<blockquote>
<h3>2.2 <a name="extension"></a>XMPP Extension</h3>
<p>For the purposes of this IPR policy, an XMPP Extension is any specification approved by, or submitted for approval or consideration by, the JSF or its constituent committees (most particularly the <a href='/council/'>XMPP Council</a>). Such a specification must exist in the form of a standards-track XMPP Extension Protocol (XEP) specification in order to be considered an official submission. (Also referred to as an Extension.)</p>
</blockquote>
<blockquote>
<h3>2.3 <a name="implementation"></a>Implementation</h3>
<p>Any software that implements XMPP or XMPP Extensions for the purpose of providing the functionality defined by the relevant specification(s).</p>
</blockquote>
<blockquote>
<h3>2.4 <a name="claim"></a>Intellectual Property Claim</h3>
<p>Any patent, copyright, or other proprietary claim or claims made by an entity regarding a XMPP Extension. (Also referred to as a Claim.)</p>
</blockquote>
<h2>3. <a name="contributing"></a>Terms of Contributing an XMPP Extension</h2>
<p>The JSF recognizes the possibility that the creator of an XMPP Extension may make an Intellectual Property Claim regarding an XMPP Extension. Therefore, the JSF takes the following positions:</p>
<blockquote>
<h3>3.1 <a name="contrib-ownership"></a>Ownership</h3>
<p>By submitting an XMPP Extension for consideration by the JSF, the author of the Extension shall assign any ownership rights or other Claims asserted over the Extension to the JSF. This does not apply to Claims regarding any Implementations of the Extension, but rather to the Extension itself. Any documentation of the Extension (in the form of a XEP specification) shall be copyrighted by the JSF. Once an author assigns ownership to the JSF, the JSF shall in turn make the Extension available to all entities so that they may create, use, sell, distribute, or dispose of implementations of XMPP and all XMPP Extensions in perpetuity and without payment or hindrance.</p>
</p>
<h3>3.3 <a name="contrib-approval"></a>Approval of Extensions</h3>
<p>No Extension shall be approved by the JSF or its constituent committees if there are Claims to the Extension itself, or any Claims that would prevent perpetual, unrestricted, royalty-free use of the Extension in a compliant Implementation by any interested party. If Claims preventing such use are discovered, the JSF shall immediately seek to replace the Extension with unencumbered protocols that may be implemented without condition by any entity.</p>
<h3>3.3 <a name="contrib-private"></a>A Note about Private Extensions</h3>
<p>By its nature as XML, XMPP enables implementers to create their own private extensions to XMPP within custom XML namespaces. Such extensions may be kept private, and there is no compulsion for implementers to contribute such extensions to the Jabber community. It is only when an implementer seeks to have an extension standardized through the JSF's public standards process that ownership over such an extension must be transferred to the JSF. If an implementer wishes to keep its extensions private, it may simply refrain from submitting them to the JSF. However, private extensions exist outside the boundaries of XMPP and approved XMPP Extensions and must not be considered or described as part of XMPP or JSF-approved XMPP Extensions.</p>
</blockquote>
<h2>5. <a name="legal"></a>Legal Notice</h2>
<p>All XMPP Extension Protocol (XEP) specifications shall contain the following Legal Notice:</p>
<blockquote><pre>
This XMPP Extension Protocol is copyright 1999 - [year]
by the Jabber Software Foundation (JSF) and is in full
conformance with the JSF's Intellectual Property Rights
Policy (&lt;http://www.xmpp.org/extensions/ipr-policy.shtml&gt;).
This material may be distributed only subject to the terms and
conditions set forth in the Creative Commons Attribution
License (&lt;http://creativecommons.org/by/2.5/&gt;).
</pre></blockquote>
<p><hr></p>
<h3>Notes</h3>
<p><a name="note1"></a>1. For information about XMPP Extension Protocols, see &lt;<a href="http://www.xmpp.org/extensions/">http://www.xmpp.org/extensions/</a>&gt; and <a href="http://www.xmpp.org/extensions/xep-0001.html">JEP-0001</a>.</p>
<p><a name="note2"></a>2. For information about intellectual property conservancies, see &lt;<a href="http://www.creativecommons.org/concepts/#ip">http://www.creativecommons.org/concepts/#ip</a>&gt; and M. van Houweling, "Cultivating Open Information Platforms: A Land Trust Model." <cite>Journal of Telecommunications &amp; High Technology Law</cite> 1, no. 1 (2002): 309-23.</p>
<h3>Acknowledgements</h3>
<p>Many thanks to Lawrence Lessig and Molly van Houweling for their assistance in formulating this policy.</p>
<h3>Changelog</h3>
<p>Version 1.2 (2006-10-04): Modified terminology to reflect protocol branding change from Jabber to XMPP (e.g., Jabber Enhancement Proposal to XMPP Extension Protocol).</p>
<p>Version 1.1 (2005-10-04): Replaced Open Publication License with Creative Commons Attribution License.</p>
<p>Version 1.0 (2002-10-29): Initial version approved by JSF Board of Directors.</p>
</div>
<!--#include virtual="/includes/foot.txt" -->

146
lastcall.py

@ -0,0 +1,146 @@ @@ -0,0 +1,146 @@
#!/usr/bin/env python
# File: lastcall.py
# Version: 0.2
# Description: a script for announcing JEP Last Calls
# Last Modified: 2004-09-29
# Author: Peter Saint-Andre (stpeter@jabber.org)
# License: public domain
# HowTo: ./lastcall.py jepnum enddate dbuser dbpw
# IMPORTS:
#
import glob
import MySQLdb
import os
from select import select
import smtplib
import socket
from string import split,strip,join,find
import sys
import time
from xml.dom.minidom import parse,parseString,Document
def getText(nodelist):
thisText = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
thisText = thisText + node.data
return thisText
# get the seconds in the Unix era
now = int(time.time())
# READ IN ARGS:
#
# 1. JEP number
# 2. end date
# 3. database user
# 4. database password
jepnum = sys.argv[1];
enddate = sys.argv[2];
dbuser = sys.argv[3];
dbpw = sys.argv[4];
jepfile = jepnum + '/jep-' + jepnum + '.xml'
# PARSE JEP HEADERS:
#
# - title
# - abstract
# - version
# - date
# - initials
# - remark
thejep = parse(jepfile)
jepNode = (thejep.getElementsByTagName("jep")[0])
headerNode = (jepNode.getElementsByTagName("header")[0])
titleNode = (headerNode.getElementsByTagName("title")[0])
title = getText(titleNode.childNodes)
abstractNode = (headerNode.getElementsByTagName("abstract")[0])
abstract = getText(abstractNode.childNodes)
statusNode = (headerNode.getElementsByTagName("status")[0])
jepstatus = getText(statusNode.childNodes)
typeNode = (headerNode.getElementsByTagName("type")[0])
jeptype = getText(typeNode.childNodes)
revNode = (headerNode.getElementsByTagName("revision")[0])
versionNode = (revNode.getElementsByTagName("version")[0])
version = getText(versionNode.childNodes)
dateNode = (revNode.getElementsByTagName("date")[0])
date = getText(dateNode.childNodes)
initialsNode = (revNode.getElementsByTagName("initials")[0])
initials = getText(initialsNode.childNodes)
remarkNode = (revNode.getElementsByTagName("remark")[0])
remark = getText(remarkNode.childNodes)
# UPDATE DATABASE:
#
# number is $jepnum
# name is $title
# type is $jeptype
# status is $jepstatus
# notes is "Version $version of JEP-$jepnum released $date."
# version is $version
# last_modified is $now
# abstract is $abstract
# changelog is "$remark ($initials)"
db = MySQLdb.connect("localhost", dbuser, dbpw, "foundation")
cursor = db.cursor()
theNotes = "Version " + version + " of JEP-" + jepnum + " released " + date + "; Last Call ends " + enddate + "."
theLog = remark + " (" + initials + ")"
theStatement = "UPDATE jeps SET name='" + title + "', type='" + jeptype + "', status='Proposed', notes='" + theNotes + "', version='" + str(version) + "', last_modified='" + str(now) + "', abstract='" + abstract + "', changelog='" + theLog + "' WHERE number='" + str(jepnum) + "';"
cursor.execute(theStatement)
result = cursor.fetchall()
# SEND MAIL:
#
# From: editor@jabber.org
# To: standards-jig@jabber.org
# Subject: LAST CALL: JEP-$jepnum ($title)
# Body:
# This message constitutes notice of a Last Call
# for JEP-$jepnum ($title).
#
# Abstract: $abstract
#
# URL: http://www.jabber.org/jeps/jep-$jepnum.html
#
# This Last Call begins now and shall end at the close
# of business on $enddate.
#
fromaddr = "editor@jabber.org"
# for testing...
# toaddrs = "stpeter@jabber.org"
# for real...
toaddrs = "standards-jig@jabber.org"
thesubject = 'LAST CALL: JEP-' + jepnum + " (" + title + ")"
introline = 'This message constitutes notice of a Last Call for JEP-' + jepnum + ' (' + title + ').'
abstractline = 'Abstract: ' + abstract
urlline = 'URL: http://www.jabber.org/jeps/jep-' + jepnum + '.html'
schedline = 'This Last Call begins today and shall end at the close of business on ' + enddate + '.'
#msg = "From: %s\r\n" % fromaddr
msg = "From: JEP Editor <%s>\r\n" % fromaddr
msg = msg + "To: %s\r\n" % toaddrs
msg = msg + "Subject: %s\r\n" % thesubject
msg = msg + introline
msg = msg + "\r\n\n"
msg = msg + abstractline
msg = msg + "\r\n\n"
msg = msg + urlline
msg = msg + "\r\n\n"
msg = msg + schedline
msg = msg + "\r\n"
server = smtplib.SMTP('localhost')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
# END

73
protopage.xsl

@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
<!-- Author: stpeter -->
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:output method='html'/>
<xsl:template match='/'>
<html>
<head>
<title><xsl:value-of select='/jep/header/shortname'/></title>
<link rel='stylesheet' type='text/css' href='/jeps/jep.css' />
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico' />
<link>
<xsl:attribute name='rel'><xsl:text>alternate</xsl:text></xsl:attribute>
<xsl:attribute name='href'><xsl:text>http://www.jabber.org/jeps/jep-</xsl:text><xsl:value-of select='/jep/header/number'/><xsl:text>.html</xsl:text></xsl:attribute>
</link>
<!-- BEGIN META TAGS FOR DUBLIN CORE -->
<meta>
<xsl:attribute name='name'><xsl:text>DC.Title</xsl:text></xsl:attribute>
<xsl:attribute name='content'><xsl:value-of select='/jep/header/shortname'/></xsl:attribute>
</meta>
<meta>
<xsl:attribute name='name'><xsl:text>DC.Publisher</xsl:text></xsl:attribute>
<xsl:attribute name='content'>Jabber Software Foundation</xsl:attribute>
</meta>
<meta>
<xsl:attribute name='name'><xsl:text>DC.Date</xsl:text></xsl:attribute>
<xsl:attribute name='content'><xsl:value-of select='/jep/header/revision/date'/></xsl:attribute>
</meta>
<!-- END META TAGS FOR DUBLIN CORE -->
</head>
<body>
<h1><xsl:value-of select='/jep/header/shortname'/></h1>
<p>This page provides information about the XML namespaces defined in
<a>
<xsl:attribute name='href'>
<xsl:text>http://www.jabber.org/jeps/jep-</xsl:text>
<xsl:value-of select='/jep/header/number'/>
<xsl:text>.html</xsl:text>
</xsl:attribute>
<xsl:text>JEP-</xsl:text><xsl:value-of select='/jep/header/number' />:<xsl:text> </xsl:text><xsl:value-of select='/jep/header/title' />
</a>
(part of the <a href="http://www.jabber.org/jeps/">JEP series</a> published by the <a href="http://www.jabber.org/jsf/">Jabber Software Foundation</a>).</p>
<xsl:variable name='schema.count' select='count(/jep/header/schemaloc)'/>
<xsl:if test='$schema.count &gt; 0'>
<p>The following XML schemas are available for the <xsl:value-of select='/jep/header/title' /> protocol:</p>
<ul>
<xsl:apply-templates select='/jep/header/schemaloc'/>
</ul>
</xsl:if>
<p>Last Updated: <xsl:value-of select='/jep/header/revision/date'/></p>
</body>
</html>
</xsl:template>
<xsl:template match='schemaloc'>
<xsl:variable name='this.url' select='url'/>
<xsl:variable name='ns.count' select='count(ns)'/>
<xsl:choose>
<xsl:when test="$ns.count &gt; 0">
<li><a href='{$this.url}'><xsl:value-of select='url'/></a></li>
</xsl:when>
<xsl:otherwise>
<li><a href='{$this.url}'><xsl:value-of select='url'/></a></li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

122
ref.xsl

@ -0,0 +1,122 @@ @@ -0,0 +1,122 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Author: stpeter
Description: transforms XEP meta-data into IETF reference
-->
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:output method='xml' indent='yes'/>
<xsl:template match='/'>
<reference>
<xsl:attribute name='anchor'><xsl:text>XEP-</xsl:text><xsl:value-of select='/xep/header/number'/></xsl:attribute>
<front>
<title><xsl:value-of select='/xep/header/title' /></title>
<xsl:apply-templates select='/xep/header/author'/>
<xsl:variable name='fulldate' select='/xep/header/revision[position()=1]/date'/>
<xsl:variable name='year' select='substring-before($fulldate,"-")'/>
<xsl:variable name='monthday' select='substring-after($fulldate,"-")'/>
<xsl:variable name='month' select='substring-before($monthday,"-")'/>
<xsl:variable name='day' select='substring-after($monthday,"-")'/>
<date>
<xsl:attribute name='day'><xsl:value-of select='$day'/></xsl:attribute>
<xsl:choose>
<xsl:when test='$month = "01"'>
<xsl:attribute name='month'><xsl:text>January</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test='$month = "02"'>
<xsl:attribute name='month'><xsl:text>February</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test='$month = "03"'>
<xsl:attribute name='month'><xsl:text>March</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test='$month = "04"'>
<xsl:attribute name='month'><xsl:text>April</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test='$month = "05"'>
<xsl:attribute name='month'><xsl:text>May</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test='$month = "06"'>
<xsl:attribute name='month'><xsl:text>June</xsl:text></xsl:attribute>
</xsl:when>
<xsl:when test='$month = "07"'>
<xsl:attribute name='month'><xsl:text>