Схема XML: элементы с этим шаблоном имени имеют этот атрибут - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть этот пример XML.

<root>
  <Ilhas_da_Madeira_e_Porto_Santo update-date="2016-04-01" update-time="14:14:46">
    <Santana update-author="sourceData" update-date="2016-04-01" update-time="14:14:48">
      <year1995 ncrimes="33"/>
      <year1994 ncrimes="58"/>
      <year1993 ncrimes="33"/>
    </Santana>
  </Ilhas_da_Madeira_e_Porto_Santo>
  <NE update-date="2016-04-01" update-time="14:14:48">
    <NE update-author="sourceData" update-date="2016-04-01" update-time="14:14:48">
      <year1995 ncrimes="163"/>
      <year1994 ncrimes="125"/>
      <year1993 ncrimes="126"/>
    </NE>
  </NE>
</root>

(схема XML - xsd) Я уже группирую элементы и атрибуты с xs:group и xs:attributeGroup.

Вопрос: Возможно ли это сделать: elements with name_pattern="year(\d){4}" have attribute=ncrimes?

1 Ответ

0 голосов
/ 04 ноября 2018

Дизайн XML-схемы не поощряет такой дизайн словарного запаса XML. Обычно считается плохой формой иметь имена элементов или атрибутов с такой внутренней структурой. Вместо

<year1995 ncrimes="163"/>

вы должны использовать что-то вроде

<year y="1995" ncrimes="163"/>

С этим дизайном вы обнаружите, что все в стеке XML (не только XML-схема, но и такие вещи, как XSLT, XPath и DOM) работает немного более плавно.

Но если вы не можете или не хотите изменить дизайн словаря, то ваш следующий лучший вариант - определить объявление элемента для name="year" с помощью abstract="true", а затем определить элементы year1995, year1994 и т. Д. в качестве элементов в группе замещения year.

...