From 6ffd015902c212a323153f3266ab10d37da55628 Mon Sep 17 00:00:00 2001 From: brutzman <brutzman@nps.edu> Date: Sun, 24 Jul 2022 14:55:35 -0700 Subject: [PATCH] refactor, test AVCL 3.1 schema --- missions/avcl/SailorOverboard3.1.xml | 129 ++++++++++++ nbproject/project.xml | 1 + ...utonomousDecisionMakingOntologyDesign.docx | Bin 474232 -> 480064 bytes schemas/AVCL.3.1.changes.txt | 25 ++- schemas/AVCL.3.1.xsd | 144 ++++++++----- .../MeoDadmRiskElementsToHtmlTable.xslt | 199 ++++++++++++++++++ 6 files changed, 447 insertions(+), 51 deletions(-) create mode 100644 missions/avcl/SailorOverboard3.1.xml create mode 100644 stylesheets/MeoDadmRiskElementsToHtmlTable.xslt diff --git a/missions/avcl/SailorOverboard3.1.xml b/missions/avcl/SailorOverboard3.1.xml new file mode 100644 index 0000000..646314f --- /dev/null +++ b/missions/avcl/SailorOverboard3.1.xml @@ -0,0 +1,129 @@ +<?xml version="1.0" encoding="UTF-8"?> +<AVCL version="3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../schemas/AVCL.3.1.xsd"> + <head> + <meta name="title" content="SailorOverboard3.1.xml"/> + <meta name="description" content="AVCL mission to perform SAILOR OVERBOARD operations, carried out in concert with shipboard emergency procedures. Test mission for AVCL revision version 3.1."/> + <meta name="created" content="19 November 2019"/> + <meta name="modified" content="16 July 2022"/> + <meta name="creator" content="Don Brutzman"/> + <meta name="reference" content="https://wiki.nps.edu/display/NOW/Ethical+Control+of+Unmanned+Systems"/> + <meta name="Image" content="https://gitlab.nps.edu/Savage/EthicalControl/raw/master/missions/SailorOverboard8PhaseMission.png"/> + <meta name="generator" content="Altova XMLSpy, https://www.altova.com"/> + <meta name="generator" content="Apache NetBeans, https://netbeans.apache.org"/> + <meta name="generator" content="NPS Autonomous Unmanned Vehicle (AUV) Workbench, https://savage.nps.edu/AuvWorkbench"/> + <meta name="identifier" content="https://gitlab.nps.edu/Savage/EthicalControl/tree/master/missions/avcl/SailorOverboard3.1.xml"/> + <meta name="license" content="../license.html"/> + </head> + <body> + <UnitsOfMeasure distance="meters" angle="degrees" mass="kilograms" time="seconds"/> + <!-- TODO Vehicle vehicleName="RescueDrone" vehicleType="UAV" --> + <MissionAgenda description="Single unmanned air/surface vehicle actions to complement human response when performing “SAILOR OVERBOARD†operations, carried out in concert with shipboard emergency procedures. Multiple UAVs/USVs can be employed in parallel with ships/aircraft, each following mission orders."> + <LaunchPosition id="LaunchPosition" description="Ship position when robot is launched"> + <LatitudeLongitude latitude="0" longitude="0"/> + </LaunchPosition> + <RecoveryPosition id="RecoveryPosition" description="Ship position when ready to recover robot"> + <LatitudeLongitude latitude="0" longitude="0"/> + </RecoveryPosition> + <GoalList> + <Goal id="Goal1" title="Deploy, Launch" description="Sailor Overboard Immediate Action" phase="Launch" nextOnSuccess="Goal2" nextOnFailure="Goal7" nextOnException="Goal8"> + <Rendezvous description=""> + <TargetVehicleID value="101" description="Sailor in water"/> + </Rendezvous> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="36.62" longitude="121.506"/> + <!--36°36′11″N 121°53′37″W--> + </Point> + </OperatingArea> + <Duration value="300"/> + <ReportingCriteria value="onCommence"/> + <ReportingCriteria value="periodic"/> + <ReportingCriteria value="statusChanged"/> + <ReportingCriteria value="onComplete"/> + </Goal> + <Goal id="Goal2" title="Rendezvous with Sailor" description="Go directly to best known location" phase="Locate" nextOnSuccess="Goal4" nextOnFailure="Goal3" nextOnException="Goal5"> + <Search datumType="point" requiredPD="0.5"> + <Target name="Sailor in water" id="SailorInWater"/> + </Search> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="0" longitude="0"/> + </Point> + </OperatingArea> + <Duration value="6000"/> + </Goal> + <Goal id="Goal3" title="Search for Sailor " description="Sailor position not known, intermittent" phase="Locate" nextOnSuccess="Goal4" nextOnFailure="Goal5" nextOnException="Goal5"> + <MarkTarget description="TODO ensure beacon/pinger in water"> + <Marker type="dyeMarker"/> + <Target name="Sailor in water" id="SailorInWater2" description="TODO need refid to avoid duplicatess and have single reference"/> + </MarkTarget> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="0" longitude="0"/> + </Point> + </OperatingArea> + <Duration value="6000"/> + </Goal> + <Goal id="Goal4" title="Track Sailor afloat until safe" description="Watch closely, not to interfere with rescue operations" phase="Track" nextOnSuccess="Goal5" nextOnFailure="Goal5" nextOnException="Goal5"> + <MonitorTransmissions xsi:type="monitorTransmissionsElementType" description="Track sailor in water"/> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="0" longitude="0"/> + </Point> + </OperatingArea> + <Duration value="6000"/> + </Goal> + <Goal id="Goal5" title="Proceed to Recovery" description="Mission complete, prepare for pickup" phase="Mission Finish" nextOnSuccess="Goal6" nextOnFailure="Goal7" nextOnException="Goal8"> + <Reposition description="Return to ship or other recovery point"/> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="0" longitude="0"/> + </Point> + </OperatingArea> + <Duration value="6000"/> + </Goal> + <Goal id="Goal6" title="Halt and prepare for recovery" phase="Recover Robot" description="Operations complete, final success state"> + <Rendezvous description=""> + <TargetVehicleID value="102" description="Recovery ship"/> + </Rendezvous> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="0" longitude="0"/> + </Point> + </OperatingArea> + <Duration value="6000"/> + </Goal> + <Goal id="Goal7" title="Halt and deploy recovery beacon" phase="Recover Robot" description="Unable to continue, final failure state"> + <Rendezvous description=""> + <TargetVehicleID value="102" description="Recovery ship"/> + </Rendezvous> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="0" longitude="0"/> + </Point> + </OperatingArea> + <Duration value="6000"/> + </Goal> + <Goal id="Goal8" title="Halt and await further orders" phase="Recover Robot" description="Unexpected problem, final exception state"> + <Rendezvous description=""> + <TargetVehicleID value="102" description="Recovery ship"/> + </Rendezvous> + <Risk riskName="RE11.4.1_UnderstandingReasoningMethodsLimitations" mitigation="watchstander training" mandatory="true"/> + <OperatingArea> + <Point> + <LatitudeLongitude latitude="0" longitude="0"/> + </Point> + </OperatingArea> + <Duration value="6000"/> + </Goal> + </GoalList> + </MissionAgenda> + </body> +</AVCL> \ No newline at end of file diff --git a/nbproject/project.xml b/nbproject/project.xml index 574d8e2..39a57b8 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -47,6 +47,7 @@ auxiliary.show.customizer.message=<message> <word>SPARQL</word> <word>stylesheet</word> <word>stylesheets</word> + <word>TODO</word> <word>validatable</word> <word>warfighters</word> <word>XSLT</word> diff --git a/ontologies/DimensionsAutonomousDecisionMaking/DimensionsAutonomousDecisionMakingOntologyDesign.docx b/ontologies/DimensionsAutonomousDecisionMaking/DimensionsAutonomousDecisionMakingOntologyDesign.docx index 871cf74052c58654fe294cbf8ea82c540ffad036..30ee87b010beef635071299e077ded34d24f05cd 100644 GIT binary patch delta 22581 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ÑCb-DG;X&b7f49O%Tu+?IuBj{ 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'=G#t&AH^w>b^qHk?{>R zV~OJn2!dJ>4k2>UDYcI>SQsa>iaRoOOnSk)H*z$=)beB^#-)TjSARjXa^ZM=4Uk6{ z6&Z_HGUIoB?6vl=&f_SVkc1+R?6TlJ+QN=n66OAn)$$wCN7df&^UpvCqrgRE*+)sv zHXrfs=ft~MUNtL=KV=Nt3i@uY+=?UOc9%wNa=q$%{ek#1og@oE8$!JV9zi$Cv;LRk zl_C1KO?kqT7{SW~Sry#OC#p$|3<fi5NK<UY;A^^`O&09-^2(@EHSCT-I+Qm2nObe$ zHe;g$mhDtvSL(Z{GN!>32TI#1vqP7DaJO%~5f>PybsK5wk)ihN(QIYNQ)HC>qZn?! z$3^s4H&z6-bsufUFvM7fH<eb<P8jU~=`jDieKjN1#ok5ALHrr-wQ0yJD^u-Z$HDvH zI?FcNx8BxSr)e*PK&#_*x7~^1>}*9<*UHwLsW}l~&skhc2iL-&mHSV3uh*K(O^j~G zVE2?~M6NyzG=cWL_e|v@B}>lhUKVS!G39<-6w?(F@)D5s2m#;DRyLZiY{UyQ(}d^S z!yV1Y*#qUbaHG41sg=&9<oZX&Uj`=CFekdZ2-rVqy5W-Jx$648)mU)^F7-9drpFFa z7UjX8@SG51D8+eo2Bh{th@<koyjQ<^jlY`Ty-ZL0v6mCkc7YO~9duQEt0w;X<?EJr z8GQcx_Qkk#rLzzp4HM@b8?C)n$M0sS0_2P`b)Q2(vIV7wX3rqvF<uG3r`qIRVVC2n zw>*!5A9Js=MB@hk119+^_+cxn-mK(I5xJo2&jG_3qMwJ5rqRg<BJF$|XIusfFlJR7 z92Nmai|6i(hD%hT0|zt%J+|Z9^Uf}dM!)VAV8TVBZ5P<is{=yA2jI?elX)sgTIyIK zT(Wq`QPg;1c2ozU$E%6aW`lqwn)d<qqBq_rgsC@N>0X3&wQ_prP-!yCD_nviP8;le zqCa$mEAS}&Ggv+m0<7=}{!8JCK9&HC2{BxBpnLvKo&h3g3VDEr`TtOZf+#R!>E8ni zq$y)qL{DG<IrIN_IsL5z0#)8bcSr)l%>VW%{H;Twh9-~#xS9W0Wig|+AI9hK|KCKe ziPn+=6tGCN(eYA%Jk}FEbiWj!g2h9NCX~iphaqTv%oUrk1sAPchD(R8lm-N_Rd4|G zj5NT@^4IS5Z^fEK0Gbg7$YT>w0O-3gKoJYXfM%BgXwbDVOr|XZFk(?Mp_gF*4?6L8 z;V08?u>iUUhAHT>pq*tf5?%s;l=ScafIv>H|0rq2Xkz}mD*MNk^0(q38+um;^Ug2a zXs9e8hczsYc9#WiV!2A8t7QRh{(nzn{yvG40se8x{4=RRAHV===0C#_rZ+smwBf(n zPaeG^3ve<2w__v$fyn=A!`yW$q6OtJElZ?|c9R2?aE#Rf5c=>2hDNJX4v@ex*ZfcM pS`;8e56J=KXkK}M5ywXB9|0?^p$;zIZ<VZ=vk$<ufet1E{SQy7@{#}m delta 16820 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�xvCz$Q`|deFlE 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 diff --git a/schemas/AVCL.3.1.changes.txt b/schemas/AVCL.3.1.changes.txt index c458942..6b32e13 100644 --- a/schemas/AVCL.3.1.changes.txt +++ b/schemas/AVCL.3.1.changes.txt @@ -1,12 +1,29 @@ -AVCL Schema +AVCL Schema 3.1 Added Risk Elements as options for each Goal and GoalList Deprecations -- change AvoidArea to AvoidanceArea -- change MissionPreparation to MissionDefinition +- rename AvoidArea to AvoidanceArea +- rename MissionPreparation to MissionCommands -prior: +Changes to body +- moved: GeoOrigin from head to body +- rename AgendaMission to MissionAgenda +- rename MissionResults to MissionTelemetryLog +- rename GuidedMunitionMission to MissionGuidedMunition +- modified content model to include Location and Vehicle, TODO add them + +Can a Vehicle refer to a Mission and a Location (probably), or does a Mission refer to a Vehicle and a Location (probably not)? + +Does a Location solely contain GeoOrigin, or can GeoOrigin appear with a Mission? + +TODO Location can be point, line, area, or volume + +TODO MissionTelemetryLog contain optional TimeOffset, DisPduStream + +TODO MissionArchive can contain Vehicle+ Mission+ + +prior: AVCL Schema 3.0 TODO - AVCL/@vehicleName should not be required diff --git a/schemas/AVCL.3.1.xsd b/schemas/AVCL.3.1.xsd index a925a0a..1a437ec 100644 --- a/schemas/AVCL.3.1.xsd +++ b/schemas/AVCL.3.1.xsd @@ -184,31 +184,10 @@ Change log, version 2.0: <xsd:documentation>AVCL language version</xsd:documentation> </xsd:annotation> </xsd:attribute> - <xsd:attribute name="vehicleName" type="xsd:string" use="optional"> - <xsd:annotation> - <xsd:documentation>Name of this vehicle model, e.g. Aries</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="vehicleType" type="vehicleType" use="optional"> - <xsd:annotation> - <xsd:documentation>UAV, UGV, USV, or UUV, ROV, AGENDA, MUNITION, SSGN and UNKNOWN are supported vehicleType values.</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="vehicleID" type="xsd:unsignedShort" use="optional" default="0"> - <xsd:annotation> - <xsd:documentation>integer ID number of vehicle, commonly used for DIS or virtual environment indexing</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attribute name="date" type="xsd:date" use="optional"> - <xsd:annotation> - <xsd:documentation>Date of mission conduct</xsd:documentation> - </xsd:annotation> - </xsd:attribute> - <xsd:attributeGroup ref="CommonAttributes"/> </xsd:complexType> </xsd:element> <xsd:element name="Acknowledge" type="acknowledgeElementType"/> - <xsd:element name="AgendaMission" type="agendaMissionElementType"> + <xsd:element name="MissionAgenda" type="agendaMissionElementType"> <xsd:annotation> <xsd:documentation>Declarative strategic-level mission goals and constraints, suitable for robot mision planning to generate Waypoint lists and other executable script commands</xsd:documentation> </xsd:annotation> @@ -269,7 +248,58 @@ Change log, version 2.0: </xsd:annotation> </xsd:element> <xsd:element name="Beacon" type="stringElementType"/> - <xsd:element name="body" type="avclBodyType"/> + <xsd:element name="body"> + <xsd:complexType> + <xsd:complexContent> + <xsd:extension base="avclBodyType"> + <xsd:choice minOccurs="0" maxOccurs="unbounded"> + <xsd:sequence minOccurs="0"> + <xsd:annotation> + <xsd:documentation>Mission</xsd:documentation> + </xsd:annotation> + <xsd:element ref="MissionAgenda" minOccurs="0"/> + <xsd:element ref="MissionCommands" minOccurs="0"/> + <xsd:element ref="MissionTelemetry" minOccurs="0"/> + <xsd:element ref="MissionArchive" minOccurs="0"/> + </xsd:sequence> + <xsd:element ref="GeoOrigin" minOccurs="0"> + <xsd:annotation> + <xsd:documentation>Defines a geographic origin for cartesian relative positions in this mission document.</xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element ref="OperatingArea" minOccurs="0"/> + <xsd:element name="TimeOffset" minOccurs="0"> + <xsd:complexType> + <xsd:attribute name="date" type="xsd:date" use="optional"> + <xsd:annotation> + <xsd:documentation>Date of mission conduct</xsd:documentation> + </xsd:annotation> + </xsd:attribute> + </xsd:complexType> + </xsd:element> + <xsd:element ref="UnitsOfMeasure" minOccurs="0"/> + <xsd:element name="Vehicle" minOccurs="0"> + <xsd:annotation> + <xsd:documentation>robot UAV UUV USV UGV</xsd:documentation> + </xsd:annotation> + <xsd:complexType> + <xsd:attribute name="vehicleType" type="vehicleType" use="optional"> + <xsd:annotation> + <xsd:documentation>UAV, UGV, USV, or UUV, ROV, AGENDA, MUNITION, SSGN and UNKNOWN are supported vehicleType values.</xsd:documentation> + </xsd:annotation> + </xsd:attribute> + <xsd:attribute name="vehicleID" type="xsd:unsignedShort" use="optional" default="0"> + <xsd:annotation> + <xsd:documentation>integer ID number of vehicle, commonly used for DIS or virtual environment indexing</xsd:documentation> + </xsd:annotation> + </xsd:attribute> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:extension> + </xsd:complexContent> + </xsd:complexType> + </xsd:element> <xsd:element name="BodyCoordinateVelocity" type="bodyCoordinateVelocityElementType"/> <xsd:element name="BodyThrusters" type="uuvBodyThrustersOrderElementType"/> <xsd:element name="BowLateralThruster" type="signedPercentElementType"/> @@ -427,7 +457,7 @@ Change log, version 2.0: </xsd:element> <xsd:element name="GpsFixes" type="positiveIntegerElementType"/> <xsd:element name="GroupAction" type="groupActionElementType"/> - <xsd:element name="GuidedMunitionMission" type="guidedMunitionMissionElementType"> + <xsd:element name="MissionGuidedMunition" type="guidedMunitionMissionElementType"> <xsd:annotation> <xsd:documentation>Imperative execution-level mission command script</xsd:documentation> </xsd:annotation> @@ -582,17 +612,22 @@ Change log, version 2.0: </xsd:annotation> </xsd:element> <xsd:element name="MissionAbort" type="noValueElementType"/> - <xsd:element name="MissionDefinition" type="missionPreparationElementType"> + <xsd:element name="MissionArchive"> <xsd:annotation> - <xsd:documentation>Mission definition in full detail</xsd:documentation> + <xsd:documentation>TODO complete package for a completed mission</xsd:documentation> </xsd:annotation> </xsd:element> - <xsd:element name="MissionPreparation" type="missionPreparationElementType"> + <xsd:element name="MissionCommands" type="missionCommandsElementType"> <xsd:annotation> - <xsd:documentation>Deprecated, replaced by MissionDefinition</xsd:documentation> + <xsd:documentation>Mission commands, meaning imperative orders</xsd:documentation> </xsd:annotation> </xsd:element> - <xsd:element name="MissionResults" type="missionResultsElementType"> + <xsd:element name="MissionPreparation" type="missionCommandsElementType"> + <xsd:annotation> + <xsd:documentation>Deprecated, replaced by MissionCommands</xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="MissionTelemetry" type="MissionTelemetryElementType"> <xsd:annotation> <xsd:documentation>Mission telemetry data recorded in full detail</xsd:documentation> </xsd:annotation> @@ -644,6 +679,7 @@ Change log, version 2.0: <xsd:element name="OperatingArea" type="areaElementType"> <xsd:annotation> <xsd:documentation>Horizontal area for conducting mission-goal operations, with optional vertical constraints</xsd:documentation> + <!-- TODO review representations for point, line, area, or volume --> </xsd:annotation> </xsd:element> <xsd:element name="OperatingLimits" type="operatingLimitsElementType"/> @@ -1230,19 +1266,25 @@ Change log, version 2.0: <xsd:annotation> <xsd:documentation>Latitude values are represented by double precision values in the range [-90, 90] (positives are northern hemisphere).</xsd:documentation> </xsd:annotation> + <xsd:restriction base="xsd:string"/> + <!-- TODO regex validation <xsd:restriction base="xsd:double"> <xsd:minInclusive value="-90"/> <xsd:maxInclusive value="90"/> </xsd:restriction> + --> </xsd:simpleType> <xsd:simpleType name="longitudeType"> <xsd:annotation> <xsd:documentation>Longitude values are represented by double precision values in the range [-180, 180] (positives are eastern hemisphere).</xsd:documentation> </xsd:annotation> + <xsd:restriction base="xsd:string"/> + <!-- TODO regex validation <xsd:restriction base="xsd:double"> <xsd:minInclusive value="-180"/> <xsd:maxInclusive value="180"/> </xsd:restriction> + --> </xsd:simpleType> <xsd:simpleType name="markerType"> <xsd:annotation> @@ -1599,6 +1641,11 @@ Change log, version 2.0: <xsd:annotation> <xsd:documentation>Must have id attribute and contained elements, otherwise must have refid attribute</xsd:documentation> </xsd:annotation> + <xsd:element name="urlMap" type="xsd:string" minOccurs="0"> + <xsd:annotation> + <xsd:documentation>url to relevant map, ampersands escaped as & in XML source files</xsd:documentation> + </xsd:annotation> + </xsd:element> <xsd:group ref="AreaElements"/> <xsd:group ref="VerticalBlockElements" minOccurs="0"/> </xsd:sequence> @@ -1624,14 +1671,6 @@ Change log, version 2.0: <xsd:annotation> <xsd:documentation>Container element for mission, state, communications, or planning data elements</xsd:documentation> </xsd:annotation> - <xsd:sequence> - <xsd:choice> - <xsd:element ref="MissionDefinition"/> - <xsd:element ref="MissionPreparation"/> - </xsd:choice> - <xsd:element ref="EventLog" minOccurs="0"/> - <xsd:element ref="MissionResults" minOccurs="0"/> - </xsd:sequence> </xsd:complexType> <xsd:complexType name="avclHeadType"> <xsd:annotation> @@ -1639,7 +1678,6 @@ Change log, version 2.0: </xsd:annotation> <xsd:sequence> <xsd:element ref="meta" minOccurs="0" maxOccurs="unbounded"/> - <xsd:element ref="GeoOrigin" minOccurs="0"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="avclMessageBodyType"> @@ -1876,9 +1914,13 @@ Change log, version 2.0: </xsd:annotation> <xsd:attribute name="name" type="xsd:string" use="required"/> <xsd:attribute name="content" type="xsd:string" use="optional"/> - <xsd:attribute name="description" type="xsd:string" use="optional"/> + <xsd:attribute name="description" type="xsd:string" use="optional"> + <xsd:annotation> + <xsd:documentation>TODO reference?</xsd:documentation> + </xsd:annotation> + </xsd:attribute> </xsd:complexType> - <xsd:complexType name="missionPreparationElementType"> + <xsd:complexType name="missionCommandsElementType"> <xsd:annotation> <xsd:documentation>Contains mission configuration elements such as tasking, control coefficients, and units of measure.</xsd:documentation> </xsd:annotation> @@ -1890,7 +1932,7 @@ Change log, version 2.0: </xsd:sequence> <xsd:attributeGroup ref="CommonAttributes"/> </xsd:complexType> - <xsd:complexType name="missionResultsElementType"> + <xsd:complexType name="MissionTelemetryElementType"> <xsd:annotation> <xsd:documentation>Contains mission results elements such as telemetry, control orders, and weapon and sensor data.</xsd:documentation> </xsd:annotation> @@ -2211,7 +2253,7 @@ Change log, version 2.0: <xsd:annotation> <xsd:documentation>Defines units of measure used.</xsd:documentation> </xsd:annotation> - <xsd:attribute name="distance" use="required" fixed="meters"> + <xsd:attribute name="distance" type="distanceTypes" use="required"> <xsd:annotation> <xsd:documentation>Straight-line distance, default units are meters.</xsd:documentation> </xsd:annotation> @@ -2231,7 +2273,6 @@ Change log, version 2.0: <xsd:documentation>Time values, default units are seconds.</xsd:documentation> </xsd:annotation> </xsd:attribute> - <xsd:attributeGroup ref="CommonAttributes"/> </xsd:complexType> <xsd:complexType name="usvCharacteristicsElementType"> <xsd:annotation> @@ -2706,7 +2747,7 @@ Change log, version 2.0: <xsd:annotation> <xsd:documentation>Type for an element that will represent a geographic position as a latitude and longitude.</xsd:documentation> </xsd:annotation> - <xsd:attribute name="latitude" type="latitudeType" use="required"/> + <xsd:attribute name="latitude" type="longitudeType" use="required"/> <xsd:attribute name="longitude" type="longitudeType" use="required"/> <xsd:attributeGroup ref="CommonAttributes"/> </xsd:complexType> @@ -3954,8 +3995,8 @@ Change log, version 2.0: <xsd:element ref="UGVCommandScript"/> <xsd:element ref="USVCommandScript"/> <xsd:element ref="UUVCommandScript"/> - <xsd:element ref="AgendaMission"/> - <xsd:element ref="GuidedMunitionMission"/> + <xsd:element ref="MissionAgenda"/> + <xsd:element ref="MissionGuidedMunition"/> </xsd:choice> </xsd:group> <xsd:group name="RotaryWingUAVControlOrders"> @@ -4016,13 +4057,22 @@ Change log, version 2.0: <xsd:documentation>Considerations made and actions taken by mission commander to mitigate risk</xsd:documentation> </xsd:annotation> </xsd:attribute> - <xsd:attribute name="mandatory" default="false" type="xsd:boolean" use="optional"> + <xsd:attribute name="mandatory" type="xsd:boolean" use="optional" default="false"> <xsd:annotation> <xsd:documentation>whether mitgation is mandatory. TODO superfluous?</xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attributeGroup ref="CommonAttributes"/> </xsd:complexType> + <xsd:simpleType name="distanceTypes"> + <xsd:annotation> + <xsd:documentation>DADM Risk Elements</xsd:documentation> + </xsd:annotation> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="meters"/> + <xsd:enumeration value="yards"/> + </xsd:restriction> + </xsd:simpleType> <!-- autogenerated dadmRiskElementType enumeration --> <xsd:simpleType name="dadmRiskElementNames"> <xsd:annotation> diff --git a/stylesheets/MeoDadmRiskElementsToHtmlTable.xslt b/stylesheets/MeoDadmRiskElementsToHtmlTable.xslt new file mode 100644 index 0000000..9ba92ed --- /dev/null +++ b/stylesheets/MeoDadmRiskElementsToHtmlTable.xslt @@ -0,0 +1,199 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + <head> + <meta name="filename" content="MeoDadmNamingVerification.xslt" /> + <meta name="author" content="Don Brutzman" /> + <meta name="created" content="8 May 2022" /> + <meta name="description" content="XSLT stylesheet to check naming constraints of Dimensions Autonomous Decision Making (DADM) triples." /> + <meta name="url" content="EthicalControl/stylesheets/MeoDadmNamingVerification.xslt" /> + <meta name="invocation" content="EthicalControl> ant MeoDadmNamingVerification" /> + </head> +--> +<xsl:stylesheet version="2.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:owl="http://www.w3.org/2002/07/owl#"> + + <xsl:output method="text" encoding="UTF-8" indent="yes" media-type="text/plain" omit-xml-declaration="yes"/> + <xsl:strip-space elements="*"/> + + <xsl:variable name='indent'> <xsl:text> </xsl:text></xsl:variable> + <xsl:variable name='missing'><xsl:text>(missing)</xsl:text></xsl:variable> + + <xsl:template match="/"> + <!-- begin processing at root of OWL document containing Dimensions of Autonomous Decision Making (DADM) + constructs, currently as part of Mission Execution Ontology (MEO) --> + + <xsl:message> + <xsl:text>MeoDadmNamingVerification.xslt checks for MEO DADM .owl ontology:</xsl:text> + <xsl:text> </xsl:text> + <xsl:text>- naming conventions for DADM and Risk Element (RE) classes</xsl:text> + <xsl:text> </xsl:text> + <xsl:text>- rdfs:label short names match, corresponding to truncation prefix of longer name</xsl:text> + <xsl:text> </xsl:text> + <xsl:text>- owl:versionInfo includes relevant page number(s) in master DADM document</xsl:text> + <xsl:text> </xsl:text> + <xsl:text>- rdfs:comment includes description of categories and risk elements</xsl:text> + <xsl:text> </xsl:text> + <xsl:text>- TODO check and avoid duplication errors</xsl:text> + <xsl:text> </xsl:text> + </xsl:message> + + <xsl:apply-templates select="//*[contains(local-name(),'Class')][starts-with(@IRI,'#DimensionsAutonomousDecisionMaking')]"/> + + <xsl:apply-templates select="//*[contains(local-name(),'Class')][starts-with(@IRI,'#DADM') or starts-with(@IRI,'#RE')]"><!-- depth-first search recurse downward --> + <xsl:sort select="translate(@IRI,'.','')"/> + </xsl:apply-templates> + + </xsl:template> + + <xsl:template match="owl:Class"> + + <!-- <xsl:if test="not(position()=1)"> + <xsl:text> </xsl:text> + <xsl:text>; </xsl:text> + </xsl:if> --> + <xsl:variable name='className' select='local-name()'/> + <xsl:variable name='IRI' select='@IRI'/> + + <xsl:if test="not(preceding::*/@IRI = $IRI)"> + <xsl:value-of select="local-name()"/> + <xsl:text> IRI='</xsl:text> + <xsl:value-of select="@IRI"/> + <xsl:text>'</xsl:text> + <xsl:text> </xsl:text> + + <xsl:variable name="subClassOf"> + <xsl:choose> + <xsl:when test="(@IRI = '#DimensionsAutonomousDecisionMaking')"> + <xsl:text>(DADM is a top-level class, not a subclass)</xsl:text> + </xsl:when> + <xsl:when test="//owl:SubClassOf[owl:Class[1][@IRI = $IRI]]"> + <xsl:value-of select="//owl:SubClassOf[owl:Class[1][@IRI = $IRI]]/owl:Class[2][not(@IRI = $IRI)]/@IRI"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select='$missing'/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:if test="not($className = '#DADM_DimensionsAutonomousDecisionMaking')"> + <xsl:value-of select='$indent'/> + <xsl:text> owl:subClassOf </xsl:text> + <xsl:value-of select='$subClassOf'/> + <xsl:text> </xsl:text> + </xsl:if> + + <xsl:variable name="annotationRdfsLabel"> + <xsl:choose> + <xsl:when test="( count(//owl:AnnotationAssertion[owl:AnnotationProperty[@abbreviatedIRI = 'rdfs:label']][owl:IRI/. = $IRI]/owl:Literal) > 0)"> + <xsl:value-of select="//owl:AnnotationAssertion[owl:AnnotationProperty[@abbreviatedIRI = 'rdfs:label']][owl:IRI/. = $IRI]/owl:Literal"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select='$missing'/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:value-of select='$indent'/> + <xsl:text> rdfs:label </xsl:text> + <xsl:value-of select='$annotationRdfsLabel'/> + <xsl:choose> + <xsl:when test="not($annotationRdfsLabel = $missing) and ($IRI = concat('#',$annotationRdfsLabel))"> + <xsl:text> *** error, IRI </xsl:text> + <xsl:value-of select="$IRI"/> + <xsl:text> identical to rdfs:label </xsl:text> + <xsl:value-of select="$annotationRdfsLabel"/> + <xsl:text>, expected more-descriptive label</xsl:text> + <xsl:text> ***</xsl:text> + </xsl:when> + <xsl:when test="not($annotationRdfsLabel = $missing) and (string-length($IRI) > string-length($annotationRdfsLabel) + 1)"> + <xsl:text> *** error, IRI </xsl:text> + <xsl:value-of select="$IRI"/> + <xsl:text> is longer than rdfs:label </xsl:text> + <xsl:value-of select="$annotationRdfsLabel"/> + <xsl:text>, instead expected more-descriptive label</xsl:text> + <xsl:text> ***</xsl:text> + </xsl:when> + <xsl:when test="not($annotationRdfsLabel = $missing) and not($IRI = '#DADM') and not(starts-with(concat('#',$annotationRdfsLabel),$IRI))"> + <xsl:text> *** error, mismatch with IRI</xsl:text> + <xsl:if test="starts-with($IRI,'#') and contains($IRI,'_')"> + <xsl:text>, expected </xsl:text> + <xsl:value-of select="substring-before(substring-after($IRI,'#'),'_')"/> + </xsl:if> + <xsl:text> ***</xsl:text> + </xsl:when> + <xsl:when test="($annotationRdfsLabel = $missing)"> + <xsl:if test="starts-with($IRI,'#') and contains($IRI,'_')"> + <xsl:text>, expected </xsl:text> + <xsl:value-of select="substring-before(substring-after($IRI,'#'),'_')"/> + </xsl:if> + </xsl:when> + </xsl:choose> + + <xsl:text> </xsl:text> + + <xsl:variable name="annotationVersionInfo"> + <xsl:choose> + <xsl:when test="( count(//owl:AnnotationAssertion[owl:AnnotationProperty[@abbreviatedIRI = 'owl:versionInfo']][owl:IRI/. = $IRI]/owl:Literal) = 1)"> + <xsl:value-of select="//owl:AnnotationAssertion[owl:AnnotationProperty[@abbreviatedIRI = 'owl:versionInfo']][owl:IRI/. = $IRI]/owl:Literal"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select='$missing'/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:value-of select='$indent'/> + <xsl:text> owl:versionInfo </xsl:text> + <xsl:value-of select='$annotationVersionInfo'/> + <xsl:if test="not($annotationVersionInfo = $missing) and not(@IRI = '#DimensionsAutonomousDecisionMaking') and + not(starts-with($annotationVersionInfo,'page ') or starts-with($annotationVersionInfo,'pages '))"> + <xsl:text> *** error, incorrect page number(s) ***</xsl:text> + </xsl:if> + <xsl:text> </xsl:text> + + <xsl:variable name="annotationDescription"> + <xsl:choose> + <xsl:when test="( count(//owl:AnnotationAssertion[owl:AnnotationProperty[@abbreviatedIRI = 'rdfs:comment']][owl:IRI/. = $IRI]/owl:Literal) = 1)"> + <xsl:value-of select="//owl:AnnotationAssertion[owl:AnnotationProperty[@abbreviatedIRI = 'rdfs:comment']][owl:IRI/. = $IRI]/owl:Literal"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select='$missing'/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:value-of select='$indent'/> + <xsl:text> rdfs:comment "</xsl:text> + <xsl:value-of select='$annotationDescription'/> + <xsl:text>"</xsl:text> + <xsl:if test="($annotationDescription = $missing) or (string-length($annotationDescription) = 0)"> + <xsl:text> </xsl:text> + <xsl:text> *** error, missing rdfs:comment description ***</xsl:text> + </xsl:if> + <xsl:if test="contains($annotationDescription ,'`')"> + <xsl:text> </xsl:text> + <xsl:text> *** error, replace back-apostrophe ` with apostrophe ' ***</xsl:text> + </xsl:if> + <xsl:if test="contains($annotationDescription ,'“')"> + <xsl:text> </xsl:text> + <xsl:text> *** error, replace left-quote “ with quotation mark " ***</xsl:text> + </xsl:if> + <xsl:if test="contains($annotationDescription ,'â€')"> + <xsl:text> </xsl:text> + <xsl:text> *** error, replace right-quote †with quotation mark " ***</xsl:text> + </xsl:if> + <xsl:if test="contains($annotationDescription ,'—')"> + <xsl:text> </xsl:text> + <xsl:text> *** error, replace m-dash — with hyphen - ***</xsl:text> + </xsl:if> + <xsl:if test="contains($annotationDescription ,'�?')"> + <xsl:text> </xsl:text> + <xsl:text> *** error, replace special character �? ***</xsl:text> + </xsl:if> + + <xsl:text> </xsl:text> + <xsl:text> </xsl:text> + </xsl:if> + + </xsl:template> + +</xsl:stylesheet> + -- GitLab