<?xml version="1.0" encoding="UTF-8" ?>
<!-- **** slinks.dtd, version 1.11 5/4/2003 *****
* http://nj.oclc.org/SLinkS/slinks-20030504.dtd **
**** The most recent version of this document *****
**** is located at *****
**** http://nj.oclc.org/SLinkS/slinks.dtd *****
**** Previous version: *****
* http://nj.oclc.org/SLinkS/slinks-20030321.dtd **
=====================================================
This XML DTD describes a structure for templating
internet links to resources related to citations of
scholarly works.
=====================================================
Author: Eric S. Hellman, eric@openly.com
Copyright (1998-2003) by Openly Informatics Inc.
All Rights Reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
Redistributions of source must retain the above copyright
notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
The name of the author may not be used to endorse or promote
products derived from this specification without specific prior written
permission.
"S-Link-S" is a Service Mark of Openly Informatics, Inc. The S-Link-S
name and logo may not be used to endorse or promote
products derived from this specification without specific prior written
permission of Openly Informatics, Inc..
THIS DOCUMENT TYPE DEFINITION IS PROVIDED ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
<!-- ***** Top level container elements ***** -->
<!ELEMENT slinks ( var*, lookUpTable*, scratch*, DOi?, URL?, postArgs?, cookie?, notRequired?, locator* ) >
<!-- This is the top level element of the linking template.
It is referred to in metadata using its ID attribute.
-->
<!ATTLIST slinks ID CDATA #REQUIRED
vers CDATA #IMPLIED
complete (yes|no) #IMPLIED >
<!-- ID the ID of the slinks element (required)
vers the version of S-Link-S. The version number for S-Link-S complying
with this document DTD is "1"
complete a complete template is one that can be used without a network
connection; it needs no on-line look-ups of digital signatures.-->
<!ENTITY % varsafe.e "#PCDATA | lookUp | pad | replace | changeCase | if | titleCode |
pattern | private | option | param" >
<!-- a parameter entity used for allowable content in variable sections
this content cannot depend on a variable section, and should be resolvable
in a single pass through a parser-->
<!ENTITY % template.e "%varsafe.e; | hash | checkSum | SICI | pmid |
dsig | getDOi | encode" >
<!-- a parameter entity used for allowable content in template strings -->
<!ELEMENT var ( %varsafe.e; )* >
<!-- marks a string for other elements to use as a variable.
The content model for mark prohibits any entities
which may depend on variable sections.
In this way circular references are avoided.
-->
<!ATTLIST var ID ID #REQUIRED
xml:space (default|preserve) "preserve">
<!-- ID the label used to refer to the variable section.
Must be unique in the document.
-->
<!ELEMENT scratch ( %template.e; )* >
<!-- a scratch element is a var by another name. It serves as a register that can be used to build up computations.
-->
<!ATTLIST scratch ID ID #REQUIRED
xml:space (default|preserve) "preserve">
<!-- ID the label used to refer to the value of the scratch section.
Must be unique in the document.
-->
<!ELEMENT lookUpTable ( item+ ) >
<!-- together with lookup, this element allows almost any site
to be described in the S-Link-S framework.
Nonetheless, it's bad practice to use the lookUpTable in
place of a search engine if you need a table item for
every item in your journal. item is the only allowed content.
-->
<!ATTLIST lookUpTable ID ID #REQUIRED
default CDATA "" >
<!-- ID a unique identifier used to address the lookup table (required)
default the value returned if no match is found default:""
-->
<!ELEMENT item EMPTY >
<!-- a record in a lookUpTable. (empty)-->
<!ATTLIST item key CDATA #REQUIRED
value CDATA #REQUIRED
>
<!-- key a string used to access the record. If there are two
items with the same key, then only the first is used.
value the string returned by a look-up
-->
<!ENTITY % usage.e "" >
<!ELEMENT URL ( %template.e; )* >
<!-- This element contains a template for a URL.-->
<!ATTLIST URL usage ( literal | redirected | query ) "literal"
xml:space (default|preserve) "preserve">
<!-- In this and other elements declared as mixed content, white space
is preserved. URL encoding should be assumed to occur only after
all parsing and manipulation has been done.-->
<!-- usage a string describing whether the URL is to be resolved
literal If a template is literal, the string it forms is to be used
as the URL etc.
redirected A redirected template forms a URI which may get redirected to
another URI. The redirection URI is to be used as the "result"
of the element. Multiple redirections should be followed to the end.
query A query URL is to be used only with a locator element to do web-page
look-ups.
In principle, we could add this to the DOi element, but that would require adding
handle resolving code to the implementation.
-->
<!ELEMENT DOi ( %template.e; )* >
<!ATTLIST DOi xml:space (default|preserve) "preserve">
<!-- This element contains a template for a digital object identifier.
When this element is present, it can be used in a URL template
using the <getDOi/> element.-->
<!ELEMENT postArgs ( postItem )* >
<!ATTLIST postArgs encoding CDATA "UTF-8">
<!-- Occasionally, a server may require form data to be submitted
in a post arguments header. This element contains the items for the required form data.
The encoding attribute indicates the encoding expected by the target-->
<!ELEMENT postItem ( %template.e; )* >
<!-- a POST argument. contains a template for the value of the POST argument-->
<!ATTLIST item key CDATA #REQUIRED
>
<!-- key the name of the POST argument.
-->
<!ELEMENT cookie ( %template.e; )* >
<!ATTLIST cookie xml:space (default|preserve) "preserve">
<!-- Session ID's and user identification is often accomplished using
a special header in the HTTP protocol called the HTTP-Cookie.
The cookie element is included in S-Link-S to enable specification
of site authentication in the intranet/library service scenario.
The cookie element should never be used in generic or public
link specifications.-->
<!ELEMENT notRequired ( %template.e; )* >
<!-- this element tells a processor that entities requested in the template it contains are
really not required for the formation of a URL. This was needed to override seemingly required
entities in things like SICI's -->
<!ELEMENT locator ( %template.e; )* >
<!-- element content is a "PERL5 regular expression" pattern that describes how to
find a string within a text resource. Locators are evaluated in the order
that they appear in the template
-->
<!ATTLIST locator query CDATA "URL"
name CDATA #REQUIRED
group CDATA "1" >
<!-- query the name of the element providing the query URI. "URL" and "DOi"
refer to the respective elements, unless the values have been
replaced in a previous locator.
name a name of the thing that is being sought. If the name is "URL"
or "DOi", then the result of the locator replaces the respective
element.
group if there is more than one parenthesized group, then this selects which group.
if group = 0 then the whole match is used
-->
<!-- ***** String manipulation mark-up ***** -->
<!ELEMENT pad ( %template.e; )* >
<!-- used to mark up strings which need padding to make a fixed-length string
attributes. Can also be used to chop strings to a cetain length -->
<!ATTLIST pad padChar CDATA "0"
length NMTOKEN #REQUIRED
align (left|right) "right"
xml:space (default|preserve) "preserve">
<!-- padChar a character to pad with (required)
length how long the padded string should be (required) (an integer)
align the side the text should align to (left|right) (default:right)
-->
<!ELEMENT replace ( %template.e; )* >
<!-- substitute every instance of a string for another in the element's content
-->
<!ATTLIST replace for CDATA #REQUIRED
with CDATA #REQUIRED
grep (yes|no) "no"
xml:space (default|preserve) "preserve">
<!-- for the string to replace
with the string to substitute
grep whether to use "PERL5 regular expressions" "(yes|no)" default:"no"
-->
<!ELEMENT pattern ( %varsafe.e; )* >
<!-- declares a "PERL5 regular expression" pattern that the marked text should match.
This markup is used in situations where a URL must be matched.
-->
<!ATTLIST pattern model CDATA #REQUIRED >
<!-- model the regular expression that the marked text should match
-->
<!ELEMENT encode ( %template.e; )* >
<!ATTLIST encode encoding CDATA "UTF-8">
<!-- URL encode the text in the element content; use the encoding specified in the attribute -->
<!ELEMENT changeCase ( %template.e; )* >
<!-- change case of the text in the element content -->
<!ATTLIST changeCase to (upper|lower|title) #REQUIRED
offset NMTOKEN "0"
xml:space (default|preserve) "preserve">
<!-- to the text can be changed to UPPER case,
lower case, or Title Case. Title case treats all
non-alphanumerics as word separators, and then
capitalizes the first letter of each word. (required)
offset characters up to the offset character are unchanged. default: 0
-->
<!ELEMENT if ( ( case | match | notEmpty )+ , else? ) >
<!-- can contain "case", "match", "notEmpty" and "else" elements.
case and match contain conditions as attributes.
notEmpty is true if the content is not empty.
The content of the first element with a true condition is selected.
-->
<!ELEMENT case ( %template.e; )* >
<!-- the attributes define a comparison of strings.
If true, the content of this element becomes
the value of the parent <if> element
-->
<!ATTLIST case varID IDREF #REQUIRED
op (gt|lt|eq|ne|ge|le) #REQUIRED
const CDATA #REQUIRED
order (numeric|alpha|date) "numeric"
xml:space (default|preserve) "preserve"
>
<!-- varID ID of the variable or scratch used for the left hand value of a comparison.
op a comparison operator, matches "(gt|lt|eq|ne|ge|le)"
const the right hand value for a comparison.
order (numeric|alpha|date) default: numeric.
In numeric comparison, the numbers are extracted from the strings
before comparison. In a date comparison,
both strings should be either YYYY-MM-DD format strings
or they must be simple token values, i.e. "july" . date string parsing
is lenient.
In alpha comparisons, the compareTo method of the Java
String object is used, with the English Locale.
Note that entities may be used only in the content of a variable.
If the IDREF does not resolve, the case is false.
-->
<!ELEMENT else ( %template.e; )* >
<!ATTLIST else xml:space (default|preserve) "preserve">
<!-- like case, but always true
-->
<!ELEMENT match ( %template.e; )* >
<!-- tests a match of one string in another
-->
<!ATTLIST match with CDATA #REQUIRED
varID IDREF #REQUIRED
grep (yes|no) "no"
xml:space (default|preserve) "preserve"
>
<!-- with the match string
varID the ID of the variable in which to search for the match string
grep whether to use "PERL5 regular expressions" "(yes|no)" default:"no"
-->
<!ELEMENT notEmpty ( %template.e; )* >
<!-- true if content is not an empty string
-->
<!ATTLIST notEmpty xml:space (default|preserve) "preserve"
>
<!ELEMENT lookUp ( %varsafe.e; )* >
<!-- looks up a value in a lookUpTable using the content of this
element as the key. The entire element is replaced by the
returned value. Look-up is case sensitive
-->
<!ATTLIST lookUp ref IDREF #REQUIRED
xml:space (default|preserve) "preserve">
<!-- ref the ID of the lookUpTable to use
-->
<!ELEMENT option ( %template.e; )* >
<!-- the contents of this element should be omitted if the value of the
attributes contained in the element where not resolved.
Use this mark-up to indicate a part of the
template which may be omitted if a required token is null
-->
<!ATTLIST option xml:space (default|preserve) "preserve">
<!ELEMENT hash EMPTY >
<!-- an empty element which is replaced by an MD5 hash
of the targeted variable element. If varID is not present, the hash is
generated from the "current text" of the parent element. The Hash is
rendered as a hexadecimal number with capital A,B,C,D,E,F
-->
<!ATTLIST hash varID IDREF #IMPLIED >
<!-- varID the ID of a target variable section
-->
<!ELEMENT checkSum EMPTY >
<!-- an empty element which is replaced by a= checksum of the
targeted marked variable. If varID is not present, the checkSum is generated from
the "current text" of the parent elementSupported algorithms are: "mod37",
which is useful for alphanumeric strings and is specified
in Z39.56-1996 (The version 2 SICI). Other useful checksum
algorithms may be added as experience warrants.
-->
<!ATTLIST checkSum varID IDREF #IMPLIED
type CDATA #FIXED "mod37"
>
<!-- varID the ID of a variable section; if not present, then current string is used
type the name of the algorithm used to calculate the checksum.
mod37 is the only one defined so far.
-->
<!-- ***** Bibliographic data tokens ***** -->
<!-- The bibliographic data tokens we refer to are placeholders
in a string for bibliographic input. Since XML syntax is
used in S-Link-S, XML "SYSTEM" entities are used to represent
these tokens. for example, if a publisher wants to specify
that links to an article on page 587 in volume 3 should use
the URL http://www.publisher.com/3/587/ , the string
"http://www.publisher.com/&vol;/&page;/" would be used.
A publisher wishing to use this link specification would run a
S-Link-S program that reads the specification file, and asks for
the required bibliographic information, and spits out the resulting URL.
General rules for token normalization
To improve the specificity of bibliographic token strings,
the data strings should be normalized before use as data tokens.
The normalization operations should take place in the order specified.
replaceSlash Occasionally, a data string may have a "/" in it;
most servers treat "/" as a path delimiter.
In such cases, "/" should be replaced with "-"
in the many tokens.
removeWhiteSpace White space should be removed in all tokens.
underscoreWhiteSpace All instances of one or more white space should be
replaced by a single underscore character.
removePunctuation The following punctuation should be removed from
token strings: "#", ",", ".", ":", "(", ")", "[", "]",
"{", "}", "!", ";", """ . and replaced
with white space
removeStrings Many entities should have certain strings removed
for normalization. The list of strings should be
removed in order.
lowerCase the data string should be converted to lower case.
toAscii accented characters should be replaced by their
closest unaccented equivalent, as given in the mapping
table supplied at http://nj.oclc.org/SLinkS/unicodeMap.txt
trimPunctuation Punctuation (enumerated above) and whitespace are removed
from the end and beginning of the place-holder string.
A S-Link-S implementation should normalize bibliographic data on entry. In cases
where specific formats are required, a S-Link-S implementation should consider
malformed or ambigus entries to be invalid. A S-Link-S implementation may apply
correct formatting, such as adding a dash to ISSN's.
-->
<!-- ***** General tokens ***** -->
<!ENTITY baseURL SYSTEM "?baseURL" >
<!-- the base URL for the journal. This URL should start with a protocol
declaration (usually "http://") end in "/" . Normalization: removeWhiteSpace
-->
<!ENTITY volume SYSTEM "?volume" >
<!-- A string denoting the journal volume. Normalization: lowerCase,
removeStrings : {"volume", "vol"}, ReplaceSlash, trimPunctuation,
removeWhiteSpace
-->
<!ENTITY issue SYSTEM "?issue" >
<!-- A string denoting an issue number. Normalization: lowerCase,
removeStrings {"issue", "iss", "no" , "number" , "num"}, ReplaceSlash,
trimPunctuation, removeWhiteSpace
-->
<!ENTITY pages SYSTEM "?pages" >
<!-- A string denoting the page numbers. &pages; =&startPage;-&endPage;
-->
<!ENTITY startPage SYSTEM "?startPage" >
<!-- A string denoting the page on which an article starts.
Normalization: lowerCase, removeStrings {"pages", "page", "no" , "number",
"num"}, ReplaceSlash, trimPunctuation, removeWhiteSpace
-->
<!ENTITY endPage SYSTEM "?endPage" >
<!-- A string denoting the page on which an article ends. Normalization:
lowerCase, removeStrings {"pages", "page", "no" , "number" , "num"},
ReplaceSlash, trimPunctuation, removeWhiteSpace
-->
<!ENTITY pSeq SYSTEM "?pSeq" >
<!-- A string denoting the sequence number for cases where multiple
articles are found on a page. Normalization:
lowerCase, ReplaceSlash, trimPunctuation, removeWhiteSpace
-->
<!ENTITY artNum SYSTEM "?artNum" >
<!-- A string denoting an article number in cases where there are no pages.
Normalization:
lowerCase, removeStrings {"pages", "page", "no" , "number" , "num"},
ReplaceSlash, trimPunctuation, removeWhiteSpace
-->
<!ENTITY itemNum SYSTEM "?itemnum" >
<!-- A string denoting an item number for databases, archives, reports, patents.
Normalization: lowerCase, replaceSlash, removeStrings { "number" ,"no." ,"no" ,
"num.","num", percent},removeWhiteSpace
-->
<!ENTITY itemNumExact SYSTEM "?itemNumExact" >
<!-- A string denoting an item number for databases, archives, reports, patents.
Normalization: removeWhiteSpace
-->
<!ENTITY CODEN SYSTEM "?CODEN" >
<!-- the CODEN of the journal. The match string for a CODEN string is
"[A-Z][A-Z][A-Z][A-Z][A-Z][A-Z0-9]". The last digit is a check digit.
-->
<!ENTITY ISSN SYSTEM "?ISSN" >
<!-- the ISSN of the journal. If there is a separate ISSN for an on-line
version, this token refers to the print version ISSN. The match string
for an ISSN is "[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9x]". The last
character is a check digit.
-->
<!ENTITY eISSN SYSTEM "?eISSN" >
<!-- the ISSN of an on-line version of a print journal. Same format as ISSN.
-->
<!ENTITY ISBN SYSTEM "?ISBN" >
<!-- the International Standard Book Number for a book. The match string
for an ISBN is "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9x]".
The last digit is a check digit. Hyphens are omitted.
-->
<!ENTITY jKey SYSTEM "?jKey" >
<!-- Many publishers use the same template string for all their journals,
and use a key string to distinguish among them. The key string has
to be declared in the journal metadata.
-->
<!-- ***** Publication Date Tokens *****
A S-Link-S implementation should handle dates specially. If the
bibliographic token "month" is entered as "January" then a template
calling for "mo" should get "1", and "ssn" should get "winter", etc.
-->
<!ENTITY year SYSTEM "?year" >
<!-- A string denoting the year of publication. The match string is
"[0-2][0-9][0-9][0-9]".
-->
<!ENTITY yr SYSTEM "?yr" >
<!-- A two-digit publication year string. The match string is "[0-9][0-9]".
Publishers are admonished not to use this because of Y2K.
"00" shall be interpreted to mean "1900"
-->
<!ENTITY month SYSTEM "?month" >
<!-- A string representing the month of publication. This string should
match "(january|february|march|april|may|june|july|august|september|
october|november|december)"
-->
<!ENTITY mon SYSTEM "?mon" >
<!-- A 3-letter string representing the month of publication. This string
should match "(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)"
-->
<!ENTITY mo SYSTEM "?mo" >
<!-- A 2-digit string representing the month of publication. This string
should match "(01|02|03|04|05|06|07|08|09|10|11|12)"
-->
<!ENTITY day SYSTEM "?day" >
<!-- A 2-digit string representing the day of publication. This string
should match "[0-3][0-9]"
-->
<!ELEMENT parsedDate EMPTY >
<!-- An ISO format string (YYYY-MM-DD) formed from &year; or &yr;, &mo; or
&month;, and &day;.
-->
<!ENTITY ssn SYSTEM "?ssn" >
<!-- A string representing the season of publication. This string should
match "(winter|spring|summer|fall)"
-->
<!ENTITY quarter SYSTEM "?quarter" >
<!-- A string representing the quarter of publication. This string
should match "(1|2|3|4)"
-->
<!ENTITY authLast SYSTEM "?authLast" >
<!-- A string representing the first authors last name. Normalization:
toAscii, lowerCase, removePunctuation, underscoreWhiteSpace.
-->
<!ENTITY authInit SYSTEM "?authInit" >
<!-- A sring with the first author's first and middle initials.
Normalization: toAscii, lowerCase, removePunctuation, removeWhiteSpace.
-->
<!-- ***** Input-only tokens *****
These tokens should not be used in URL specifications, because
their representations are not generally unique. They are often
useful, however, for disambiguation and are inputs needed for
SICI generation.
-->
<!ENTITY uTitle SYSTEM "?uTitle" >
<!-- title of the item, represented as a Unicode string.
-->
<!ENTITY aTitle SYSTEM "?aTitle" >
<!-- title of the item, represented as a 7-bit ascii string.
-->
<!ENTITY jTitle SYSTEM "?jTitle" >
<!-- title of the journal, represented as a 7-bit ascii string.
-->
<!ENTITY doi SYSTEM "?doi" >
<!-- the digital object identifier for an item. use <getDOi/> to insert in a urI string.
-->
<!-- ***** Commerce and security tokens ***** -->
<!ENTITY linkerID SYSTEM "?linkerID" >
<!-- This is an identifier which, by mutual arrangement, can be used
to identify the linker. A null string will be substituted when
there is no arrangement between linker and linkee. For an example
of how this might be used, consider the Amazon.com associates
program. The URL in this case would be described as
http://www.amazon.com/exec/obidos/ISBN=&ISBN;/&linkerID;/ .
Remember that since the resulting URL can be bookmarked, linkerID
is only useful in situations where it benefits the linker to add
the token. i.e. you can use this to pay for people to link to you,
but you can't use it to charge them.
Although you might think this might be useful for source tracking,
it's really only useful for that if you add a passworded hash as well
-->
<!ENTITY password SYSTEM "?password" >
<!-- I've been surprised how many systems want to have the password as a clear-text
token in the query string. So, we've provided this entity so that passwords can be
easily inserted in query URL's
-->
<!ELEMENT private EMPTY >
<!-- similar to linkerID, but meant to to implement private arrangements.
It is an element rather than an entity to allow postprocessing.
-->
<!ATTLIST private data CDATA #IMPLIED >
<!-- data data for implementing private arrangements.
-->
<!ELEMENT param EMPTY >
<!-- this element is to be used for parameter passing. parameters are opaque.
It can be used in OpenURL style links to insert arbitrarily named parameters into a URL.
A param can also be used to insert a string cumputed in a var or scratch element.
-->
<!ATTLIST param name CDATA #IMPLIED>
<!-- name the name of the parameter.
-->
<!ELEMENT dsig EMPTY >
<!-- dsig is a 128 bit hex-coded (32 character) integer which is the
"MD5" one-way hash of the referenced variable or the current text
of the parent element, with the linkee's password appended
to it. This can be used to implement "digital signing" of a URL.
An S-Link-S implementation will have a centrallized signature authority
which authenticates a user and adds the linkee's password to the signed
string before computing and returning a hash string to the linker.
-->
<!ATTLIST dsig varID IDREF #IMPLIED >
<!-- varID the ID of a target variable section
-->
<!-- ***** Public database key elements ***** -->
<!-- Certain article databases are sufficiently public, accessible or
widely used that their keys may be suitable for use as tokens
in link URLs.
-->
<!ELEMENT pmid EMPTY >
<!-- The NCBI PubMed identifier number for the article.
-->
<!ELEMENT getDOi EMPTY >
<!-- The Digital Object identifier for the article. Checks first for a doi entity, then
a DOi element is present,
it is used, finally, a query is sent to a preferred DOi database.
-->
<!-- ***** SICI-related markup ***** -->
<!-- These entities are provided to support SICI standards and to allow
publishers to use SICI's in URL's and DOI's
-->
<!ELEMENT titleCode EMPTY >
<!-- an ascii string derived from the title of the item using the rules
specified in ANSI/NISO Z39.56-1991 and ANSI/NISO Z39.56-1996 .
-->
<!ATTLIST titleCode vers (1|2) "2" >
<!-- vers the SICI version. vers="1" corresponds to ANSI/NISO Z39.56-1991;
vers="2" corresponds to ANSI/NISO Z39.56-1996
-->
<!ELEMENT SICI EMPTY >
<!-- an empty element which is replaced by SICI strings according
to the specified attributes .
-->
<!ATTLIST SICI vers (1|2) "2"
titleCode (yes|no) "no"
enumeration (v|vn) "v"
chronology (year|yearMo|yearMoDa|yearQ|yearS) "year"
CSI (1|2|3) "2"
DPI (0|1|2|3) "0"
MFI (TX|TL|TH|TS|TB|CD|CF|CT|CO|HE|HD|SC|VX|ZN|ZU|ZZ) "TX"
>
<!-- vers the SICI version. vers="1" corresponds to ANSI/NISO Z39.56-1991;
vers="2" corresponds to ANSI/NISO Z39.56-1996
titleCode whether to include the Title Code in the contribution segment.
enumeration This attribute specifies the required level of detail in the
enumeration string.
chronology This attribute specifies the detail required for
the chronology string.
CSI the SICI-2 code structure identifier. CSI="1" is
the SICI-2 for a journal issue; CSI="3" contains private codes.
DPI The SICI-2 Derivative Part Identifier. DPI="0" is a
contribution, DPI="1" is a table of contents, DPI="2" is an
index, DPI="3" is an abstract.
MFI The SICI-2 "Medium/Format Identifier".
-->
<!-- revisions:
0.2 1998-10-16 Added whitespace handling defaults.
0.21 1998-10-19 Added pseq, artnum, itemnum. Changed &key; to &jkey;
0.22 1998-10-26 pseq to pSeq
0.3 1998-10-28 artnum to artNum, itemnum to item Num, startpage to startPage, endpage to endPage;
added itemNumExact; added unAccent normalization; changed some normalizations;
many comment corrections; added option element
0.31 1998-10-30 hashURL, parsedDate, titleCode, DOi, medline now elements; added unknown
0.32 1998-11-02 added private element
0.4 1998-11-24 fixed typos so that the DTD validates with XML4J; added pattern element; changed
some content models to %marksafe.e so that they remain mark-safe
0.41 1999-02-19 changed name of medline to muid.
made default of padChar to be zero; clarified that pad can be used to chop.
0.5 1999-03-xx changed order of top-level elements to ensure that a S-Link-S file can be parsed
in a single pass.
0.9 1999-05-05 changed muid to pmid; fixed typos, added locator, changed system Identifiers, removed unknown,
changed mark to var, marksafe.e to varsafe.e. xml:space attributes changed to FIXED.
match and case now work differently. Both now reference a var element instead of containing
variable text in attribute values. This was necessary because XML restrictions on external
entities in attribute values made the previous construct rather awkward.
The implementation of hash and checkSum is now that if the "ref" attribute is missing the hash
or checkSum is generated from the "current text"
of the partent element. unAccent renamed toAscii. ref is changed to varID
whereever it refers to a var.
passHash replaced with dsig. removed password.
0.91 1999-05-18 added CDATA declaration for #FIXED attributes to satisfy strict parsers
1.0 1999-05-31 added complete attribute to slinks element to help distinguish templates that need
a network connection from those that don't.
added the usage attribute to URL.
added query attribute to locator, to specify the source of the query string.
The query and usage attributes replace the resolution property in S-Link-S RDF.
content model errors introduced in previous versions have been corrected.
changed &URL; to &baseURL; so that the element and entity don't step on each other.
1.01 1999-10-26 added jTitle.
1.02 1999-11-16 added a normalizaton, changed bibliographic token normalizations
1.03 2000-08-01 the declarations for xml:space were using #FIXED, when strictly speaking, they should be
enumerated tokens: (default|preserve)
1.04 2000-12-06 added the notEmpty element
1.05 2001-04-22 added password entity to facilitate use with Crossref. Added encode element for OpenURL use.
Added doi entity for OpenURL use.
1.06 2001-07-11 added param element to facilitate parameter passing from OpenURL.
added notRequired element to improve requirements analysis for SICI etc.
1.07 2002-05-26 moved lookUp into varsafe content model
changed ID attribute of slinks element to CDATA to allow uri style ID's
varID attribute of checksum changed to IMPLIED to match documentation
1.08 2002-09-06 changed content model of locator to (%varsafe.e;)*
1.09 2002-12-02 changed content model of a bunch of elements from (%varsafe.e)* to (%template.e;)*. The whole effort to enforce anti-looping using content models has not proven to be useful.
1.10 2003-03-21 big changes here. The postArgs element, previously not used, now contains items. encode and postArgs now have encoding parameters. The scratch element is introduced to provide extra flexibility in computation.
1.11 2003-05-04 added postItem to make the new postArgs usable.
-->