<?xml version="1.0" encoding="UTF-8"?>
<!-- 
*****************************************************************************
S1000D Defense Interest Group (S1000D DIG) - (c) 2020-05-15   
*****************************************************************************

S1000D DIG general business rules BREX data module for S1000D information.

The user agreement can be found in S1000D DIG data module: 
DIG-A-00-00-0000-00A-021A-A

This BREX data module reflects the general business rules 
as developed and adopted by S1000D DIG.

This BREX data module is based on document:
DIG-B6865-01000-00 Issue No. 1 - Dated 2017-11-02
	
This BREX data module will be applied by various S1000D DIG governed 
aquisition efforts/projects to verify that aquired S1000D information 
complies with the S1000D DIG general business rules.

Regarding the S1000D DIG BREX DMC identification:      
- "DIG" is the S1000 DIG registered MI code for the "Defense Interest Group".    
- The SDC is reflecting to which issue the BREX is (mainly) directed:
  "D" = Issue 4.0, "E" = Issue 4.1, etc. (iaw S1000D practice).
- The DMC coding practice must be maintained in case the BREX
  is subject to changes or updates.
- Updated versions within an S1000D 'dot issue' (eg 4.0/4.1/4.2/etc) 
  are distinguised using issue numbers.

Questions about the S1000D DIG BREX data module can be directed to:
S1000D DIG Chair: dig-chair@members.s1000d.org				 

More information about the S1000D DIG can be found on:
S1000D DIG website: www.s1000ddig.org

*****************************************************************************
-->

<!DOCTYPE dmodule [
]>
<dmodule xmlns:dc="http://www.purl.org/dc/elements/1.1/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://www.s1000d.org/S1000D_4-1/xml_schema_flat/brex.xsd">
	<identAndStatusSection>
		<dmAddress>
			<dmIdent>
				<dmCode modelIdentCode="DIG" systemDiffCode="E" systemCode="00" subSystemCode="0"
					subSubSystemCode="0" assyCode="0000" disassyCode="00" disassyCodeVariant="A"
					infoCode="022" infoCodeVariant="A" itemLocationCode="D"/>
				<language languageIsoCode="en" countryIsoCode="US"/>
				<issueInfo issueNumber="001" inWork="00"/>
			</dmIdent>
			<dmAddressItems>
				<issueDate year="2020" month="05" day="15"/>
				<dmTitle>
					<techName>S1000D DIG General</techName>
					<infoName>Business rules</infoName>
				</dmTitle>
			</dmAddressItems>
		</dmAddress>
		<dmStatus issueType="new">
			<security securityClassification="01"/>
			<responsiblePartnerCompany>
				<enterpriseName>S1000D Defense Interest Group</enterpriseName>
			</responsiblePartnerCompany>
			<originator>
				<enterpriseName>S1000D Defense Interest Group</enterpriseName>
			</originator>
			<applic id="app-DIG-All">
				<displayText>
					<simplePara>All</simplePara>
				</displayText>
			</applic>
			<brexDmRef>
				<dmRef>
					<dmRefIdent>
						<dmCode modelIdentCode="S1000D" systemDiffCode="E" systemCode="04"
							subSystemCode="1" subSubSystemCode="0" assyCode="0301" disassyCode="00"
							disassyCodeVariant="A" infoCode="022" infoCodeVariant="A"
							itemLocationCode="D"/>
						<issueInfo issueNumber="011" inWork="00"/>
					</dmRefIdent>
				</dmRef>
			</brexDmRef>
			<qualityAssurance>
				<firstVerification verificationType="tabtop"/>
			</qualityAssurance>
		</dmStatus>
	</identAndStatusSection>
	<content id="idelem4x141">
		<brex id="idelem4x142">
			<contextRules id="general-0001">
				<structureObjectRuleGroup>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00001">
						<objectPath allowedObjectFlag="0">//dmCode[@systemDiffCode[contains(.,"I")
							or contains(.,"O")] or @systemCode[contains(.,"I") or contains(.,"O")]
							or @subSystemCode[contains(.,"I") or contains(.,"O")] or
							@subSubSystemCode[contains(.,"I") or contains(.,"O")] or
							@assyCode[contains(.,"I") or contains(.,"O")] or
							@disassyCode[contains(.,"I") or contains(.,"O")] or
							@disassyCodeVariant[contains(.,"I") or contains(.,"O")] or
							@infoCode[contains(.,"I") or contains(.,"O")] or
							@infoCodeVariant[contains(.,"I") or contains(.,"O")] or
							@learnCode[contains(.,"I") or contains(.,"O")]]</objectPath>
						<objectUse>Specific alpha character values Chap 1.3 Para 6.2.4 BRDP-S1-00001
							Use of "I" and "O" Decide whether and when to use the alpha characters
							"I" and "O". The alpha characters "I" and "O" can only be used for the
							Model Identification code in the Data Module Code (DMC). For the rest of
							the DMC "I" and "O" shall not be used in data module coding.</objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00119">
						<objectPath allowedObjectFlag="0">//title[descendant::internalRef or
							descendant::dmRef or descendant::pmRef or
							descendant::externalPubRef]</objectPath>
						<objectUse>Use of cross-references from titles Chap 3.9.5.2.1.5 Para 2
							BRDP-S1-00119 Use of cross- references from titles Decide whether to
							allow cross-referencing from titles. Cross-referencing from titles shall
							not be allowed. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00120_levelledPara">
						<objectPath allowedObjectFlag="0">//title[count(ancestor::levelledPara) >
							8]</objectPath>
						<objectUse>Use of titles for the elements levelledPara and proceduralStep
							Chap 3.9.5.2.1.5 Para 2 BRDP-S1-00120 Use of titles for the elements
							levelledPara and proceduralStep from sublevel six thru eight for legacy
							data Decide whether titles can be included for the elements levelledPara
							and proceduralStep from sublevel six thru eight when converting legacy
							data to S1000D. Titles for levels six thru eight in the elements
							levelledPara, levelledParaAlt, proceduralStep or proceduralStepAlt can
							be used. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00120_levelledParaAlt">
						<objectPath allowedObjectFlag="0">//title[count(ancestor::levelledParaAlt) >
							8]</objectPath>
						<objectUse>Use of titles for the elements levelledPara and proceduralStep
							Chap 3.9.5.2.1.5 Para 2 BRDP-S1-00120 Use of titles for the elements
							levelledPara and proceduralStep from sublevel six thru eight for legacy
							data Decide whether titles can be included for the elements levelledPara
							and proceduralStep from sublevel six thru eight when converting legacy
							data to S1000D. Titles for levels six thru eight in the elements
							levelledPara, levelledParaAlt, proceduralStep or proceduralStepAlt can
							be used. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00120_proceduralStep">
						<objectPath allowedObjectFlag="0">//title[count(ancestor::proceduralStep) >
							8]</objectPath>
						<objectUse>Use of titles for the elements levelledPara and proceduralStep
							Chap 3.9.5.2.1.5 Para 2 BRDP-S1-00120 Use of titles for the elements
							levelledPara and proceduralStep from sublevel six thru eight for legacy
							data Decide whether titles can be included for the elements levelledPara
							and proceduralStep from sublevel six thru eight when converting legacy
							data to S1000D. Titles for levels six thru eight in the elements
							levelledPara, levelledParaAlt, proceduralStep or proceduralStepAlt can
							be used. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00120_proceduralStepAlt">
						<objectPath allowedObjectFlag="0">//title[count(ancestor::proceduralStepAlt)
							> 8]</objectPath>
						<objectUse>Use of titles for the elements levelledPara and proceduralStep
							Chap 3.9.5.2.1.5 Para 2 BRDP-S1-00120 Use of titles for the elements
							levelledPara and proceduralStep from sublevel six thru eight for legacy
							data Decide whether titles can be included for the elements levelledPara
							and proceduralStep from sublevel six thru eight when converting legacy
							data to S1000D. Titles for levels six thru eight in the elements
							levelledPara, levelledParaAlt, proceduralStep or proceduralStepAlt can
							be used. </objectUse>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00122">
						<objectPath allowedObjectFlag="2">//graphic[parent::table]</objectPath>
						<objectUse>Use of tables as graphics Chap 3.9.5.2.1.6 Para 2.4 BRDP-S1-00122
							Use of tables as graphics Decide if tables represented as graphics are
							allowed, and if they are, in what situations they can be used. Tables
							represented as graphics shall be allowed. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00150">
						<objectPath allowedObjectFlag="2">//supportEquipDescr[(not(attribute::id =
							//internalRef/@internalRefId))][ancestor::preliminaryRqmts]</objectPath>
						<objectUse>Use of the attribute id on the element supportEquipDescr Chap
							3.9.5.2.1.9 Para 2.5.1 BRDP-S1-00150 Use of the attribute id on the
							element supportEquipDescr in the element preliminaryRqmts Decide whether
							to use the attribute id to create cross- references from the procedure
							to the support equipment listed in Preliminary requirements. The
							attribute id on element supportEquipDescr is used to establish the link
							between the two and will guarantee consistent use of identification
							throughout the procedure. The use of cross-references is encouraged. The
							attribute id shall always be used for cross-referencing purposes.
						</objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00155">
						<objectPath allowedObjectFlag="2">//supplyDescr[(not(attribute::id =
							//internalRef/@internalRefId))][ancestor::preliminaryRqmts]</objectPath>
						<objectUse>Use of the attribute id on the element supplyDescr Chap
							3.9.5.2.1.9 Para 2.6.1 BRDP-S1-00155 Use of the attribute id on the
							element supplyDescr in the element preliminaryRqmts Decide whether to
							use the attribute id to create cross- references from the procedure to
							the supplies listed in Preliminary requirements. The attribute id on
							element supplyDescr is used to establish the link between the two and
							will guarantee consistent use of identification throughout the
							procedure. The use of cross-references is encouraged. The attribute id
							shall be used for cross-referencing from a procedure to the supplies
							listed in the Preliminary requirements. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00156">
						<objectPath allowedObjectFlag="2">//spareDescr[(not(attribute::id =
							//internalRef/@internalRefId))][ancestor::preliminaryRqmts]</objectPath>
						<objectUse>Use of the attribute id on the element spareDescr Chap
							3.9.5.2.1.9 Para 2.7.1 BRDP-S1-00156 Use of the attribute id on element
							spareDescr in the element preliminaryRqmts Decide whether to use the
							attribute id to create cross- references from the procedure to the
							spares listed in Preliminary requirements. The attribute id on element
							spareDescr is used to establish the link between the two and will
							guarantee consistent use identification throughout the procedure. The
							use of cross-references is encouraged. The attribute id shall be used
							for cross-referencing from a procedure to the spares listed in the
							Preliminary requirements. </objectUse>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00180">
						<objectPath allowedObjectFlag="2">//levelledPara[child::levelledPara or
							child::levelledParaAlts] |
							//levelledParaAlts[child::levelledPara]</objectPath>
						<objectUse>Level of depth of descriptive data modules (levelledPara and
							levelledParaAlts) Chap 3.9.5.2.2 Para 2.4 BRDP-S1-00180 Level of depth
							of descriptive data modules Decide whether to exceed 5 levels of depth
							for new data. For new projects, the granularity of the descriptive data
							modules shall not exceed 5 levels. For legacy data this may be increased
							as required. </objectUse>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00181">
						<objectPath allowedObjectFlag="2"
							>//levelledPara[parent::description][not(child::levelledPara or
							child::levelledParaAlts)] |
							//levelledParaAlts[parent::description][not(child::levelledPara)]</objectPath>
						<objectUse>Minimum para occurrences (levelledPara and levelledParaAlts) Chap
							3.9.5.2.2 Para 2.4 BRDP-S1-00181 Minimum para occurrences Decide whether
							to impose a minimum of two occurrences of child elements. For new
							projects, the minimum of two occurrences shall be imposed. </objectUse>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00186">
						<objectPath allowedObjectFlag="2"
							>//proceduralStep/proceduralStep/proceduralStep/proceduralStep/proceduralStep/proceduralStep</objectPath>
						<objectUse>Decide on the maximum number of step levels allowed in a
							procedure Chap 3.9.5.2.3 Para 2.4.1 BRDP-S1-00186 Decide on the maximum
							number of step levels in a procedure Decide on the maximum number of
							step levels allowed in a procedure. Exceeding five levels of depth is
							strongly discouraged in development of new data. It is recommended that
							additional levels are only used in a conversion effort where the
							existing data is authored to this depth (maximum eight levels) and
							restructuring of data is not feasible. For new projects, the maximum
							number of step levels shall be five. For legacy data this may be
							increased as required. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00216">
						<objectPath allowedObjectFlag="0"
							>//natoStockNumber[not(@natoCodificationBureau and
							@natoItemIdentNumberCore and @natoSupplyClass)]</objectPath>
						<objectUse>Use of the element natoStockNumber (NATO stock number) Chap
							3.9.5.2.7 Para 2.2.1.2 BRDP-S1-00216 Use of the element natoStockNumber
							(NATO stock number) Decide whether and how to use the NATO Stock Number,
							split it into its three fields using the attributes natoSupplyClass,
							natoCodificationBureau and natoItemIdentNumberCore or to fill it as a
							whole in the child element fullNatoStockNumber. When NATO Stock Numbers
							(NSNs) are used in the project, the NSN shall be specified using the
							three attributes. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00338">
						<objectPath allowedObjectFlag="2">//@assyCode</objectPath>
						<objectUse>Number of characters in assembly code Chap 4.3.3 Para 2.2.4
							BRDP-S1-00338 Number of characters in assembly code Decide whether to
							use two or four characters for unit or assembly. Four characters shall
							be used.</objectUse>
						<objectValue valueAllowed="[0-9A-Z]{4}" valueForm="pattern"
							>[0-9A-Z]{4}</objectValue>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00372">
						<objectPath allowedObjectFlag="0">//@infoCode[normalize-space(string(.)) =
							"951"]</objectPath>
						<objectUse>Identification of a process data module Chap 4.11 Para 2.3
							BRDP-S1-00372 Use of the generic IC 951 for identification of process
							data modules Decide whether to use IC 951 for identification of process
							data modules. IC 951 shall not be used. The appropriate information
							codes relating to the content of the process data module shall be used.
						</objectUse>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00366">
						<objectPath allowedObjectFlag="2">//brexDmRef</objectPath>
						<objectUse>Use of a project- specific BREX data module Chap 4.10 Para 2.1
							BRDP-S1-00366 Use of a project- specific BREX data module Decide whether
							to develop and use a project-specific BREX data module. The project
							should refer to the most appropriate BREX within the layers. If required
							a project-specific BREX data module shall be developed. </objectUse>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00367">
						<objectPath allowedObjectFlag="2">//brexDmRef</objectPath>
						<objectUse>Use of layered BREX data modules Chap 4.10 Para 2.2 BRDP-S1-00367
							Use of layered BREX data modules Decide whether to apply a layered BREX
							data module structure. This decision is related to, but not entirely
							dependent on, whether a layered business rules structure applies. A
							layered BREX data module structure shall be applied. </objectUse>
					</structureObjectRule>
				</structureObjectRuleGroup>
			</contextRules>
			<contextRules
				rulesContext="http://www.s1000d.org/S1000D_4-1/xml_schema_flat/frontmatter.xsd"
				id="frontmatter">
				<structureObjectRuleGroup>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00304">
						<objectPath allowedObjectFlag="0"
							>//tocEntry/tocEntry/tocEntry/tocEntry/tocEntry/tocEntry</objectPath>
						<objectUse>Use of hierarchical Table of contents Chap 3.9.5.2.16 Para
							2.3.2.3 BRDP-S1-00304 Use of hierarchical Table of contents Decide
							whether to use a hierarchical Table of contents and on the number of
							levels. When the project applies a hierarchical Table of Contents (TOC)
							up to five levels shall be used. </objectUse>
					</structureObjectRule>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00306">
						<objectPath allowedObjectFlag="0">//tocEntry[descendant::issueInfo or
							descendant::externalPubIssueInfo or descendant::issueDate or
							descendant::externalPubIssueDate]</objectPath>
						<objectUse>Use of issue number and/or issue date in the Table of contents
							Chap 3.9.5.2.16 Para 2.3.2.3.2 BRDP-S1-00306 Use of issue number and/or
							issue date in the Table of contents Decide whether to use and present
							the issue number (issueInfo/externalPubIssueInfo) and/or the issue date
							(issueDate/externalPubIssueDate) for the entries in the Table of
							contents The issue number and issue date shall not be used in the Table
							of Contents (TOC). </objectUse>
					</structureObjectRule>
				</structureObjectRuleGroup>
			</contextRules>
			<contextRules
				rulesContext="http://www.s1000d.org/S1000D_4-1/xml_schema_flat/container.xsd"
				id="container">
				<structureObjectRuleGroup>
					<!-- "Valid" -->
					<structureObjectRule id="BRDP-S1-00385">
						<!-- //dmodule[descendant::container]/identAndStatusSection/dmAddress/dmIdent/dmCode/@disassyCodeVariant -->
						<objectPath allowedObjectFlag="2"
							>//dmodule/identAndStatusSection/dmAddress/dmIdent/dmCode/@disassyCodeVariant</objectPath>
						<objectUse>Identification of container data module Chap 4.13.4 Para 2.3.2
							BRDP-S1-00385 Identification of container data module Decide which
							identification method to use for container data modules. The chosen
							method must be used systematically. The following value shall be
							assigned to the disassembly code variant: "Z, ZZ or ZZZ" in accordance
							with the project data module coding rules. </objectUse>
						<objectValue valueAllowed="[A-Z]{1,3}" valueForm="pattern"
							>[A-Z]{1,3}</objectValue>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00386">
						<objectPath allowedObjectFlag="2">//container</objectPath>
						<objectUse>Use of applicability within container data module content s Chap
							4.13.4 Para 2.5 BRDP-S1-00386 Use of applicability within container data
							module content Decide whether applicability annotations are duplicated
							from the referenced data modules to the container data module.
							Applicability annotations shall be duplicated from the referenced data
							modules to the container data module. </objectUse>
					</structureObjectRule>
				</structureObjectRuleGroup>
			</contextRules>
			<contextRules rulesContext="http://www.s1000d.org/S1000D_4-1/xml_schema_flat/ipd.xsd"
				id="ipd">
				<structureObjectRuleGroup>
					<structureObjectRule id="BRDP-S1-00217">
						<objectPath allowedObjectFlag="2"
							>//@internalRefTargetType[normalize-space(string(.)) =
							"irtt11"]</objectPath>
						<objectUse>Use of hotspots in IPD data module Chap 3.9.5.2.7 Para 2.4.3
							BRDP-S1-00217 Use of hotspots in IPD data modules Decide whether to use
							the generic hotspot mechanism in IPD data modules. The generic hotspot
							mechanism shall be used in IPD data modules. </objectUse>
					</structureObjectRule>
					<structureObjectRule id="BRDP-S1-00237">
						<objectPath allowedObjectFlag="2">//genericPartData</objectPath>
						<objectUse>Use of hotspots in IPD data module Chap 3.9.5.2.7 Para 2.5.12
							BRDP-S1-00237 Use of the BREX to define the non-S2000M elements Decide
							whether to use the BREX for the definition of the non- S2000M elements.
							The BREX shall always be used to define any genericPartData element
							names. </objectUse>
					</structureObjectRule>
				</structureObjectRuleGroup>
			</contextRules>
			<contextRules
				rulesContext="http://www.s1000d.org/S1000D_4-1/xml_schema_flat/checklist.xsd"
				id="checklist">
				<structureObjectRuleGroup>
					<structureObjectRule id="BRDP-S1-00279">
						<objectPath allowedObjectFlag="2"
							>//checkListStep/checkListStep/checkListStep/checkListStep/checkListStep/checkListStep</objectPath>
						<objectUse>Define maximum number of step levels (element checkListStep) in
							checkListProcedure Chap 3.9.5.2.14 Para 2.3.1.3.5 BRDP-S1-00279 Define
							maximum number of step levels in checkListProcedure Projects must decide
							the maximum number of step levels allowed. The maximum number of step
							levels in checkListProcedure shall be five. For legacy data this may be
							increased as required. </objectUse>
					</structureObjectRule>
				</structureObjectRuleGroup>
			</contextRules>
			<contextRules rulesContext="http://www.s1000d.org/S1000D_4-1/xml_schema_flat/dml.xsd"
				id="dml">
				<structureObjectRuleGroup>
					<structureObjectRule id="BRDP-S1-00350">
						<objectPath allowedObjectFlag="2">//dml</objectPath>
						<objectUse>Use of data management requirement list Chap 4.5 Para 2.1
							BRDP-S1-00350 Use of data management requirement list Decide whether to
							use the data management requirement list for specification and exchange
							of CSDB planning information. The data management requirement list shall
							always be used in a format specified by the project/organization.
						</objectUse>
					</structureObjectRule>
				</structureObjectRuleGroup>
			</contextRules>
			<contextRules rulesContext="http://www.s1000d.org/S1000D_4-1/xml_schema_flat/brex.xsd"
				id="brex">
				<structureObjectRuleGroup>
					<structureObjectRule id="BRDP-S1-00370">
						<objectPath allowedObjectFlag="2">//notationRuleList</objectPath>
						<objectUse>Include restrictions in using various illustration, multimedia
							object or other data information formats Chap 4.10.2.2 Para 2.2
							BRDP-S1-00370 Include restrictions in using various illustration,
							multimedia object or other data information formats Decide whether to
							use the BREX data module to impose any restrictions in the use of
							various formats for illustrations, multimedia objects or other data. The
							BREX data module shall be used to impose restrictions in the use of
							various formats for illustrations, multimedia objects or other data.
						</objectUse>
					</structureObjectRule>
				</structureObjectRuleGroup>
			</contextRules>
			<nonContextRules>
				<nonContextRule id="BRDP-S1-00387">
					<simplePara>Use of applicability</simplePara>
					<simplePara>Chap 4.14 Para 2.1.2 BRDP-S1-00387 Use of applicability Decide if
						the project will use applicability. Applicability shall be included at the
						data module (DM) level and shall be optional within the
						content.</simplePara>
				</nonContextRule>
			</nonContextRules>
		</brex>
	</content>
</dmodule>
