NAME
xfn_compound_names - XFN compound syntax: an overview of XFN
model for compound name parsing
DESCRIPTION
Each naming system in an XFN federation has a naming conven-
tion. XFN defines a standard model of expressing compound
name syntax that covers a large number of specific name syn-
taxes and is expressed in terms of syntax properties of the
naming convention.
The model uses the attributes in the following table to
describe properties of the syntax. Unless otherwise quali-
fied, these syntax attributes have attribute identifiers
that use the FN_ID_STRING format. A context that supports
the XFN standard syntax model has an attribute set contain-
ing the fn_syntax_type (with identifier format
FN_ID_STRING) attribute with the value "standard" (ASCII
attribute syntax).
These are the interfaces:
#include <xfn/xfn.h>
FN_attrset_t *fn_ctx_get_syntax_attrs(FN_ctx_t *ctx,
const FN_composite_name_t *name,
FN_status_t *status);
FN_compound_name_t *fn_compound_name_from_syntax_attrs( const FN_attrset_t *aset,
const FN_string_t *name, FN_status_t *status);
fn_syntax_type
Its value is the ASCII string "standard" if the con-
text supports the XFN standard syntax model. Its value
is an implementation-specific value if another syntax
model is supported.
fn_std_syntax_direction
Its value is an ASCII string, one of "left_to_right",
"right_to_left", or "flat". This determines whether
the order of components in a compound name string goes
from left to right, right to left, or whether the
namespace is flat (in other words, not hierarchical;
em all names are atomic).
fn_std_syntax_separator
Its value is the separator string for this name syn-
tax. This attribute is required unless the
fn_std_syntax_direction is "flat".
fn_std_syntax_escape
If present, its value is the escape string for this
name syntax.
fn_std_syntax_case_insensitive
If this attribute is present, it indicates that names
that differ only in case are considered identical. If
this attribute is absent, it indicates that case is
significant. If a value is present, it is ignored.
fn_std_syntax_begin_quote
If present, its value is the begin-quote string for
this syntax. There can be multiple values for this
attribute.
fn_std_syntax_end_quote
If present, its value is the end-quote string for this
syntax. There can be multiple values for this attri-
bute.
fn_std_syntax_ava_separator
If present, its value is the attribute value assertion
separator string for this syntax.
fn_std_syntax_typeval_separator
If present, its value is the attribute type-value
separator string for this syntax.
fn_std_syntax_code_sets
If present, its value identifies the code sets of the
string representation for this syntax. Its value con-
sists of a structure containing an array of code sets
supported by the context; the first member of the
array is the preferred code set of the context. The
values for the code sets are defined in the X/Open
code set registry. If this attribute is not present,
or if the value is empty, the default code set is
ISO 646 (same encoding as ASCII).
fn_std_syntax_locale_info
If present, identifies locale information, such as
character set information, of the string representa-
tion for this syntax. The interpretation of its value
is implementation-dependent.
The XFN standard syntax attributes are interpreted according
to the following rules:
1. In a string without quotes or escapes, any instance of
the separator string delimits two atomic names.
2. A separator, quotation or escape string is escaped if
preceded immediately (on the left) by the escape string.
3. A non-escaped begin-quote which precedes a component must
be matched by a non-escaped end-quote at the end of the
component. Quotes embedded in non-quoted names are
treated as simple characters and do not need to be
matched. An unmatched quotation fails with the status
code FN_E_ILLEGAL_NAME.
4. If there are multiple values for begin-quote and end-
quote, a specific begin-quote value must be matched with
its corresponding end-quote value.
5. When the separator appears between a (non-escaped) begin
quote and the end quote, it is ignored.
6. When the separator is escaped, it is ignored. An escaped
begin-quote or end-quote string is not treated as a quo-
tation mark. An escaped escape string is not treated as
an escape string.
7. A non-escaped escape string appearing within quotes is
interpreted as an escape string. This can be used to
embed an end-quote within a quoted string.
After constructing a compound name from a string, the
resulting component atoms have one level of escape strings
and quotations interpreted and consumed.
fn_ctx_get_syntax_attrs() is used to obtain the syntax
attributes associated with a context.
fn_compound_name_from_syntax() is used to construct a com-
pound name object using the string form of the name and the
syntax attributes of the name.
ERRORS
FN_E_ILLEGAL_NAME
The name supplied to the operation was not a well-
formed component according to the name syntax of the
context.
FN_E_INCOMPATIBLE_CODE_SETS
Code set mismatches that occur during the construction
of the compound name's string form are resolved in an
implementation-dependent way. When an implementation
discovers that a compound name has components with
incompatible code sets, it returns this error code.
FN_E_INVALID_SYNTAX_ATTRS
The syntax attributes supplied are invalid or insuffi-
cient to fully specify the syntax.
FN_E_SYNTAX_NOT_SUPPORTED
The syntax specified is not supported.
USAGE
Most applications treat names as opaque data. Hence, the
majority of clients of the XFN interface will not need to
parse compound names from specific naming systems. Some
applications, however, such as browsers, need such capabili-
ties. These applications would use fn_ctx_get_syntax_attrs()
to obtain the syntax-related attributes of a context and, if
the context uses the XFN standard syntax model, it would
examine these attributes to determine the name syntax of the
context.
SEE ALSO
FN_attribute_t(3XFN), FN_attrset_t(3XFN),
FN_compound_name_t(3XFN), FN_identifier_t(3XFN),
FN_string_t(3XFN) fn_ctx_get_syntax_attrs (3XFN), xfn(3XFN)
NOTES
The implementation of XFN in this Solaris release is based
on the X/Open preliminary specification. It is likely that
there will be minor changes to these interfaces to reflect
changes in the final version of this specification. The next
minor release of Solaris will offer binary compatibility for
applications developed using the current interfaces. As the
interfaces evolve toward standardization, it is possible
that future releases of Solaris will require minor source
code changes to applications that have been developed
against the preliminary specification.
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |