Разрешить любой атрибут с определенным префиксом - PullRequest
0 голосов
/ 10 марта 2020

Я работаю над OFMX, форматом обмена XML, основанным на AIXM. Схема корректно проверяет общедоступные файлы, однако, когда OFMX используется для внутреннего использования, используется ряд атрибутов, которые не являются частью схемы.

Вот простой действительный файл OFMX:

<?xml version="1.0" encoding="UTF-8"?>
<OFMX-Snapshot xmlns:xsi="http://schema.openflightmaps.org/0/OFMX-Snapshot.xsd" version="0" origin="rubygem aixm-0.3.9" namespace="daf19610-f43b-4db3-80b7-602d9083dc32" created="2020-03-03T10:25:18+01:00" effective="2020-02-27T00:00:00+01:00">
  <Ahp source="LF|AD|AD-2.LFBA|2020-02-27|17">
    <AhpUid region="LF">
      <codeId>LFBA</codeId>
    </AhpUid>
    <OrgUid region="LF">
      <txtName>FRANCE</txtName>
    </OrgUid>
    <txtName>AGEN LA GARENNE</txtName>
    <codeIcao>LFBA</codeIcao>
    <codeType>AD</codeType>
    <geoLat>44.17472222N</geoLat>
    <geoLong>000.59055556E</geoLong>
    <codeDatum>WGE</codeDatum>
    <valElev>204</valElev>
    <uomDistVer>FT</uomDistVer>
    <valMagVar>0.0</valMagVar>
  </Ahp>
</OFMX-Snapshot>

Чтобы ускорить процесс, непубличная c (локальная) обработка может добавить такие атрибуты, как dbid:

<Ahp source="LF|AD|AD-2.LFBA|2020-02-27|17" dbid="1234">

Я не хочу загрязнять схему такими не -publi c определения атрибутов, и поэтому я ищу минимально инвазивный способ их разрешения.

Разрешение любого атрибута с, скажем, префиксом подчеркивания, например _dbid, будет решением, но AFAIK, это не так возможно определить подстановочные атрибуты в схеме.

Есть ли альтернатива, например, локальное пространство имен, такое как local:dbid, может быть вместе с anyAttribute с минимальным количеством модификаций элемента root, насколько это возможно?

1 Ответ

0 голосов
/ 10 марта 2020

Правильный способ сделать это в XML - поместить атрибут в пространство имен, записав его как db:id="1234" с объявлением пространства имен для префикса db.

Схема может быть записано, чтобы разрешить (а) любой атрибут в указанном c пространстве имен или (b) любой атрибут в любом пространстве имен с использованием подстановочного знака xs:anyAttribute с соответствующим атрибутом namespace, например namespace="##other".

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

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