When working with Alfresco, developers often query content using either CMIS (Content Management Interoperability Services) or FTS (Full Text Search). But there's a small gotcha that often trips people up: special characters like hyphens (`-`) behave differently depending on the query language.
If you've ever seen something like _x002d_
in a query and wondered what it means (or why your CMIS query fails when FTS works perfectly) this post is for you.
-
becomes _x002d_
)-
works as-isLet’s say you’ve created a custom aspect called test:test-1
. Here’s a sample content model snippet
<aspect name="test:test-1">
<properties>
<property name="test:flag">
<type>d:boolean</type>
</property>
</properties>
</aspect>
This aspect might be used in your repository to tag documents with a boolean test:flag
FTS is flexible with special characters. You can run a query like this with no issues
ASPECT:"test:test-1"
Or combine it with other conditions
ASPECT:"test:test-1" AND test:flag:true
It Just Works™.
However, try something similar with CMIS and you'll get errors if you don’t escape the hyphen:
❌ Invalid CMIS query
SELECT * FROM cmis:document WHERE test:test-1 IS NOT NULL
✅ Correct CMIS query
SELECT * FROM cmis:document WHERE test:test_x002d_1 IS NOT NULL
Likewise, for properties
SELECT * FROM cmis:document WHERE test:flag = true AND test:test_x002d_1 IS NOT NULL
Here, -
is escaped as _x002d_
, which is the Unicode escape sequence for the hyphen
If you’re dynamically generating CMIS queries, make sure to escape special characters in qualified names (QName). This is particularly important for custom types and aspects with hyphens or other reserved characters.
FTS is more forgiving, but if you're using CMIS (especially in integrations or reporting tools), escaping is not optional.
Still confused? Drop a comment or raise an issue!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.