Node:Top, Next:, Previous:(dir), Up:(dir)

Cjn

CJN 1.9.0 is a cooperative network sharing job related databases, defining job database formats and editing network membership etiquette in conformance to the regulations protecting private personal information over the world.


Node:Introduction, Next:, Previous:Top, Up:Top

Introduction

"I have a dream, that one day all the job boards of the world will share their offers in peace without considering to the color of the skin..."

Raph <raph at r4f dot org> December 2000.

First of all, CJN is at alpha stage.

The aim of the CJN is to provide a simple, reliable and legal solution for all job boards to share their databases. We've been upset since a long time by the inefficient lack of cooperation among the job boards around the world. None has the same interface, none has the same database. When looking for a job or wanting to post a job offer one spends a huge amount of time fighting to register and type the same thing over and over in job board A, job board B, and job board C.

Our first thought was to invite all the job boards to copyright their database under the GPL license and share them. But these databases contain personal data (see Regulations) and cannot be copyrighted. Furthermore, the laws protecting personal data over the world prohibit the distribution of such material to anonymous third parties.

We came up with a solution that matches all these constraints, this is the current implementation of the Cooperative Job Network. A job board can join CJN instantly by following the instruction of this document (see CJN membership rules). When approved, it will be able to download all the databases and use them. It has to publish its own database for use in the same conditions.

The weakness and the beauty of the CJN is that it does not work if the members do not play by the rules. CJN has no way to force the members to publish their database. The members will publish if they understand that it is their best interest to do so. By adding their database they increase the efficiency of their job board: each offer has a better chance to find a valuable candidate and each resume has a better chance to find a company. It also allows job boards to open a section in France, Spain or any country represented by a member of the CJN at no cost.

The main goal of CJN is to maximize the efficiency of all the job boards. It makes no assumptions on the business model a company can build on top of it, but it facilitates cooperation among them.

Job boards that hoard data for their own profit are treating employment as a secondary goal, which is sacrificed for the sake of profit. So these job boards fail to do what they could do for employment and prosperity. The CJN will not directly make them change, but we hope it will leave them behind if they don't. When the job boards share their databases, it will be easier for employees and companies to meet.

There is no interface definition attached to the CJN because it is out of its scope. There is and will always be a wide variety of interfaces for job boards. Although we would like to solve this problem too, we could not find any way to succeed. But, in a way, sharing the databases unifies interfaces. If you're not happy with the web interface of one member of the CJN, you could use another member's web interface and still see your resume or offer displayed on the other one.

The goal of this document is to define a common database format for job offers and resume, the architecture of the database repository and rules of network membership. CJN is designed to be an international database repository that may contain data in many formats and many languages. It will be happy with BIG5 as well as ISO-8859-1. From a software point of view it only relies on wide spread and robust technologies available on every architecture.


the CJN project home
http://cjn.sourceforge.net/
the contributor space
http://sourceforge.net/projects/cjn/,
the HTML version of this document
http://cjn.sourceforge.net/
the Postscript version of this document
http://cjn.sourceforge.net/cjn.ps
the text only version of this document
http://cjn.sourceforge.net/cjn.txt
the public mailing list
http://lists.sourceforge.net/mailman/listinfo/cjn-all
a complete archive of the mailing list
http://www.geocrawler.com/lists/3/SourceForge/8040/0/


Node:Quick start, Next:, Previous:Introduction, Up:Top

Quick start

Assuming you run a job board or want to run one, here are the steps to follow in order to join the CJN.


Node:Database format, Next:, Previous:Quick start, Up:Top

Database format

The basic format of all the database files is XML. It would be better to use XML/RDF but the lack of commonly available tools to handle XML/RDF prevents this.

The language used in the database is english, except for the content of the database. The tag names, semantic description, comments must all be written in english.

Each network member is assigned a unique name that will be refered to in the document as member. The name is made of lowercase ascii letters (range [a-z]) and must not be longer than 32 characters.

Each member is allowed to insert whatever he wants in the XML element memberlocal. All the lines from <memberlocal> to </memberlocal> will be deleted before running the XML validation. Removing the memberlocal elements can be done with the following command:

perl -ne 'print unless(m:<memberlocal>: .. m:</memberlocal>:)' \
  <  $$i| rxp -sV

Some database fields require to set a numerical unix time (number of seconds since January 1, 1970) in GMT time. In order to calculate the numerical value for a given data (November 23, 2000) for instance, use the following:

perl -e 'use POSIX; $ENV{'TZ'} = 'GMT'; \
  print strftime("%s", 0, 0, 0, \
  $ARGV[0], $ARGV[1] - 1, $ARGV[2] - 1900, 0, 0, 0) . "\n"' \
  23 11 2000

It is not required to fill all the tags mentionned in the database format. If a member database miss some XML elements, he can leave those elements empty or just omit them. However, if an element is not empty (examples of empty elements are <position/> or <position></position>) it must be compliant to the database format. For instance, if an element refers to a dictionary it is illegal to specify the id without showing the readable label. For instance, <position id='3'>Chief</position> is valid but <position id='3'></position> is invalid. The idea is that the database may contain more or less elements but that all the elements must be filled in accordance to the specified format.

The database is made of the following files:


