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. 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 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 (*note 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 (*note 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/' 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'. * Choose a member name that is not already listed in `http://cjn.sourceforge.net/members.xml' and create a sourceforge user with that name. * Apply for membership. Sending a mail is enough and wait 24 hours for approval, *Note CJN membership rules::. The only criterion for membership approval is the accuracy of the coordinates provided. * While waiting for approval, write or reuse a script to load and dump your database on CJN. Other members scripts are published, `http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/tools/?cvsroot=cjn'. For a formal description of the database format, *Note Database format::. * Once you've been approved, create the directory cjn.sourceforge.net:/home/groups/c/cj/cjn/`member' using your shell account. * Download the full content of the `CJN' repository, *Note Mirroring the repository::. * At your option, load the standard CJN perl module that will help you parse the content of the repository. `http://sourceforge.net/project/showfiles.php?group_id=15764' * Display the data from the repository, upload yours, enjoy and help build a better world. 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 `' to `' will be deleted before running the XML validation. Removing the `memberlocal' elements can be done with the following command: perl -ne 'print unless(m:: .. m::)' \ < $$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 or ) 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, Chief is valid but 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 `member'r`number'. 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 `member'c`number'. 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 `member'o`number'. 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. Members Format ============== marul Jean Valjean individual
rue de la biere 7842 Toulouse France
1 407 472 849 foo@bar.com http://www.lolix.org/fr/ http://www.lolix.org/fr/help/depot_fr.php3 http://www.lolix.org/fr/search/offre/offre.php3?id=_ID_ http://www.lolix.org/us/ http://www.lolix.org/us/help/depot_en.php3 http://www.lolix.org/us/search/offre/offre.php3?id=_ID_
...
Resumes Format ============== 2000-10-17 2000-11-12 2000-10-17 lolixr84024 yes Mark Nielsen M Mister 1980-08-03 single
rue de la biere 7842 Toulouse France
1 407 472 849 1 407 472 850 1 407 472 853 rq@lolix.org http://www.myhome.com/ Developer
Kernel hacker
Internet Free Lance 60 Part-Time 10 In 2 month $300 000/day Free description of the desired position Text The resume in a given format More than 10 years French Mother tongue Level A 1991
Major of my promotion
MySQL Good knowledge Patch GNU/Linux Expert Mycompany Developer 2000-02-08 2000-02-09
I did a lot of work that morning
Love birds, cats and fun-board yes foo@bar.com
...
Companies Format ================ 2000-09-07 2000-09-07 2000-09-07 lolixc84024 Ecila
rue de la biere 7842 Toulouse France
1 407 472 849 1 407 472 850 http://www.myhome.com/ info@myhome.com Loic Dachary
rue de la biere 7842 Toulouse France
1 407 472 849 1 407 472 850 1 407 472 853 info@myhome.com
GCC stuff on the work, eaten by RedHat
...
Offers Format ============= 2000-09-07 2000-09-07 2000-08-03 2000-09-07 lolixo84024 Ecila SA080 System Administrator
Cluster Specialist
Informal job title Free Lance 60 Part-Time 10 Immediately $300 000/day General knowledge of compiler technology Free description of the offered position yes Ile de France Paris down town yes France French Mother tongue Level A 1991
Major of my promotion
MySQL Good knowledge GNU/Linux Expert Loic Dachary
rue de la biere 7842 Toulouse France
1 407 472 849 1 407 472 850 1 407 472 853 info@myhome.com
...
Dictionary Format ================= Dictionary Semantic Format -------------------------- The explanations of the semantic associated to each id must be written in english. Maintainer of machines, in charge of system upgrades, installation of software needed by the company employees. ... Dictionary Names Format ----------------------- Each file listed in the dictionary list section (*Note Dictionary List::.) must have the following format. Administrateur Systeme ... System administrator ... 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 Format definition DTD ===================== A set of DTD (see DTD Tutorial (http://www.xml101.com/dtd/default.asp)) 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 (ftp://ftp.cogsci.ed.ac.uk/pub/richard/rxp-1.2.3.tar.gz). The data/Makefile file in the CVS repository contains a target to run rxp(1) on the dictionaries. 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. 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, *Note Dictionary List::. `data/dtd' Contains the DTD describing the database files, *Note Format definition DTD::. `tools' Contains software contributed by the `members' to work with the repository. It contains subdirectories that match the `member' name. 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] ... 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/ 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, *Note 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/'. 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: marul Jean Valjean individual
rue de la biere 7842 Toulouse France
1 407 472 849 foo@bar.com
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: * Add the new member description in the `members.xml' file and upload it using mirroring commands, *Note Mirroring the repository::. * Go to the sourceforge.net administration panel for the `CJN' project and add the user to the list of project administrators. * Send a mail to the `CJN' mailing list (which may be found at `http://lists.sourceforge.net/mailman/listinfo/cjn-all') in the following format: Subject: membership approved for marul `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 (ftp://ftp.cogsci.ed.ac.uk/pub/richard/rxp-1.2.3.tar.gz). 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, *Note 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. 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' 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' * `http://www.w3.org/XML/' * DTD Tutorial (http://www.xml101.com/dtd/default.asp) * RXP (ftp://ftp.cogsci.ed.ac.uk/pub/richard/rxp-1.2.3.tar.gz) XML validation * libxslt (http://www.xmlsoft.org/XSLT/) XSLT processor `SSH' * `http://www.openssh.com/' * `http://www.ssh.com/' * `http://www.freessh.org/' `RSYNC' `http://rsync.samba.org/' 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 `&eacute;' it will be replaced by `é' when parsing the XML file. " (double quote) " ' (single quote) ' > (greater than) > < (lower than) < & (ampersand) & 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 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 Index of Concepts ***************** &: See ``XML character entities''. ': See ``XML character entities''. >: See ``XML character entities''. <: See ``XML character entities''. ": See ``XML character entities''. banishement: See ``CJN membership rules''. CJN: See ``CJN Software''. cjn: See ``Cjn''. cjn resources: See ``Introduction''. companies_lang_country.xml: See ``Database format''. companies_lang_country.xml format: See ``Companies Format''. contract_lang_country.xml: See ``Dictionary List''. contrib_lang_country.xml: See ``Dictionary List''. convert time: See ``Database format''. country codes: See ``ISO 3166 Country Codes''. country names: See ``ISO 3166 Country Codes''. country_lang_country.xml: See ``Dictionary List''. dictionaries: See ``CJN membership rules''. dictionary_lang_country.xml: See ``Database format''. dictionary_semantic.xml: See ``Database format''. dictionary_semantic.xml format: See ``Dictionary Semantic Format''. diploma_lang_country.xml: See ``Dictionary List''. division_lang_country.xml: See ``Dictionary List''. documentation: See ``Introduction''. DTD: See ``Format definition DTD''. DTD modification: See ``CJN membership rules''. DTD modified: See ``Changing DTD''. empty tags: See ``Database format''. escape XML characters: See ``XML character entities''. experience_lang_country.xml: See ``Dictionary List''. fee: See ``CJN membership rules''. first actions: See ``CJN membership rules''. format_lang_country.xml: See ``Dictionary List''. GNU.org: See ``CJN Software''. gnuorg: See ``CJN Software''. GPL: See ``CJN Software''. i18n: See ``Database format''. identification: See ``CJN membership rules''. ISO 3166: See ``ISO 3166 Country Codes''. ISO 639: See ``ISO 639 Name of Languages''. langlevel_lang_country.xml: See ``Dictionary List''. language: See ``Database format''. language codes: See ``ISO 639 Name of Languages''. language names: See ``ISO 639 Name of Languages''. language_lang_country.xml: See ``Dictionary List''. law: See ``CJN membership rules''. lolix: See ``CJN Software''. mailing list: See ``Introduction''. mandatory actions: See ``CJN membership rules''. member element: See ``Database format''. member name: See ``Database format''. member specific data: See ``Database format''. memberlocal element: See ``Database format''. members.xml <1>: See ``CJN membership rules''. members.xml: See ``Database format''. members.xml format: See ``Members Format''. membership approval: See ``CJN membership rules''. membership request: See ``CJN membership rules''. migration between DTD: See ``Changing DTD''. modification of the DTD: See ``CJN membership rules''. modified DTD: See ``Changing DTD''. offers_lang_country.xml: See ``Database format''. offers_lang_country.xml format: See ``Offers Format''. position_lang_country.xml: See ``Dictionary List''. privacy: See ``CJN membership rules''. publication: See ``CJN membership rules''. quality_lang_country.xml: See ``Dictionary List''. region_lang_country.xml: See ``Dictionary List''. responsibility: See ``CJN membership rules''. resumes_lang_country.xml: See ``Database format''. resumes_lang_country.xml format: See ``Resumes Format''. sex_lang_country.xml: See ``Dictionary List''. situation_lang_country.xml: See ``Dictionary List''. skill_lang_country.xml: See ``Dictionary List''. skilllevel_lang_country.xml: See ``Dictionary List''. software: See ``CJN Software''. unix time: See ``Database format''. working_lang_country.xml: See ``Dictionary List''. xml: See ``Database format''. XML entities: See ``XML character entities''. XML validation <1>: See ``CJN membership rules''. XML validation: See ``Format definition DTD''. xml/rdf: See ``Database format''. XSLT: See ``Software tools''. xsltproc to upgrade DTD: See ``Changing DTD''. ...Table of Contents...