У меня проблема, когда мне нужно добавить DTD, содержащий ENTITY, заключенные в скобки в определении, в существующий XML-документ.Есть ли какой-то эквивалент в Java для Nokogiri Ruby :: XML :: EntityDecl?
Например, работая из спецификации для MathML в DAISY на http://www.daisy.org/projects/mathml/mathml-in-daisy-spec.html, скажем, я даюсь это XML с помощью внешнего источника:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dtbook PUBLIC "-//NISO//DTD dtbook 2005-2//EN"
"http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd">
<dtbook xmlns="http://www.daisy.org/z3986/2005/dtbook/" xmlns:m="http://www.w3.org/1998/Math/MathML"
version="2005-3" xml:lang="eng">
<m:math xmlns:dtbook="http://www.daisy.org/z3986/2005/dtbook/"
id="math0001" dtbook:smilref="nativemathml.smil#math0001"
altimg="nativemathml0001.png"
alttext="sigma-summation UnderScript i equals zero OverScript infinity EndScripts x Subscript i">
<m:mrow>
<m:mstyle displaystyle='true'>
<m:munderover>
<m:mo>∑</m:mo>
<m:mrow>
<m:mi>i</m:mi><m:mo>=</m:mo><m:mn>0</m:mn>
</m:mrow>
<m:mi>∞</m:mi>
</m:munderover>
<m:mrow>
<m:msub>
<m:mi>x</m:mi>
<m:mi>i</m:mi>
</m:msub>
</m:mrow>
</m:mstyle>
</m:mrow>
</m:math>
</dtbook>
Я хочу, чтобы добавить определения Entity из спецификации, чтобы сделать эту книгу поддержка MathML, так что результат выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dtbook PUBLIC "-//NISO//DTD dtbook 2005-2//EN"
"http://www.daisy.org/z3986/2005/dtbook-2005-2.dtd"
[
<!ENTITY % MATHML.prefixed "INCLUDE" >
<!ENTITY % MATHML.prefix "m">
<!ENTITY % MATHML.Common.attrib
"xlink:href CDATA #IMPLIED
xlink:type CDATA #IMPLIED
class CDATA #IMPLIED
style CDATA #IMPLIED
id ID #IMPLIED
xref IDREF #IMPLIED
other CDATA #IMPLIED
xmlns:dtbook CDATA #FIXED 'http://www.daisy.org/z3986/2005/dtbook/'
dtbook:smilref CDATA #IMPLIED"
>
<!ENTITY % mathML2 PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd"
>
%mathML2;
<!ENTITY % externalFlow "| m:math">
<!ENTITY % externalNamespaces "xmlns:m CDATA #FIXED
'http://www.w3.org/1998/Math/MathML'">
]
>
<dtbook xmlns="http://www.daisy.org/z3986/2005/dtbook/" xmlns:m="http://www.w3.org/1998/Math/MathML"
version="2005-3" xml:lang="eng">
<m:math xmlns:dtbook="http://www.daisy.org/z3986/2005/dtbook/"
id="math0001" dtbook:smilref="nativemathml.smil#math0001"
altimg="nativemathml0001.png"
alttext="sigma-summation UnderScript i equals zero OverScript infinity EndScripts x Subscript i">
<m:mrow>
<m:mstyle displaystyle='true'>
<m:munderover>
<m:mo>∑</m:mo>
<m:mrow>
<m:mi>i</m:mi><m:mo>=</m:mo><m:mn>0</m:mn>
</m:mrow>
<m:mi>∞</m:mi>
</m:munderover>
<m:mrow>
<m:msub>
<m:mi>x</m:mi>
<m:mi>i</m:mi>
</m:msub>
</m:mrow>
</m:mstyle>
</m:mrow>
</m:math>
</dtbook>
в Ruby есть метод Nokogiri, который может быть использован для добавления этих определений Entity, что выглядит следующим образом: Nokogiri :: XML :: EntityDecl. N ew ("MATHML.prefixed", doc, MATHML_ENTITY_DECL_TYPE, nil, nil, "INCLUDE")
Есть ли эквивалент этого в Java? Мы используем JDOM для манипулирования нашими документами XML, но класс JDOM DocType не поддерживает эти определения сущностей.
Это интересно. Я загрузил образец файла с объединенным DTIS DAISY/MathML DTD, и в отладчике я мог видеть, что внутренняя сущность DocType пуста. Когда я распечатал документ с помощью XMLOutputter, аналогично тому, что у вас здесь, внутренние определения ENTITY были удалены. Мы используем JDOM 1, поэтому я задаюсь вопросом, есть ли проблема с этой версией или что-то мне не хватает в моем использовании. Я попробую установить innerSubset в качестве следующего эксперимента. –
Вы должны использовать JDOM 2.x ;-) Это alteady half-a-ten-old – rolfl
Поверьте мне, когда наш бюджет и время позволит, мы это сделаем. Но это не совсем для меня. Эта база кода составляет ~ 10 лет, и повсюду есть много ссылок на JDOM 1.1.3. –