// Copied from org.eclipse.ocl.examples.test.xtext.PivotDocumentationExamples.java

		OCL ocl = OCL.newInstance();
		OCLHelper helper = ocl.createOCLHelper(EXTLibraryPackage.Literals.LIBRARY);
		ExpressionInOCL invariant = helper.createInvariant(
		    "books->forAll(b1, b2 | b1 <> b2 implies b1.title <> b2.title)");
		ExpressionInOCL query = helper.createQuery(
		    "books->collect(b : Book | b.category)->asSet()");

		// create a Query to evaluate our query expression
		Query queryEval = ocl.createQuery(query);

		// create another to check our constraint
		Query constraintEval = ocl.createQuery(invariant);

		List<Library> libraries = getLibraries();  // hypothetical source of libraries

		// only print the set of book categories for valid libraries
		for (Library next : libraries) {
		    if (constraintEval.check(next)) {
		        // the OCL result type of our query expression is Set(BookCategory)
		        @SuppressWarnings("unchecked")
		        Set<BookCategory> categories = (Set<BookCategory>) queryEval.evaluate(next);
		        
		        debugPrintf("%s: %s%n\n", next.getName(), categories);
		    }
		}