Resume
The list of resume of a given member database. The name of the file is resumes_lang_country.xml. Each resume must have a unique identifier that is of the form memberrnumber. The number may be assigned as the network member see fit. A given resume must never be renumbered. Once a number is assigned it must never be changed by the network member.
Companies
The list of companies of a given member database. The name of the file is companies_lang_country.xml. Each company must have a unique identifier that is of the form membercnumber. The number may be assigned as the network member see fit. A given company must never be renumbered. Once a number is assigned it must never be changed by the network member.
Offers
The list of job offers of a given member database. The name of the file is offers_lang_country.xml. Each offer must have a unique identifier that is of the form memberonumber. The number may be assigned as the network member see fit. A given offer must never be renumbered. Once a number is assigned it must never be changed by the network member.
Dictionaries
A list of names with an associated semantic described in english. Each name is assigned a unique number that is bound to its semantic. It is prohibited to re-use a number by assigning it a different semantic. Once a dictionary entry identified by a number is assigned a semantic it remains forever.

The dictionary_semantic.xml file maps numbers to a semantic description in english. The dictionary_lang_country.xml maps numbers to a name in the language lang of the country country. It is not required that all numbers be mapped in a given language, although this is considered diserable. The lang values must match ISO 639 and country must match ISO 3166.

Network Members
A list describing the members of the network in the members.xml file, encoded in ascii.

Each xml file may only have one encoding format. If a file is to contain strings in various encodings (chinese and french) for instance, the UTF-8 encoding must be used.


Node:Members Format, Next:, Previous:Database format, Up:Database format

Members Format

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE members SYSTEM "http://cjn.sourceforge.net/dtd/cjn.dtd">
<members>
  <member>
    <!-- Unique member name -->
    <name>marul</name>
    <contact>
      <firstname>Jean</firstname>
      <lastname>Valjean</lastname>
    </contact>
    <!-- company|individual|government|education|nonprofit -->
    <type>individual</type>
    <address>
      <street>rue de la biere</street>
      <zipcode>7842</zipcode>
      <town>Toulouse</town>
      <state></state>
      <!-- see country code dictionary -->
      <country id='FR'>France</country>
    </address>
    <phone>1 407 472 849</phone>
    <email>foo@bar.com</email>
    <urls language='fr' country='FR'>
      <urlhome>http://www.lolix.org/fr/</urlhome>
      <urladdoffer>http://www.lolix.org/fr/help/depot_fr.php3</urladdoffer>
      <urlviewoffer>http://www.lolix.org/fr/search/offre/offre.php3?id=_ID_</urlviewoffer>
    </urls>

    <urls language='en' country='US'>
      <urlhome>http://www.lolix.org/us/</urlhome>
      <urladdoffer>http://www.lolix.org/us/help/depot_en.php3</urladdoffer>
      <urlviewoffer>http://www.lolix.org/us/search/offre/offre.php3?id=_ID_</urlviewoffer>
    </urls>
  </member>
  ...
</members>


Node:Resumes Format, Next:, Previous:Members Format, Up:Database format

Resumes Format

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE resumes SYSTEM "http://cjn.sourceforge.net/dtd/cjn.dtd">
<resumes>
  <resume>
    <!-- Administrative data -->
    <creation unix='971772182'>2000-10-17</creation>
    <lastmodified unix='974017543'>2000-11-12</lastmodified>
    <online unix='971772182'>2000-10-17</online>
    <id>lolixr84024</id>
    <!-- Active search yes or no -->
    <activesearch>yes</activesearch>
    <!-- Personal identification -->
    <firstname>Mark</firstname>
    <lastname>Nielsen</lastname>
    <!-- see sex dictionary -->
    <sex id='1'>M</sex>
    <!-- see quality dictionary -->
    <quality id='3'>Mister</quality>
    <birthdate>1980-08-03</birthdate>
    <!-- see situation dictionary -->
    <situation id='3'>single</situation>
    <address>
      <street>rue de la biere</street>
      <zipcode>7842</zipcode>
      <town>Toulouse</town>
      <state></state>
      <!-- see country code dictionary -->
      <country id='FR'>France</country>
    </address>
    <phone>1 407 472 849</phone>
    <fax>1 407 472 850</fax>
    <mobile>1 407 472 853</mobile>
    <email>rq@lolix.org</email>
    <url>http://www.myhome.com/</url>

    <!-- Description of the job wanted -->
    <position>
      <!-- see position dictionary -->
      <title id='7'>Developer</title>
      <details>Kernel hacker</details>
    </position>

    <sector>
      <!-- see position dictionary -->
      <title id='1'>Internet</title>
    </sector>

    <contract>
      <!-- see contract dictionary -->
      <title id='89'>Free Lance</title>
      <!-- contract duration in days,
           0 or nothing for undefined, 1 month = 30 days -->
      <duration>60</duration>
      <division>
        <!-- see division dictionary -->
        <title id='1'>Part-Time</title>
        <!-- workload per week in hours,
             0 or nothing for undefined -->
        <duration>10</duration>
      </division>
    </contract>
    <available>In 2 month</available>
    <salary>$300 000/day</salary>
    <description>
       Free description of the desired position
    </description>

    <!-- Job history -->
    <!-- see format dictionary -->
    <resumeformat id='4'>Text</resumeformat>
    <resume>The resume in a given format</resume>
    <!-- see experience dictionnary -->
    <experience id='3'>More than 10 years</experience>
    <!-- may be repeated many times -->
    <language>
        <!-- see language code dictionary -->
        <title id='fr'>French</title>
        <!-- see langlevel dictionary -->
 	<level id='2'>Mother tongue</level>
    </language>
    <!-- may be repeated many times -->
    <diploma>
        <!-- see diploma dictionary -->
        <title id='1'>Level A</title>
        <year>1991</year>
        <details>Major of my promotion</details>
    </diploma>

    <skill>
      <!-- see skill dictionary -->
      <title id='30'>MySQL</title>
      <!-- see skilllevel dictionary -->
      <level id='9'>Good knowledge</level>
      <!-- see contrib dictionary -->
      <contribution id='1'>Patch</contribution>
    </skill>
    <skill>
      <title id='3'>GNU/Linux</title>
      <level id='1'>Expert</level>
      <contribution></contribution>
    </skill>

    <!-- may be repeated many times -->
    <history>
      <employer>Mycompany</employer>
      <position><title id='7'>Developer</title></position>
      <start unix='971772182'>2000-02-08</start>
      <end unix='971772182'>2000-02-09</start>
      <details>I did a lot of work that morning</details>
    </history>

    <!-- Misc section -->
    <misc>Love birds, cats and fun-board</misc>

    <!-- Network member specific data -->
    <memberlocal>
      <egosearch>yes</egosearch>
      <anon_mail>foo@bar.com</anon_mail>
    <memberlocal>
  </resume>
  ...
