The XML DDR Query tool for FileMaker Pro® Developers

XML DDR Query Tool v1.4.06 rev 10

To begin...

Generate an XML DDR and load it into the ddr folder

After loading a DDR, use the Summary link to begin analysis. The FileMaker Pro Advanced DDR Query tool allows you to explore the DDR by browsing. Alternatively, the search tool can be used to locate objects by name or by content. Both methods are fast and you'll find that each has its own benefits.

The XML DDR Query tool is Focused on Productivity

This tool allows you to explore the XML DDR produced by FileMaker Pro Advanced. Its primary purpose is in day-to-day work and it is focused on productivity. Use DDR Query to find out where objects are and which are objects are calling them. This tool does that extremely well. It generates drill-down, cross-referenced display of layout objects.

If you want a good general purpose tool for XML analysis that provide the ability to perform advanced XQuery consider BaseX. It provides XPath/XQuery search, text search, an array of visualisations, and it is free.

What does the XML DDR Query tool do?

The DDR Query tool will let you answer questions, locate errors or determine object dependencies within your databases!

The DDR Query tool allows you to delve into your FileMaker databases in a way that isn't possible using FileMaker's built in functions. It's primary distinguishing feature is that it is reasonably fast. Other excellent tools already exist. They are great tools and they aim to be complete but they must process the entire DDR before you can begin. I found that the initial processing time prevented me from doing ad-hoc work which would really benefit from DDR analysis. The XML DDR Query tool will have your questions answered in less than the time it takes to load a DDR into other tools.

The Catch-22 for a developer/manager of any system is that change becomes increasingly difficult as the system grows. Any change to any object is more likely to affect something else. Change has consequences! However, it takes a long time to load a large DDR into other tools. So, to speak personally, the bigger the system and the greater the need for good change management, the less suitable those tools were, in the workflow. They just take up too much time!

I wanted to be able to handle large systems competently. I wanted to be able to dump the DDR to ask a single question without waiting an hour for it to be processed. I wanted quick answers. The XML DDR Query tool is a response to that need. It answers most of my questions, most of the time, in no time at all. It could help you too.

How is the XML DDR Query tool used?

Load your XML DDR

You load an XML DDR by copying it into the ddr folder. You may then begin to explore it —immediately— using text searches or by browsing through the summary pages and the object catalogs.

Search and Explore

Search: the search tool provides quick access to known objects. Use it when you already know something about the object that you want to locate.

Explore: the DDR Query tool provides two powerful ways to explore the system.

The first builds cross-links between objects allowing you to browse freely through the system. Each page provides a comprehensive report about the objects. It is detailed and informative. This is the easiest way to browse and provides the answers you need the most of the time. Especially for internal objects. However, the exact structure of layouts is too complex to fit into a template. At that point, the program offers "xpath" browsing.

The xpath browse method allows you to traverse the XML tree. There are no cross-links and the information reported is limited to the element in view. The advantage of this method is that it describes every attribute and names every child, without exception. Start xpath browsing from the File Summary page or from any links labelled XML or XPath.

Grand Summary

The grand summary presents the overview of all the files present in the DDR summary file. Click on any file name to see more detail for that file, including an summary of errors.

Database Summary

The database summary displays top level database information and generates an error summary. In DDRs that handle one database, the top of the database detail page will appear to be much the same as the summary page. The difference is that the database summary provides extra details. You will see the summary of object reference errors and the File Options displayed. The summary of object reference errors is only displayed on the database detail page.

The reason that the database detail page loads slowly is because the object reference analysis is performed against the objects in every database. Be patient, a large solution may take up to 20 seconds to analyse. If your DDR is particularly large you may need to increase the execution time-out value for PHP. The default is 30 seconds. Particularly large databases may exceed memory because I've used the SimpleXML library and it loads the entire file.

Branching Out: Catalogs and Object References

Element Catalogs

Each of the main elements within the database is represented within the DDR by a catalog. The grand summary and the file summary provide a count of the number of elements in each catalog. Use the links to explore the catalog contents.


The analysis provides links between objects that reference or depend upon the other. In some places the link is called "Show Dependencies", in table column headings I chose the word "uses" as a short word with similar meaning. The dependency function searches the DDR for items which use the object. The objects paths are displayed in a hierarchical view for ease of recognition.

Example Usage: You need to know if you can safely change a script. Will other elements will be affected if you modify its behaviour?

Find out quickly. Locate the script using search by name or by browsing through grand summary -> scripts. Sort by script name. Select the "uses" link and you have a full description of that object’s dependencies.


One of the most common forms of damage to a solution is caused by deleting an object. When this occurs, the elements which referenced that object will display "missing", "unknown" or have empty attribute values. These objects are identified by the error report on the file summary page.

Follow the links to obtain list of the errors, in a hierarchical view of the object tree. The object tree leads you directly to the affected object. The path/tree of objects on layouts can be large. Walk your way through the tree, identifying each object as you go, until you arrive at the object you want to investigate.

If a file can’t be located when the DDR is being produced there may be very large numbers of missing objects. Try to locate the missing file and run the DDR again. If you use an old copy of the file for this purpose you'll reduce the sheer volume of missing object messages. If you do that you will have to be aware that you are working with an incomplete file object.

Locating Objects on the Layout

The search tool provides search for "layouts containing ...". These searches don't need any text input. Select the type of object to look for and press the search button. Go to the full detail view from the list of layouts returned, then select the object type from the list on the left hand side.

An object's position on the layout is described by bounds. The bounds of each object is given relative to the object containing it in the object tree. If you are doing pixel pushing in the layout design, the relative bounds may be exactly what you need. If you are trying to locate an object on an unfamiliar layout, you'll want to know where to find it.

I generate the top/left values as absolute references from {0,0} at the top left of the screen so you can go straight to that point. But remember that objects may be on a tab panel, a sliding panel or a pop-over button which has to be revealed before you'll see the object you are interested in.

It helps to know whether you're looking for something big or small, so I calculate and display the height and width of the object too.

Table Sorting

Sorting information makes it meaningful and allows you to synthesise information more easily. The tables and lists are generated directly from the DDR without changing their sequence. That's important information because it describes the state of the database. However, it doesn’t have to stay that way. The sort order of the data in most of the tables can be changed by clicking on the header.

Example 1: Need to know which users are assigned to a privilege set?
Go to Summary->Accounts and click the header. Click once to sort A-Z, click a second time to reverse the sort. There they are - sorted together!

Example 2: Need to take stock of your system?
Go to Summary->Base Tables. Double-click the records, fields and tables columns to see where the greatest resource use is occurring.

Many of the tables use the first column to display a sequence number. Sorting on that column is effectively the same as "unsort."

Bugs / Complaints?

You can contact me via the web site

Need Help?

You can contact me via the web site