@ Nullable public PSSchema getForcedPreprocessedSchema ( @ Nonnull final PSSchema aSchema ) throws SchematronPreprocessException { ValueEnforcer . notNull ( aSchema , "Schema" ) ; final PreprocessorLookup aLookup = new PreprocessorLookup ( aSchema ) ; final PreprocessorIDPool aIDPool = new PreprocessorIDPool ( ) ; final PSSchema ret = new PSSchema ( aSchema . getResource ( ) ) ; ret . setID ( aIDPool . getUniqueID ( aSchema . getID ( ) ) ) ; ret . setRich ( aSchema . getRichClone ( ) ) ; ret . setSchemaVersion ( aSchema . getSchemaVersion ( ) ) ; ret . setDefaultPhase ( aSchema . getDefaultPhase ( ) ) ; ret . setQueryBinding ( aSchema . getQueryBinding ( ) ) ; if ( m_bKeepTitles && aSchema . hasTitle ( ) ) ret . setTitle ( aSchema . getTitle ( ) . getClone ( ) ) ; if ( aSchema . hasAnyInclude ( ) ) throw new SchematronPreprocessException ( "Cannot preprocess <schema> with an <include>" ) ; for ( final PSNS aNS : aSchema . getAllNSs ( ) ) ret . addNS ( aNS . getClone ( ) ) ; // start ps are skipped for ( final PSLet aLet : aSchema . getAllLets ( ) ) ret . addLet ( aLet . getClone ( ) ) ; for ( final PSPhase aPhase : aSchema . getAllPhases ( ) ) ret . addPhase ( _getPreprocessedPhase ( aPhase , aIDPool ) ) ; for ( final PSPattern aPattern : aSchema . getAllPatterns ( ) ) { final PSPattern aMinifiedPattern = _getPreprocessedPattern ( aPattern , aLookup , aIDPool ) ; if ( aMinifiedPattern != null ) { // Pattern without rules? if ( aMinifiedPattern . getRuleCount ( ) > 0 || m_bKeepEmptyPatterns ) ret . addPattern ( aMinifiedPattern ) ; } } // Schema without patterns? if ( aSchema . getPatternCount ( ) == 0 && ! m_bKeepEmptySchema ) return null ; // end ps are skipped if ( m_bKeepDiagnostics && aSchema . hasDiagnostics ( ) ) ret . setDiagnostics ( _getPreprocessedDiagnostics ( aSchema . getDiagnostics ( ) ) ) ; ret . addForeignElements ( aSchema . getAllForeignElements ( ) ) ; ret . addForeignAttributes ( aSchema . getAllForeignAttributes ( ) ) ; return ret ; }
Convert the passed schema to a pre - processed schema independent if it is already minimal or not .