</resumes>


Node:Companies Format, Next:, Previous:Resumes Format, Up:Database format

Companies Format

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE companies SYSTEM "http://cjn.sourceforge.net/dtd/cjn.dtd">
<companies>
  <company>
    <!-- Administrative data -->
    <creation unix='971772182'>2000-09-07</creation>
    <lastmodified unix='971772182'>2000-09-07</lastmodified>
    <online unix='971772182'>2000-09-07</online>
    <id>lolixc84024</id>

    <!-- Coordinates -->
    <name>Ecila</name>
    <address>
      <street>rue de la biere</street>
      <zipcode>7842</zipcode>
      <town>Toulouse</town>
      <state></state>
      <!-- see country code dictionary -->
      <country id='FR'>France</country>
    </address>
    <phone>1 407 472 849</phone>
    <fax>1 407 472 850</fax>
    <url>http://www.myhome.com/</url>
    <email>info@myhome.com</email>

    <!-- Contact person(s) -->
    <contact>
      <firstname>Loic</firstname>
      <lastname>Dachary</lastname>
      <address>
        <street>rue de la biere</street>
        <zipcode>7842</zipcode>
        <town>Toulouse</town>
        <state></state>
        <!-- see country code dictionary -->
        <country id='FR'>France</country>
      </address>
      <phone>1 407 472 849</phone>
      <fax>1 407 472 850</fax>
      <mobile>1 407 472 853</mobile>
      <email>info@myhome.com</email>
    </contact>

    <!-- Descriptive information -->
    <description>GCC stuff on the work, eaten by RedHat</description>

  </company>
  ...
</companies>


Node:Offers Format, Next:, Previous:Companies Format, Up:Database format

Offers Format

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE offers SYSTEM "http://cjn.sourceforge.net/dtd/cjn.dtd">
<offers>
  <offer>
    <!-- Administrative data -->
    <creation unix='971772182'>2000-09-07</creation>
    <lastmodified unix='971772182'>2000-09-07</lastmodified>
    <online unix='971772182'>2000-08-03</online>
    <stillavailable unix='971772182'>2000-09-07</stillavailable>
    <id>lolixo84024</id>

    <!-- Link to the company file -->
    <companyp id='lolixc84024'>Ecila</companyp>
    <!-- company internal reference code -->
    <reference>SA080</reference>

    <!-- see position dictionary -->
    <position>
      <title id='7'>System Administrator</title>
      <details>Cluster Specialist</details>
    </position>
    <!-- Job description -->
    <jobtitle>Informal job title</jobtitle>
    <contract>
      <!-- see contract dictionary -->
      <title id='89'>Free Lance</title>
      <!-- contract duration in days,
           0 or nothing for undefined, 1 month = 30 days -->
      <duration>60</duration>
      <division>
        <!-- see division dictionary -->
        <title id='1'>Part-Time</title>
        <!-- workload per week in hours, 0 or nothing for undefined -->
        <duration>10</duration>
      </division>
    </contract>
    <available>Immediately</available>
    <salary>$300 000/day</salary>
    <!-- may be repeated many times -->
    <!-- level=(mandatory|high|moderate|low) or mandatory if omitted -->
    <requirement level='mandatory'>
      General knowledge of compiler technology
    </requirement>
    <!-- may be repeated many times -->
    <!-- level=(certain|possible) or certain if omitted -->
    <description level='certain'>
      Free description of the offered position
    </description>
    <!-- yes: the job position did not exist
         and is new in the company -->
    <newposition>yes</newposition>
    <!-- see region dictionary -->
    <region>
      <title id='1'>Ile de France</title>
    </region>
    <!-- may be repeated many times -->
    <!-- level=(required|preferred|possible) or required if omitted -->
    <location>Paris down town</location>
    <!-- The employe can work remotly -->
    <remote>yes</remote>
    <!-- see country code dictionary -->
    <country id='FR'>France</country>
    <!-- may be repeated many times -->
    <language>
        <!-- see language code dictionary -->
        <title id='fr'>French</title>
        <!-- see langlevel dictionary -->
 	<level id='2'>Mother tongue</level>
    </language>
    <!-- may be repeated many times -->
    <diploma>
        <!-- see diploma dictionary -->
        <title id='1'>Level A</title>
        <year>1991</year>
        <details>Major of my promotion</details>
    </diploma>

    <skill>
      <!-- see skill dictionary -->
      <title id='30'>MySQL</title>
      <!-- see skilllevel dictionary -->
      <level id='9'>Good knowledge</level>
    </skill>
    <skill>
      <title id='3'>GNU/Linux</title>
      <level id='1'>Expert</level>
    </skill>

    <!-- Contact of this offer only -->
    <contact>
      <firstname>Loic</firstname>
      <lastname>Dachary</lastname>
      <address>
        <street>rue de la biere</street>
        <zipcode>7842</zipcode>
        <town>Toulouse</town>
        <state></state>
        <!-- see country code dictionary -->
        <country id='FR'>France</country>
      </address>
      <phone>1 407 472 849</phone>
      <fax>1 407 472 850</fax>
      <mobile>1 407 472 853</mobile>
      <email>info@myhome.com</email>
    </contact>

  </offer>
  ...
