XML - Ссылка на другие XML-файлы

FUNCTION GETUNIQUEID_2 RETURN VARCHAR2
AS
v_curr_id NUMBER;
v_inc NUMBER;
v_next_val NUMBER;
pragma autonomous_transaction;
begin 
CREATE SEQUENCE sequnce
START WITH YYMMDD0000000001
INCREMENT BY 1
NOCACHE
select sequence.nextval into v_curr_id from dual;
if(substr(v_curr_id,0,6)= to_char(sysdate,'yymmdd')) then
v_next_val := to_number(to_char(SYSDATE+1, 'yymmdd') || '0000000000');
v_inc := v_next_val - v_curr_id;
execute immediate ' alter sequence sequence increment by ' || v_inc ;
select sequence.nextval into v_curr_id from dual;
execute immediate ' alter sequence sequence increment by 1';
else
dbms_output.put_line('exception : file not found');
end if;
RETURN 'ID'||v_curr_id;
END;
18
задан 30 June 2009 в 17:44
поделиться

5 ответов

Есть несколько "стандартных" способов делать то, что вы хотите, а именно XLink и XInclude (в зависимости от того, что вы хотите сделать), хотя вам нужно сделать убедитесь, что у вас есть процессор, который может использовать внешние ссылки. В большинстве XML-библиотек эта функция не включена.

Тогда вы сможете сделать что-нибудь вроде :

<group>
  <personlink xlink:href="person.xml" xlink:show="embed" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</group>

Однако вам, вероятно, это действительно не нужно. Если вам требуется подмножество информации из большого документа, вы можете легко использовать XSLT или XQuery, чтобы вырезать нужные части. Вы можете использовать этот подход вместе с синтаксическим анализом SAX, который основан на событиях и не хранит весь документ в памяти, чтобы масштабировать ваше приложение для обработки довольно больших документов.

Даже при использовании DOM я этого не делал.

5
ответ дан 30 November 2019 в 09:07
поделиться

Гм, для файлов xml нет ограничений по размеру. не стоит беспокоиться об очень больших размерах. Но помните; Xml - это формат обмена данными, а не формат базы данных. Вы используете xml для обмена данными между различными приложениями / службами.

0
ответ дан 30 November 2019 в 09:07
поделиться

Здесь - спецификация XML для DTD, в которой вы можете объявлять ссылки на сущности.

Простой документ, например:

<!DOCTYPE test [
    <!ENTITY ref SYSTEM "file:///C:/test.txt" >
]>

<test>
    &ref;
</test>

И файл: /// C: / test .txt:

<blah>
Fee
Fi
Fo
Fum
</blah>

расширит исходный документ до:

<test>
    <blah>
    Fee
    Fi
    Fo
    Fum
    </blah>
</test>

Я считаю, что непроверяющие XML-синтаксические анализаторы не обязаны расширять ссылки, поэтому будьте осторожны.

Кроме того, не забудьте указать standalone = "no" в XMLDecl. (Отсутствие атрибута standalone предполагает, что он равен "нет", но все же лучше поместить его туда ...)

1
ответ дан 30 November 2019 в 09:07
поделиться

Не существует стандарта (будет работать во всех парсерах) для импорта таких узлов. Но вы можете сэкономить место, изменив некоторые из ваших элементов на атрибуты

<group>
  <person name='John' age='18' hair='Brown' eyes='Blue' />
  <person name='Kim' age='21' hair='Blue' eyes='Green' />
  <person name='Sean' age='22' hair='Black' eyes='Brown' />
</group>
0
ответ дан 30 November 2019 в 09:07
поделиться

Стандарты

XInclude - единственный стандарт с любым уровнем поддержки.

  • Несколько XML редакторы, в том числе Oxygen и xmlspy , поддерживают его.
  • Несколько синтаксических анализаторов XML, включая Xerces , также поддерживают его, а также есть порты .net.
  • Некоторые инструменты XML, такие как Saxon , поддерживают его как для Java, так и для .net .

В статье Википедии о XInclude есть несколько хороших примеров использования. .

XLink - это косвенно связанный стандарт, на самом деле не для включения документов, а в большей степени для цитирования частей в других документах. Он не очень хорошо поддерживается.

Альтернативы

Если вас беспокоит размер, есть несколько способов: )

12
ответ дан 30 November 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: