mirror of https://github.com/moparisthebest/xeps
Browse Source
git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@2 4b5297f7-1745-476d-ba37-a9c6900126abxep-0352-v0.2

commit
2ac91f50c8
219 changed files with 93420 additions and 0 deletions
@ -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 |
||||
|
@ -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 |
||||
|
@ -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 |
@ -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 |
||||
|
@ -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 <editor@jabber.org>.</p> |
||||
</div> |
||||
<!--#include virtual="/includes/foot.txt" --> |
@ -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 > 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 > 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>•</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> |
@ -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 |
After Width: | Height: | Size: 37 KiB |
@ -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: <<a href="http://www.nb.net/~resteele/">http://www.nb.net/~resteele/</a>>) 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> |
@ -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> <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/">"inbox"</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" --> |
@ -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 |
||||
|
@ -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 (<http://www.xmpp.org/extensions/ipr-policy.shtml>). |
||||
This material may be distributed only subject to the terms and |
||||
conditions set forth in the Creative Commons Attribution |
||||
License (<http://creativecommons.org/by/2.5/>). |
||||
</pre></blockquote> |
||||
<p><hr></p> |
||||
<h3>Notes</h3> |
||||
<p><a name="note1"></a>1. For information about XMPP Extension Protocols, see <<a href="http://www.xmpp.org/extensions/">http://www.xmpp.org/extensions/</a>> 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 <<a href="http://www.creativecommons.org/concepts/#ip">http://www.creativecommons.org/concepts/#ip</a>> and M. van Houweling, "Cultivating Open Information Platforms: A Land Trust Model." <cite>Journal of Telecommunications & 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" --> |
@ -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 |
||||
|
@ -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 > 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 > 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> |
@ -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> |