</offers>


Node:Dictionary Format, Next:, Previous:Offers Format, Up:Database format

Dictionary Format


Node:Dictionary Semantic Format, Next:, Previous:Dictionary Format, Up:Dictionary Format

Dictionary Semantic Format

The explanations of the semantic associated to each id must be written in english.

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE members SYSTEM "http://cjn.sourceforge.net/dtd/semantic.dtd">
<semantic>
  <!-- System administrator -->
  <description id='1'>
    Maintainer of machines, in charge of system upgrades, installation
    of software needed by the company employees.
  </description>
  ...
</semantic>


Node:Dictionary Names Format, Next:, Previous:Dictionary Semantic Format, Up:Dictionary Format

Dictionary Names Format

Each file listed in the dictionary list section (See Dictionary List.) must have the following format.

<!-- file: position_fr_FR.xml -->
<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE members SYSTEM "http://cjn.sourceforge.net/dtd/names.dtd">
<values>
  <name id='1'>Administrateur Systeme</name>
  ...
</values>
<!-- file: position_en_US.xml -->
<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE members SYSTEM "http://cjn.sourceforge.net/dtd/names.dtd">
<values>
  <name id='1'>System administrator</name>
  ...
</values>


Node:Dictionary List, Previous:Dictionary Names Format, Up:Dictionary Format

Dictionary List

The offers, resumes and companies file contain pointers to these dictionaries. For a given pair of lang and country a complete set of dictionaries with the same pair should exist.


contract_lang_country.xml
Contract type that an individual may have with a company. The id is numerical. Examples of contracts are Free Lance or Employee.
contrib_lang_country.xml
Level of contribution to a software package. The id is numerical. Examples of contracts are Core Developer or Translation.
country_lang_country.xml
Country names with ISO 3166 codes. The id is the ISO 3166 country code.
diploma_lang_country.xml
Diploma an individual may have obtained. The id is numerical. Examples of diplomas are Master Degree or Engineer.
division_lang_country.xml
Weekly or monthly work load. The id is numerical. Examples of divisions are 1 to 2 years or 6.
experience_lang_country.xml
The first id values are used to specify intervals and id values above 100 are used to specify the exact number of years when subtracting 100. The id is numerical. Examples of positions are System Administrator or Developer.
format_lang_country.xml
File format. The id is numerical. Examples of format are Text or Postscript.
langlevel_lang_country.xml
How well an individual master a foreign language. The id is numerical. Examples of language level are Mother tongue or Fluent.
language_lang_country.xml
Language names with ISO 639 codes. The id is the ISO 639 language code.
position_lang_country.xml
Job title of the offered/desired position. The id is numerical. Examples of positions are System Administrator or Developer.
region_lang_country.xml
Subdivision of the countries. Each id is made of the ISO 3166 country code followed by a unique number. The ids that are not prefixed by a country code have a semantic that applies to all countries. Examples of regions are Ohio for the US or Bourgogne for France.
quality_lang_country.xml
The id is numerical. Examples of quality are Mister or Miss.
sex_lang_country.xml
The id is numerical. Sex is either Male or Female until aliens join the party.
situation_lang_country.xml
The id is numerical. Examples of situations are Single or Maried.
skill_lang_country.xml
A skill that an individual has or that an enterprise want. The id is numerical. Examples of skills are MySQL or UML.
skilllevel_lang_country.xml
Level of mastery of a given skill. The id is numerical. Examples of skill level are Newbie or Expert.
working_lang_country.xml
Working situation of an individual. The id is numerical. Examples of working situations are Student or Employed.

Here is a matrix showing the dictionaries and the languages in which a translation is available.

