XSD key/keyref: иерархическая ключевая структура

использовать / dev / urandom, это криптографически безопасно.

хорошо прочитано: http://www.2uo.de/myths-about-urandom/

«Если вы не уверены, следует ли использовать / dev / random или / dev / urandom, тогда, вероятно, вы захотите использовать последний. "

Если вы сомневаетесь в ранней загрузке, достаточно ли у вас энтропии. вместо этого используйте системный вызов getrandom(). [1] Это лучший из обоих миров,

  • он блокирует, пока (только один раз!) Не соберет достаточно энтропии,
  • после этого он никогда не будет блокироваться снова.

[1] git kernel commit

14
задан Aron 21 May 2009 в 03:45
поделиться

3 ответа

Как насчет обращения к родителю со стороны ребенка? Даже если потомков много, родитель будет только один, и объединение (parent, child) создает глобально уникальный ключ, даже если дочерний ключ уникален только внутри своего родителя:

  <key name="childKeyDef">
    <selector xpath="child"/>
    <field xpath="@childKey"/>
    <field xpath="../@parentKey"/>
  </key>

Это не работает в xmllint, даже хотя спецификация явно не запрещает это для полей - только для селекторов: 3.11.4 , (2) говорит, что селектор не может быть предком (он может только быть узлом контекста или потомками.)

А, вот гвоздь в гроб (глядя на конкретный синтаксис): разрешенные выражения XPath очень ограничены и просто не включают ".." http: / /www.w3.org/TR/xmlschema-1/#c-fields-xpaths

Итак, извините, это не ответ на ваш вопрос, но, возможно, это даст вам некоторые идеи.

2
ответ дан 1 December 2019 в 16:49
поделиться

Уродливое решение - изменить ваш XML-формат, чтобы родительский ключ был включен в каждый дочерний элемент, например:

<parent>
  <child parentKey="parent1" childKey="child1"/>
  <child parentKey="parent1" childKey="child2"/>
</parent>

Я думаю, что ваша ситуация вполне законна, и я ожидал бы там чтобы быть способ сделать это - почему бы не попробовать список рассылки xml-dev? В последний раз, когда я проверял, стало шумно, но некоторые из создателей xml все еще зависали.

1
ответ дан 1 December 2019 в 16:49
поделиться

У меня был аналогичный вопрос: Ключ схемы XML с несколькими полями

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

В вашем сценарии, если вы переместите реферер внутри родителя, это позволит установить область действия для ссылки на соответствующий дочерний элемент. Затем у вас должен быть элемент реферера, ссылающийся на внешнюю область видимости на элемент, на который он должен ссылаться.

Немного сложно определить, является ли это приемлемым решением, потому что ваша проблема кажется немного абстрактной. В моей проблеме, описанной в моем вопросе, я имел дело с вопросами, ответами и ответами пользователей. Изначально я пытался проверить, действительно ли ответ пользователя действителен; мой первый подход включал ту же технику, которую используете вы. Мое окончательное решение заключалось в том, чтобы переместить ответ внутрь вопроса и затем обратиться к пользователю.

Мой XML ДО:

<?xml version="1.0" encoding="utf-8"?>
<survey>
  <user id="bob">
    <response questionIdRef="q101">yes</response>
    <response questionIdRef="q102">white</response>
  </user>
  <user id="jane">
    <response questionIdRef="q101">no</response>
    <response questionIdRef="q102">blue</response>
  </user>
  <question id="q101">
    <text>Do you like the color red?</text>
    <answer>yes</answer>
    <answer>no</answer>
  </question>
  <question id="q102">
    <text>What is your favorite color?</text>
    <answer>red</answer>
    <answer>blue</answer>
    <answer>white</answer>
    <answer>yellow</answer>
  </question>
</survey>

Мой XML ПОСЛЕ:

<?xml version="1.0" encoding="utf-8"?>
<survey>
  <user id="bob" />
  <user id="jane" />
  <question id="q101">
    <text>Do you like the color red?</text>
    <answer>yes</answer>
    <answer>no</answer>
    <response userIdRef="bob">yes</response>
    <response userIdRef="jane">no</response>
  </question>
  <question id="q102">
    <text>What is your favorite color?</text>
    <answer>red</answer>
    <answer>blue</answer>
    <answer>white</answer>
    <answer>yellow</answer>
    <response userIdRef="bob">white</response>
    <response userIdRef="jane">blue</response>
  </question>
</survey>
0
ответ дан 1 December 2019 в 16:49
поделиться
Другие вопросы по тегам:

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