⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2533.txt

📁 著名的RFC文档,其中有一些文档是已经翻译成中文的的.
💻 TXT
📖 第 1 页 / 共 5 页
字号:
      NOTE: as presented, the feature matching process evaluates (and      stores) all conjunctions of the disjunctive normal form before      combining feature tag comparisons and eliminating unsatisfiable      conjunctions.  For low-memory systems an alternative approach is      possible, in which each normal form conjunction is enumerated and      evaluated in turn, with only those that are satisfiable being      retained for further use.5.2 Formulating the goal predicate   A formal statement of the problem we need to solve can be given as:   given two feature set predicates, '(P x)' and '(Q x)', where 'x' is   some feature collection, we wish to establish the truth or otherwise   of the proposition:      EXISTS(x) : (P x) AND (Q x)   i.e. does there exist a feature collection 'x' that satisfies both   predicates, 'P' and 'Q'?   Then, if feature sets to be matched are described by predicates 'P'   and 'Q', the problem is to determine if there is any feature set   satisfying the goal predicate:      (& P Q)   i.e. to determine whether the set thus described is non-empty.5.3 Replace set expressions   Replace all "set" instances in the goal predicate with equivalent   "simple" forms:      T = [ E1, E2, ... En ]  -->  (| (T=[E1]) (T=[E2]) ... (T=[En]) )      (T=[R1..R2])            -->  (& (T>=R1) (T<=R2) )      (T=[E])                 -->  (T=E)5.4 Move logical negations inwards   The goal of this step is to move all logical negations so that they   are applied directly to feature comparisons.  During the following   step, these logical negations are replaced by alternative comparison   operators.   This is achieved by repeated application of the following   transformation rules:Klyne                       Standards Track                    [Page 19]RFC 2533       A Syntax for Describing Media Feature Sets     March 1999      (! (& A1 A2 ... Am ) )  -->  (| (! A1 ) (! A2 ) ... (! Am ) )      (! (| A1 A2 ... Am ) )  -->  (& (! A1 ) (! A2 ) ... (! Am ) )      (! (! A ) )             -->  A   The first two rules are extended forms of De Morgan's law, and the   third is elimination of double negatives.5.5 Replace comparisons and logical negations   The predicates are derived from the syntax described previously, and   contain primitive value testing functions '=', '<=', '>='.  The   primitive tests have a number of well known properties that are   exploited to reach a useful conclusion; e.g.      (A = B)  & (B = C)  => (A = C)      (A <= B) & (B <= C) => (A <= C)   These rules form a core body of logic statements against which the   goal predicate can be evaluated.  The form in which these statements   are expressed is important to realizing an effective predicate   matching algorithm (i.e. one that doesn't loop or fail to find a   valid result).  The first step in formulating these rules is to   simplify the framework of primitive predicates.   The primitive predicates from which feature set definitions are   constructed are '=', '<=' and '>='.  Observe that, given any pair of   feature values, the relationship between them must be exactly one of   the following:      (LT a b): 'a' is less than 'b'.      (EQ a b): 'a' is equal to 'b'.      (GT a b): 'a' is greater than 'b'.      (NE a b): 'a' is not equal to 'b', and is not less than                or greater than 'b'.   (The final case arises when two values are compared for which no   ordering relationship is defined, and the values are not equal; e.g.   two unequal string values.)   These four cases can be captured by a pair of primitive predicates:      (LE a b): 'a' is less than or equal to 'b'.      (GE a b): 'a' is greater than or equal to 'b'.   The four cases described above are prepresented by the following   combinations of primitive predicate values:Klyne                       Standards Track                    [Page 20]RFC 2533       A Syntax for Describing Media Feature Sets     March 1999      (LE a b)   (GE a b) | relationship      ----------------------------------         TRUE      FALSE  | (LT a b)         TRUE       TRUE  | (EQ a b)        FALSE       TRUE  | (GT a b)        FALSE      FALSE  | (NE a b)   Thus, the original 3 primitive tests can be translated to   combinations of just LE and GE, reducing the number of additional   relationships that must be subsequently captured:      (a <= b)  -->  (LE a b)      (a >= b)  -->  (GE a b)      (a = b)   -->  (& (LE a b) (GE a b) )   Further, logical negations of the original 3 primitive tests can be   eliminated by the introduction of 'not-greater' and 'not-less'   primitives      (NG a b)  ==  (! (GE a b) )      (NL a b)  ==  (! (LE a b) )   using the following transformation rules:      (! (a = b) )   -->  (| (NL a b) (NG a b) )      (! (a <= b) )  -->  (NL a b)      (! (a >= b) )  -->  (NG a b)   Thus, we have rules to transform all comparisons and logical   negations into combinations of just 4 relational operators.5.6 Conversion to canonical form      NOTE: Logical negations have been eliminated in the previous step.   Expand bracketed disjunctions, and flatten bracketed conjunctions and   disjunctions:      (& (| A1 A2 ... Am ) B1 B2 ... Bn )        -->  (| (& A1 B1 B2 ... Bn )                (& A2 B1 B2 ... Bn )                 :                (& Am B1 B2 ... Bn ) )      (& (& A1 A2 ... Am ) B1 B2 ... Bn )        -->  (& A1 A2 ... Am B1 B2 ... Bn )      (| (| A1 A2 ... Am ) B1 B2 ... Bn )        -->  (| A1 A2 ... Am B1 B2 ... Bn )Klyne                       Standards Track                    [Page 21]RFC 2533       A Syntax for Describing Media Feature Sets     March 1999   The result is in "disjunctive normal form", a disjunction of   conjunctions:      (| (& S11 S12 ... )         (& S21 S22 ... )          :         (& Sm1 Sm2 ... Smn ) )   where the "Sij" elements are simple feature comparison forms   constructed during the step at section 5.5.  Each term within the   top-level "(|...)" construct represents a single possible feature set   that satisfies the goal.  Note that the order of entries within the   top-level '(|...)', and within each '(&...)', is immaterial.   From here on, each conjunction '(&...)' is processed separately.   Only one of these needs to be satisfiable for the original goal to be   satisfiable.   (A textbook conversion to clausal form [5,11] uses slightly different   rules to yield a "conjunctive normal form".)5.7 Grouping of feature predicates      NOTE:  Remember that from here on, each conjunction is treated      separately.   Each simple feature predicate contains a "left-hand" feature tag and   a "right-hand" feature value with which it is compared.   To arrange these into independent groups, simple predicates are   grouped according to their left hand feature tag ('f').5.8 Merge single-feature constraints   Within each group, apply the predicate simplification rules given   below to eliminate redundant single-feature constraints.  All   single-feature predicates are reduced to an equality or range   constraint on that feature, possibly combined with a number of non-   equality statements.   If the constraints on any feature are found to be contradictory (i.e.   resolved to FALSE according to the applied rules), the containing   conjunction is not satisfiable and may be discarded.  Otherwise, the   resulting description is a minimal form of that particular   conjunction of the feature set definition.Klyne                       Standards Track                    [Page 22]RFC 2533       A Syntax for Describing Media Feature Sets     March 19995.8.1 Rules for simplifying ordered values   These rules are applicable where there is an ordering relationship   between the given values 'a' and 'b':      (LE f a)  (LE f b)      -->  (LE f a),   a<=b                                   (LE f b),   otherwise      (LE f a)  (GE f b)      -->  FALSE,      a<b      (LE f a)  (NL f b)      -->  FALSE,      a<=b      (LE f a)  (NG f b)      -->  (LE f a),   a<b                                   (NG f b),   otherwise      (GE f a)  (GE f b)      -->  (GE f a),   a>=b                                   (GE f b),   otherwise      (GE f a)  (NL f b)      -->  (GE f a)    a>b                                   (NL f b),   otherwise      (GE f a)  (NG f b)      -->  FALSE,      a>=b      (NL f a)  (NL f b)      -->  (NL f a),   a>=b                                   (NL f b),   otherwise      (NL f a)  (NG f b)      -->  FALSE,      a>=b      (NG f a)  (NG f b)      -->  (NG f a),   a<=b                                   (NG f b),   otherwise5.8.2 Rules for simplifying unordered values   These rules are applicable where there is no ordering relationship   applicable to the given values 'a' and 'b':      (LE f a)  (LE f b)      -->  (LE f a),   a=b                                   FALSE,      otherwise      (LE f a)  (GE f b)      -->  FALSE,      a!=b      (LE f a)  (NL f b)      -->  (LE f a)    a!=b                                   FALSE,      otherwise      (LE f a)  (NG f b)      -->  (LE f a),   a!=b                                   FALSE,      otherwise      (GE f a)  (GE f b)      -->  (GE f a),   a=b                                   FALSE,      otherwise      (GE f a)  (NL f b)      -->  (GE f a)    a!=b                                   FALSE,      otherwise      (GE f a)  (NG f b)      -->  (GE f a)    a!=b                                   FALSE,      otherwiseKlyne                       Standards Track                    [Page 23]RFC 2533       A Syntax for Describing Media Feature Sets     March 1999      (NL f a)  (NL f b)      -->  (NL f a),   a=b      (NL f a)  (NG f b)      -->  (NL f a),   a=b      (NG f a)  (NG f b)      -->  (NG f a),   a=b6. Other features and issues6.1 Named and auxiliary predicates   Named and auxiliary predicates can serve two purposes:      (a)  making complex predicates easier to write and understand, and      (b)  providing a possible basis for naming and registering feature           sets.6.1.1 Defining a named predicate   A named predicate definition has the following form:      named-pred =  "(" fname *pname ")" ":-" filter      fname      =  ftag        ; Feature predicate name      pname      =  token       ; Formal parameter name   'fname' is the name of the predicate.   'pname' is the name of a formal parameter which may appear in the   predicate body, and which is replaced by some supplied value when the   predicate is invoked.   'filter' is the predicate body. It may contain references to the   formal parameters, and may also contain references to feature tags   and other values defined in the environment in which the predicate is   invoked.  References to formal parameters may appear anywhere where a   reference to a feature tag ('ftag') is permitted by the syntax for '   filter'.   The only specific mechanism defined by this memo for introducing a   named predicate into a feature set definition is the "auxiliary   predicate" described later.  Specific negotiating protocols or other   specifications may define other mechanisms.      NOTE:  There has been some suggestion of creating a registry for      feature sets as well as individual feature values.  Such a      registry might be used to introduce named predicates corresponding      to these feature sets into the environment of a capability      assertion.  Further discussion of this idea is beyond the scope of      this memo.Klyne                       Standards Track                    [Page 24]RFC 2533       A Syntax for Describing Media Feature Sets     March 19996.1.2 Invoking named predicates

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -