0

也许我在问一个没有意义的事情,但我有这个问题:

例如,我必须获取为特定元素定义的属性(给定它的名称)。为此,我应该解析模式文件。

由于我在这些模式中拥有每个元素的 JAXB 类,有没有办法从 JAXB 类中获取相同的信息?

例如,在输入字符串“file_object”中给出,我必须找出它可以包含一个名为“filepath”或“path”和“filename”的元素

<xsd:element name="file_object" substitutionGroup="oval-def:object">
        <xsd:annotation>
              <xsd:documentation>The file_object element is used by a file test to define the specific file(s) to be evaluated. The file_object will collect all UNIX file types (directory, regular file, character device, block device, fifo, symbolic link, and socket). Each object extends the standard ObjectType as defined in the oval-definitions-schema and one should refer to the ObjectType description for more information. The common set element allows complex objects to be created using filters and set logic. Again, please refer to the description of the set element in the oval-definitions-schema.</xsd:documentation>
              <xsd:documentation>A file object defines the path and filename of the file(s). In addition, a number of behaviors may be provided that help guide the collection of objects. Please refer to the FileBehaviors complex type for more information about specific behaviors.</xsd:documentation>
              <xsd:documentation>The set of files to be evaluated may be identified with either a complete filepath or a path and filename. Only one of these options may be selected.</xsd:documentation>
              <xsd:documentation>It is important to note that the 'max_depth' and 'recurse_direction' attributes of the 'behaviors' element do not apply to the 'filepath' element, only to the 'path' and 'filename' elements.  This is because the 'filepath' element represents an absolute path to a particular file and it is not possible to recurse over a file.</xsd:documentation>
              <xsd:appinfo>
                    <sch:pattern id="unix-def_file_object_verify_filter_state">
                          <sch:rule context="unix-def:file_object//oval-def:filter">
                                <sch:let name="parent_object" value="ancestor::unix-def:file_object"/>
                                <sch:let name="parent_object_id" value="$parent_object/@id"/>
                                <sch:let name="state_ref" value="."/>
                                <sch:let name="reffed_state" value="ancestor::oval-def:oval_definitions/oval-def:states/*[@id=$state_ref]"/>
                                <sch:let name="state_name" value="local-name($reffed_state)"/>
                                <sch:let name="state_namespace" value="namespace-uri($reffed_state)"/>
                                <sch:assert test="(($state_namespace='http://oval.mitre.org/XMLSchema/oval-definitions-5#unix') and ($state_name='file_state'))">State referenced in filter for <sch:value-of select="name($parent_object)"/> '<sch:value-of select="$parent_object_id"/>' is of the wrong type. </sch:assert>
                          </sch:rule>
                    </sch:pattern>
              </xsd:appinfo>
        </xsd:annotation>
        <xsd:complexType>
              <xsd:complexContent>
                    <xsd:extension base="oval-def:ObjectType">
                          <xsd:sequence>
                                <xsd:choice>
                                      <xsd:element ref="oval-def:set"/>
                                      <xsd:sequence>
                                            <xsd:element name="behaviors" type="unix-def:FileBehaviors" minOccurs="0" maxOccurs="1"/>
                                            <xsd:choice>
                                                  <xsd:element name="filepath" type="oval-def:EntityObjectStringType">
                                                        <xsd:annotation>
                                                              <xsd:documentation>The filepath element specifies the absolute path for a file on the machine. A directory cannot be specified as a filepath.</xsd:documentation>
                                                              <xsd:appinfo>
                                                                    <sch:pattern id="unix-def_fileobjfilepath">
                                                                          <sch:rule context="unix-def:file_object/unix-def:filepath">
                                                                                <sch:assert test="not(preceding-sibling::unix-def:behaviors[@max_depth or @recurse or @recurse_direction])"><sch:value-of select="../@id"/> - the max_depth, recurse, and recurse_direction behaviors are not allowed with a filepath entity</sch:assert>
                                                                          </sch:rule>
                                                                    </sch:pattern>
                                                                    <sch:pattern id="unix-def_fileobjfilepath2">
                                                                          <sch:rule context="unix-def:file_object/unix-def:filepath[not(@operation='equals' or not(@operation))]">
                                                                                <sch:assert test="not(preceding-sibling::unix-def:behaviors[@recurse_file_system='defined'])"><sch:value-of select="../@id"/> - the recurse_file_system behavior MUST not be set to 'defined' when a pattern match is used with a filepath entity.</sch:assert>
                                                                          </sch:rule>
                                                                    </sch:pattern>
                                                              </xsd:appinfo>
                                                        </xsd:annotation>
                                                  </xsd:element>
                                                  <xsd:sequence>
                                                      <xsd:element name="path" type="oval-def:EntityObjectStringType">
                                                            <xsd:annotation>
                                                                  <xsd:documentation>The path element specifies the directory component of the absolute path to a file on the machine.</xsd:documentation>
                                                                  <xsd:appinfo>
                                                                        <sch:pattern id="unix-def_fileobjpath">
                                                                              <sch:rule context="unix-def:file_object/unix-def:path[not(@operation='equals' or not(@operation))]">
                                                                                    <sch:assert test="not(preceding-sibling::unix-def:behaviors[@recurse_file_system='defined'])"><sch:value-of select="../@id"/> - the recurse_file_system behavior MUST not be set to 'defined' when a pattern match is used with a path entity.</sch:assert>
                                                                                    <sch:assert test="not(preceding-sibling::unix-def:behaviors[@max_depth])"><sch:value-of select="../@id"/> - the max_depth behavior MUST not be used when a pattern match is used with a path entity.</sch:assert>
                                                                                    <sch:assert test="not(preceding-sibling::unix-def:behaviors[@recurse_direction])"><sch:value-of select="../@id"/> - the recurse_direction behavior MUST not be used when a pattern match is used with a path entity.</sch:assert>
                                                                                    <sch:assert test="not(preceding-sibling::unix-def:behaviors[@recurse])"><sch:value-of select="../@id"/> - the recurse behavior MUST not be used when a pattern match is used with a path entity.</sch:assert>
                                                                              </sch:rule>
                                                                        </sch:pattern>
                                                                  </xsd:appinfo>
                                                            </xsd:annotation>
                                                      </xsd:element>
                                                      <xsd:element name="filename" type="oval-def:EntityObjectStringType"  nillable="true">
                                                            <xsd:annotation>
                                                                  <xsd:documentation>The filename element specifies the name of a file to evaluate. If the xsi:nil attribute is set to true, then the object being specified is the higher level directory object (not all the files in the directory).  In this case, the filename element should not be used during collection and would result in the unique set of items being the directories themselves. For example, one would set xsi:nil to true if the desire was to test the attributes or permissions associated with a directory. Setting xsi:nil equal to true is different than using a .* pattern match, which says to collect every file under a given path.</xsd:documentation>
                                                                  <xsd:appinfo>
                                                                        <sch:pattern id="unix-def_file_objectfilename">
                                                                              <sch:rule context="unix-def:file_object/unix-def:filename">
                                                                                    <sch:assert test="(@var_ref and .='') or (@xsi:nil='1' or @xsi:nil='true') or not(.='') or (.='' and @operation = 'pattern match')"><sch:value-of select="../@id"/> - filename entity cannot be empty unless the xsi:nil attribute is set to true or a var_ref is used</sch:assert>
                                                                              </sch:rule>
                                                                        </sch:pattern>
                                                                  </xsd:appinfo>
                                                            </xsd:annotation>
                                                      </xsd:element>
                                                </xsd:sequence>
                                            </xsd:choice>
                                            <xsd:element ref="oval-def:filter" minOccurs="0" maxOccurs="unbounded"/>
                                      </xsd:sequence>
                                </xsd:choice>
                          </xsd:sequence>
                    </xsd:extension>
              </xsd:complexContent>
        </xsd:complexType>
  </xsd:element>

非常感谢。

4

0 回答 0