XML: вехи или элементы, которые пересекают другие элементы - PullRequest
2 голосов
/ 18 ноября 2009

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

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

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

В XML нормальная форма элемента это начальный тег и конечный тег: ... . Для обработки разметки, которая пересекает границы, однако, особый Форма должна быть использована. Состоит из двух совершенно пустые экземпляры того же тип элемента: один, чтобы отметить начало точка, и один, чтобы отметить окончание точка. Два пустых элемента идентифицируют сами относительно того, что является началом и что является концом, и совместно идентифицировать сами по атрибуту sID (начало традиционного элемента) и атрибут eID (конец традиционный элемент), значения из которых должны совпадать.

Пустые элементы обозначены в XML как тег с "/" перед финалом ">": таким образом, , а не или . Элементы, используемые таким образом, обычно называется " вехи ," и те конкретные элементы в OSIS, которые разрешить это альтернативное кодирование так называемый ‘ milestoneable .’

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

<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>

1 Ответ

2 голосов
/ 18 ноября 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...