contract en fr
contrib en fr
country en fr
diploma en fr
division en fr
experience en fr
format en fr
langlevel en fr
language en fr
position en fr
region en fr
quality en fr
sex en fr
situation en fr
skill en fr
skilllevel en fr
working en fr


Node:Format definition DTD, Next:, Previous:Dictionary Format, Up:Database format

Format definition DTD

A set of DTD (see DTD Tutorial) is defined for each file format described in this document.

members, companies, resumes, offers
http://cjn.sourceforge.net/dtd/cjn.dtd
dictionary semantic
For the *_semantic.xml files: http://cjn.sourceforge.net/dtd/semantic.dtd
dictionary names
For the *_lang_country.xml

files: http://cjn.sourceforge.net/dtd/names.dtd

For all the XML files published on the CJN repository there must exist a corresponding DTD. In order to validate that a given XML file matches the constraints of the corresponding DTD one should use an XML parser with validating capabilities. We recommend using RXP. The data/Makefile file in the CVS repository contains a target to run rxp(1) on the dictionaries.


Node:Changing DTD, Previous:Format definition DTD, Up:Database format

Changing DTD

Changing the structure of the CJN DTD happens on a regular basis. For each change in the CJN DTD, an XSLT file is provided to upgrade an XML file from on DTD to the new one.

The http://cjn.sourceforge.net/dtd/upgrade.txt file maps each DTD with its successor.

#
# Unified dtd migration Loic Dachary (loic@gnu.org) March 2001
#
offers.dtd cjn.dtd
companies.dtd cjn.dtd
resumes.dtd cjn.dtd
members.dtd cjn.dtd

For each pair there is a corresponding previous2next.xsl XSLT file that translate XML files from the previous DTD to its successor. To apply the transformation use the following:

xsltproc previous2next.xsl file.xml > newfile.xml

The CJN module provides the cjnupgrade command that automates the upgrade operation. See the cjnupgrade manual page for reference and the http://savannah.gnu.org/cgi-bin/viewcvs/gnujobs/gnujobs/Makefile for a usage example.


Node:Repository, Next:, Previous:Database format, Up:Top

Repository


Node:CVS tree, Next:, Previous:Repository, Up:Repository

CVS tree

The CVS tree is divided in three modules, as may be seen thru the web interface http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=cjn.

cjn
Contains this document.
data
Contains the members.xml file.
data/dictionaries
Contains the dictionary files, See Dictionary List.
data/dtd
Contains the DTD describing the database files, See Format definition DTD.
tools
Contains software contributed by the members to work with the repository. It contains subdirectories that match the member name.


Node:Repository architecture, Next:, Previous:CVS tree, Up:Repository

Repository architecture

Updating of the database (download and upload) is done using rsync over ssh. The repository is configured to only accept rsync connections thru ssh. The rsync software allows to update large amount of data that do not change much very quickly by only transfering the differences between the local copy and the repository. The ssh transmission protocol crypts the transmission between the source and the destination to ensure the privacy of the communication.

Each member of the network has write access for his own files and read access of all other files. Each member has write access to the CVS tree. Although the dictionaries and members.xml file is copied in the repository, it must only be modified using the CVS tree.

In order to reduce the bandwidth needed to synchronize with the CJN database, it is strongly advised that each member generates their database files using a sort criterion that will prevent scrambling the database entries from one dump to another. The required uniq identifier is a good example of sort criterion that matches that purpose. The rsync(1) utility will give its best when the local and remote files do not show artificial differences due to entries being scrambled. In the best case rsync(1) will be able to limit the data transfert to entries added, changed or deleted.

All the repository is archived using CVS. Immediately after a file is uploaded a cvs commit -m 'upload' filename.xml is run. Every day a cron job assigns a tag to the current state of the repository with the cvs tag YYYY-MM-DD command. This allows to restore the state of the repository should a wrong upload occur.

/members.xml [read]
/dictionaries/README [read]
/dictionaries/position_semantic.xml [read]
/dictionaries/position_fr_FR.xml [read]
/dictionaries/position_en_US.xml [read]
...

/dtd/cjn.dtd [read]
/dtd/names.dtd [read]
/dtd/semantic.dtd [read]

/lolix/offers_fr_FR.xml [read for all/write for lolix]
/lolix/companies_fr_FR.xml [read for all/write for lolix]
/lolix/resumes_fr_FR.xml [read for all/write for lolix]
/lolix/offers_en_US.xml [read for all/write for lolix]
/lolix/companies_en_US.xml [read for all/write for lolix]
/lolix/resumes_en_US.xml [read for all/write for lolix]

/gnuorg/offers_en_US.xml [read for all/write for gnuorg]
/gnuorg/companies_en_US.xml [read for all/write for gnuorg]
/gnuorg/resumes_en_US.xml [read for all/write for gnuorg]

/gnujobs/offers_en_US.xml [read for all/write for gnujobs]
/gnujobs/companies_en_US.xml [read for all/write for gnujobs]
/gnujobs/resumes_en_US.xml [read for all/write for gnujobs]
...


Node:Mirroring the repository, Previous:Repository architecture, Up:Repository

Mirroring the repository

Here are sample commands that any network member can use for for updating from and to the repository. The rsync(1) version installed on the sourceforge.net site is version 2.4. If you have a similar version on your local machine, you can omit the --rsync-path option. A rsync(1) version 2.5 will be installed in cjn.sourceforge.net:/home/groups/c/cj/cjn/local/bin/rsync for people who have this version on their local machine because it is incompatible with the former version (2.4).


