by jcbollinger » Mon Mar 05, 2012 5:30 pm
jcbollinger wrote:The first I received are from John Westbrook, for several of the RCSB's offerings:
CIFLIB is a historic C++ parsing library that we developed at the very beginning of the
mmCIF project. This is replaced by CIFPARSE-OBJ
We are currently using and supporting CIFPARSE-OBJ which is C++/STL library providing:
[...]
CIFPARSE is an older C-library that provides essential parsing and accessors for mmCIF/PDBx data files.
We provide this but do not use or extend this library
I will take it upon myself to respond more specifically about CIFPARSE's and CIFPARSE-OBJ's features relative to the requirements list, based on their documentation.
CIFPARSE-OBJ is the RCSB's preferred tool in this space, so I address that first:
- The API will support both CIF 1.1 and CIF 2.0. (Degree and form of support for non-standard features and other syntax variants is yet to be determined.) CIFPARSE-OBJ appears not to support CIF 2.0 as of v7.1.0 (Sept, 2011).
- The API will support both (1) fast, small-footprint operation, and (2) a rich, expressive, and convenient public interface; these may be provided by separate branches of the API. CIFPARSE-OBJ appears to provide only (2).
- The API will support inputting and parsing CIF text from external sources. CIFPARSE-OBJ supports this.
- The API will support outputting logical CIF structure and content to external sinks as well-formed CIF text. CIFPARSE-OBJ supports this.
- Between source, if any, and sink, if any, and in memory where applicable, the API will support all CIF-compatible inquiries and modifications of logical CIF structure and data, including, but not necessarily limited to
- adding and removing data blocks CIFPARSE-OBJ supports adding blocks, but appears not to support removing them.
- adding save frames to and removing them from data blocks CIFPARSE-OBJ does not appear to support this.
- determining the presence of a data names and their contexts (whether looped; other names in the same loop) within a block or frame CIFPARSE-OBJ provides limited support for this, and only for data blocks.
- adding data names to a chosen context (for example, to a particular loop) within a block or frame CIFPARSE-OBJ supports this for data blocks only.
- removing data names and their associated data values from a block or frame CIFPARSE-OBJ supports this for data blocks only.
- querying the data value(s) associated with a specified data name within a block or frame CIFPARSE-OBJ supports this for data blocks only.
- replacing one or more data values associated with a specified data name within a block or frame CIFPARSE-OBJ supports this for data blocks only.
- querying the set(s) of related data values for a chosen context within a block or frame (for example, retrieving all the values belonging to a chosen packet of a chosen loop) CIFPARSE-OBJ supports this for data blocks only.
- replacing one or more of the data values belonging to one or more of the sets of related data values for a chosen context within a block or frame (for example, replacing selected values in a chosen packet of a chosen loop) CIFPARSE-OBJ supports this for data blocks only.
- adding one or more sets of related data values to a chosen context within a block or frame (for example, adding a packet to a chosen loop) CIFPARSE-OBJ supports this for data blocks only.
- removing one or more sets of related data values for a chosen context within a block or frame (for example, removing a selected packet from a chosen loop) CIFPARSE-OBJ supports this for data blocks only.
- The API will support optional validation. (More detailed requirements to be determined.) That validation is optional implies that to the greatest extent feasible, all the API's features will be available when validation is disabled. CIFPARSE-OBJ supports post-parse validation
- The core API will be targeted at C99, and it will avoid any incompatibility with C89. (This is more restrictive than targeting C89 or C99 alone would be.) CIFPARSE-OBJ is witten in C++, and its public API relies heavily on C++ features.
- The API will be accessible from other languages, including, at minimum, C++, Fortran 77, Fortran 95, Python, and Java. CIFPARSE-OBJ supports C++ natively. Bindings to other languages, including C, dot not presently appear to be available
- The API will everywhere support multiple CIF files simultaneously open for reading and / or writing (including updating), and where applicable, it will support multiple independent logical CIFs in-memory simultaneously. CIFPARSE-OBJ supports this.
- The API will provide for error recovery and informative error reporting, especially for parsing and validation operations.CIFPARSE-OBJ's support of this requirement is unclear from its documentation
My overall impression of CIFPARSE-OBJ is that it provides a slightly higher level, more application-specific API than our requirements are aimed at. It is also focused specifically on mmCIF, and some aspects of the API (data structure, names) reflect that focus.
As for the older, unsupported CIFPARSE:
- The API will support both CIF 1.1 and CIF 2.0. (Degree and form of support for non-standard features and other syntax variants is yet to be determined.) CIFPARSE supports only CIF 1.1
- The API will support both (1) fast, small-footprint operation, and (2) a rich, expressive, and convenient public interface; these may be provided by separate branches of the API. CIFPARSE supports only (2)
- The API will support inputting and parsing CIF text from external sources. CIFPARSE supports this
- The API will support outputting logical CIF structure and content to external sinks as well-formed CIF text. CIFPARSE supports this
- Between source, if any, and sink, if any, and in memory where applicable, the API will support all CIF-compatible inquiries and modifications of logical CIF structure and data, including, but not necessarily limited to
- adding and removing data blocks CIFPARSE supports this
- adding save frames to and removing them from data blocks CIFPARSE does not support this
- determining the presence of a data names and their contexts (whether looped; other names in the same loop) within a block or frame CIFPARSE provides limited support for this
- adding data names to a chosen context (for example, to a particular loop) within a block or frame CIFPARSE supports this for data blocks only
- removing data names and their associated data values from a block or frame CIFPARSE supports this for data blocks only
- querying the data value(s) associated with a specified data name within a block or frame CIFPARSE supports this for data blocks only
- replacing one or more data values associated with a specified data name within a block or frame CIFPARSE supports this (one value at a time) for data blocks only
- querying the set(s) of related data values for a chosen context within a block or frame (for example, retrieving all the values belonging to a chosen packet of a chosen loop) CIFPARSE supports this, requiring one function call for each value retrieved, for data blocks only
- replacing one or more of the data values belonging to one or more of the sets of related data values for a chosen context within a block or frame (for example, replacing selected values in a chosen packet of a chosen loop) CIFPARSE supports this, requiring one function call for each value retrieved, for data blocks only
- adding one or more sets of related data values to a chosen context within a block or frame (for example, adding a packet to a chosen loop) CIFPARSE supports this, requiring multiple function calls, for data blocks only
- removing one or more sets of related data values for a chosen context within a block or frame (for example, removing a selected packet from a chosen loop) CIFPARSE supports this for data blocks only
- The API will support optional validation. (More detailed requirements to be determined.) That validation is optional implies that to the greatest extent feasible, all the API's features will be available when validation is disabled. CIFPARSE supports this
- The core API will be targeted at C99, and it will avoid any incompatibility with C89. (This is more restrictive than targeting C89 or C99 alone would be.) CIFPARSE is written in C. Specific standards-compliance is unclear.
- The API will be accessible from other languages, including, at minimum, C++, Fortran 77, Fortran 95, Python, and Java. CIFPARSE documentation does not mention bindings to other languages.
- The API will everywhere support multiple CIF files simultaneously open for reading and / or writing (including updating), and where applicable, it will support multiple independent logical CIFs in-memory simultaneously. CIFPARSE appears to support this
- The API will provide for error recovery and informative error reporting, especially for parsing and validation operations. CIFPARSE's support for this is unclear from its documentation.
Like CIFPARSE-OBJ, CIFPARSE is focused specifically on mmCIF. That appears to manifest mainly in naming choices and (presumed) specificity to DDL2 for dictionaries.
[quote="jcbollinger"]The first I received are from John Westbrook, for several of the RCSB's offerings:
[quote]CIFLIB is a historic C++ parsing library that we developed at the very beginning of the
mmCIF project. This is replaced by CIFPARSE-OBJ[/quote]
[quote]We are currently using and supporting CIFPARSE-OBJ which is C++/STL library providing:
[...][/quote]
[quote]CIFPARSE is an older C-library that provides essential parsing and accessors for mmCIF/PDBx data files.
We provide this but do not use or extend this library[/quote]
I will take it upon myself to respond more specifically about CIFPARSE's and CIFPARSE-OBJ's features relative to the requirements list, based on their documentation.[/quote]
CIFPARSE-OBJ is the RCSB's preferred tool in this space, so I address that first:
[list][*]The API will support both CIF 1.1 and CIF 2.0. (Degree and form of support for non-standard features and other syntax variants is yet to be determined.) [i]CIFPARSE-OBJ appears [b]not to support CIF 2.0[/b] as of v7.1.0 (Sept, 2011).[/i]
[*]The API will support both (1) fast, small-footprint operation, and (2) a rich, expressive, and convenient public interface; these may be provided by separate branches of the API. [i]CIFPARSE-OBJ [/i]appears[i] to provide only (2).[/i]
[*]The API will support inputting and parsing CIF text from external sources. [i]CIFPARSE-OBJ supports this.[/i]
[*]The API will support outputting logical CIF structure and content to external sinks as well-formed CIF text. [i]CIFPARSE-OBJ supports this.[/i]
[*]Between source, if any, and sink, if any, and in memory where applicable, the API will support all CIF-compatible inquiries and modifications of logical CIF structure and data, including, but not necessarily limited to[list]
[*]adding and removing data blocks [i]CIFPARSE-OBJ supports adding blocks, but appears [b]not[/b] to support removing them.[/i]
[*]adding save frames to and removing them from data blocks [i]CIFPARSE-OBJ [b]does not[/b] appear to support this.[/i]
[*]determining the presence of a data names and their contexts (whether looped; other names in the same loop) within a block or frame [i]CIFPARSE-OBJ provides [b]limited[/b] support for this, and [b]only for data blocks[/b].[/i]
[*]adding data names to a chosen context (for example, to a particular loop) within a block or frame [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i]
[*]removing data names and their associated data values from a block or frame [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i]
[*]querying the data value(s) associated with a specified data name within a block or frame [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i]
[*]replacing one or more data values associated with a specified data name within a block or frame [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i]
[*]querying the set(s) of related data values for a chosen context within a block or frame (for example, retrieving all the values belonging to a chosen packet of a chosen loop) [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i]
[*]replacing one or more of the data values belonging to one or more of the sets of related data values for a chosen context within a block or frame (for example, replacing selected values in a chosen packet of a chosen loop) [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i]
[*]adding one or more sets of related data values to a chosen context within a block or frame (for example, adding a packet to a chosen loop) [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i]
[*]removing one or more sets of related data values for a chosen context within a block or frame (for example, removing a selected packet from a chosen loop) [i]CIFPARSE-OBJ supports this [b]for data blocks only[/b].[/i][/list]
[*]The API will support optional validation. (More detailed requirements to be determined.) That validation is optional implies that to the greatest extent feasible, all the API's features will be available when validation is disabled. [i]CIFPARSE-OBJ supports post-parse validation[/i]
[*]The core API will be targeted at C99, and it will avoid any incompatibility with C89. (This is more restrictive than targeting C89 or C99 alone would be.) [i]CIFPARSE-OBJ is witten in C++, and its public API relies heavily on C++ features.[/i]
[*]The API will be accessible from other languages, including, at minimum, C++, Fortran 77, Fortran 95, Python, and Java. [i]CIFPARSE-OBJ supports C++ natively. Bindings to other languages, including C, dot not presently appear to be available[/i]
[*]The API will everywhere support multiple CIF files simultaneously open for reading and / or writing (including updating), and where applicable, it will support multiple independent logical CIFs in-memory simultaneously. [i]CIFPARSE-OBJ supports this.[/i]
[*]The API will provide for error recovery and informative error reporting, especially for parsing and validation operations.[i]CIFPARSE-OBJ's support of this requirement is unclear from its documentation[/i][/list]
My overall impression of CIFPARSE-OBJ is that it provides a slightly higher level, more application-specific API than our requirements are aimed at. It is also focused specifically on mmCIF, and some aspects of the API (data structure, names) reflect that focus.
As for the older, unsupported CIFPARSE:
[list][*]The API will support both CIF 1.1 and CIF 2.0. (Degree and form of support for non-standard features and other syntax variants is yet to be determined.) [i]CIFPARSE supports [b]only CIF 1.1[/b][/i]
[*]The API will support both (1) fast, small-footprint operation, and (2) a rich, expressive, and convenient public interface; these may be provided by separate branches of the API. [i]CIFPARSE supports only (2)[/i]
[*]The API will support inputting and parsing CIF text from external sources. [i]CIFPARSE supports this[/i]
[*]The API will support outputting logical CIF structure and content to external sinks as well-formed CIF text. [i]CIFPARSE supports this[/i]
[*]Between source, if any, and sink, if any, and in memory where applicable, the API will support all CIF-compatible inquiries and modifications of logical CIF structure and data, including, but not necessarily limited to[list]
[*]adding and removing data blocks [i]CIFPARSE supports this[/i]
[*]adding save frames to and removing them from data blocks [i]CIFPARSE [b]does not[/b] support this[/i]
[*]determining the presence of a data names and their contexts (whether looped; other names in the same loop) within a block or frame [i]CIFPARSE provides [b]limited support[/b] for this[/i]
[*]adding data names to a chosen context (for example, to a particular loop) within a block or frame [i]CIFPARSE supports this [b]for data blocks only[/b][/i]
[*]removing data names and their associated data values from a block or frame [i]CIFPARSE supports this [b]for data blocks only[/b][/i]
[*]querying the data value(s) associated with a specified data name within a block or frame [i]CIFPARSE supports this [b]for data blocks only[/b][/i]
[*]replacing one or more data values associated with a specified data name within a block or frame [i]CIFPARSE supports this (one value at a time) [b]for data blocks only[/b][/i]
[*]querying the set(s) of related data values for a chosen context within a block or frame (for example, retrieving all the values belonging to a chosen packet of a chosen loop) [i]CIFPARSE supports this, requiring one function call for each value retrieved, [b]for data blocks only[/b][/i]
[*]replacing one or more of the data values belonging to one or more of the sets of related data values for a chosen context within a block or frame (for example, replacing selected values in a chosen packet of a chosen loop) [i]CIFPARSE supports this, requiring one function call for each value retrieved, [b]for data blocks only[/b][/i]
[*]adding one or more sets of related data values to a chosen context within a block or frame (for example, adding a packet to a chosen loop) [i]CIFPARSE supports this, requiring multiple function calls, [b]for data blocks only[/b][/i]
[*]removing one or more sets of related data values for a chosen context within a block or frame (for example, removing a selected packet from a chosen loop) [i]CIFPARSE supports this [b]for data blocks only[/b][/i][/list]
[*]The API will support optional validation. (More detailed requirements to be determined.) That validation is optional implies that to the greatest extent feasible, all the API's features will be available when validation is disabled. [i]CIFPARSE supports this[/i]
[*]The core API will be targeted at C99, and it will avoid any incompatibility with C89. (This is more restrictive than targeting C89 or C99 alone would be.) [i]CIFPARSE is written in C. Specific standards-compliance is unclear.[/i]
[*]The API will be accessible from other languages, including, at minimum, C++, Fortran 77, Fortran 95, Python, and Java. [i]CIFPARSE documentation does not mention bindings to other languages.[/i]
[*]The API will everywhere support multiple CIF files simultaneously open for reading and / or writing (including updating), and where applicable, it will support multiple independent logical CIFs in-memory simultaneously. [i]CIFPARSE appears to support this[/i]
[*]The API will provide for error recovery and informative error reporting, especially for parsing and validation operations. [i]CIFPARSE's support for this is unclear from its documentation.[/i][/list]
Like CIFPARSE-OBJ, CIFPARSE is focused specifically on mmCIF. That appears to manifest mainly in naming choices and (presumed) specificity to DDL2 for dictionaries.