XMLSchemaChildrenValidationError в симуляторе Карлы (Python 3.7) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытался использовать сценарий запуска с файлом openscenario в Carla 0.9.5 (с использованием Python 3.7):

python scenario_runner.py --openscenario openscenario_file.xosc

И я получаю следующую ошибку:

    Traceback (most recent call last):
  File "scenario_runner.py", line 413, in <module>
    SCENARIORUNNER.run(ARGUMENTS)
  File "scenario_runner.py", line 224, in run
    self.run_openscenario(args)
  File "scenario_runner.py", line 311, in run_openscenario
    config = OpenScenarioConfiguration(args.openscenario)
  File "C:\scenario_runner-0.9.5.1\srunner\tools\openscenario_parser.py", line 37, in __init__
    self._validate_openscenario_configuration()
  File "C:\scenario_runner-0.9.5.1\srunner\tools\openscenario_parser.py", line 58, in _validate_openscenario_configuration
    xsd.validate(self.xml_tree)
  File "C:\Python\Python37\site-packages\xmlschema\validators\schema.py", line 1269, in validate
    raise error
xmlschema.validators.exceptions.XMLSchemaChildrenValidationError: failed validating <Element 'Event' at 0x000002621BDF6458> with XsdGroup(model='sequence', occurs=[1, 1]):

Reason: Unexpected child with tag 'Conditions' at position 2. Tag 'StartConditions' expected.

Schema:

  <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:sequence>
          <xsd:element maxOccurs="unbounded" name="Action">
              <xsd:complexType>
                  <xsd:choice>
                      <xsd:element name="Global" type="OSCGlobalAction" />
                      <xsd:element name="UserDefined" type="OSCUserDefinedAction" />
                      <xsd:element name="Private" type="OSCPrivateAction" />
                  </xsd:choice>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
              </xsd:complexType>
          </xsd:element>
          <xsd:element name="StartConditions">
              <xsd:complexType>
                  <xsd:sequence>
                      <xsd:element maxOccurs="unbounded" name="ConditionGroup" type="OSCConditionGroup" />
                  </xsd:sequence>
              </xsd:complexType>
          </xsd:element>
      </xsd:sequence>
      ...
      ...
  </xsd:complexType>

Instance:

  <Event name="MyLaneChangeLeftEvent" priority="overwrite">
      <Action name="MyLaneChangeLeftAction">
          <Private>
              <Lateral>
                  <LaneChange>
                      <Dynamics shape="sinusoidal" time="5" />
                      <Target>
                          <Relative object="$owner" value="1" />
                      </Target>
                  </LaneChange>
              </Lateral>
          </Private>
      </Action>
      <Conditions>
          <Start>
              <ConditionGroup>
                  <Condition delay="0" edge="rising" name="MyStartCondition1">
                      <ByEntity>
                          <TriggeringEntities rule="any">
                              <Entity name="$owner" />
      ...
      ...
  </Event>

Path: /OpenSCENARIO/Storyboard/Story/Act/Sequence/Maneuver/Event

Я совсем новичок в python и Карле. Я искал этот тип ошибки, однако я не мог найти какую-либо полезную информацию, какие-либо идеи? Из того, что я понимаю, похоже, что дочерний «Условия» является недопустимым дочерним элементом, но я не уверен, почему.

1 Ответ

0 голосов
/ 14 апреля 2020

Ошибка совершенно ясна

Неожиданный ребенок с тегом «Условия» в позиции 2. Ожидается тег «StartConditions».

Валидатор видит <Conditions> элемент, в котором ожидалось бы <StartConditions> ожидаемое.

Ваша схема сообщает "после 1..N случаев <Action> должно быть <StartConditions>" :

<xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="Action">
            <xsd:complexType>
                <xsd:choice>
                    <xsd:element name="Global" type="OSCGlobalAction" />
                    <xsd:element name="UserDefined" type="OSCUserDefinedAction" />
                    <xsd:element name="Private" type="OSCPrivateAction" />
                </xsd:choice>
                <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="StartConditions">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element maxOccurs="unbounded" name="ConditionGroup" type="OSCConditionGroup" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

И вот что делает XML:

<Event name="MyLaneChangeLeftEvent" priority="overwrite">
    <Action name="MyLaneChangeLeftAction">  <!-- position 1 -->
        <!-- ... -->
    </Action>
    <Conditions>                            <!-- position 2 -->
        <!-- ... -->
    </Conditions>
</Event>

Решение состоит в том, чтобы либо обновить XML в соответствии со схемой, либо обновить схему в соответствии с XML .

...