Download the whole repository
rsync -azv --delete --rsh=ssh \
  member@cjn.sourceforge.net:/home/groups/c/cj/cjn/cjn .

Download the database files of lolix only
rsync -azv --delete --rsh=ssh \
    member@cjn.sourceforge.net:/home/groups/c/cj/cjn/cjn/lolix/ lolix

Download the members.xml file
rsync -zv --rsh=ssh \
    member@cjn.sourceforge.net:/home/groups/c/cj/cjn/cjn/members.xml .

Upload a modified dictionary
rsync -zv --rsh=ssh \
    dictionaries/positions_fr_FR.xml \
    member@cjn.sourceforge.net:/home/groups/c/cj/cjn/cjn/dictionaries/

Upload all dictionaries
rsync -rltzv --rsh=ssh \
    dictionaries \
    member@cjn.sourceforge.net:/home/groups/c/cj/cjn/cjn/

Upload a modified database file
rsync -zv --rsh=ssh \
    resumes_fr_FR.xml \
    member@cjn.sourceforge.net:/home/groups/c/cj/cjn/cjn/member/


Node:CJN Software, Next:, Previous:Repository, Up:Top

CJN Software

Each member is invided to publish his own code in the CVS tree under the tools/member directory. The following tools are currently available (for more, See Software tools.).

All the published code must be released under a free software license, preferably the GPL.


CJN perl module
This is the standard CJN software that you can use or modify for your needs. It parses the CJN datafile and transforms them in an internal perl structure. It also provides a generic template substitution mechansim for these structures. Check the manual page (man CJN) after installation for more information. This module is used by GNU.org. http://sourceforge.net/project/showfiles.php?group_id=15764
lolix
Published all their tools to download/upload the CJN files to/from a Postgres database using the lolix software available at http://sourceforge.net/projects/gnulinux-jobs/

The relevant CVS portion is http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/tools/lolix/?cvsroot=cjn.

gnuorg
Published all the tools and files used to generate the http://www.gnu.org/jobs/

page. The software and data used to generate these pages can be found at http://savannah.gnu.org/projects/gnujobs/.


Node:CJN membership rules, Next:, Previous:CJN Software, Up:Top

CJN membership rules

In the following a party is either a company, a non profit organisation, a governement, an education institute or an individual. The membership rules are minimal and their only reason to exist is that an offer/resume database cannot legaly be distributed under a free license such as GPL or FDL because it contains information that is not copyrightable. The membership rules spirit protects individual freedom while allowing the network to grow and scale easily.


Membership request and approval
Any party may apply to network membership by providing accurate identification, including full address, contact name, phone number and e-mail. A membership request may be approved by any member of the network after verification of the correctness of the informations.

The membership request must be sent to the CJN mailing list

