XML: вехи или элементы, пересекающие другие элементы

Я работаю с OSIS (Открытый стандарт библейской информации), XML-схемой для описания Священных Писаний и связанного с ними текста. Когда я впервые взглянул на образец XML, я заметил некоторые странности, которых раньше не видел в XML. В основном закрываются теги, за которыми следует контент, который логически должен принадлежать закрытому тегу. После просмотра документации я обнаружил, что этот тип разметки называется «Вехи».

В данном случае он используется, потому что цитата может начинаться с одного стиха и охватывать несколько стихов, прежде чем закрыться. Это похоже на взлом, и мне придется написать код для анализа, поиска и отображения разделов XML для Интернета. Хотя я понимаю, что это технически допустимый XML, его нельзя [легко] проверить по схеме на правильность, а стандартные API-интерфейсы синтаксического анализа XML не смогут захватывать элементы между вехами. Я считаю, что есть лучшие способы формирования этого «стандарта». Что вы думаете об этом типе разметки? Других упоминаний об этой практике я толком не нашел, где еще она используется. Это действительно?

Из документации...

В XML нормальная форма элемента — это начальный тег и конечный тег: ‹q›...‹/q›. Однако для обработки разметки, выходящей за границы, необходимо использовать специальную форму. Он состоит из двух абсолютно пустых экземпляров одного и того же типа элемента: один для обозначения начальной точки, а другой для обозначения конечной точки. Два пустых элемента идентифицируют себя относительно начала и конца, а также совместно идентифицируют себя с помощью атрибута sID (начало традиционного элемента) и eID. атрибут strong> (конец традиционного элемента), значения которого должны совпадать.

Пустые элементы обозначаются в XML тегом с «/» перед последним «>»: таким образом, ‹q/›, а не ‹q› или ‹/q›. Элементы, используемые таким образом, обычно называются «вехами», а те конкретные элементы в OSIS, которые допускают такое альтернативное кодирование, называются «вехами».

Вот краткий пример...

<verse osisID="Acts.7.2" sID="a72"/>To this he replied:
<speech who=”Stephan”>Brothers and fathers, listen to me! The God of glory appeared
to our father Abraham while he was still in Mesopotamia, before he lived in Haran
<verse eID=”a72”/>

...

<verse osisID="Acts.7.6" sID="a76"/>God spoke to him in this way: <q
type=”embedded” marker=”'”>Your descendants will be strangers in a country not
their own, and they will be enslaved and mistreated four hundred years. <verse
eID="a76"/>
<verse osisID="Acts.7.7" sID="a77"/>But I will punish the nation they serve as
slaves,</q> God said, <q type=”embedded” marker=”'”>and afterward they will come out
of that country and worship me in this place.</q><verse eID="a77"/>

...

<verse osisID="Acts.7.53" sID="a79"/>you who have received the law that was put
into effect through angels but have not obeyed it.
<verse eID="a79"/>
</speech>

person pdavis    schedule 17.11.2009    source источник
comment
Вы продвинулись дальше с этим?   -  person Private    schedule 13.10.2015


Ответы (1)


В этой разметке нет ничего противозаконного, по крайней мере, с точки зрения синтаксиса XML.

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

Единственное, с чем я не согласен, это наличие маркеров «начало» и «конец» для стихов. Это может привести к ошибкам, поскольку скобки начала и конца не могут быть проверены в самом XML. Я бы использовал только маркеры «старт». Это предполагает, конечно, что конец каждого стиха соответствует началу другого или концу иерархического раздела. т.е. невозможно иметь что-то «между» двумя куплетами.

person Jim Garrison    schedule 17.11.2009
comment
Хотя я согласен с тем, что это законная разметка, ее трудно/невозможно проверить в стандартном редакторе XML. - person pdavis; 18.11.2009
comment
Какие конкретные ограничения вы хотели бы проверить? Возможно, их удастся выразить так, чтобы их можно было реализовать в XPath или XSL. - person Jim Garrison; 19.11.2009