While reviewing PR 356:
Since a MatchingRule / Syntax / etc are associated with a single Schema instance I don't think it is correct for client code to pass in the schema to methods like valueIsAcceptable(), since it opens up the possibility for client code to pass in a different Schema instance.
Unfortunately, the method Indexer.createKeys() violates this principle by requiring client code to pass in the Schema as a parameter. The MatchingRuleImpl should create the Indexer with the Schema. In other words the method MatchingRuleImpl.createIndexers() should have a Schema parameter, rather than it being passed in with each call to Indexer.createKeys().