XSLT предназначен для обработки деревьев узлов XML. Хотя существуют сериализации RDF, которые являются «деревом» узлов XML (RDF/XML и RDF/XML-Abbrev), базовая модель данных RDF представляет собой график.
Если ваш результирующий график RDF также не является деревом, вам придется делать грязные вещи в своем XSLT, чтобы пересечь ссылки, а производительность/ремонтопригодность/здравомыслие могут пострадать. Просто помните об этом, если вы измените формат OWL, а затем хотите преобразовать обратно в XML без RDF.
Простой (дерево) пример выглядит следующим образом:
## Foo has two types
@prefix e: <uri://example#>.
e:Foo a e:Bar.
e:Foo a e:Baz. # Second statement about e:Foo
Для преобразования обратно в не-RDF XML, если вы используете самые основные RDF/форму XML вы получите список операторов RDF непосредственно под верхний уровень rdf:RDF
элемент. Преобразование их может включать повторный просмотр всего списка операторов.
<rdf:RDF xmlns:e="uri://example#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="uri://example#Foo">
<rdf:type rdf:resource="uri://example#Baz"/>
</rdf:Description>
<rdf:Description rdf:about="uri://example#Foo">
<rdf:type rdf:resource="uri://example#Bar"/>
</rdf:Description>
</rdf:RDF>
Вы можете найти формат RDF/XML-Abbrev легче читать, но это не так легко обрабатывать с помощью XSLT, так как модель данных RDF является неупорядоченной и один граф может иметь много эквивалента (но несовместимо с вашей XSLT) Формы XML. Приведенный выше пример может сериализовать, как одно из следующих действий:
<!-- Bar is the containing element -->
<rdf:RDF xmlns:e="uri://example#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<e:Bar rdf:about="uri://example#Foo">
<rdf:type rdf:resource="uri://example#Baz"/>
</e:Bar>
</rdf:RDF>
<!-- Baz is the containing element -->
<rdf:RDF xmlns:e="uri://example#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<e:Baz rdf:about="uri://example#Foo">
<rdf:type rdf:resource="uri://example#Bar"/>
</e:Bar>
</rdf:RDF>
предложение Пита Kirkham о создании канонической формы для серийного номера будет помощником вам в письменном виде XSLTs. В большинстве случаев, учитывая тот же ввод, библиотека RDF будет каждый раз сериализовывать операторы в один и тот же формат, но я бы не стал зависеть от этого в конечном счете, поскольку данные в графике RDF неупорядочены.