For accessing data from databases stores, what I did was use Protégé as both an ontology and database store. I saved the ontology as an access database using the option available in Protégé. This creates a table with different keys for children, attributes, value etc, so preserves the OWL structure. I created code in Vanguard that follows this structure and so creates a Vanguard tree from a Protégé tree using the Access database. The code for this is accessed by a 'Grow Tree' button that reads the Protégé database recursively. This is the code for the SQL recursive calls. To create a Vanguard Studio to Protégé and Access link what is needed is the Protégé file(s) saved as databases tables and the ODBC connection to be set to the database. It's best to start simple and change and reuse this techniche as necessary fo each application. explain over email. There needs to be an ODBC Datasource name set up e.g called Protege with and a with path a path of c:\Protege\Protege.mdb for example in ODBC Data Source Administrator from Control Panel Data Sources (ODBC). So then the Vanguard code can find the database. The line DatabaseDefinition="\"DBQ=C:\\\\Protege\\\\Protege.mdb;DefaultDir=C:\\\\Protege;Driver={Driver do Microsoft Access (*.mdb)};DriverId=281;FIL=MS Access;FILEDSN=C:\\\\Program Files\\\\Common Files\\\\ODBC\\\\Data Sources\\\\Protege.dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;\""; is important as this is where I began, what I did was to use the Insert - SQL Query option in Vanguard Studio manually but then copied this in the DatabaseDefinition variable (using \ to escape " characters and \\\\ needed to represent \\). Then I used code such as RunQueryName="RunQueryNameResultString := sqlquery("+DatabaseDefinition+","+SelectQueryName+")"; eval(RunQueryName); nodename=RunQueryNameResultString[0][0]; getName(frame,Table):={ var SelectQueryName; var RunQueryName; var RunQueryNameResultString; var nodename; SelectQueryName="\"Select short_value, value_type From "; SelectQueryName+=Table; SelectQueryName+=" where frame = "; SelectQueryName+=frame; SelectQueryName+=" AND slot = "; SelectQueryName+=NameParameter; SelectQueryName+=";\""; RunQueryName="RunQueryNameResultString := sqlquery("+DatabaseDefinition+","+SelectQueryName+")"; eval(RunQueryName); nodename=RunQueryNameResultString[0][0]; return nodename; }