(http://lists.sourceforge.net/mailman/listinfo/cjn-all)

in the following format:

Subject: membership request for marul
Body:
  <member>
    <!-- Unique member name -->
    <name>marul</name>
    <contact>
      <firstname>Jean</firstname>
      <lastname>Valjean</lastname>
    </contact>
    <!-- company|individual|government|education|nonprofit -->
    <type>individual</type>
    <address>
      <street>rue de la biere</street>
      <zipcode>7842</zipcode>
      <town>Toulouse</town>
      <state></state>
      <!-- see country code dictionary -->
      <country id='FR'>France</country>
    </address>
    <phone>1 407 472 849</phone>
    <email>foo@bar.com</email>
  </member>

When a network member has verified the accuracy of the information and is will to perform the task of adding the new member he must proceed as follows:


Membership banishement
Any network member with inaccurate coordinates will be banished from the network.
Publication
Each member has write access to the central repository for the directory member. Each member has write access to the dictionaries directory and the members.xml file.

The files in the member directory must be compliant with the database format described in the latest version of this document published at http://sourceforge.net/project/showfiles.php?group_id=15764.

Before uploading a file the member is required to check it using an XML validator, we recommend RXP.

This is a very permissive setup that relies on good behavior from all the network members to remain consistent.

Modifying the databaes structure
Each member can and should modify the database structure to fit his needs. The modifications must be discussed on the mailing list first to make sure it does not conflict with the needs of some other member. When the database is actualy modified, the new DTD must be published under a new name and an XSLT file to translate the previous format to the new one must be provided, See Changing DTD.
Responsibility and Identification
Each network member must be a party and be identified properly. By joining the network, the member agrees to comply to the international regulation and local regulation of each country that is represented by another member of the network. The member must provide and keep up to date his full coordinates in the members.xml file.

By joining the network, the new member agrees to not distribute the files of the database to anyone not member of the network. The files of the database contain private personal information and each individual named in the database is legaly entitled to require from the network the complete list of the parties who had access to the files containing the informations related to him. Because of this restriction which is necessary to protect individual liberties, the database cannot be made access to anonymous third parties.

First action steps
When a new member is approved he has the duty to keep his record accurate in the members.xml file. He must also create the /home/groups/c/cj/cjn/member directory where member is his network member name as registered in the members.xml file.
Fee
Membership in the network does not require an entrance fee or maintainance fee. In the long run the network members will maybe find it necessary to found a non profit association in order to collect funds and finance the network architecture. However, membership will never require a fee.


Node:References, Next:, Previous:CJN membership rules, Up:Top

References


Node:Regulations, Next:, Previous:References, Up:References

Regulations

International documentation.


http://europa.eu.int/eur-lex/en/lif/dat/1997/en_397L0066.html
Directive 97/66/EC of the European Parliament and of the Council of 15 December 1997 concerning the processing of personal data and the protection of privacy in the telecommunications sector
http://www.oecd.org/dsti/sti/it/secur/prod/priv-en.htm
OECD: Guidelines on the Protection of Privacy and Transborder Flows of Personal Data.
http://www.unhchr.ch/html/menu3/b/71.htm
United Nations and Human Rights: Guidelines for the Regulation of Computerized Personal Data Files
http://www.coe.fr/dataprotection/edocs.htm
Personal Data Protection section of the Council of Europe.

A list of URLs describing the regulations governing private personal databases in each country.


fr
http://www.cnil.fr/textes/text02.htm


Node:Software tools, Next:, Previous:Regulations, Up:References

Software tools


CJN perl module
Parse the CJN datafile and transform them in an internal perl structure. Also provides a generic template substitution mechansim for these structures. http://sourceforge.net/project/showfiles.php?group_id=15764
lolix.org software
Full fledged software to display and maintain a web based job board. Depends on perl(1) and php3. http://www.sourceforge.net/projects/gnulinux-jobs/
XML

SSH

RSYNC
http://rsync.samba.org/


Node:XML character entities, Next:, Previous:Software tools, Up:References

XML character entities

All these entites will be translated to their character equivalent by the XML parser. Hence, if some text in the XML file contains the HTML &amp;eacute; it will be replaced by &eacute; when parsing the XML file.

" (double quote) &quot;
' (single quote) &apos;
> (greater than) &gt;
< (lower than) &lt;
& (ampersand) &amp;


Node:ISO 639 Name of Languages, Next:, Previous:XML character entities, Up:References

ISO 639 Name of Languages

aa Afar
ab Abkhazian
af Afrikaans
am Amharic
ar Arabic
as Assamese
ay Aymara
az Azerbaijani

ba Bashkir
be Byelorussian
bg Bulgarian
bh Bihari
bi Bislama
bn Bengali; Bangla
bo Tibetan
br Breton

ca Catalan
co Corsican
cs Czech
cy Welsh

da Danish
de German
dz Bhutani

el Greek
en English
eo Esperanto
es Spanish
et Estonian
eu Basque

fa Persian
fi Finnish
fj Fiji
fo Faroese
fr French
fy Frisian

ga Irish
gd Scots Gaelic
gl Galician
gn Guarani
gu Gujarati

ha Hausa
he Hebrew (formerly iw)
hi Hindi
hr Croatian
hu Hungarian
hy Armenian

ia Interlingua
id Indonesian (formerly in)
ie Interlingue
ik Inupiak
is Icelandic
it Italian
iu Inuktitut

ja Japanese
jw Javanese

ka Georgian
kk Kazakh
kl Greenlandic
km Cambodian
kn Kannada
ko Korean
ks Kashmiri
ku Kurdish
ky Kirghiz

la Latin
ln Lingala
lo Laothian
lt Lithuanian
lv Latvian, Lettish

mg Malagasy
mi Maori
mk Macedonian
ml Malayalam
mn Mongolian
mo Moldavian
mr Marathi
ms Malay
mt Maltese
my Burmese

na Nauru
ne Nepali
nl Dutch
no Norwegian

oc Occitan
om (Afan) Oromo
or Oriya

pa Punjabi
pl Polish
ps Pashto, Pushto
pt Portuguese

qu Quechua

rm Rhaeto-Romance
rn Kirundi
ro Romanian
ru Russian
rw Kinyarwanda

sa Sanskrit
sd Sindhi
sg Sangho
sh Serbo-Croatian
si Sinhalese
sk Slovak
sl Slovenian
sm Samoan
sn Shona
so Somali
sq Albanian
sr Serbian
ss Siswati
st Sesotho
su Sundanese
sv Swedish
sw Swahili

ta Tamil
te Telugu
tg Tajik
th Thai
ti Tigrinya
tk Turkmen
tl Tagalog
tn Setswana
to Tonga
tr Turkish
ts Tsonga
tt Tatar
tw Twi

ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek

vi Vietnamese
vo Volapuk

wo Wolof

xh Xhosa

yi Yiddish (formerly ji)
yo Yoruba

za Zhuang
zh Chinese
zu Zulu


Node:ISO 3166 Country Codes, Previous:ISO 639 Name of Languages, Up:References

ISO 3166 Country Codes

AD	Andorra
AE	United Arab Emirates
AF	Afghanistan
AG	Antigua & Barbuda
AI	Anguilla
AL	Albania
AM	Armenia
AN	Netherlands Antilles
AO	Angola
AQ	Antarctica
AR	Argentina
AS	Samoa (American)
AT	Austria
AU	Australia
AW	Aruba
AZ	Azerbaijan
BA	Bosnia & Herzegovina
BB	Barbados
BD	Bangladesh
BE	Belgium
BF	Burkina Faso
BG	Bulgaria
BH	Bahrain
BI	Burundi
BJ	Benin
BM	Bermuda
BN	Brunei
BO	Bolivia
BR	Brazil
BS	Bahamas
BT	Bhutan
BV	Bouvet Island
BW	Botswana
BY	Belarus
BZ	Belize
CA	Canada
CC	Cocos (Keeling) Islands
CD	Congo (Dem. Rep.)
CF	Central African Rep.
CG	Congo (Rep.)
CH	Switzerland
CI	Cote d'Ivoire
CK	Cook Islands
CL	Chile
CM	Cameroon
CN	China
CO	Colombia
CR	Costa Rica
CU	Cuba
CV	Cape Verde
CX	Christmas Island
CY	Cyprus
CZ	Czech Republic
DE	Germany
DJ	Djibouti
DK	Denmark
DM	Dominica
DO	Dominican Republic
DZ	Algeria
EC	Ecuador
EE	Estonia
EG	Egypt
EH	Western Sahara
ER	Eritrea
ES	Spain
ET	Ethiopia
FI	Finland
FJ	Fiji
FK	Falkland Islands
FM	Micronesia
FO	Faeroe Islands
FR	France
GA	Gabon
GB	Britain (UK)
GD	Grenada
GE	Georgia
GF	French Guiana
GH	Ghana
GI	Gibraltar
GL	Greenland
GM	Gambia
GN	Guinea
GP	Guadeloupe
GQ	Equatorial Guinea
GR	Greece
GS	South Georgia & the South Sandwich Islands
GT	Guatemala
GU	Guam
GW	Guinea-Bissau
GY	Guyana
HK	Hong Kong
HM	Heard Island & McDonald Islands
HN	Honduras
HR	Croatia
HT	Haiti
HU	Hungary
ID	Indonesia
IE	Ireland
IL	Israel
IN	India
IO	British Indian Ocean Territory
IQ	Iraq
IR	Iran
IS	Iceland
IT	Italy
JM	Jamaica
JO	Jordan
JP	Japan
KE	Kenya
KG	Kirgizstan
KH	Cambodia
KI	Kiribati
KM	Comoros
KN	St Kitts & Nevis
KP	Korea (North)
KR	Korea (South)
KW	Kuwait
KY	Cayman Islands
KZ	Kazakhstan
LA	Laos
LB	Lebanon
LC	St Lucia
LI	Liechtenstein
LK	Sri Lanka
LR	Liberia
LS	Lesotho
LT	Lithuania
LU	Luxembourg
LV	Latvia
LY	Libya
MA	Morocco
MC	Monaco
MD	Moldova
MG	Madagascar
MH	Marshall Islands
MK	Macedonia
ML	Mali
MM	Myanmar (Burma)
MN	Mongolia
MO	Macao
MP	Northern Mariana Islands
MQ	Martinique
MR	Mauritania
MS	Montserrat
MT	Malta
MU	Mauritius
MV	Maldives
MW	Malawi
MX	Mexico
MY	Malaysia
MZ	Mozambique
NA	Namibia
NC	New Caledonia
NE	Niger
NF	Norfolk Island
NG	Nigeria
NI	Nicaragua
NL	Netherlands
NO	Norway
NP	Nepal
NR	Nauru
NU	Niue
NZ	New Zealand
OM	Oman
PA	Panama
PE	Peru
PF	French Polynesia
PG	Papua New Guinea
PH	Philippines
PK	Pakistan
PL	Poland
PM	St Pierre & Miquelon
PN	Pitcairn
PR	Puerto Rico
PS	Palestine
PT	Portugal
PW	Palau
PY	Paraguay
QA	Qatar
RE	Reunion
RO	Romania
RU	Russia
RW	Rwanda
SA	Saudi Arabia
SB	Solomon Islands
SC	Seychelles
SD	Sudan
SE	Sweden
SG	Singapore
SH	St Helena
SI	Slovenia
SJ	Svalbard & Jan Mayen
SK	Slovakia
SL	Sierra Leone
SM	San Marino
SN	Senegal
SO	Somalia
SR	Suriname
ST	Sao Tome & Principe
SV	El Salvador
SY	Syria
SZ	Swaziland
TC	Turks & Caicos Is
TD	Chad
TF	French Southern & Antarctic Lands
TG	Togo
TH	Thailand
TJ	Tajikistan
TK	Tokelau
TM	Turkmenistan
TN	Tunisia
TO	Tonga
TP	East Timor
TR	Turkey
TT	Trinidad & Tobago
TV	Tuvalu
TW	Taiwan
TZ	Tanzania
UA	Ukraine
UG	Uganda
UM	US minor outlying islands
US	United States
UY	Uruguay
UZ	Uzbekistan
VA	Vatican City
VC	St Vincent
VE	Venezuela
VG	Virgin Islands (UK)
VI	Virgin Islands (US)
VN	Vietnam
VU	Vanuatu
WF	Wallis & Futuna
WS	Samoa (Western)
YE	Yemen
YT	Mayotte
YU	Yugoslavia
ZA	South Africa
ZM	Zambia
ZW	Zimbabwe


Node:Concept Index, Previous:References, Up:Top

Index of Concepts

Table of Contents